Este ejemplo es de un reporte q envia directo a la impresora, arma un txt y luego pasa directo al puerto
IF thisform.opcincoopcion1.Value = 3 THEN
SQLEXEC(cnCon, "execute VerPrinterSalida ?thisform.txtNumero.value", "cPrinterSalida")
thisform.mostrar_error
IF cPrinterSalida.Printer > 0 THEN
=messagebox("Documento ya fue impreso",16,thisform.caption)
ELSE
IF FILE("SalidaForm.TXT") THEN
delete file SalidaForm.TXT
ENDIF
vCantCopia = 0
FOR vCantCopia = 1 TO thisform.spCopias.Value
WAIT windows "Presione una tecla para imprimir la copia " + ALLTRIM(STR(vCantCopia))
LCFILE = "SalidaForm.TXT"
COPY TO (LCFILE) TYPE DELIMITED WITH TAB
SET TEXTMERGE ON NOSHOW
SET TEXTMERGE TO (LCFILE)
SELE cSalidaForm
GO TOP
Cadena = ""
vTotales = 0
vTotalCant = 0
vLinea = 0
vPagina = 1
<<PADR('Pag. ', 6, " ")>><<PADR(vPagina, 5, " ")>><<' - '>><<PADR('Copia ', 7, " ")>><<PADR(vCantCopia, 5, " ")>>
Cadena = PADR('Fecha: ', 10, " ") + PADR(DTOC(Fecha), 30, " ") + ' ' + PADR('Sucursal: ', 12, " ") + PADR(DesSucursal, 15, " ")
<<Cadena>>
Cadena = PADR('Numero: ', 10, " ") + PADR(NroSalida, 30, " ") + ' ' + PADR('Tipo: ', 12, " ") + PADR(DesTipoAjuste, 15, " ")
<<Cadena>>
Cadena = PADR('Cliente: ', 10, " ") + PADR(RazonSocial, 30, " ") + ' ' + PADR('Deposito: ', 12, " ") + PADR(DesDeposito, 15, " ")
<<Cadena>>
Cadena = PADR('Observ.: ', 10, " ") + PADR(ObsAjuste, 30, " ") + ' ' + PADR('Moneda: ', 12, " ") + PADR(DesMoneda, 15, " ")
<<Cadena>>
<<PADR('Codigo', 15, " ")>><<' '>><<PADR('Descripcion', 50, " ")>><<' '>><<PADL('Cantidad', 10, " ")>><<' '>><<PADL('Precio', 10, " ")>><<' '>><<PADL('SubTotal', 10, " ")>>
<<PADR('------', 15, " ")>><<' '>><<PADR('-----------', 50, " ")>><<' '>><<PADL('--------', 10, " ")>><<' '>><<PADL('------', 10, " ")>><<' '>><<PADL('--------', 10, " ")>>
vLinea = 10
SCAN
vCantidad = formatea_numero(Cantidad)
vPrecioSal = formatea_numero(PrecioSal)
vSubTotal = formatea_numero(Cantidad * PrecioSal)
Cadena = PADR(CodProducto, 15, " ") + ' ' + PADR(DesProducto, 50, " ") + ' ' + PADL(vCantidad, 10, " ") + ' ' + PADL(vPrecioSal, 10, " ") + ' ' + PADL(vSubTotal, 10, " ")
<<Cadena>>
vTotales = vTotales + (ROUND(PrecioSal * Cantidad, 2))
vTotalCant = vTotalCant + Cantidad
vLinea = vLinea + 1
IF vLinea = thisform.spLinea.Value THEN
vPagina = vPagina + 1
<<PADR('Pag. ', 6, " ")>><<PADR(vPagina, 5, " ")>><<' - '>><<PADR('Copia ', 7, " ")>><<PADR(vCantCopia, 5, " ")>>
<<PADR('Codigo', 15, " ")>><<' '>><<PADR('Descripcion', 50, " ")>><<' '>><<PADL('Cantidad', 10, " ")>><<' '>><<PADL('Precio', 10, " ")>><<' '>><<PADL('SubTotal', 10, " ")>>
<<PADR('------', 15, " ")>><<' '>><<PADR('-----------', 50, " ")>><<' '>><<PADL('--------', 10, " ")>><<' '>><<PADL('------', 10, " ")>><<' '>><<PADL('--------', 10, " ")>>
vLinea = 3
ENDIF
ENDSCAN
IF (vLinea + 5) > thisform.spLinea.Value THEN
FOR i = 1 TO (thisform.spLinea.Value - vLinea)
NEXT
ENDIF
Cadena = PADR(" ", 15, " ") + ' ' + PADR(" ", 50, " ") + ' ' + PADL("----------", 10, " ") + ' ' + PADL(" ", 10, " ") + ' ' + PADL("----------", 10, " ")
<<Cadena>>
vTotales = formatea_numero(vTotales)
vTotalCant = formatea_numero(vTotalCant)
Cadena = PADR(" ", 15, " ") + ' ' + PADL("TOTALES ", 50, " ") + ' ' + PADL(vTotalCant, 10, " ") + ' ' + PADL(" ", 10, " ") + ' ' + PADL(vTotales, 10, " ")
<<Cadena>>
Cadena = SPACE(50) + PADR('______________________________', 30, " ")
<<Cadena>>
GO TOP
Cadena = SPACE(50) + PADR(RazonSocial, 30, " ")
<<Cadena>>
vLinea = vLinea + 5
IF thisform.spLinea.Value > vLinea then
FOR i = 1 TO (thisform.spLinea.Value - vLinea)
NEXT
ENDIF
SET TEXTMERGE TO
SET TEXTMERGE OFF
*RUN TYPE "SalidaForm.TXT" >PRN
NEXT
*SQLEXEC(cnCon, "execute PrinterSalida ?thisform.vNumero")
ENDIF
ENDIF