bHayEntrega isboolean=False
arrNombreCampos1 isarray0string
arrNombreCampos2 isarray0string
arrNombreCampos3 isarray0string
arrNombreTitulos isarray0string
z isarray of0strings
l1 isarray of0strings
l2 isarray of0strings
l3 isarray of0strings
rs isData Source
c isstring="Tiquet_lineas."
dHeight isreal
s isstring="PrinterType=%1"
t,m,v,s1 isstring
Separador ischaracter=" "
// Vamos a dividir la impresión del tiquet en 5 bloques bloques
// 1.- Cabecera
// 2.- SubCabecera
// 3.- Cuerpo
// 4.- Sub pie
// 5.- Pie
HReadSeek(Preferencias_Tpv,tiendaTerminal,[gsTienda,gsTerminal],hIdentical)
IFPreferencias_Tpv.hayCajonTHEN
IFPreferencias_Tpv.abrir_antesTHEN
s1=ESC+Preferencias_Tpv.esc_abrir
iEscape(s1)
END
END
ListDeleteAll(LIST_Cabecera)
HReadFirst(cabecera,terminalorden)
WHILENOTHOut(cabecera)
ListAdd(LIST_Cabecera,Lower(cabecera.Campo))
HReadNext(cabecera,terminalorden)
END
IFPreferencias_Tpv.impresoraTHEN
// Configuramos la impresora seleccionada
selecionaImpresora()
//
// Buscamos los campos relacionados con el tiquet y los del propio tiquet
//
HReadSeek(Tiquet_cabecera,Tiquet,ti,hIdentical)
s="SELECT MAX(Posicion) AS nPosi FROM Cabecera WHERE tienda='"+gsTienda+"' AND terminal='"+gsTerminal+"'"
HExecuteSQLQuery(rs,hQueryDefault,s)
HReadFirst(rs)
nPos=rs.nposi
HReadSeek(Operaciones,Codigo,Tiquet_cabecera.Operacion,hIdentical)
HReadSeek(Clientes,ClientesID,Tiquet_cabecera.Cliente,hIdentical)
HReadSeek(Usuarios,codigo,Tiquet_cabecera.Operario,hIdentical)
HReadSeek(Departamentos,codigo,Tiquet_cabecera.Departamento,hIdentical)
HReadSeek(Preferencias_Tpv,tiendaTerminal,[gsTienda,gsTerminal],hIdentical)
//
// Creamos las distintas fuentes
//
IFgbVistaPreviaTHENiPreview(i100)
x=Preferencias_Tpv.bold_C?iBoldELSE0
i=Preferencias_Tpv.italic_c?iItalicELSE0
x=x+i
iCreateFont(1,Preferencias_Tpv.size_c,x,Preferencias_Tpv.fuente_C)
x=Preferencias_Tpv.bold_b?iBoldELSE0
i=Preferencias_Tpv.italic_b?iItalicELSE0
x=x+i
iCreateFont(2,Preferencias_Tpv.size_b,x,Preferencias_Tpv.fuente_B)
x=Preferencias_Tpv.bold_p?iBoldELSE0
i=Preferencias_Tpv.italic_p?iItalicELSE0
x=x+i
iCreateFont(3,Preferencias_Tpv.size_p,x,Preferencias_Tpv.fuente_P)
iCreateFont(4,8,0,"Arial")
/////////////////////////////////////////////////////////////////
// Imprimimos la cabecera
////////////////////////////////////////////////////////////////
// El primer dato es un campo RTF
dHeight=iZoneHeight(Preferencias_Tpv.Cab1,300,iRTF)
iPrintZoneRTF(Preferencias_Tpv.Cab1,0,0,300,dHeight)
iYPos(dHeight)// Indica donde empieza la impresión del segundo campo de la cabecera
// Imprimimos el resto de la cabecera
IFNoSpace(Preferencias_Tpv.Cab2)<>""THENiPrint(iFont(1)+Preferencias_Tpv.Cab2)
IFNoSpace(Preferencias_Tpv.cab3)<>""THENiPrint(iFont(1)+Preferencias_Tpv.cab3)
IFNoSpace(Preferencias_Tpv.cab4)<>""THENiPrint(iFont(1)+Preferencias_Tpv.cab4)
IFNoSpace(Preferencias_Tpv.cab5)<>""THENiPrint(iFont(1)+Preferencias_Tpv.cab5)
IFNoSpace(Preferencias_Tpv.cab6)<>""THENiPrint(iFont(1)+Preferencias_Tpv.cab6)
//iPrint(ifont(1))
////////////////////////////////////////////////////////////////
// Imprimimos la sub cabeza
///////////////////////////////////////////////////////////////
s="SELECT * FROM varios WHERE ver=1 AND CabeceraPie=0 AND terminal='"+gsTerminal+"'ORDER BY orden"
HExecuteSQLQuery(rs,hQueryDefault,s)
HReadFirst(rs)
WHILENOTHOut(rs)
SWITCHrs.quehago
CASE0// recibe un campo de una base de datos
IFNOT rs.combinarTHENiPrint()
iXPos(rs.posicion)
iPrintWord(iFont(1)+rs.contenido)
iPrintWord(iFont(1)+Formatea(rs.campo,nPos))
IFrs.print_extraTHENiPrint()
CASE1// Recibe una fecha
IFNOT rs.combinarTHENiPrint()
iXPos(rs.posicion)
iPrintWord(iFont(1)+rs.contenido)
iPrintWord(iFont(1)+DateToString({rs.campo,indItem},"DD/MM/YYYY"))
IFrs.print_extraTHENiPrint()
CASE2// Recibe una Hora
IFNOT rs.combinarTHENiPrint()
iXPos(rs.posicion)
iPrintWord(iFont(1)+rs.contenido)
iPrintWord(iFont(1)+TimeToString({rs.campo,indItem},"HH:MM:SS"))
IFrs.print_extraTHENiPrint()
CASE3// Recibe un cambo de base de datos booleano
// Convierte el contenido en texto
s={rs.campo,indItem}=0?"Sí"ELSE"No"
IFs="Sí"THEN
bHayEntrega=True
IFNOT rs.combinarTHENiPrint()
iXPos(rs.posicion)
iPrintWord(iFont(1)+rs.contenido)
iPrintWord(iFont(1)+s)
END
IFrs.print_extraTHENiPrint()
CASE4// Recibe una variable del sistema
IFNOT rs.combinarTHENiPrint()
iXPos(rs.posicion)
iPrintWord(iFont(1)+rs.contenido)
iPrintWord(iFont(1)+{rs.campo,indVariable})
IFrs.print_extraTHENiPrint()
CASE5// Recibe un carácter que se tiene que repetir n veces.
m=RepeatString(NoSpace(Left(rs.contenido,1)),Preferencias_Tpv.AnchoCabecera)
IFNOT rs.combinarTHENiPrint()
iXPos(rs.posicion)
iPrintWord(iFont(1)+m)
IFrs.print_extraTHENiPrint()
CASE6// DEsglse del cobro
IFNOT rs.combinarTHENiPrint()
iXPos(rs.posicion)
iPrint(iFont(1)+rs.contenido)
iXPos(rs.posicion+10)
IFTiquet_cabecera.efectivo<>0THENiPrint(iFont(1)+"Efectivo...:"+Formatea(NumToString(Tiquet_cabecera.efectivo),nPos,False))
iXPos(rs.posicion+10)
IFTiquet_cabecera.Tarjeta<>0THENiPrint(iFont(1)+"Tarjeta....::"+Formatea(NumToString(Tiquet_cabecera.Tarjeta),nPos,False))
iXPos(rs.posicion+10)
IFTiquet_cabecera.Vale_recibido<>0THENiPrint(iFont(1)+"Vale.........:"+Formatea(NumToString(Tiquet_cabecera.Vale_recibido),nPos,False))
IFrs.print_extraTHENiPrint()
CASE7// Impuesto
IFPreferencias_Tpv.pvpconiva=FalseTHEN
IFNOT rs.combinarTHENiPrint()
iXPos(rs.posicion)
iPrintWord(iFont(2)+Preferencias_Tpv.impuesto+"% de "+rs.contenido)
iXPos(nPos)
iPrintWord(iFont(2)+Formatea(rs.campo,nPos))
IFrs.print_extraTHENiPrint()
END
CASE8// Entrega a cuenta
IFbHayEntregaTHEN
IFNOT rs.combinarTHENiPrint()
iXPos(rs.posicion)
iPrintWord(iFont(2)+rs.contenido)
iXPos(iTextWidth(rs.contenido)+1)
iPrint(iFont(2)+Formatea(rs.campo,nPos))
iXPos(rs.posicion)
iPrintWord(iFont(2)+"Pendiente:")
iXPos(iTextWidth(rs.contenido)+1)
iPrint(iFont(2)+Formatea(NumToString(Tiquet_cabecera.pendiente),nPos,False))
IFrs.print_extraTHENiPrint()
END
CASE9// desglose de iva
OTHERCASE
//iprint()
END
HReadNext(rs)
END
iPrint()
iPrint()
//////////////////////////////////////////////////////////////////////////
// Imprimimos el cuerpo
//////////////////////////////////////////////////////////////////////////
// Primero la cabecera del cuerpo
s=RepeatString(Preferencias_Tpv.caracterCabecera,Preferencias_Tpv.AnchoCabecera)
iPrint(iFont(2)+s)
i=1
// Titulo del cuerpo
FOR EACH ROW OFLIST_Cabecera
IFHReadSeek(cabecera,terminalcampo,[gsTerminal,LIST_Cabecera],hIdentical)THEN
//if cabecera.Linea=1 then
ArrayAdd(arrNombreTitulos,cabecera.Campo)
IFcabecera.justificadoTHEN
ArrayAdd(z,Complete(cabecera.titulo,cabecera.tamano,Separador))
ELSE
t=NoSpace(cabecera.titulo)
i=cabecera.tamano-Length(t)
IFi>0THEN
t=RepeatString(Separador,i)+t
END
ArrayAdd(z,t)
END
//HReadFirst(Tiquet_lineas,id)
END
END
i=1
FOR EACH t OF z
m=arrNombreTitulos[i]
HReadSeek(cabecera,terminalcampo,[gsTerminal,m],hIdentical)
iXPos(cabecera.Posicion)
iPrintWord(iFont(2)+t)
i++
END
iPrint()
iPrint(iFont(2)+s)
// Ahora imprimimos las distintas lineas del tiquet
// cada Item puede tener hasta e lineas de texto
// Primera linea de del tiquet, correspondiente al ítem número 1
HReadSeekFirst(Tiquet_lineas,Tiquet,ti)
IFgbDemoTHENiPrint(iFont(2)+"**PROGRAMA DEMOSTRACIÓN**")
WHILEHFound(Tiquet_lineas)
nTotalItems+=Tiquet_lineas.Cantidad
Ajustes_cabecera(LIST_Cabecera,arrNombreTitulos,z,Separador,t,i,c,x,m,l1,arrNombreCampos1,l2,arrNombreCampos2,l3,arrNombreCampos3,v,nPos)
i=1
FOR EACH t OF l1
m=arrNombreCampos1[i]
HReadSeek(cabecera,terminalcampo,[gsTerminal,m],hIdentical)
iXPos(cabecera.Posicion)
iPrintWord(iFont(2)+t)
i++
END
IFi>1THENiPrint()
// Segunda linea de del tiquet, correspondiente al ítem número 1
i=1
FOR EACH t OF l2
m=arrNombreCampos2[i]
HReadSeek(cabecera,terminalcampo,[gsTerminal,m],hIdentical)
iXPos(cabecera.Posicion)
iPrintWord(iFont(2)+t)
i++
END
IFi>1THENiPrint()
// Tercera linea de del tiquet, correspondiente al ítem número 1
i=1
FOR EACH t OF l3
m=arrNombreCampos3[i]
HReadSeek(cabecera,terminalcampo,[gsTerminal,m],hIdentical)
iXPos(cabecera.Posicion)
iPrintWord(iFont(2)+t)
i++
END
IFi>1THENiPrint()
HReadNext(Tiquet_lineas,Tiquet)
END
////////////////////////////////////////////////////////
// Imprimimos el sub pie
////////////////////////////////////////////////////////
s="SELECT * FROM varios WHERE ver=1 and CabeceraPie=1 AND terminal='"+gsTerminal+"' ORDER BY orden"
HExecuteSQLQuery(rs,hQueryDefault,s)
HReadFirst(rs)
WHILENOTHOut(rs)
SWITCHrs.quehago
CASE0// recibe un campo de una base de datos
IFNOT rs.combinarTHENiPrint()
iXPos(rs.posicion)
iPrintWord(iFont(2)+rs.contenido)
IF{rs.campo,indItem}..Type=7THEN
iXPos(nPos)
END
iPrintWord(iFont(2)+Formatea(rs.campo,nPos))
IFrs.print_extraTHENiPrint()
CASE1// Recibe una fecha
IFNOT rs.combinarTHENiPrint()
iXPos(rs.posicion)
iPrintWord(iFont(2)+rs.contenido)
iPrintWord(iFont(2)+DateToString({rs.campo,indItem},"DD/MM/YYYY"))
IFrs.print_extraTHENiPrint()
CASE2// Recibe una Hora
IFNOT rs.combinarTHENiPrint()
iXPos(rs.posicion)
iPrintWord(iFont(2)+rs.contenido)
iPrintWord(iFont(2)+TimeToString({rs.campo,indItem},"HH:MM:SS"))
IFrs.print_extraTHENiPrint()
CASE3// Recibe un cambo de base de datos booleano
// Convierte el contenido en texto
iXPos(rs.posicion)
s={rs.campo,indItem}=0?"Sí"ELSE"No"
IFs="Sí"THEN
bHayEntrega=True
IFNOT rs.combinarTHENiPrint()
iPrintWord(iFont(2)+rs.contenido)
iPrintWord(iFont(2)+s)
END
IFrs.print_extraTHENiPrint()
CASE4// Recibe una variable del sistema
IFNOT rs.combinarTHENiPrint()
iXPos(rs.posicion)
iPrintWord(iFont(2)+rs.contenido)
iPrintWord(iFont(2)+{rs.campo,indVariable})
IFrs.print_extraTHENiPrint()
CASE5// Recibe un carácter que se tiene que repetir n veces.
m=RepeatString(NoSpace(Left(rs.contenido,1)),Preferencias_Tpv.AnchoCabecera)
IFNOT rs.combinarTHENiPrint()
iXPos(rs.posicion)
iPrintWord(iFont(2)+m)
IFrs.print_extraTHENiPrint()
CASE6// DEsglose del cobro
IFNOT rs.combinarTHENiPrint()
iXPos(rs.posicion)
iPrint(iFont(2)+rs.contenido)
iXPos(rs.posicion+10)
IFTiquet_cabecera.efectivo<>0THENiPrint(iFont(2)+"Efectivo...:"+Formatea(NumToString(Tiquet_cabecera.efectivo),nPos,False))
iXPos(rs.posicion+10)
IFTiquet_cabecera.Tarjeta<>0THEN
iPrintWord(iFont(2)+"Tarjeta....::"+Formatea(NumToString(Tiquet_cabecera.Tarjeta),nPos,False))
iPrint(iFont(2)+" / "+Tiquet_cabecera.digitosTrajeta)
END
iXPos(rs.posicion+10)
IFTiquet_cabecera.Vale_recibido<>0THENiPrint(iFont(2) +"Vale.........:"+Formatea(NumToString(Tiquet_cabecera.Vale_recibido),nPos,False))
IFrs.print_extraTHENiPrint()
CASE7// Impuesto
IFPreferencias_Tpv.pvpconiva=FalseTHEN
IFTiquet_cabecera.ImporteIva<>0THEN
IFNOT rs.combinarTHENiPrint()
iXPos(rs.posicion)
IFTiquet_cabecera.impuesto=0THEN
//
iPrintWord(iFont(2)+rs.contenido)
ELSE
iPrintWord(iFont(2)+Preferencias_Tpv.impuesto+"% de "+rs.contenido)
END
iXPos(nPos)
iPrintWord(iFont(2)+Formatea(rs.campo,nPos))
IFrs.print_extraTHENiPrint()
END
END
CASE8// Entrega a cuenta
IFbHayEntregaTHEN
IFNOT rs.combinarTHENiPrint()
iXPos(rs.posicion)
iPrintWord(iFont(2)+rs.contenido)
iXPos(nPos)
//ixpos(iTextWidth(rs.contenido )+1)
iPrint(iFont(2)+Formatea(rs.campo,nPos))
iXPos(rs.posicion)
iPrintWord(iFont(2)+"Pendiente:")
iXPos(nPos)
//iXPos(iTextWidth(rs.contenido )+1)
iPrint(iFont(2)+Formatea(NumToString(Tiquet_cabecera.pendiente),nPos,False))
IFrs.print_extraTHENiPrint()
END
CASE9// desglose iva
IFgbUsarIvaArticuloTHEN
iPrint(iFont(2))
iPrint(iFont(2)+"Detalle desglose tipo impuesto:")
IFNOT rs.combinarTHENiPrint()
IFTiquet_cabecera.iva_1=0THEN
iXPos(rs.posicion)
iPrintWord(iFont(4)+"Importe exento ")
iXPos(nPos-18)
iPrintWord(iFont(4)+Formatea("Tiquet_cabecera.Base_1",nPos))
IFrs.print_extraTHENiPrint()
IFNOT rs.combinarTHENiPrint()
IFTiquet_cabecera.iva_2<>0THEN
iXPos(rs.posicion)
iPrintWord(iFont(4)+Tiquet_cabecera.iva_2+" % de Imp. sobre ")
iXPos(nPos-18)
iPrintWord(iFont(4)+Formatea("Tiquet_cabecera.Base_2",nPos))
iXPos(nPos)
iPrintWord(iFont(4)+Formatea("Tiquet_cabecera.importe_iva2",nPos))
iPrint(iFont(2))
END
IFTiquet_cabecera.iva_3<>0THEN
iXPos(rs.posicion)
iPrintWord(iFont(4)+Tiquet_cabecera.iva_3+" % de Imp. sobre ")
iXPos(nPos-18)
iPrintWord(iFont(4)+Formatea("Tiquet_cabecera.Base_3",nPos))
iXPos(nPos)
iPrintWord(iFont(4)+Formatea("Tiquet_cabecera.importe_iva3",nPos))
iPrint(iFont(2))
END
ELSE
iXPos(rs.posicion)
iPrintWord(iFont(4)+Tiquet_cabecera.iva_1+" % de iImp. sobre ")
iXPos(nPos-18)
iPrintWord(iFont(4)+Formatea("Tiquet_cabecera.Base_1",nPos))
iXPos(nPos)
iPrintWord(iFont(4)+Formatea("Tiquet_cabecera.importe_iva1",nPos))
iPrint(iFont(2))
IFTiquet_cabecera.iva_2<>0THEN
iXPos(rs.posicion)
iPrintWord(iFont(4)+Tiquet_cabecera.iva_2+" % de Imp. sobre ")
iXPos(nPos-18)
iPrintWord(iFont(4)+Formatea("Tiquet_cabecera.Base_2",nPos))
iXPos(nPos)
iPrintWord(iFont(4)+Formatea("Tiquet_cabecera.importe_iva2",nPos))
iPrint()
END
IFTiquet_cabecera.iva_3<>0THEN
iXPos(rs.posicion)
iPrintWord(iFont(4)+Tiquet_cabecera.iva_3+" % de Imp. sobre ")
iXPos(nPos-18)
iPrintWord(iFont(4)+Formatea("Tiquet_cabecera.Base_3",nPos))
iXPos(nPos)
iPrintWord(iFont(4)+Formatea("Tiquet_cabecera.importe_iva3",nPos))
iPrint()
END
END
END
END
HReadNext(rs)
END
iPrint()
iPrint()
// Imprimimos el pie
////////////////////////////////////////////////////////
IFNoSpace(Preferencias_Tpv.Pie_1)<>""THENiPrint(iFont(3)+Preferencias_Tpv.Pie_1)
IFNoSpace(Preferencias_Tpv.Pie_2)<>""THENiPrint(iFont(3)+Preferencias_Tpv.Pie_2)
IFNoSpace(Preferencias_Tpv.Pie_3)<>""THENiPrint(iFont(3)+Preferencias_Tpv.Pie_3)
IFNoSpace(Preferencias_Tpv.Pie_4)<>""THENiPrint(iFont(3)+Preferencias_Tpv.Pie_4)
IFNoSpace(Preferencias_Tpv.pie_5)<>""THENiPrint(iFont(3)+Preferencias_Tpv.pie_5)
IFNoSpace(Preferencias_Tpv.pie_6)<>""THENiPrint(iFont(3)+Preferencias_Tpv.pie_6)
x=Preferencias_Tpv.lineas
FOR i=1TO x
iPrint(iFont(2))
END
iPrint(iFont(2)+"Vender y punto")
s1=ESC+Preferencias_Tpv.esc_corte
iEscape(s1)
END
IFPreferencias_Tpv.hayCajonTHEN
IFPreferencias_Tpv.abrir_antes=FalseTHEN
s1=ESC+Preferencias_Tpv.esc_abrir
iEscape(s1)
END
END
IFPreferencias_Tpv.impresoraTHEN
iEndPrinting
END