IMPRIMIR EN FORMATO TICKET

895 views
Skip to first unread message

jmoranjara

unread,
Nov 24, 2016, 2:02:49 PM11/24/16
to WINDEV-LA
Buenas tardes, deseo implementar una impresión con formato de ticket y se detenga la impresión donde acaba el texto y no hasta que termine el tamaño de hoja configurado en el report. ¿alguien sabe como realizar esto?
Gracias.
Saludos.

nexus133

unread,
Nov 24, 2016, 8:22:45 PM11/24/16
to WINDEV-LA
HOLA

En vfp yo lo hacia utilizando el comando

??? chr(10)
??? "Total "+TRANSFORM(TOTAL,"@B$ 99,999.99") AT 00

Este funcionaba perfecto, La impresora que utilizaba estaba instalada como "generica solo texto"

Pero en WINDEV se me complico, puesto que las columnas de impresion quedaba desalimeadas, etc etc..

Para solucionar el problema instale los drivers de EPSON TMU 220 PD

y googleando por todos lados (buscando en algunos foros de windev),logre armar el siguiente codigo, que me satisface la impresion del ticket, esto lo programe a mano sin ningun report designer.

// esto es parte del codigo que tengo para imprimer el ticket de venta
iDestination(iPrinter,"Imprimiendo Documento de venta")
    iCreateFont(1, 9, iNormal, "Times New Roman", iBlack, 0)
    // imprime la cabecera del documento
    iPrint(iFont(1)+iXPos(0,False)+stMycabecera.numerodocumento+" Vendedor: "+stMycabecera.vendedor)
    iPrint(iFont(1)+iXPos(0,False)+"Fecha: "+DateToString(stMycabecera.fecha,maskSystemDate)+" Hora: "+TimeSys())
    iPrint(iFont(1)+iXPos(0,False)+"Cliente: "+stMycabecera.cliente)
    iPrint(iFont(1)+iXPos(0,False)+"R.U.C/C.I: "+stMycabecera.ruc)
    iPrint(iFont(1)+iXPos(0,False)+"Direccion: "+stMycabecera.direccion)
    iPrint()
    iCreateFont(2,8,iNormal,"Times New Roman",iBlack,0)
    rMargentotal,rLongitudtotal,rMargencan,rLongitudcan,rMargenprecio,rLongitudprecio are 4-byte real
    rMargentotal = 62 //margen derecho
    rMargencan = 10 //margen izquierdo
    rMargenprecio = 50 // margen para el precio
    rPosicion,rPosicioncan,rPosicionpre,rTotalpagar,rValorgravado,rValorexcento,rValoriva,descuentoitem,rValoritem are 4-byte real
    sTieneiva is string
    FOR ALL stMiembros OF arrMycuerpo
        // calcula la longitud del valor total
        rLongitudtotal = iTextWidth(iFont(2)+NumToString((stMiembros.cantidad*stMiembros.venta),"4.2f"))
        rPosicion = rMargentotal-rLongitudtotal
        // calcula la longitud del preocio
        rLongitudprecio = iTextWidth(iFont(2)+NumToString(stMiembros.venta,"4.2f"))
        rPosicionpre = rMargenprecio-rLongitudprecio
        IF stMiembros.iva = 1 THEN
            sTieneiva = "*"
            rValoritem = (stMiembros.venta/rMyalicuota) // DESGLOSA EL IVA
            descuentoitem = rValoritem*(stMiembros.descuento/100) //valor del descuento
            rValorgravado+=Round(((rValoritem-descuentoitem)*stMiembros.cantidad),2)
            rValoriva = (rValorgravado*stMycabecera.porceniva)   
        ELSE
            sTieneiva =""   
            descuentoitem = (stMiembros.venta*(stMiembros.descuento/100)) //valor del descuento
            rValorexcento+=((stMiembros.venta-descuentoitem)*stMiembros.cantidad)
        END
        // imprime la cantidad con decimales o enteros
        nEntero = IntegerPart(stMiembros.cantidad)
        IF nEntero > 0 THEN
            rEsiduo = IntegerPart(stMiembros.cantidad) / nEntero
            resultado = (nEntero*rEsiduo)-stMiembros.cantidad
        ELSE
            resultado = -0.01   
        END
        IF resultado = 0 THEN
            rLongitudcan = iTextWidth(iFont(2)+NumToString(stMiembros.cantidad,"4d")+" "+stMiembros.medida)
            rPosicioncan = rMargencan-rLongitudcan // posicion donde se imprime la cantidad
            iPrint(iFont(2)+iXPos(rPosicioncan,False)+NumToString(stMiembros.cantidad,"4d")+ ...
            " "+stMiembros.medida+iXPos(11,False)+Middle(stMiembros.item,1,22)+iXPos(40,False)+sTieneiva+iXPos(rPosicionpre,False)+NumToString((stMiembros.venta-descuentoitem),"4,2f")+iXPos(rPosicion,False)+NumToString((stMiembros.cantidad*(stMiembros.venta-descuentoitem)),"4,2f"))
        ELSE
            rLongitudcan = iTextWidth(iFont(2)+NumToString(stMiembros.cantidad,"4.2f")+" "+stMiembros.medida)
            rPosicioncan = rMargencan-rLongitudcan // posicion donde se imprime la cantidad
            iPrint(iFont(2)+iXPos(rPosicioncan,False)+NumToString(stMiembros.cantidad,"4,2f")+ ...
            " "+stMiembros.medida+iXPos(11,False)+Middle(stMiembros.item,1,22)+iXPos(40,False)+sTieneiva+iXPos(rPosicionpre,False)+NumToString((stMiembros.venta-descuentoitem),"4,2f")+iXPos(rPosicion,False)+NumToString((stMiembros.cantidad*(stMiembros.venta-descuentoitem)),"4,2f"))
        END
        // suma el valor total a pagar
        rTotalpagar+=Round((stMiembros.cantidad*(stMiembros.venta-descuentoitem)),2)
    END
    iCreateFont(3,10,iBold,"Times New Roman",iBlack,0)
    iPrint(iFont(3)+iXPos(0,False)+"A PAGAR: "+NumToString(rTotalpagar,"6,2fS"))
    iPrint(iFont(1)+iXPos(0,False)+"Tarifa 0%: "+NumToString(rValorexcento,"6.2fS"))
    iPrint(iFont(1)+iXPos(0,False)+"Tarifa "+NumToString((stMycabecera.porceniva*100),"2d")+"%: "+NumToString(rValorgravado,"6.2fS"))
    iPrint(iFont(1)+iXPos(0,False)+"I.V.A "+NumToString((stMycabecera.porceniva*100),"2d")+"%: "+NumToString(rValoriva,"6,2fs"))
    iPrint(iFont(1)+iXPos(0,False)+"* = Producto con I.V.A")
    iEndPrinting()

