* Defino las Variables locales a utilizar
* =======================================
LOCAL i,j,TrendFunc,xlsheet,XLApp,tmpsheet
* Crear la tabla que se va a presentar
* ======================================
SELECT Detalles_compras.codigo,;
Detalles_compras.cantidad,;
Detalles_compras.descripcio,;
Detalles_compras.precio_uni,;
Detalles_compras.precio,;
Detalles_compras.impuesto,;
(Detalles_compras.precio * Detalles_compras.cantidad+Detalles_compras.impuesto) as Sub_total,;
Detalles_compras.tipo_repue;
FROM ;
C:\PROYECTO\TABLAS\DETALLES_COMPRAS.DBF;
WHERE Detalles_compras.num_orden = (ThisFormset.Form1.Pageframe1.page1.NUM_ORDEN1.Value)INTO CURSOR orden_compra
SELECT orden_compra
*!* BROWSE
numReg=RECCOUNT()
IF numReg > 0 && Si tiene registros
* Notas: Las variables definidas con #DEFINE crean constantes de tiempo de compilación en los programas
* Esas variables las utilizo para El programa Excel.
* Encabezados de Celdas en Excel
* ==============================
* Encabezados de la tabla
#DEFINE codigo "Código Repuesto"
#DEFINE cantidad "Cantidad"
#DEFINE descripcion "Descripción"
#DEFINE PrecionUnitario "Precio Unitario"
#DEFINE Precio "Precio"
#DEFINE Impuesto1 "Impuesto"
#DEFINE sub_total "Sub total"
#DEFINE tipo "Tipo de Repuesto"
* Aqui comienza a Meter la información en Excel
* =============================================
* Crea una hoja
* ===============
tmpsheet = GetObject('','excel.sheet')
XLApp = tmpsheet.application
*XLApp.Visible = .T.
XLApp.WorkBooks.Add()
XLSheet = XLApp.ActiveSheet
* Crea el encabezado de los campos
*=================================
XLSheet.Cells(1,1).Value = codigo
XLSheet.Cells(1,2).Value = cantidad
XLSheet.Cells(1,3).Value = descripcion
XLSheet.Cells(1,4).Value = PrecionUnitario
XLSheet.Cells(1,5).Value = Precio
XLSheet.Cells(1,6).Value = Impuesto1
XLSheet.Cells(1,7).Value = sub_total
XLSheet.Cells(1,8).Value = tipo
*-----------------------------------
*-Insertando Encabezados Generales*
* XLSheet.Range("A1:A8").Select && Funciona bien, selecciona las celdas desde A1 a A8
XLSheet.Range("A1:H1").FONT.BOLD=.T.
* 1 Borde Izquierdo
* 2 Borde derecho
* 3 Nada
* 4 Inferior
* 5 Borde inclinado así \
* 6 Borde Inclinado asi /
* 7 Nada
* 8 Nada
* 9 Igual al 4 inferior
* 10 Nada
*
XLSheet.Range("A1:H1").BORDERS(4).LineStyle=3
XLSheet.Range("A1:H1").BORDERS(4).Weight=3
XLSheet.Range("A1:H1").BORDERS(4).ColorIndex=3
XLSheet.Range("A1:H1").font.NAME="Times"&& "Arial" &&
XLSheet.Range("A1:H1").font.SIZE="12"
* DO (_GENXTAB) WITH 'fac_pendientes'
SELECT * from orden_compra INTO ARRAY Arreglo
* Ahora mete el contenido del arreglo en la celda
* ===============================================
FOR I = 1 TO numReg && I es el número de celda, Número de registros del Cursor
FOR J = 1 to 8 && To número de campos del cursor
*!* IF ISNULL (Arreglo(i,j)) THEN
*!* XLSheet.Cells(i+1,j).Value =0
*!* ELSE
XLSheet.Cells(i+1,j).Value = Arreglo(i,j)
*!* ENDIF
ENDFOR
ENDFOR
*!* XLSheet.Range("A1:D1").Select && Funciona bien, selecciona las celdas en el rango
*!* XLSheet.Cells(1,7).select && = tipo
*-----------------------------------
*-Definiendo Ancho de las columnas-* Sólo después de haber cargado los datos
XLSheet.Columns("A:A").ColumnWidth = 17 && Código del Repuesto
XLSheet.Columns("B:B").ColumnWidth = 9 && Cantidad
XLSheet.Columns("C:C").ColumnWidth = 35.57 && Descripción
XLSheet.Columns("D:D").ColumnWidth = 16.86 && Precio Unitario
XLSheet.Columns("E:E").ColumnWidth = 7.57 && Precio
XLSheet.Columns("F:F").ColumnWidth = 10.29 && Impuesto
XLSheet.Columns("G:G").ColumnWidth = 10.29 && Sub total
XLSheet.Columns("H:H").ColumnWidth = 19.29 && Tipo de Repuesto
* XLSheet.Columns("E:E").NUMBERFORMAT="$ #,##0.00" && Funciona bien..
* NumberFormat = "#,##0.00"
* NumberFormat = "0.00%"
XLSheet.Range("A1:D1").Font.HorizontalAlignment=2
*!* CASE UPPER(lcAlinea)="IZQUIERDA"
*!* .Selection.HorizontalAlignment = xlHAlignLeft
*!* CASE UPPER(lcAlinea)="DERECHA"
*!* .Selection.HorizontalAlignment = xlHAlignRight
*!* CASE UPPER(lcAlinea)="CENTRO"
*!* .Selection.HorizontalAlignment = xlHAlignCenter
*!* otherwise
*!* .Selection.HorizontalAlignment = xlHAlignGeneral
*!* endcase
* Nombre del Archivo
* ==================
cNombre="C:\proyecto\excel\"+"Orden de Compra " +;
ALLTRIM(str(ThisFormset.Form1.Pageframe1.page1.NUM_ORDEN1.Value))+" "+;
ALLTRIM(ThisFormset.Form1.Pageframe1.page1.PROVEEDOR1.value)+".XLS"
XLSheet = XLApp.ActiveSheet.SaveAs (cNombre)
*!* IF FILE (cNombre) && Así funciona bien.
*!* WAIT "el nombre existe, inserto la yes" WINDOW AT 25,35 TIMEOUT 2
*!* KEYBOARD '{s}'
*!* ELSE
*!* WAIT "el nombre NO EXISTE " WINDOW AT 25,35 TIMEOUT 2
*!* ENDIF
FOR I = 1 TO numReg && I es el número de celda, Número de registros del Cursor
IF (Arreglo(i,4))=0 THEN
cMensaje="Cuidado no se puede emitir una orden"+CHR(13)+ alltrim(Arreglo(i,3))+CHR(13)+"No Tiene precio"
MESSAGEBOX(cMensaje,0+64,"Cuidado")
ENDIF
ENDFOR
XLApp.Visible = .T.
* El botón aparece con una imagen tachada o sin tachar, dependiendo si esta en modo de edición o en
* modo de consulta, no puede enviar un correo en modo de edición se debe esperar que haya editado todo.
* =====================================================================================================
ELSE && Si tiene registros
cMensaje="Aún no ha seleccionado los repuestos"+CHR(13)+ "de la orden de compra, No se creará archivo"
MESSAGEBOX(cMensaje,0+64,"Sin información")
ENDIF
* cMensaje= Recuerde que una orden de compra es un compromiso de pago, por tal motivo es necesario que indique
* el valor de todos los repuestos. En esta orden aparecen repuestos sin precio. No se enviará una orden o compromiso
* de pago hasta que elimine los repuestos sin precio o hasta que le indique los precios.