FoxPro/Visual FoxPro - Exportar a excel desde Foxpro

<<>>
 
Vista:

Exportar a excel desde Foxpro

Publicado por Sire (41 intervenciones) el 25/06/2024 09:52:06
Hola foreros.

Tengo un problema con los informes que exporto a excel desde mi aplicación foxpro.
Cuando tenía excel 2010 iba bastante rápido, pero desde que se ha intalado excel 2016 con sistema microsoft server 2022 va lentísimo.

Alguien ha tenido el mismo problema y me puede ayudar???

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 147
Bronce
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Exportar a excel desde Foxpro

Publicado por zarlu (101 intervenciones) el 26/06/2024 21:41:55
Buenas tardes Sire!

Ayudaría conocer como es que estás exportando. Muestra un poco de tu código.
Si es posible podrías hacer pruebas segmentando tu rutina de exportación para ir observando la parte donde se vuelve lenta.

Suerte
zarlu
Chetumal, Quintana Roo, México
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exportar a excel desde Foxpro

Publicado por Sire (41 intervenciones) el 27/06/2024 12:17:44
Mando un poco del código

SELECT reorpr_art,codart_til,descri_art,IIF(forpag=='DV', -1,1) * cantid_til,almace_tic,crepro_art,sap_art,numserie_til,numcerti_til,fecfac_tic,IIF(forpag=='DV', -1,1) * pvpinicial as pvpinicial ,IIF(forpag=='DV', -1,1) * preeur_til ,IIF(forpag=='DV', -1,1) * ((cantid_til*preeur_til) - descuento),nombre_cli,nomepl_epl,talla_til,;
IIF(iva<>0,(descuento/(cantid_til*preeur_til)),thisform.ivacero()) as porcen, codcli_tic,IIF(condicional==.T.,"Si","No"),descata,forpag FROM cursorticket INTO CURSOR cursorticket2

_Vfp.DataToClip ('cursorticket2',,3) && Copiar el cursor a memoria
xlshoja4.Cells(5,1).Select && Seleccionar el Inicio de la Copia de los Datos
xlsapp.ActiveSheet.Paste() && Copiar los datos al Excel
_Cliptext ='' && Para liberar la memoria

** calcular numero de registros
SELECT count(codart_til) as numeroreg FROM cursorticket2 INTO CURSOR numeroregistros
numregistros=numeroregistros.numeroreg

USE IN numeroregistros
USE IN (SELECT('cursorticket2')) && Cerrar el cursor

*IF not eof()
xlsHoja4.Cells(1,1).select
xlsHoja4.Cells(1,1).font.size=8

thisform.ponrosita(xlsHoja4,xlsApp,"rosita")

xlsHoja4.Cells(1,1)="Descatalogados"


xlshoja4.cells(1,3)= "VENTAS TICKETS"
xlshoja4.cells(1,3).font.bold = .T.
xlshoja4.cells(1,3).HorizontalAlignment=3

xlsRango= xlshoja4.Range(xlshoja4.Cells(1,4), xlshoja4.Cells(1,7))
xlsRango.Select
xlsRango.MergeCells=.T.

xlshoja4.cells(1,4)=IIF(ALLTRIM(thisform.cmbBuscaProveedor.Value)=="",ALLTRIM(xlshoja4.cells(6,15).value) + ALLTRIM(thisform.cmbBuscaProveedor.Value)," " + ALLTRIM(thisform.cmbBuscaProveedor.Value))
xlshoja4.cells(1,4).font.size = 10
xlsRango.font.color= -16776961
xlshoja4.cells(1,4).font.bold=.T.

xlshoja4.select
xlsRango= xlshoja4.Range(xlshoja4.Cells(1,8), xlshoja4.Cells(1,11))
xlsRango.Select
xlsRango.MergeCells=.T.
*xlsapp.ActiveCell.FormulaR1C1 = "=NOW()"
xlshoja4.Cells(1,8)=DTOC(DATE())
xlsrango.font.size = 8
I=3

