modificaciones facturacion electronica

This commit is contained in:
Luis
2026-10-15 16:07:57 -04:00
parent 07649704b1
commit ba982b7635
158 changed files with 206301 additions and 27838 deletions
+88 -41
View File
@@ -37,6 +37,53 @@ import xml
END RECORD ,
hasr varchar(10)
# Tabla de formas de pago (pago mixto) que carga el programa llamador via set_formaspago()
DEFINE m_formaspago DYNAMIC ARRAY OF RECORD
formapago STRING,
montopago STRING
END RECORD
# El programa llamador (veprmt001) carga aqui las formas de pago antes de generafile()
FUNCTION set_formaspago(p_arr)
DEFINE p_arr DYNAMIC ARRAY OF RECORD
formapago STRING,
montopago STRING
END RECORD
DEFINE j INT
CALL m_formaspago.clear()
FOR j = 1 TO p_arr.getLength()
LET m_formaspago[j].formapago = p_arr[j].formapago
LET m_formaspago[j].montopago = p_arr[j].montopago
END FOR
END FUNCTION
# Emite uno o varios <FormaDePago>. Si hay pago mixto (m_formaspago) los recorre;
# si no, usa la forma unica del encabezado (comportamiento anterior).
FUNCTION emite_formasdepago()
DEFINE j INT
IF m_formaspago.getLength() > 0 THEN
FOR j = 1 TO m_formaspago.getLength()
CALL out.startElement("FormaDePago",NULL)
CALL out.startElement("FormaPago",NULL)
CALL out.characters(m_formaspago[j].formapago CLIPPED)
CALL out.endElement("FormaPago")
CALL out.startElement("MontoPago",NULL)
CALL out.characters(m_formaspago[j].montopago CLIPPED)
CALL out.endElement("MontoPago")
CALL out.endElement("FormaDePago")
END FOR
ELSE
CALL out.startElement("FormaDePago",NULL)
CALL out.startElement("FormaPago",NULL)
CALL out.characters(r_documento_encabezado.FormadePAgo CLIPPED)
CALL out.endElement("FormaPago")
CALL out.startElement("MontoPago",NULL)
CALL out.characters(r_documento_encabezado.montoPago)
CALL out.endElement("MontoPago")
CALL out.endElement("FormaDePago")
END IF
END FUNCTION
FUNCTION generafile(documento_encabezado,documento_Detalle,xsucid,xbodega,xoperacion)
@@ -63,8 +110,17 @@ FUNCTION generafile(documento_encabezado,documento_Detalle,xsucid,xbodega,xopera
NumeroLinea int
END RECORD,
respuesta,codigo STRING,
phash,ohash VARCHAR(10)
phash,ohash VARCHAR(10),
vmover,vfc STRING
LET ohash = NULL
# Comando y subcarpeta FC segun el sistema: Linux (server) mv + FC/, Windows move + FC\
IF os.Path.separator() = "/" THEN
LET vmover = "mv "
LET vfc = "FC/"
ELSE
LET vmover = "move "
LET vfc = "FC\\"
END IF
LET ruta_originales= fgl_getenv("RUTA_XML_ORIGINALES")
#LET ruta_originales = '.\\filesXML\\ncf31\\'
@@ -77,6 +133,14 @@ FUNCTION generafile(documento_encabezado,documento_Detalle,xsucid,xbodega,xopera
LET out=om.XmlWriter.createFileWriter(nombreFile)
IF out IS NULL THEN
# No se pudo crear el XML (RUTA_XML_ORIGINALES vacia, carpeta inexistente,
# sin "/" al final o sin permiso de escritura): avisa en vez de caerse
LET respuesta = "No se pudo crear el XML en: ", nombreFile,
" -- revise la variable RUTA_XML_ORIGINALES (carpeta existe, termina en / y tiene permiso de escritura)"
CALL fgl_winmessage("e-CF",respuesta,"stop")
RETURN NULL,respuesta,NULL,"500"
END IF
LET a=om.SaxAttributes.create()
CALL out.startDocument()
@@ -144,7 +208,7 @@ FUNCTION generafile(documento_encabezado,documento_Detalle,xsucid,xbodega,xopera
CALL out.endElement("ECF")
END IF
IF r_documento_encabezado.tipoEcf = '32' AND montoFactura > 250000 THEN
IF r_documento_encabezado.tipoEcf = '32' AND montoFactura >= 250000 THEN
LET tipoRecepcion = "normal"
CALL out.endElement("ECF")
END IF
@@ -165,7 +229,7 @@ FUNCTION generafile(documento_encabezado,documento_Detalle,xsucid,xbodega,xopera
CALL gethash(filexml) RETURNING ohash,fechaFirma,xfacturainterna
LET nombrefile2=ruta_firmados,documento_encabezado.nombreFile
LET comando2 = "move ",nombrefile2 CLIPPED," ",ruta_firmados CLIPPED,"FC\\",documento_encabezado.nombreFile clipped
LET comando2 = vmover,nombrefile2 CLIPPED," ",ruta_firmados CLIPPED,vfc,documento_encabezado.nombreFile clipped
DISPLAY "comando 2 ",ohash
RUN comando2
LET fechaFirma = CURRENT
@@ -176,7 +240,7 @@ END IF
IF r_documento_encabezado.tipoEcf = '32' AND montoFactura < 250000 THEN
LET comando = "move ",nombrefile CLIPPED," ",ruta_originales CLIPPED,"FC\\",documento_encabezado.nombreFile clipped
LET comando = vmover,nombrefile CLIPPED," ",ruta_originales CLIPPED,vfc,documento_encabezado.nombreFile clipped
DISPLAY "comando ",comando
RUN comando
@@ -187,6 +251,14 @@ END IF
LET tipoRecepcion = "normal32"
LET out=om.XmlWriter.createFileWriter(nombreFile)
IF out IS NULL THEN
# No se pudo crear el XML (RUTA_XML_ORIGINALES vacia, carpeta inexistente,
# sin "/" al final o sin permiso de escritura): avisa en vez de caerse
LET respuesta = "No se pudo crear el XML en: ", nombreFile,
" -- revise la variable RUTA_XML_ORIGINALES (carpeta existe, termina en / y tiene permiso de escritura)"
CALL fgl_winmessage("e-CF",respuesta,"stop")
RETURN NULL,respuesta,NULL,"500"
END IF
LET a=om.SaxAttributes.create()
CALL out.startDocument()
@@ -229,6 +301,14 @@ END IF
LET tipoRecepcion = "normal32"
LET out=om.XmlWriter.createFileWriter(nombreFile)
IF out IS NULL THEN
# No se pudo crear el XML (RUTA_XML_ORIGINALES vacia, carpeta inexistente,
# sin "/" al final o sin permiso de escritura): avisa en vez de caerse
LET respuesta = "No se pudo crear el XML en: ", nombreFile,
" -- revise la variable RUTA_XML_ORIGINALES (carpeta existe, termina en / y tiene permiso de escritura)"
CALL fgl_winmessage("e-CF",respuesta,"stop")
RETURN NULL,respuesta,NULL,"500"
END IF
LET a=om.SaxAttributes.create()
CALL out.startDocument()
@@ -245,7 +325,7 @@ END IF
LET tipoRecepcion = "normal32"
END IF
CALL procesoEncf(nombrefile,"test",tipoRecepcion,xsucid,xbodega,xoperacion,' ')
CALL procesoEncf(nombrefile,ambiente() CLIPPED,tipoRecepcion,xsucid,xbodega,xoperacion,' ')
RETURNING phash,respuesta,codigo
{ LET inserta_log = "INSERT INTO exterior.dbo.ncf_log
@@ -335,18 +415,7 @@ DISPLAY "qui en el genera ",r_documento_encabezado.tipoPago
CALL out.startElement("TablaFormasPago",NULL)
CALL out.startElement("FormaDePago",NULL)
CALL out.startElement("FormaPago",null)
CALL out.characters(r_documento_encabezado.FormadePAgo clipped)
CALL out.endElement("FormaPago")
CALL out.startElement("MontoPago",null)
CALL out.characters(r_documento_encabezado.montoPago)
CALL out.endElement("MontoPago")
CALL out.endElement("FormaDePago")
CALL emite_formasdepago()
CALL out.endElement("TablaFormasPago")
@@ -647,18 +716,7 @@ CALL out.startElement("Encabezado",a)
CALL out.startElement("TablaFormasPago",NULL)
CALL out.startElement("FormaDePago",NULL)
CALL out.startElement("FormaPago",null)
CALL out.characters(r_documento_encabezado.FormadePAgo clipped)
CALL out.endElement("FormaPago")
CALL out.startElement("MontoPago",null)
CALL out.characters(r_documento_encabezado.montoPago)
CALL out.endElement("MontoPago")
CALL out.endElement("FormaDePago")
CALL emite_formasdepago()
CALL out.endElement("TablaFormasPago")
END IF
@@ -800,18 +858,7 @@ FUNCTION resumen32()
CALL out.endElement("TipoPago")
CALL out.startElement("TablaFormasPago",NULL)
CALL out.startElement("FormaDePago",NULL)
CALL out.startElement("FormaPago",null)
CALL out.characters(r_documento_encabezado.FormadePAgo clipped)
CALL out.endElement("FormaPago")
CALL out.startElement("MontoPago",null)
CALL out.characters(r_documento_encabezado.montoPago)
CALL out.endElement("MontoPago")
CALL out.endElement("FormaDePago")
CALL emite_formasdepago()
CALL out.endElement("TablaFormasPago")