miércoles, 31 de agosto de 2022

Imprimir en papel continuo o tickets (Salvador Soler)

 i,nTotalItems,x,nPos,y isint
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

Leer báscula

 PortNum is int

PortNum = sOpen("COM5", 200, 200, 1) // Open COM1

IF PortNum <> 0 THEN

//sParameter(PortNum, 9600, 1, 8, 0)   //// Configure COM1: Rate 9600, even parity, 8 data bits, 1 stop bit

cMessage is character = "P"

nNumCarEscritos is int

nNumCarEscritos = sWrite(PortNum, cMessage) // Send a message to the output buffer of COM2

// Wait for the end of the write operation

LOOP

IF sInExitQueue(PortNum) = 0 THEN BREAK

END

Number is int

MessageRead is string

MessageRead = sRead(PortNum, 200)

Info("End of write operation", "caracteres escritos: " + nNumCarEscritos, "caracteres salida: " + Number , MessageRead)

sClose(PortNum) // Close COM1 // End of process

ELSE

Error("Error while opening COM5")

END


martes, 30 de agosto de 2022

Configurar la BD HFSQL a usar en Windev

 IF InTestMode() = True THEN
MiConTest is Connection      //conexión de pruebas
MiConTest..User = "ADMIN"
MiConTest..Password = ""
MiConTest..Server = "SERVER01"
MiConTest..Database = "UCTest"
MiConTest..Provider = hAccessHFClientServer
MiConTest..CryptMethod        = hCryptRC5_16
MiConTest..Access = hOReadWrite
MiConTest..ExtendedInfo = "Extended information"
MiConTest..CursorOptions = hClientCursor
MiConTest..Caption                 = "AMBIENTE DE PRUEBAS"
IF HOpenConnection(MiConTest) = True THEN   // Open the connection
IF HChangeConnection("*", MiConTest) = True THEN // Assign the connection to all data files
gbFinPrograma = False
ELSE
Error(HErrorInfo())  
END
ELSE
Error(HErrorInfo())
END
gsAmbienteTrabajo          = "AMBIENTE DE PRUEBAS"

IF gbFinPrograma = False THEN
IF gpwOpenConnection(MiConTest) = True THEN
gnResultado = gpwOpen()
IF gnResultado <> gpwOk THEN   // If the login failed
SWITCH gnResultado
CASE gpwError:
Error("Error al inicializar el GroupWare.", ErrorInfo())
gbFinPrograma = True
CASE gpwUnknownUser:
Error("Usuario desconocido en GroupWare.")
gbFinPrograma = True
CASE gpwInvalidPassword:
Error("Password Inválido en GroupWare")
gbFinPrograma = True
CASE gpwCancel:
Error("El usuario oprimió Cancelar en GroupWare")
gbFinPrograma = True
OTHER CASE
Error("Error desconocido en GroupWare")
gbFinPrograma = True
END
ELSE
gbFinPrograma = False
END
ELSE
Error(ErrorInfo())
gbFinPrograma = True
END
END

ELSE //********************************************************************************************

MiConUCSoft is Connection   //conexión de produccion
MiConUCSoft..User = "ADMIN"
MiConUCSoft..Password = ""
MiConUCSoft..Server = "SERVER01"
MiConUCSoft..Database = "UCSoft"
MiConUCSoft..Provider = hAccessHFClientServer
MiConUCSoft..CryptMethod      =hCryptRC5_16
MiConUCSoft..Access = hOReadWrite
MiConUCSoft..ExtendedInfo = "Extended information"
MiConUCSoft..CursorOptions = hClientCursor
MiConUCSoft..Caption        = "AMBIENTE DE PRODUCCION"
IF HOpenConnection(MiConUCSoft) = True THEN   // Open the connection
IF HChangeConnection("*", MiConUCSoft) = True THEN // Assign the connection to all data files
gbFinPrograma = False
ELSE
Error(HErrorInfo())  
END
ELSE
Error(HErrorInfo())
END
gsAmbienteTrabajo          = "AMBIENTE DE PRODUCCION"

IF gbFinPrograma = False THEN
IF gpwOpenConnection(MiConUCSoft) = True THEN
gnResultado = gpwOpen()
IF gnResultado <> gpwOk THEN   // If the login failed
SWITCH gnResultado
CASE gpwError:
Error("Error al inicializar el GroupWare.", ErrorInfo())
gbFinPrograma = True
CASE gpwUnknownUser:
Error("Usuario desconocido en GroupWare.")
gbFinPrograma = True
CASE gpwInvalidPassword:
Error("Password Inválido en GroupWare")
gbFinPrograma = True
CASE gpwCancel:
Error("El usuario oprimió Cancelar en GroupWare")
gbFinPrograma = True
OTHER CASE
Error("Error desconocido en GroupWare")
gbFinPrograma = True
END
END
ELSE
Error(ErrorInfo())
gbFinPrograma = True
END
END
END  //**************************************************

IF gbFinPrograma = True THEN EndProgram()

viernes, 12 de agosto de 2022

Array - ordenar un array



stPoliza                   is Structure
    dFecha is Date
    sTipoPoliza         is string
    nNoPoliza is int
    sCuenta is string
    nNumeroMov is int
    sTipoMovto is string
    cyImporte is currency
    sConceptoMovto is string
    sConceptoPoliza is string
END
arrPolizas         is array of stpoliza
stUnaPoliza             is stPoliza

nContador  is int  = 0


sNombreArchivoExcel is string     = EDT_File_Name..Value
nNumArchivoExcel    is int     = xlsOpen(sNombreArchivoExcel)
nLineasArchivoExcel is int     = xlsNbRow(nNumArchivoExcel)
FOR nContador     = 26 TO nLineasArchivoExcel  //NO CONSIDERO ENCABEZADOS
STC_Avance     = nContador
stUnaPoliza.dFecha     = StringToDate(xlsData(nNumArchivoExcel,nContador,01),"DD/MM/YYYY")
stUnaPoliza.sTipoPoliza     = NoSpace(xlsData(nNumArchivoExcel,nContador,02, False))
stUnaPoliza.nNoPoliza     = xlsData(nNumArchivoExcel,nContador,03, False)
stUnaPoliza.sCuenta     = xlsData(nNumArchivoExcel,nContador,04, False)
stUnaPoliza.nNumeroMov          = xlsData(nNumArchivoExcel,nContador,05, False)
stUnaPoliza.sTipoMovto     = NoSpace(xlsData(nNumArchivoExcel,nContador,06, False))
stUnaPoliza.cyImporte     = Val(xlsData(nNumArchivoExcel,nContador,07, False))
stUnaPoliza.sConceptoMovto     = xlsData(nNumArchivoExcel,nContador,08, False)
stUnaPoliza.sConceptoPoliza    = xlsData(nNumArchivoExcel,nContador,09, False)
arrPolizas.Add(stUnaPoliza)
END
xlsClose(nNumArchivoExcel)  //cierro el archivo fuente
//ordeno el array
ArraySort(arrPolizas,asMember, "sTipoPoliza;nNoPoliza")



XML

 XML es UTF8, Basándonos en este discurso, generamos el XML y lo lanzamos en una cadena En este momento hice otra variable variavel_xml es b...