xlshoja4.cells(I,3)=" Desde : " + fechatituloD + " Hasta :" + fechatituloH
xlshoja4.cells(I,3).font.size=8

I=5
xlshoja4.cells(i,1)="Ref.orig"
xlshoja4.cells(i,2)="Código"
xlshoja4.cells(i,3)="Descripción"
xlshoja4.cells(i,4)="Cant."
xlshoja4.cells(i,5)="Alm."
xlshoja4.cells(i,6)="Prov."

xlshoja4.cells(i,7)="Sap"
xlshoja4.cells(i,8)="NºSerie"
xlshoja4.cells(i,9)="NºCertif."
xlshoja4.cells(I,10)="Fecha Vta"
xlshoja4.cells(i,11)="P.V.P."
xlshoja4.cells(i,12)="P.Venta"
xlshoja4.cells(i,13)="Vta.Neta"
xlshoja4.cells(i,14)="Cliente"
xlshoja4.cells(I,15)="Vend."
xlshoja4.cells(I,16)="Talla"
xlshoja4.cells(I,17)="%"
xlshoja4.cells(I,18)="CodCli"
xlshoja4.cells(I,19)="VtaCond"
xlshoja4.cells(I,20)="Descata."

xlsRango= xlshoja4.Range(xlshoja4.Cells(i,1), xlshoja4.Cells(I,20))
xlsrango.interior.colorIndex = 15

xlsrango.font.bold = .T.
xlsRango.Borders.LineStyle=1

xlsrango.font.size=8

xlsRango=xlshoja4.Range(xlshoja4.Cells(I+1,4), xlshoja4.Cells(I+1,3))
xlsRango.Select
* xlsapp.ActiveWindow.FreezePanes = .T.


LOCAL lnCampos as long
local guNumfac as long
* SELECT cursorticket

xlsRango=xlshoja4.Range(xlshoja4.Cells(5,1), xlshoja4.Cells(numregistros+5,9))
xlsRango.Borders.LineStyle=1


mesaño=substr(dtos(xlshoja4.cells(6,10).value),5,2) + "/"+ substr(dtos(xlshoja4.cells(6,10).value),1,4)


FOR k=1 to numregistros

I=I+1

IF (mesaño== substr(DTOS(xlshoja4.cells(i,10).value),5,2) + "/"+ substr(DTOS(xlshoja4.cells(i,10).value),1,4)) THEN

ELSE

xlsapp.Rows(i).Select
xlsapp.Selection.Insert ()

xlshoja4.cells(i,4)=sumcanti
xlshoja4.cells(i,4).font.bold = .T.
xlshoja4.cells(i,4).Borders.LineStyle=1
xlsRango= xlshoja4.Range(xlshoja4.Cells(i,1), xlshoja4.Cells(i,9))
xlsRango.select

xlshoja4.cells(i,11)=totmespvp
xlshoja4.cells(i,11).numberformat = "#,###,###,##0.00"
xlshoja4.cells(i,11).interior.colorIndex = 15
xlshoja4.cells(i,11).font.ThemeColor=1
xlshoja4.cells(i,11).font.TintAndShade = 0
xlshoja4.cells(i,11).font.bold=.T.

totpvp=totpvp+totmespvp
totcanti=totcanti+sumcanti
sumcanti=0
totmespvp=0
*i=i+1


