Clipper/FiveWin - Print +xHarbour

   
Vista:

Print +xHarbour

Publicado por ernesto (7 intervenciones) el 27/04/2009 08:53:24
Print Print Necesito ayuda
Programo con FWH+xHarbour y compilo con xEdit2
No he podido hacer funcionar un REPORT , lo unico que he logrado es lo indicado a continuación pero ….
No puedo ingresar el PICTURE para darle formato de miles a la columna Val_Unidad y no se como incluir una cabecera con todos los datos de facturación (Nombre ,Fecha,numero de guia,dirección,comuna,país etc…)
Favor … ayuda si alguien me puede pasar algún ejemplo (Ernesto.Lanfranco@gmail.com)
Gracias.
*****************************MI EJEMPLO ******************************************
dbSelectArea("Factura")
GO TOP
DEFINE FONT oFont3 NAME "ARIAL" SIZE 20,30 BOLD ITALIC
PRINT oPrn NAME "Factura" preview
DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 0, -20 OF oPrn
nRowStep = 1
nColStep = 1
PAGE
while ! EoF()
oPrn:Say( nRow, 1, Factura->Razon, ofont3 )
oPrn:Say( nRow, 40, Factura->Detalle, ofont3 )
oPrn:Say( nRow, 60, str(Factura->Val_Unidad), ofont3 )
nRow += ofont3:nHeight
if nRow > 50 * ofont3:nHeight // N§ de l¡neas x Alto caracter
nRow = 1
ENDPAGE
PAGE
endif

SKIP
end
ENDPAGE

ENDPRINT
RELEASE FONT ofont3
oFont:End() // Destroy the font object
MsgInfo( "Work done! Look at your printer!" )
return nil

Gracias por la AYUDA
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

RE:Print +xHarbour

Publicado por Gabriel Pascual (914 intervenciones) el 28/04/2009 03:29:46
Ok, veamos:

Cuidadín con confundir PRINTER y REPORT, son 2 objetos distintos.

PRINTER te permite manipular directamente la impresora, mientras que REPORT está diseñado para reportes columnares, debajo de la carpeta SAMPLES de fivewin hay una carpeta llamado REPORT donde hay mas de 10 ejemplos del uso del report. Se pueden hacer verdaderas virguerías con el objeto report.

El printer está bien para reportes que no sean precisamente columnares, como por ejemplo rellenar facturas, o en general formatos preimpresos.

Volviendo a tu problema con printer tienes que ver varias cosas:

dbSelectArea("Factura")
GO TOP
/* aqui bien*/

/* algunos errores :*/
DEFINE FONT oFont3 NAME "ARIAL" SIZE 20,30 BOLD ITALIC
PRINT oPrn NAME "Factura" preview
DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 0, -20 OF oPrn

Los fonts a usar en un objeto printer SIEMPRE se definen DEPUES de definir el objeto printer, la definicion del oFont es correnta, pero la de oFont3 es incorrecta, debiendo quedar así:

PRINT oPrn NAME "Factura" preview
DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 0, -20 OF oPrn
DEFINE FONT oFont3 NAME "ARIAL" SIZE 20,30 BOLD ITALIC OF oPrn

Por otro lado, el siguiente código:

oPrn:Say( nRow, 1, Factura->Razon, ofont3 )
oPrn:Say( nRow, 40, Factura->Detalle, ofont3 )
oPrn:Say( nRow, 60, str(Factura->Val_Unidad), ofont3 )

Te iría mejor así:

oPrn:CmSay( nRow, 1, Factura->Razon, ofont3 )
oPrn:CmSay( nRow, 40, Factura->Detalle, ofont3 )
oPrn:CmSay( nRow, 60, str(Factura->Val_Unidad), ofont3 )

Y te explico porqué:

el método ::Say() envia a imprimir de acuerdo A LA RESOLUCION DE LA IMPRESORA, por lo tanto, el mismo reporte se verá diferente dependiendo de la impresora sobre la cual imprimas, si desarrollas tu reporte por ejemplo para una lasejet HP no se verá igual que en una Canon de inyección de tinta, porque la resolución de ambas es distinta.

El método ::CmSay() espera recibir las coordenadas en CENTIMETROS con lo cual te facilitaría enormemente el posicionamiento de cada sentencia a impirmir, garantizando que el mismo informe se ve igual en todas las impresoras, ya que el método ::CmSay() realiza internamente la conversión de Centímetros a los pixeles de resolución que maneje tu impresora.

Por otro lado si quieres imprimir con PICTURE, debes usar el TRANSFORM() correspondiente ya que el tercer parámetro de ::CmSay() y ::Say() solo aceptan cadenas de caracteres. Si quieres impirmir un valor con notación monetaria, te quedaría algo como esto:

oPrn:CmSay (nRow, Columna, Transform (factura->precio, "@e 999,999,999.99"),oFont3)

La longitud del papel es calculada por la longitud en centímetros que lleve tu contador nRow.
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:Print +xHarbour

Publicado por tionolo (30 intervenciones) el 28/04/2009 05:59:29
además prueba con esto : (como para solucionar tu problema de columnas de miles..PAD_RIGHT

#define PAD_LEFT 0
#define PAD_RIGHT 1
#define PAD_CENTER 2
.
.
.
.
.

oPrn:CmSay( nRow, 2.0, Transform(Factura->Cantidad,"999"),; oFont,,CLR_BLACK,,PAD_RIGHT )
oPrn:CmSay( nRow,4.0, Transform(Factura->Codigo,"99"), ; oFont,,CLR_BLACK,,PAD_Center)
oPrn:CmSay( nRow, 10.0, Factura->Detalle, ofont,,CLR_BLACK,,PAD_Left )
oPrn:CmSay( nRow, 15.0, Transform(Factura- >Val_unidad,"999,999"), ; oFont,,CLR_BLACK,,PAD_RIGHT )

Adios
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:Print +xHarbour

Publicado por ernesto (7 intervenciones) el 29/04/2009 05:15:11
gracias a todos :
aplique y las instrucciones , ahora imprimo la factura a la perfeccion..
Gracias nuevamante.
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

como hacer verical mi hoja con PRINT

Publicado por hmz (1 intervención) el 17/06/2009 21:27:28
hola tengo un imprecion de estado de cuenta pero necesito k no este horizontal, por lo que requiero que este de forma verical, les agradesco las molestias.
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