DOSPrint, error en pruebas de impresión.

194 views
Skip to first unread message

Milton

unread,
Feb 7, 2015, 12:56:55 PM2/7/15
to publice...@googlegroups.com
Estimados colegas:
     Estoy haciendo pruebas de la clase DosPrint de Victor Espina, use el ejemplo que está en VFPx, he logrado ejecutarlo bien, pero no me imprime nada, he enviado el reporte a archivo y a impresora con:

SELECT 0
USE DATA\CUSTOMERS
GO TOP

LOCAL oDP
SET PROCEDURE TO vdp ADDITIVE
oDP=CREATEOBJECT("VFPDosPrint")
oDP.PrintFormat="CUSTOMERS.FMT"
oDP.PrintToFile("\omegaf\dosprint\Reporte") 
oDP.Print( GETPRINTER() ) 
oDP.Run()  

pero no me sale ni el archivo, ni la impresión.

 Estoy utilizando Win7 32 Bits, la impresora es una TMU 200PA puerto paralelo, estoy imprimiendo desde una computadora portatil usando un cable interfaz USB-paralelo, instale el driver Generico, Text Only. En las pruebas de impresión pasa correctamente y desde Notepad, también imprime. 

  Alguna sugerencia, de antemano muchas gracias.

Atentamente,


MILTON CACHIPUENDO
ServySistem Online
Ibarra - Ecuador

Victor Espina

unread,
Feb 9, 2015, 12:13:07 PM2/9/15
to publice...@googlegroups.com
Milton, prueba asi:

SELECT 0
USE DATA\CUSTOMERS
GO TOP

LOCAL oDP
SET PROCEDURE TO vdp ADDITIVE
oDP=CREATEOBJECT("VFPDosPrint")
oDP.PrintFormat="CUSTOMERS.FMT"
oDP.Run()  
oDP.Print( GETPRINTER() ) 

El metodo Run debe ser ejecutado siempre ANTES de enviar la salida a un archivo (printToFile) o a una impresora (Print).  Le idea es que primeero se ejecuta el reporte, el resultado se almacena en memoria y luego lo puedes enviar de ahi a donde necesites sin tener que ejecutar el reporte de nuevo.

Saludos

Victor Espina
Message has been deleted

Fernando D. Bozzo

unread,
Feb 9, 2015, 2:48:57 PM2/9/15
to publice...@googlegroups.com
[Antes lo puse mal, así que borro y repito]

Hola Milton:

En el ejemplo de la documentación de VFPx está claro, primero el Run() y luego el Print(), como dice Victor.

Te convendría leerla:

https://vfpx.codeplex.com/wikipage?title=VFPDosPrint%20Documentation&referringTitle=VFPDosPrint


Saludos.-

Milton

unread,
Feb 9, 2015, 11:58:09 PM2/9/15
to publice...@googlegroups.com
Gracias Victor, perfecto, me solucionó y disculpa si abuso de tu ayuda. 
1.- Ya estoy haciendo pruebas. En mi sistema he tenido idéntico problema al tratar de cuadrar las impresiones si necesito imprimir una copia de la misma factura en forma sucesiva, puedes darme una idea, porque el papel de las facturas lleva un preimpreso de 1 pulgada y en el pie de 1/2 pulgada, hay que contemplar que las TMU 220 tienen un margen de impresión de 5 lins, alguna sugerencia?. Trabajando con reportes .FRX en mi sistema, siempre se me descuadra la factura y hay que estar calibrando el papel cada cierto número de facturas, es el motivo por que estoy probando tu clase. Pienso que con DOSPrint, el cuadre es exacto, porque está dado en número de líneas. El código que estoy probando con el siguiente formato (FMT), como verás al final puse varias lineas de pie de página con el fin de cuadrar el preimpreso de la segunda factura.
# FACTURA.FMT
# REPORTE BASICO DE FACTURA POS
<config>
PaperLenght=33     // Papel de tamaño 51/2"
TopMargin=2        // Imprimir 2 lineas en blanco, completa el área no imprimible del preimpreso
</config>