With xlsApp.Selection.Interior
.Pattern = 1
.PatternColorIndex = -4105
.ThemeColor = 6
.TintAndShade = 0.599993896298105
ENDWITH
* mesaño=substr(dtos(xlshoja4.cells(i,9).value) + "/"+ substr(dtos(xlshoja4.cells(i,9).value),1,4)

mesaño=substr(dtos(xlshoja4.cells(i-1,10).value),5,2) + "/"+ substr(dtos(xlshoja4.cells(i-1,10).value),1,4)
xlshoja4.cells(i,1)="TOTAL MES :"
xlshoja4.cells(i,1).Font.Bold = .T.
xlshoja4.cells(i,3)= mesaño
xlshoja4.cells(i,3).font.color=-16776961
xlshoja4.cells(i,3).Font.Bold = .T.

xlsRango= xlshoja4.Range(xlshoja4.Cells(i,10), xlshoja4.Cells(i,20))
xlsrango.interior.colorIndex = 15

xlshoja4.cells(i,3).HorizontalAlignment=3

sumcanti=0
i=i+1
endif

mesaño=substr(dtos(xlshoja4.cells(i,10).value),5,2) + "/"+ substr(dtos(xlshoja4.cells(i,10).value),1,4)


IF ALLTRIM(xlshoja4.cells(i,21).value)=='DV' then
xlsRango= xlshoja4.Range(xlshoja4.Cells(i,1), xlshoja4.Cells(I,20))
xlsrango.font.color=-16776961
ENDIF


IF ALLTRIM(xlshoja4.cells(i,20).value)=="*" then

xlsRango= xlshoja4.Range(xlshoja4.Cells(i,1), xlshoja4.Cells(I,20))
xlsRango.interior.Color = 15987711
xlsRango.interior.PatternColorIndex = -4105

ENDIF


xlshoja4.cells(i,1).HorizontalAlignment=2
*xlshoja4.cells(i,4)=IIF(ALLTRIM(xlshoja4.cells(i,21).value)=='DV', -1,1) * xlshoja4.cells(i,4).value
xlshoja4.cells(i,5)=thisform.mandaalm(xlshoja4.cells(i,5).value)

* xlsRango=xlshoja4.Range(xlshoja4.Cells(i,1), xlshoja4.Cells(I,9))
* xlsRango.Borders.LineStyle=1

xlshoja4.cells(i,7).HorizontalAlignment=2

xlsHoja4.cells(i,9).numberformat = "@"
xlsHoja4.cells(i,9).NumberFormat = "00000"
xlshoja4.cells(i,9).HorizontalAlignment=2


xlshoja4.cells(i,8).HorizontalAlignment=2

xlshoja4.cells(i,10)=iif(xlshoja4.cells(i,10).value=={ / / },"",xlshoja4.cells(i,10).value)

xlshoja4.cells(i,11).numberformat = "#,###,###,##0.00"

xlshoja4.cells(i,12).numberformat = "#,###,###,##0.00"

xlshoja4.cells(i,13).numberformat = "#,###,###,##0.00"

xlshoja4.cells(i,17).numberformat = "#,###,###,##0.00"

sumcanti=sumcanti+ xlshoja4.cells(i,4).value
totneto=totneto + xlshoja4.cells(i,13).value
totmespvp=totmespvp+ xlshoja4.cells(i,11).value

NEXT k

xlshoja4.cells(i+1,4)=sumcanti
totcanti=totcanti+sumcanti
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 147
Bronce
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Exportar a <a style="border: 0px !important; box-shadow: none !important; display: inline !important; float: non

Publicado por zarlu (101 intervenciones) el 29/06/2024 21:07:36
Buenas tardes Sire!

Te reitero mi sugerencia de segmentar tu código para tratar de encontrar donde se "atora" la rutina.

Lanza sólo la consulta y la mandas a un Browse para ver cuanto tarda la respuesta. Observo muchas condiciones que si no tienes los indices adecuados y son muchos los registros la consulta tardará significativamente y "parecerá" que lo que tarda es lo de Excel.
Usas un segunda consulta para contar los registros, puedes obtener ese dato con _tally después de efectuar la primera consulta.
Para efectos de prueba elimina lo que tenga que ver con el fomateo que haces al Excel, con la intención de evaluar cuanto tarda realmente el copiar y pegar del _Vfp.DataToClip

Suerte
zarlu
Chetumal, Quintana Roo, México
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exportar a <a style="border: 0px !important; box-shadow: none !important; display: inline !important; float: non

Publicado por Sire (41 intervenciones) el 29/06/2024 23:57:29
muchas gracias por tus observaciones
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar