FoxPro/Visual FoxPro - Reportes (PDF, DOC, ETC)

 
Vista:
sin imagen de perfil

Reportes (PDF, DOC, ETC)

Publicado por Chente (Mex) (81 intervenciones) el 19/08/2009 01:09:14
Un saludo a todos...

Tengo un SIstema de Ventas, el cual por necesidades recientes me piden que Integre cotizaciones. Las cotizaciones quieren que tenga (lo clasico):

Fecha
Datos del Cliente
Codigos (producto) y descripcion
Cantidad, subtotal, impuesto y total
Imagenes de los productos
y anotaciones varias.

PERO me piden presentacion en la impresion del documento, mi pregunta es:

ES POSIBLE EXPORTAR UN REPORTE A FORMATO .PDF, WORD O XLS?

En otras palabras, tengo dos situaciones:

- Imprimir la cotización del sistema
- Generar el archivo y mandarlo via correo

Espero me puedan ayudar o bien dar sugerencias. De antemano muchas gracias.

Chente
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

OLVIDE RE:Reportes (PDF, DOC, ETC)

Publicado por Chente (Mex) (81 intervenciones) el 19/08/2009 01:10:19
Olvide mencionar que está en VFP 9.0
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

RE:OLVIDE RE:Reportes (PDF, DOC, ETC)

Publicado por alberto (404 intervenciones) el 19/08/2009 03:47:51
hola amigo te mando un ejemplo para exportarlo a excel , yo lo uso y anda barbaro :

CLOSE DATABASES

USE sistemaarticulo shared
set order to prove && Opens Customer table.
select codint,desartic,desprov ,p_lista,p_lista2,p_lista3 from articulo order by desprov,desartic into cursor arti
select arti
set dele on
go top

cArchivo = Putfile("Archivo a generar","","XLS")
IF EMPTY(carchivo) && Esc presionada
RETURN
ENDIF

*----------------------------------- otra manera de exportar
*gcDelimName = ALIAS( ) + '.XLS'
*gcDelimFile = PUTFILE('Nombre de archivo:', gcDelimName, 'XLS')
*IF EMPTY(gcDelimFile) && Esc presionada
* RETURN
*ENDIF
*Wait Windows "Convirtiendo tabla a hoja de cálculo." + CHR(13) +;
*"Espere uno segundos por favor..." NOWAIT
*COPY TO (gcDelimFile) TYPE XL5
*=messagebox("tarea completada...",0+32,"veter 1.5")
*return
*---------------------------------------------------------------------------

CopyToExcel("arti"," Datos Exportados", "", "", "Listado de Artículos por Proveedor", .f., cArchivo)
use
return


Function CopyToExcel
Lparameters cTabla,cTitulo,cDesde,cHasta,cEmpresa,cproteg, cNombreArch

If Vartype(cproteg) = "U"
cproteg = .F. &&la hoja de excel estara protegida=.t. - modificable=.f.
Endif

If Type("cDesde") = "L" Or Type("cHasta") = "L"
Periodo = ""
Else

If !Empty(cDesde) And !Empty(cHasta)
If Type("cDesde") = "D" Or Type("cHasta") = "D"
Periodo = "Desde: " + Alltrim(Dtoc(cDesde)) +" Hasta: "+ Alltrim(Dtoc(cHasta))
Else
Periodo = "Desde: " + Alltrim(cDesde) +" Hasta: "+ Alltrim(cHasta)
Endif
Else
Periodo = ""
Endif
Endif

*--Selecciona la tabla pasada por parametro - Resultado del SQL

Select (cTabla)
AreaTabla = Select()
Count For !Deleted() To Lineas

*--Identificacion de la columna de la hoja Excel
*--ID_Col = Nombres de las columnas A1,B2,C3...
*--AnchoCol = Ancho de la columna
*--TipoCmp = Formato del campo si es Caracter, Numerico, Fecha.

Create Cursor LargoCol (ID_Col C(10),AnchoCol N(8),TipoCmp C(1))

*--Separa los campos de la tabla por comas
*--Identifica la columna en la tabla ...A1,B2,C3,D4.....
*--Solo 26 campos permite identificar de A-Z

Select (AreaTabla)
cString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Store "" To cLago,cCh,nCampo
For xCta = 1 To Fcount()
*--Lista de campos separados por comas.
nCampo = nCampo + Field(xCta) + ","
*--Largo de cada campo
cLago=Fsize(Field(xCta))
*--Tipo de campo
cTipo=Type(Field(xCta))
*--Establece el ancho de la columna como minimo 13 espacios
If cLago <= 10
cLago = 13
Endif
*--Identifica las columnas A1 B2 C3..
cCh = Substr(cString,xCta,1)
gCh = cCh+Alltrim(Str(xCta))
*--Guarda la configuracion del tamñano de los campos y nombre etc.
Insert Into LargoCol (AnchoCol,ID_Col,TipoCmp) Values (cLago,gCh,cTipo)
*--Reestablece la tabla
Select (AreaTabla)
Next
Select (AreaTabla)