Como vera es totalmente distinto al amado y añorado vfp.

Si alguien tiene una solucion mas aceptable ruego compartirla.

SALUDOS DESDE ECUADOR.

Jesús Madrigal Aguilera

unread,
Aug 14, 2017, 10:13:23 AM8/14/17
to WINDEV-LA
Buen día yo lo que hago es lo siguiente:

Como ejemplo un ticket de venta creo 2 reportes uno para la información principal y el segundo para que muestre los detalles del ticket (items)

El el principal elimino los bloques del header y footer coloco en el start document los datos de encabezado (nombre del negocio, fecha, etc) y en el end document los totales. En el body en el After printing colocó codigo para imprimir el reporte de los detalles el cual los generó con el asistente de una archivo o query.


Funciona muy bien y al final del end document para la impresión.

jmoranjara

unread,
Aug 14, 2017, 1:36:19 PM8/14/17
to WINDEV-LA
y como haces con el tamaño? ya que el ticket no tiene un tamaño definido .

Jesús Madrigal Aguilera

unread,
Aug 14, 2017, 4:33:22 PM8/14/17
to WINDEV-LA
Cuando se imprime el bloque End of document ahí mismo termina el ticket no tienes que hacer nada.

pedroarmijos61

unread,
Sep 16, 2018, 5:01:19 PM9/16/18
to WINDEV-LA
Hola amigo tambien soy ecuador .. lograste imprimir el ticket , ayudame con un ejemplo por favor


El jueves, 24 de noviembre de 2016, 14:02:49 (UTC-5), jmoranjara escribió:
Reply all
Reply to author
Forward
0 new messages