# Macros, son variables generadas. Estas tienen alcance
# mientras el reporte es generado.
<macros>
XEnc01   = 'Referencia:'+STR(FacturaID)
XEnc02   = 'Cliente:'+RazonSocial
XEnc03   = 'CI/RUC:'+Id+' Fec:'+DTOC(FechaEmisi)+' '+SUBSTR(TTOC(FCFECHATRA),10,5) 
XEnc04   = 'Direc:'+ALLTRIM(DirecConex)
XEnc05   = 'Teléf:'+ALLTRIM(TelfConex)+' Cajero:'+Usuario
XEnc06   = 'CANT DETALLE                     TOTAL  '
XEnc07   = '---- -------------------------- --------'
XDet01   = STR(cantidad,4,0)+' '+LEFT(Concepto,25)+TRANSFORM(Importe_rf/ (1+IIF(TIPOIVA=1,0.12,0)+IIF(TIPOPRO=1,0.1,0)),'99999.99')+IIF(TipoIVA=1,' *','  ')
XPie01   = TRANSFORM(SubTotFac,'9999.99')+' '+TRANSFORM(BaseImponi,'9999.99')+' '+TRANSFORM(BaseImpGra,'9999.99')+' '+TRANSFORM(TotalIVA,'9999.99')+' '+TRANSFORM(TotalFac,'9999.99')
XPie02   = 'SubTot. Imp.0%  Imp.12% Tot.IVA  TOTAL  '
</macros>

# La sección FORMAT es una forma rápida para declarar las direntes bandas
# del reporte, como Encabezado, Detalle y Pie.
<format>
#   ....+....1....+....2....+....3....+....
he: [XEnc01                               ]
he: [XEnc02                               ]
he: [XEnc03                               ]
he: [XEnc04                               ]
he: [XEnc05                               ]
he: [XEnc06                               ]
he: [XEnc07                               ]
de: [XDet01                               ]
fo: [XPie01                               ] 
fo: [XPie02                               ]
fo:  
fo:  
fo: 
fo:  
fo: 
fo: 
fo: 
fo: 
fo: 
fo:  
</format>


2.- Al enviar la impresión me sale el mensaje de la figura, hay alguna manera de evitar que salga ese mensaje?


3.- En la sección <Config>, es posible asignar valores de una tabla, por ejemplo TopMargin = Params.MargenSup, o TopMargin=M.MargenSup, esto con la finalidad de controlar el tamaño de lineas del reporte de la segunda copia que se imprima?. 
4.- Estuve tratando leer la ayuda de archivo dp4esp.chm, pero no se abre el archivo.

Nuevamente muchas gracias, por tu generosa y desinteresada ayuda.

Atentamente

MILTON CACHIPUENDO
Message has been deleted

Victor Espina

unread,
Feb 10, 2015, 8:25:12 AM2/10/15
to publice...@googlegroups.com
La respuesta anterior salio mal, asi que la corrijo aca:

1. Algo que siempre digo pero que siempre se pasa por alto.  En DP el cuadre de la pagina es exacto porque es medido en lineas, cierto, pero siempre hay que tomar en cuenta que cuando trabajas con reportes hay siempre DOS tamaños de papel involucrados:

a) El tamaño LOGICO, que es el que usa el generador de reportes para saber cuando enviar un salto de pagina.  En DOSPrint esto se define por la cantidad de lineas que soporta una pagina.  Si tu dices que tu pagina es de 60 lineas (carta normal), DP enviara un codigo de salto de pagina a la impresora cada 60 lineas.

b) El tamaño FISICO, que es el que usa la impresora propiamente, y que se configura mediante codigos de control especificos de la impresora.

Para que el reporte salga perfecto, AMBOS tamaños deben estar alineados.  NO BASTA simplemente con indicar en la seccion CONFIG que tu pagina es de 60 lineas; tambien tienes que asegurarte que en la impresora la pagina este configurada como carta.  Lo mismo debe sucederte con tu impresora TMU: debes asegurarte que la impresora esta considerando una pagina del mismo tamaño que la que estas usando en DP, sino el salto entre paginas no funcionara correctamente.

2. SET SAFETY OFF

3. Creo que no directamente, pero si podrias cambiar los valores de esas propiedades directamente en el evento Init del formato:

<init>
DP.pageLenght  = tabla.campo
</init>

4. El archivo se llama DOSPRINT_EN.CHM y esta contenido dentro del RAR de la descarga.  Lo acabo de bajar y abrir sin problemas.


Victor Espina

Fernando D. Bozzo

unread,
Feb 10, 2015, 8:40:59 AM2/10/15
to publice...@googlegroups.com
Hola Milton:

¿Por casualidad tenés el archivo de ayuda de FoxPro? Si no lo tenés, en VFPx tenés la última versión de la ayuda de VFP 9 SP2 en este link:

http://vfpx.codeplex.com/releases/view/23319

Luego, te convendría leer los comandos SET para saber lo que hacen y en especial el SET SAFETY.


Saludos.-

HernanCano

unread,
Feb 10, 2015, 12:51:25 PM2/10/15
to publice...@googlegroups.com
Milton:
La respuesta que te da Víctor es valedera.
Te doy otra alternativa:

ERASE C:\OMEGA\82151197.DPF

y aquí va otra más:

DELETE FILE C:\OMEGA\82151197.DPF

Leer las ayudas de VFP (o del lenguaje que escojas) también es bueno, buenísimo.

 
Reply all
Reply to author
Forward
0 new messages