Imprimir una línea directamente en la impresora.

383 views
Skip to first unread message

RickDeCastro

unread,
May 10, 2011, 11:33:15 AM5/10/11
to Comunidad de Visual Foxpro en Español
Hola grupo.

A modo de Auditoría en Tiempo Real, necesito imprimir UNA LINEA de
datos en una impresora de red, cada vez que el usuario oprima el botón
Guardar, en determinado proceso.

Hace muchísimo que no manejo eso de impresión directa, pero, para
tanto he creado una función con el siguiente código:

FUNCTION ImprimeAPTR
LPARAMETERS tcLinea
LOCAL lcImpresora, lcSetPrinter, lcDevice
Thisform.LockScreen = .T.
lcImpresora = Thisform.cImpresoraAPTR
lcSetPrinter = SET("Printer")
lcDevice = SET("Device")
SET PRINTER TO NAME (lcImpresora)
SET PRINTER ON
SET DEVICE TO PRINTER

? tcLinea

SET PRINTER &lcSetPrinter
SET DEVICE TO &lcDevice
SET PRINTER TO DEFAULT
Thisform.LockScreen = .F.
RETURN

Hasta aquí todo bien. Imprime sin problemas. El tema es que, al
terminar de imprimir cada línea ¡¡SALTA UNA PÁGINA!!!

Ya he revisado tcLinea y no posee ningún caracter especial.
Ya he probado con "??" en lugar del "?"

¿Alguna idea de cómo puedo implementar eso?

---
Saludos imprimibles.
Ricardo De Castro Aquino
Asunción - Paraguay

Fabricio

unread,
May 10, 2011, 7:37:02 PM5/10/11
to Comunidad de Visual Foxpro en Español
Puedes imprimirla usando ???, esto envía la línea directamente a la
impresota, no es necesario el set device to print, set printer on, ni
nada de eso, toma en cuenta que no avanza de línea, debes enviarle el
avance de línea.

Saludos

Fabricio

HernanCano

unread,
May 11, 2011, 12:38:40 AM5/11/11
to Comunidad de Visual Foxpro en Español
Verifica si en el administrador de impresión de Windows puedes
indicarle que no haga salto de hoja; hasta donde recuerdo ésto es un
función de la impresora o de su driver, no es exclusiva de tu app.

Víctor Hugo Espínola Domínguez

unread,
May 11, 2011, 4:27:43 PM5/11/11
to publice...@googlegroups.com

Hola Ricardo,

Si la impresora es matricial prueba esto:

??? CHR( 27 ) + "C" + CHR( 1 ) && Long. pág.: 1 pulgada
* o algo equivalente según la marca y modelo de la impresora

? tcLinea

Nota: Creo que los SET DEVICE no son necesarios.

Saludos, Víctor.

RickDeCastro

unread,
May 12, 2011, 10:14:45 AM5/12/11
to Comunidad de Visual Foxpro en Español
Hola a todos.

Gracias por sus aportes.
Tenían razón algunos, parece que yo estaba pecando por exceso. En
realidad, no eran necesarios la mayoría de los SET (printer, device,
etc.) que yo estaba usando y ELLOS eran los que estaban causando el
problema.
Yo ya había probado con los ??? y el problema seguía. Repito. Solo
solucionó cuando quité todos los SETs a excepción del que direcciona a
la impresora de red.

Por si a alguien le interesa, el código final (que funciona) quedó
así:

FUNCTION ImprimeAPTR
LPARAMETERS tcLinea
LOCAL lcImpresora, lcSetPrinter, lcDevice
lcSetConsole = SET("Console")
SET CONSOLE OFF
lcImpresora = Thisform.cImpresoraAPTR
SET PRINTER TO NAME (lcImpresora)

*-- Configura la impresora
*??? CHR(15) && activa condensado
??? CHR(27) + CHR(108) + CHR(3) && activa margen izq a 3 columnas

*-- Imprime la línea y hace un retorno de carro
??? tcLinea + CHR(13) + CHR(10)

*-- Deja todo como estaba
??? CHR(27) + CHR(108) + CHR(0) && repone margen izq a 0 columnas
*??? CHR(18) && cancela condensado

SET PRINTER TO DEFAULT
SET CONSOLE &lcSetConsole
RETURN

---
Saludos solucionables

Ricardo De Castro Aquino
Asunción - Paraguay

Reply all
Reply to author
Forward
0 new messages