*--Quita la ultima "," de la concatenacion de los nombres de campos del cursor
nCampo = Substr(nCampo,1,Len(nCampo)-1)
*--Determinar la ultima columna del reporte
Select LargoCol
xEnca = Left(Alltrim(ID_Col),1) + "5"
xHay = Left(Alltrim(ID_Col),1) + Alltrim(Str(Lineas+7))
*--Solo 26 campos son exportables
If xCta > 26
=Messagebox("La tabla... &cTabla tiene...(" + Alltrim(Str(xCta)) + ") " + ;
"campos, de los cuales solo... (26) pueden ser " + Chr(13)+;
"exportados a MS Excel.",48,cTitulo)
Close Tables
Return
Endif

*---------------------------------------------------------
*-- EXPORTA LA TABLA
*---------------------------------------------------------
Wait Window "Abriendo MS Excel..." Nowait
Select (AreaTabla)
*-- Nombre y path de la hoja
If Pcount() = 7
TxtFileName = Fullpath(cNombreArch)
Else
TxtFileName = Fullpath("reportsExprt_Excel"+Usuario)
Endif
Export Fields &nCampo To Alltrim((TxtFileName)) Type Xl5
oExcel = Createobject("Excel.Application")
With oExcel
.DisplayAlerts = .F.
.Workbooks.Open(TxtFileName)
.ActiveWindow.DisplayZeros = "FALSE"
*- Renombra la hoja de calculo
cHoja=Right(TxtFileName,13) &&"Exprt_Excel"+Usuario
*!* .Sheets("&cHoja").SELECT
*!* .Sheets("&cHoja").NAME = "MM-Empresarial"

*--Inserta lineas en blanco para titulos del reporte
.Range("A1:A4").Select
.Selection.EntireRow.Insert
*--Formatea el ancho de las columnas en la hoja
Select LargoCol
Scan All
_Col = Alltrim(ID_Col)
_Cls = Left(_Col,1)
_Ach = AnchoCol
.Columns("&_Cls:&_Cls").ColumnWidth = _Ach
*--Si la columna es numerica le da el formato
If Alltrim(TipoCmp) = "D"
.Range("&_Cls:&_Cls").HorizontalAlignment = -4152
Endif
If Alltrim(TipoCmp) = "N"
*--Alinemiento del encabezado de la columna
.Range("&_Cls:&_Cls").HorizontalAlignment = -4152
_Fin = "&_Cls"+Alltrim(Str(Lineas+50))
.Range("A1:&_Fin").Select
.Selection.NumberFormat = "#,##0.00"
Endif
*--Coloca las mayusculas a los encabezados de columna
_Clu = Left(Alltrim(ID_Col),1)
_DsdA5 = "&_Clu"+"5"
.Range("&_DsdA5:&_DsdA5").Select
.Range("&_DsdA5:&_DsdA5").Value = Upper(.Range("&_DsdA5:&_DsdA5").Value)
Endscan

*--Inserta nombre de la empresa y titulo del reporte
.Range("A1:A1").Select
.Range("A1:A1").Value = Upper(Alltrim(cEmpresa))
.Range("A2:A2").Select
.Range("A2:A2").Value = cTitulo
.Range("A3:A3").Select
.Range("A3:A3").Value = Periodo
*--Formato/Presentacion de hoja
.Range("A1:&xHay").Select
.Selection.AutoFormat(1,.T.,.T.,.T.,.T.,.T.,.T.)
*--Color del fondo de encabezado de columnas
.Range("A5:&xEnca").Select
With .Selection.Interior
.ColorIndex = 36
.Pattern = 1
Endwith

*--Fuente para la hoja
.Range("A6:&xHay").Select
With .Selection.Font
.Name = "Arial"
.Size = 8
Endwith

*--Fuente para el titulo del reporte
.Range("A1:A1").Select
With .Selection.Font
.Name = "Arial"
.Size = 10

Endwith

*--Inserta una columna en blanco
* .Selection.EntireColumn.Insert
* If xCta > 3
* .Columns("A:A").ColumnWidth = 8
* Else
* .Columns("A:A").ColumnWidth = 3
* Endif

*---Protege la hoja con password
If cproteg
*--Proteje la hoja
.ActiveSheet.Protect("MaMh,.t.,.t.")
EndIf
.save()
.Visible = .T.
Endwith
Wait Clear
Return

saludos y espero te sirva
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

Gracias.RE:OLVIDE RE:Reportes (PDF, DOC, ETC)

Publicado por Chente (Mex) (81 intervenciones) el 19/08/2009 18:25:34
Muchas Gracias Alberto, lo estudiare para aplicarlo en el programa.

Saludos
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