Files
2026-09-22 20:38:51 -04:00

1069 lines
38 KiB
Plaintext

IMPORT util
IMPORT security
IMPORT os
import com
import xml
DEFINE montoFactura DECIMAL(18,2)
DEFINE xfacturainterna int
DEFINE a om.SaxAttributes
DEFINE doc xml.DomDocument
DEFINE out om.SaxDocumentHandler,
i INT,
ruta_originales,ruta_firmados,filexml,inserta_log STRING,
fechaFirma DATETIME YEAR TO SECOND
DEFINE buf base.StringBuffer
DEFINE r_documento_encabezado RECORD
tipoEcf,eNcf,indicadorMontoGravado,tipoPago,fechaLimitePago,FormadePAgo,montoPago,FechaVencimientoSecuencia,
rncEmisor,razonSocialEmisor,direccionEmisor,Municipio,Provincia,telefonoEmisor,
correoEmisor,webSite,codigoVendedor,numeroFacturaInterna,numeroPedidoInterno,
fechaEmision,rncComprador,razonSocialComprador,montoGravadoTotal,montoGravadoI1,
montoGravadoI2,montoGravadoI3,montoExento,itbis1,itbis2,itbis3,totalItbis,totalItbis1,
totalItbis2,totalItbis3,montoTotal,tipoIngreso,terminoPago,TipoCuentaPago,NumeroCuentaPago,IdentificadorExtranjero,
contactoComprador,CorreoComprador,DireccionComprador,MunicipioComprador,ProvinciaComprador,FechaEntrega,FechaOrdenCompra,
NumeroOrdenCompra,CodigoInternoComprador,
nombreFile,IndicadorNotaCredito,NCFmodificado,codigoModificacion,fechaNCFmodificado STRING
END RECORD,
comando,nombreFile,nombrefile2,comando2 STRING
DEFINE r_documento_Detalle DYNAMIC ARRAY OF RECORD
indicadorFacturacion,nombreItem,indicadorBienoServicio,cantidadItem,precioUnitarioItem,
montoItem STRING,
DescripcionItem VARCHAR(1000),
NumeroLinea int
END RECORD ,
hasr varchar(10)
FUNCTION generafile(documento_encabezado,documento_Detalle,xsucid,xbodega,xoperacion)
DEFINE documento_encabezado RECORD
tipoEcf,eNcf,indicadorMontoGravado,tipoPago,fechaLimitePago,FormadePAgo,montoPago,FechaVencimientoSecuencia,
rncEmisor,razonSocialEmisor,direccionEmisor,Municipio,Provincia,telefonoEmisor,
correoEmisor,webSite,codigoVendedor,numeroFacturaInterna,numeroPedidoInterno,
fechaEmision,rncComprador,razonSocialComprador,montoGravadoTotal,montoGravadoI1,
montoGravadoI2,montoGravadoI3,montoExento,itbis1,itbis2,itbis3,totalItbis,totalItbis1,
totalItbis2,totalItbis3,montoTotal,tipoIngreso,terminoPago,TipoCuentaPago,NumeroCuentaPago,IdentificadorExtranjero,
contactoComprador,CorreoComprador,DireccionComprador,MunicipioComprador,ProvinciaComprador,FechaEntrega,FechaOrdenCompra,
NumeroOrdenCompra,CodigoInternoComprador,
nombreFile,IndicadorNotaCredito,NCFmodificado,codigoModificacion,fechaNCFmodificado STRING
END RECORD,
chFechaFirma VARCHAR(19),
tipoRecepcion VARCHAR(50),
xoperacion VARCHAR(30),
xsucid,xbodega INT
DEFINE documento_Detalle DYNAMIC ARRAY OF RECORD
indicadorFacturacion,nombreItem,indicadorBienoServicio,cantidadItem,precioUnitarioItem,
montoItem STRING,
DescripcionItem VARCHAR(1000),
NumeroLinea int
END RECORD,
respuesta,codigo STRING,
phash,ohash VARCHAR(10)
LET ohash = NULL
LET ruta_originales= fgl_getenv("RUTA_XML_ORIGINALES")
#LET ruta_originales = '.\\filesXML\\ncf31\\'
# LET documento_encabezado.nombreFile ='130337391E310000000001.XML'
LET nombreFile = ruta_originales,documento_encabezado.nombreFile CLIPPED
LET r_documento_encabezado.* = documento_encabezado.*
LET r_documento_Detalle = documento_detalle
LET montoFactura =r_documento_encabezado.montoTotal
LET out=om.XmlWriter.createFileWriter(nombreFile)
LET a=om.SaxAttributes.create()
CALL out.startDocument()
CALL a.addAttribute("xmlns:xs","http://www.w3.org/2001/XMLSchema")
IF r_documento_encabezado.tipoEcf <> '32' THEN
LET tipoRecepcion = "normal"
CALL out.startElement("ECF",a)
CALL a.clear()
CALL encabezado()
CALL detalle()
IF r_documento_encabezado.tipoEcf = 34 OR r_documento_encabezado.tipoEcf = 33 THEN
CALL otrosTags()
END IF
END IF
IF r_documento_encabezado.tipoEcf = '32' AND montoFactura > 250000 THEN
LET tipoRecepcion = "normal"
CALL out.startElement("ECF",a)
CALL a.clear()
CALL encabezado()
CALL detalle()
END IF
IF r_documento_encabezado.tipoEcf = '32' AND montoFactura < 250000 THEN
LET tipoRecepcion = "consumo"
CALL out.startElement("ECF",a)
CALL a.clear()
CALL encabezado32()
CALL detalle()
END IF
# IF xoperacion <> 'modificar' THEN
LET fechaFirma = CURRENT
LET chFechaFirma = util.Datetime.format(fechaFirma, "%d-%m-%Y %H:%M:%S" )
CALL out.startElement("FechaHoraFirma",null)
CALL out.characters(chFechaFirma)
CALL out.endElement("FechaHoraFirma")
# ELSE
# SELECT fechaFirmaDigital INTO fechaFirma FROM vetb00002
# WHERE factura = r_documento_encabezado.numeroFacturaInterna AND
# sucid = xsucid
# LET chFechaFirma = util.Datetime.format(fechaFirma, "%d-%m-%Y %H:%M:%S" )
# CALL out.startElement("FechaHoraFirma",null)
# CALL out.characters(chFechaFirma)
# CALL out.endElement("FechaHoraFirma")
# END IF
IF r_documento_encabezado.tipoEcf <> '32' THEN
CALL out.endElement("ECF")
END IF
IF r_documento_encabezado.tipoEcf = '32' AND montoFactura > 250000 THEN
LET tipoRecepcion = "normal"
CALL out.endElement("ECF")
END IF
IF r_documento_encabezado.tipoEcf = '32' AND montoFactura < 250000 THEN
LET tipoRecepcion = "normal32"
CALL out.endElement("ECF")
END IF
CALL out.endDocument()
LET hasr=NULL
IF r_documento_encabezado.tipoEcf = '32' AND montoFactura < 250000 THEN
LET ruta_firmados = fgl_getenv("RUTA_XML_FIRMADOS")
CALL firmadocumento(nombreFile)
LET filexml = ruta_firmados CLIPPED,os.Path.baseName(nombreFile)
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
DISPLAY "comando 2 ",ohash
RUN comando2
LET fechaFirma = CURRENT
LET chFechaFirma = util.Datetime.format(fechaFirma, "%d-%m-%Y %H:%M:%S" )
LET hasr=ohash clipped
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
DISPLAY "comando ",comando
RUN comando
LET nombreFile = ruta_originales,documento_encabezado.nombreFile CLIPPED
LET tipoRecepcion = "normal32"
LET out=om.XmlWriter.createFileWriter(nombreFile)
LET a=om.SaxAttributes.create()
CALL out.startDocument()
CALL a.addAttribute("xmlns:xs","http://www.w3.org/2001/XMLSchema")
CALL resumen32() RETURNING ohash
DISPLAY "ohash 2",ohash
CALL out.endDocument()
END IF{
IF r_documento_encabezado.tipoEcf = '32' AND montoFactura < 250000 THEN
LET ruta_firmados = fgl_getenv("RUTA_XML_FIRMADOS")
CALL firmadocumento(nombreFile)
LET filexml = ruta_firmados CLIPPED,os.Path.baseName(nombreFile)
CALL gethash(filexml) RETURNING ohash,fechaFirma,xfacturainterna
LET nombrefile2=ruta_firmados,documento_encabezado.nombreFile
LET comando2 = "mv ",nombrefile2 CLIPPED," ",ruta_firmados CLIPPED,"FC/",documento_encabezado.nombreFile clipped
DISPLAY "comando 2 ",comando2
RUN comando2
LET fechaFirma = CURRENT
LET chFechaFirma = util.Datetime.format(fechaFirma, "%d-%m-%Y %H:%M:%S" )
LET hasr=ohash clipped
DISPLAY "hash2:aqui es ",ohash,fechafirma
END IF
IF r_documento_encabezado.tipoEcf = '32' AND montoFactura < 250000 THEN
LET comando = "mv ",nombrefile CLIPPED," ",ruta_originales CLIPPED,"FC/"
DISPLAY "comando aqui ",comando
RUN comando
LET nombreFile = ruta_originales,documento_encabezado.nombreFile CLIPPED
DISPLAY "nombre file23 ",nombrefile
LET tipoRecepcion = "normal32"
LET out=om.XmlWriter.createFileWriter(nombreFile)
LET a=om.SaxAttributes.create()
CALL out.startDocument()
CALL a.addAttribute("xmlns:xs","http://www.w3.org/2001/XMLSchema")
CALL resumen32() RETURNING ohash
CALL out.endDocument()
END IF}
IF r_documento_encabezado.tipoEcf = '32' AND montoFactura < 250000 THEN
LET tipoRecepcion = "normal32"
END IF
CALL procesoEncf(nombrefile,"test",tipoRecepcion,xsucid,xbodega,xoperacion,' ') -- decomarmol: ambiente test (revisar antes de prod)
RETURNING phash,respuesta,codigo
{ LET inserta_log = "INSERT INTO exterior.dbo.ncf_log
(ncf,fecha,fechafirma,numerofactura,lugar,hash)
values (?,getdate(),?,?,?,?)"
PREPARE inserta_cmd FROM inserta_log
IF LENGTH(hasr CLIPPED)=6 THEN
LET phash = ohash CLIPPED
END IF
EXECUTE inserta_cmd USING nombrefile,fechafirma,"0","en generafile",phash}
IF hasr IS NOT NULL THEN
LET phash = ohash CLIPPED
DISPLAY "dentro",phash
END IF
DISPLAY "fuera",phash," hasr ",hasr
RETURN phash,respuesta,fechafirma,codigo
END FUNCTION
FUNCTION encabezado()
CALL out.startElement("Encabezado",a)
CALL out.startElement("Version",null)
CALL out.characters("1.0")
CALL out.endElement("Version")
CALL a.clear()
CALL out.startElement("IdDoc",NULL)
CALL out.startElement("TipoeCF",null)
CALL out.characters(r_documento_encabezado.tipoEcf CLIPPED)
CALL out.endElement("TipoeCF")
CALL out.startElement("eNCF",NULL)
LET r_documento_encabezado.eNcf = r_documento_encabezado.eNcf
CALL out.characters(r_documento_encabezado.eNcf)
CALL out.endElement("eNCF")
IF r_documento_encabezado.tipoEcf <> '32' AND r_documento_encabezado.tipoEcf <> '34' THEN
#IF r_documento_encabezado.tipoEcf <> '32' THEN
IF r_documento_encabezado.FechaVencimientoSecuencia IS NOT NULL THEN
CALL out.startElement("FechaVencimientoSecuencia",null)
CALL out.characters(r_documento_encabezado.FechaVencimientoSecuencia)
CALL out.endElement("FechaVencimientoSecuencia")
END IF
END IF
IF r_documento_encabezado.IndicadorNotaCredito IS NOT NULL THEN
CALL out.startElement("IndicadorNotaCredito",NULL)
CALL out.characters(r_documento_encabezado.IndicadorNotaCredito)
CALL out.endElement("IndicadorNotaCredito")
END IF
IF r_documento_encabezado.tipoEcf <> '44' THEN
IF r_documento_encabezado.indicadorMontoGravado IS NOT NULL THEN
CALL out.startElement("IndicadorMontoGravado",null)
CALL out.characters(r_documento_encabezado.indicadorMontoGravado)
CALL out.endElement("IndicadorMontoGravado")
END IF
END IF
IF r_documento_encabezado.tipoEcf = '32' AND montoFactura < 250000 THEN
LET r_Documento_encabezado.tipoIngreso = '02'
END IF
IF r_documento_encabezado.tipoEcf <> '47' THEN
CALL out.startElement("TipoIngresos",NULL)
CALL out.characters(r_documento_encabezado.tipoIngreso)
CALL out.endElement("TipoIngresos")
END IF
DISPLAY "qui en el genera ",r_documento_encabezado.tipoPago
CALL out.startElement("TipoPago",NULL)
CALL out.characters(r_documento_encabezado.tipoPago clipped)
CALL out.endElement("TipoPago")
IF r_documento_encabezado.fechaLimitePago IS NOT NULL THEN
CALL out.startElement("FechaLimitePago",null)
CALL out.characters(r_documento_encabezado.fechaLimitePago)
CALL out.endElement("FechaLimitePago")
END IF
IF r_documento_encabezado.terminoPago IS NOT NULL THEN
CALL out.startElement("TerminoPago",null)
CALL out.characters(r_documento_encabezado.terminoPago)
CALL out.endElement("TerminoPago")
END IF
# AQUI VA LA TABLA FORMA DE PAGO, ESTO NO ES OBLIGATORIO
# IF r_documento_encabezado.tipoEcf <> '32' AND r_documento_encabezado.tipoEcf <> 34 THEN
IF r_documento_encabezado.tipoEcf <> 34 AND r_documento_encabezado.tipoEcf <> 33 THEN
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 out.endElement("TablaFormasPago")
END IF
#----------------------------------------------------------------------------
IF r_documento_encabezado.TipoCuentaPago IS NOT NULL THEN
IF r_documento_encabezado.tipoEcf <> '32' THEN
CALL out.startElement("TipoCuentaPago",null)
CALL out.characters(r_documento_encabezado.TipoCuentaPago)
CALL out.endElement("TipoCuentaPago")
END IF
END IF
CALL out.endElement("IdDoc")
CALL out.startElement("Emisor",NULL)
CALL out.startElement("RNCEmisor",NULL)
CALL out.characters(r_documento_encabezado.rncEmisor)
CALL out.endElement("RNCEmisor")
CALL out.startElement("RazonSocialEmisor",NULL)
CALL out.characters(r_documento_encabezado.razonSocialEmisor)
CALL out.endElement("RazonSocialEmisor")
CALL out.startElement("NombreComercial",NULL)
CALL out.characters(r_documento_encabezado.razonSocialEmisor)
CALL out.endElement("NombreComercial")
IF r_documento_encabezado.direccionEmisor IS NOT NULL THEN
CALL out.startElement("DireccionEmisor",NULL)
CALL out.characters(r_documento_encabezado.direccionEmisor)
CALL out.endElement("DireccionEmisor")
END IF
IF r_documento_encabezado.Municipio IS NOT NULL THEN
CALL out.startElement("Municipio",NULL)
CALL out.characters(r_documento_encabezado.Municipio)
CALL out.endElement("Municipio")
END IF
IF r_documento_encabezado.Provincia IS NOT NULL THEN
CALL out.startElement("Provincia",NULL)
CALL out.characters(r_documento_encabezado.Provincia)
CALL out.endElement("Provincia")
END IF
IF r_documento_encabezado.correoEmisor IS NOT NULL THEN
CALL out.startElement("CorreoEmisor",NULL)
CALL out.characters(r_documento_encabezado.correoEmisor)
CALL out.endElement("CorreoEmisor")
END IF
IF r_documento_encabezado.codigoVendedor IS NOT NULL THEN
CALL out.startElement("CodigoVendedor",NULL)
CALL out.characters(r_documento_encabezado.codigoVendedor)
CALL out.endElement("CodigoVendedor")
END IF
IF r_documento_encabezado.numeroFacturaInterna IS NOT NULL THEN
CALL out.startElement("NumeroFacturaInterna",NULL)
CALL out.characters(r_documento_encabezado.numeroFacturaInterna)
CALL out.endElement("NumeroFacturaInterna")
END IF
IF r_documento_encabezado.numeroPedidoInterno IS NOT NULL THEN
CALL out.startElement("NumeroPedidoInterno",NULL)
CALL out.characters(r_documento_encabezado.numeroPedidoInterno)
CALL out.endElement("NumeroPedidoInterno")
END IF
CALL out.startElement("FechaEmision",NULL)
CALL out.characters(r_documento_encabezado.fechaEmision)
CALL out.endElement("FechaEmision")
CALL out.endElement("Emisor")
CALL out.startElement("Comprador",NULL)
IF r_documento_encabezado.rncComprador IS NOT NULL OR r_documento_encabezado.rncComprador <> ' ' THEN
CALL out.startElement("RNCComprador",NULL)
CALL out.characters(r_documento_encabezado.rncComprador)
CALL out.endElement("RNCComprador")
ELSE
# IF r_documento_encabezado.IdentificadorExtranjero IS NOT NULL THEN
CALL out.startElement("IdentificadorExtranjero",NULL)
CALL out.characters(r_documento_encabezado.IdentificadorExtranjero)
CALL out.endElement("IdentificadorExtranjero")
# END IF
END IF
CALL out.startElement("RazonSocialComprador",NULL)
CALL out.characters(r_documento_encabezado.razonSocialComprador)
CALL out.endElement("RazonSocialComprador")
{CALL out.startElement("ContactoComprador",NULL)
CALL out.characters(r_documento_encabezado.contactoComprador)
CALL out.endElement("ContactoComprador")
}
IF r_documento_encabezado.CorreoComprador IS NOT NULL THEN
CALL out.startElement("CorreoComprador",NULL)
CALL out.characters(r_documento_encabezado.CorreoComprador CLIPPED)
CALL out.endElement("CorreoComprador")
END IF
IF r_documento_encabezado.DireccionComprador IS NOT NULL AND LENGTH(r_documento_encabezado.DireccionComprador) > 5 THEN
{ LET buf = base.StringBuffer.create()
CALL buf.append(r_documento_encabezado.DireccionComprador)
CALL buf.replace(",", " ", 0)}
CALL out.startElement("DireccionComprador",NULL)
CALL out.characters(r_documento_encabezado.DireccionComprador CLIPPED)
CALL out.endElement("DireccionComprador")
END IF
IF r_documento_encabezado.MunicipioComprador IS NOT NULL OR r_documento_encabezado.MunicipioComprador <> ' ' THEN
CALL out.startElement("MunicipioComprador",NULL)
CALL out.characters(r_documento_encabezado.MunicipioComprador)
CALL out.endElement("MunicipioComprador")
END IF
IF r_documento_encabezado.ProvinciaComprador IS NOT NULL OR r_documento_encabezado.ProvinciaComprador <> ' ' THEN
CALL out.startElement("ProvinciaComprador",NULL)
CALL out.characters(r_documento_encabezado.ProvinciaComprador)
CALL out.endElement("ProvinciaComprador")
END IF
CALL out.endElement("Comprador")
CALL out.startElement("Totales",NULL)
IF r_documento_encabezado.tipoEcf <> '44' THEN
IF r_documento_encabezado.montoGravadoTotal IS NOT NULL THEN
CALL out.startElement("MontoGravadoTotal",NULL)
CALL out.characters(r_documento_encabezado.montoGravadoTotal)
CALL out.endElement("MontoGravadoTotal")
END IF
IF r_documento_encabezado.montoGravadoI1 IS NOT NULL THEN
CALL out.startElement("MontoGravadoI1",NULL)
CALL out.characters(r_documento_encabezado.montoGravadoI1)
CALL out.endElement("MontoGravadoI1")
END IF
IF r_documento_encabezado.montoGravadoI2 <> '0' THEN
CALL out.startElement("MontoGravadoI2",NULL)
CALL out.characters(r_documento_encabezado.montoGravadoI2)
CALL out.endElement("MontoGravadoI2")
#END IF
END IF
IF r_documento_encabezado.montoGravadoI3 IS NOT NULL
AND r_documento_encabezado.montoGravadoI3 CLIPPED <> ''
AND r_documento_encabezado.montoGravadoI3 <> '0'
AND r_documento_encabezado.montoGravadoI3 <> '.00'
AND r_documento_encabezado.montoGravadoI3 <> '0.00' THEN
CALL out.startElement("MontoGravadoI3",NULL)
CALL out.characters(r_documento_encabezado.montoGravadoI3)
CALL out.endElement("MontoGravadoI3")
END IF
# MontoExento va aqui (despues de MontoGravado, antes de ITBIS1) para todos los tipos
IF r_documento_encabezado.montoExento IS NOT NULL THEN
CALL out.startElement("MontoExento",NULL)
CALL out.characters(r_documento_encabezado.montoExento)
CALL out.endElement("MontoExento")
END IF
IF r_documento_encabezado.tipoEcf <> '46' AND r_documento_encabezado.itbis1 IS NOT NULL THEN
CALL out.startElement("ITBIS1",NULL)
CALL out.characters(r_documento_encabezado.itbis1)
CALL out.endElement("ITBIS1")
END IF
IF r_documento_encabezado.itbis2 <> '0' THEN
CALL out.startElement("ITBIS2",NULL)
CALL out.characters(r_documento_encabezado.itbis2)
CALL out.endElement("ITBIS2")
END IF
DISPLAY " r_documento_encabezado.montoGravadoI3 ",r_documento_encabezado.montoGravadoI3
IF r_documento_encabezado.montoGravadoI3 IS NOT NULL
AND r_documento_encabezado.montoGravadoI3 CLIPPED <> ''
AND r_documento_encabezado.montoGravadoI3 <> '0'
AND r_documento_encabezado.montoGravadoI3 <> '.00'
AND r_documento_encabezado.montoGravadoI3 <> '0.00' THEN
CALL out.startElement("ITBIS3",NULL)
CALL out.characters(r_documento_encabezado.itbis3)
CALL out.endElement("ITBIS3")
END IF
IF r_documento_encabezado.totalItbis IS NOT NULL THEN
CALL out.startElement("TotalITBIS",NULL)
CALL out.characters(r_documento_encabezado.totalItbis)
CALL out.endElement("TotalITBIS")
END IF
IF r_documento_encabezado.tipoEcf <> '46' THEN
IF r_documento_encabezado.totalItbis1 <> '.00' THEN
CALL out.startElement("TotalITBIS1",NULL)
CALL out.characters(r_documento_encabezado.totalItbis1)
CALL out.endElement("TotalITBIS1")
END IF
END IF
IF r_documento_encabezado.totalItbis2 <> '0' THEN
CALL out.startElement("TotalITBIS2",NULL)
CALL out.characters(r_documento_encabezado.totalItbis2)
CALL out.endElement("TotalITBIS2")
END IF
IF r_documento_encabezado.montoGravadoI3 IS NOT NULL
AND r_documento_encabezado.montoGravadoI3 CLIPPED <> ''
AND r_documento_encabezado.montoGravadoI3 <> '0'
AND r_documento_encabezado.montoGravadoI3 <> '.00'
AND r_documento_encabezado.montoGravadoI3 <> '0.00' THEN
CALL out.startElement("TotalITBIS3",NULL)
CALL out.characters(r_documento_encabezado.totalItbis3)
CALL out.endElement("TotalITBIS3")
END IF
END IF
IF r_documento_encabezado.tipoEcf = '44' THEN
IF r_documento_encabezado.montoExento IS NOT NULL THEN
CALL out.startElement("MontoExento",NULL)
CALL out.characters(r_documento_encabezado.montoExento)
CALL out.endElement("MontoExento")
END IF
END IF
CALL out.startElement("MontoTotal",NULL)
CALL out.characters(r_documento_encabezado.montoTotal)
CALL out.endElement("MontoTotal")
CALL out.endElement("Totales")
CALL out.endElement("Encabezado")
END FUNCTION
FUNCTION detalle()
CALL out.startElement("DetallesItems",NULL)
FOR i =1 TO r_documento_detalle.getLength()
CALL out.startElement("Item",NULL)
CALL out.startElement("NumeroLinea",NULL)
CALL out.characters(i USING "<<<")
CALL out.endElement("NumeroLinea")
CALL out.startElement("IndicadorFacturacion",NULL)
CALL out.characters(r_documento_detalle[i].indicadorFacturacion)
CALL out.endElement("IndicadorFacturacion")
DISPLAY "nombreitem ",r_documento_detalle[i].nombreItem
IF r_documento_detalle[i].nombreItem IS NULL THEN
LET r_documento_detalle[i].nombreItem = 'NO TIENE'
END IF
CALL out.startElement("NombreItem",NULL)
CALL out.characters(r_documento_detalle[i].nombreItem)
CALL out.endElement("NombreItem")
IF r_documento_detalle[i].indicadorBienoServicio IS NULL THEN
LET r_documento_detalle[i].indicadorBienoServicio = 2
END IF
CALL out.startElement("IndicadorBienoServicio",NULL)
CALL out.characters(r_documento_detalle[i].indicadorBienoServicio)
CALL out.endElement("IndicadorBienoServicio")
CALL out.startElement("CantidadItem",NULL)
CALL out.characters(r_documento_detalle[i].cantidadItem)
CALL out.endElement("CantidadItem")
CALL out.startElement("PrecioUnitarioItem",NULL)
CALL out.characters(r_documento_detalle[i].precioUnitarioItem)
CALL out.endElement("PrecioUnitarioItem")
CALL out.startElement("MontoItem",NULL)
CALL out.characters(r_documento_detalle[i].montoItem)
CALL out.endElement("MontoItem")
CALL out.endElement("Item")
END FOR
CALL out.endElement("DetallesItems")
END FUNCTION
FUNCTION encabezado32()
CALL out.startElement("Encabezado",a)
CALL out.startElement("Version",null)
CALL out.characters("1.0")
CALL out.endElement("Version")
CALL out.startElement("IdDoc",NULL)
CALL out.startElement("TipoeCF",null)
CALL out.characters(r_documento_encabezado.tipoEcf CLIPPED)
CALL out.endElement("TipoeCF")
CALL out.startElement("eNCF",NULL)
LET r_documento_encabezado.eNcf = r_documento_encabezado.eNcf
CALL out.characters(r_documento_encabezado.eNcf)
CALL out.endElement("eNCF")
CALL out.startElement("TipoIngresos",null)
CALL out.characters(r_documento_encabezado.tipoIngreso)
CALL out.endElement("TipoIngresos")
CALL out.startElement("TipoPago",null)
CALL out.characters(r_documento_encabezado.tipoPago clipped)
CALL out.endElement("TipoPago")
IF r_documento_encabezado.terminoPago IS NOT NULL THEN
CALL out.startElement("TerminoPago",null)
CALL out.characters(r_documento_encabezado.terminoPago)
CALL out.endElement("TerminoPago")
END IF
IF r_documento_encabezado.tipoPago IS NOT NULL THEN
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 out.endElement("TablaFormasPago")
END IF
CALL out.endElement("IdDoc")
CALL out.startElement("Emisor",NULL)
CALL out.startElement("RNCEmisor",NULL)
CALL out.characters(r_documento_encabezado.rncEmisor)
CALL out.endElement("RNCEmisor")
CALL out.startElement("RazonSocialEmisor",NULL)
CALL out.characters(r_documento_encabezado.razonSocialEmisor)
CALL out.endElement("RazonSocialEmisor")
CALL out.startElement("NombreComercial",NULL)
CALL out.characters(r_documento_encabezado.razonSocialEmisor)
CALL out.endElement("NombreComercial")
CALL out.startElement("DireccionEmisor",NULL)
CALL out.characters(r_documento_encabezado.direccionEmisor)
CALL out.endElement("DireccionEmisor")
CALL out.startElement("Municipio",NULL)
CALL out.characters(r_documento_encabezado.Municipio)
CALL out.endElement("Municipio")
CALL out.startElement("Provincia",NULL)
CALL out.characters(r_documento_encabezado.Provincia)
CALL out.endElement("Provincia")
CALL out.startElement("CorreoEmisor",NULL)
CALL out.characters(r_documento_encabezado.correoEmisor)
CALL out.endElement("CorreoEmisor")
CALL out.startElement("CodigoVendedor",NULL)
CALL out.characters(r_documento_encabezado.codigoVendedor)
CALL out.endElement("CodigoVendedor")
CALL out.startElement("NumeroFacturaInterna",NULL)
CALL out.characters(r_documento_encabezado.numeroFacturaInterna)
CALL out.endElement("NumeroFacturaInterna")
CALL out.startElement("FechaEmision",NULL)
CALL out.characters(r_documento_encabezado.fechaEmision)
CALL out.endElement("FechaEmision")
CALL out.endElement("Emisor")
CALL out.startElement("Comprador",NULL)
IF r_documento_encabezado.rncComprador IS NOT NULL THEN
CALL out.startElement("RNCComprador",NULL)
CALL out.characters(r_documento_encabezado.rncComprador)
CALL out.endElement("RNCComprador")
ELSE
CALL out.startElement("IdentificadorExtranjero",NULL)
CALL out.characters(r_documento_encabezado.IdentificadorExtranjero)
CALL out.endElement("IdentificadorExtranjero")
END IF
CALL out.startElement("RazonSocialComprador",NULL)
CALL out.characters(r_documento_encabezado.razonSocialComprador)
CALL out.endElement("RazonSocialComprador")
CALL out.endElement("Comprador")
CALL out.startElement("Totales",NULL)
IF r_documento_encabezado.montoGravadoTotal IS NOT NULL THEN
CALL out.startElement("MontoGravadoTotal",NULL)
CALL out.characters(r_documento_encabezado.montoGravadoTotal)
CALL out.endElement("MontoGravadoTotal")
END IF
IF r_documento_encabezado.montoGravadoI1 IS NOT NULL THEN
CALL out.startElement("MontoGravadoI1",NULL)
CALL out.characters(r_documento_encabezado.montoGravadoI1)
CALL out.endElement("MontoGravadoI1")
END IF
IF r_documento_encabezado.montoGravadoI3 IS NOT NULL
AND r_documento_encabezado.montoGravadoI3 <> '0'
AND r_documento_encabezado.montoGravadoI3 <> '.00'
AND r_documento_encabezado.montoGravadoI3 <> '0.00' THEN
CALL out.startElement("MontoGravadoI3",NULL)
CALL out.characters(r_documento_encabezado.montoGravadoI3)
CALL out.endElement("MontoGravadoI3")
END IF
IF r_documento_encabezado.montoExento IS NOT NULL THEN
CALL out.startElement("MontoExento",NULL)
CALL out.characters(r_documento_encabezado.montoExento)
CALL out.endElement("MontoExento")
END IF
IF r_documento_encabezado.totalItbis IS NOT NULL THEN
CALL out.startElement("TotalITBIS",NULL)
CALL out.characters(r_documento_encabezado.totalItbis)
CALL out.endElement("TotalITBIS")
END IF
IF r_documento_encabezado.totalItbis1 IS NOT NULL AND r_documento_encabezado.totalItbis1 <> '.00' THEN
CALL out.startElement("TotalITBIS1",NULL)
CALL out.characters(r_documento_encabezado.totalItbis1)
CALL out.endElement("TotalITBIS1")
END IF
CALL out.startElement("MontoTotal",NULL)
CALL out.characters(r_documento_encabezado.montoTotal)
CALL out.endElement("MontoTotal")
CALL out.endElement("Totales")
CALL out.endElement("Encabezado")
END FUNCTION
FUNCTION resumen32()
DEFINE fchash VARCHAR(6),
xhash,xfechafirmadigital,xfacturainterna STRING
CALL out.startElement("RFCE",a)
CALL out.startElement("Encabezado",a)
CALL out.startElement("Version",null)
CALL out.characters("1.0")
CALL out.endElement("Version")
CALL a.clear()
CALL out.startElement("IdDoc",NULL)
CALL out.startElement("TipoeCF",null)
CALL out.characters(r_documento_encabezado.tipoEcf CLIPPED)
CALL out.endElement("TipoeCF")
CALL out.startElement("eNCF",NULL)
LET r_documento_encabezado.eNcf = r_documento_encabezado.eNcf
CALL out.characters(r_documento_encabezado.eNcf)
CALL out.endElement("eNCF")
CALL out.startElement("TipoIngresos",null)
CALL out.characters(r_documento_encabezado.tipoIngreso)
CALL out.endElement("TipoIngresos")
CALL out.startElement("TipoPago",null)
CALL out.characters(r_documento_encabezado.tipoPago clipped)
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 out.endElement("TablaFormasPago")
{
IF r_documento_encabezado.terminoPago IS NOT NULL THEN
CALL out.startElement("TerminoPago",null)
CALL out.characters(r_documento_encabezado.terminoPago)
CALL out.endElement("TerminoPago")
END IF}
CALL out.endElement("IdDoc")
CALL out.startElement("Emisor",NULL)
CALL out.startElement("RNCEmisor",NULL)
CALL out.characters(r_documento_encabezado.rncEmisor)
CALL out.endElement("RNCEmisor")
CALL out.startElement("RazonSocialEmisor",NULL)
CALL out.characters(r_documento_encabezado.razonSocialEmisor)
CALL out.endElement("RazonSocialEmisor")
CALL out.startElement("FechaEmision",NULL)
CALL out.characters(r_documento_encabezado.fechaEmision)
CALL out.endElement("FechaEmision")
CALL out.endElement("Emisor")
CALL out.startElement("Comprador",NULL)
IF r_documento_encabezado.rncComprador IS NOT NULL THEN
CALL out.startElement("RNCComprador",NULL)
CALL out.characters(r_documento_encabezado.rncComprador)
CALL out.endElement("RNCComprador")
ELSE
CALL out.startElement("IdentificadorExtranjero",NULL)
CALL out.characters(r_documento_encabezado.IdentificadorExtranjero)
CALL out.endElement("IdentificadorExtranjero")
END IF
CALL out.startElement("RazonSocialComprador",NULL)
CALL out.characters(r_documento_encabezado.razonSocialComprador)
CALL out.endElement("RazonSocialComprador")
CALL out.endElement("Comprador")
CALL out.startElement("Totales",NULL)
IF r_documento_encabezado.montoGravadoTotal IS NOT NULL THEN
CALL out.startElement("MontoGravadoTotal",NULL)
CALL out.characters(r_documento_encabezado.montoGravadoTotal)
CALL out.endElement("MontoGravadoTotal")
END IF
IF r_documento_encabezado.montoGravadoI1 IS NOT NULL THEN
CALL out.startElement("MontoGravadoI1",NULL)
CALL out.characters(r_documento_encabezado.montoGravadoI1)
CALL out.endElement("MontoGravadoI1")
END IF
IF r_documento_encabezado.montoGravadoI3 IS NOT NULL
AND r_documento_encabezado.montoGravadoI3 <> '0'
AND r_documento_encabezado.montoGravadoI3 <> '.00'
AND r_documento_encabezado.montoGravadoI3 <> '0.00' THEN
CALL out.startElement("MontoGravadoI3",NULL)
CALL out.characters(r_documento_encabezado.montoGravadoI3)
CALL out.endElement("MontoGravadoI3")
END IF
IF r_documento_encabezado.montoExento IS NOT NULL THEN
CALL out.startElement("MontoExento",NULL)
CALL out.characters(r_documento_encabezado.montoExento)
CALL out.endElement("MontoExento")
END IF
IF r_documento_encabezado.totalItbis IS NOT NULL THEN
CALL out.startElement("TotalITBIS",NULL)
CALL out.characters(r_documento_encabezado.totalItbis)
CALL out.endElement("TotalITBIS")
END IF
IF r_documento_encabezado.totalItbis1 IS NOT NULL AND r_documento_encabezado.totalItbis1 <> '.00' THEN
CALL out.startElement("TotalITBIS1",NULL)
CALL out.characters(r_documento_encabezado.totalItbis1)
CALL out.endElement("TotalITBIS1")
END IF
CALL out.startElement("MontoTotal",NULL)
CALL out.characters(r_documento_encabezado.montoTotal)
CALL out.endElement("MontoTotal")
CALL out.endElement("Totales")
# BUSCA EL CODIGO DE SEGURIDAD
# SELECT hash INTO fchash FROM vetb00002 WHERE factura = r_documento_encabezado.numeroFacturaInterna
# LET fchash = r_documento_encabezado.razonSocialComprador.subString(1,4),
# r_documento_encabezado.numeroFacturaInterna.subString(3,5)
DISPLAY "fchash",hasr
# LET fchash = util.Math.rand(150000) USING "&&&&&&"
LET hasr=hasr clipped
CALL out.startElement("CodigoSeguridadeCF",NULL)
CALL out.characters(hasr)
CALL out.endElement("CodigoSeguridadeCF")
CALL out.endElement("Encabezado")
CALL out.endElement("RFCE")
RETURN hasr
END FUNCTION
FUNCTION anularencf(documento_anular)
DEFINE documento_anular RECORD
nombrefile,rnc_emisor,cantidadEncf,fechaAnulacion,numeroLineas,tipoeCF,secuenciaeCFdesde,secuenciaeCFhasta,
cantidadeCFanulados
STRING
END RECORD,
nombrefile,tiporecepcion string
LET ruta_originales= fgl_getenv("RUTA_XML_ORIGINALES")
#LET ruta_originales = '.\\filesXML\\ncf31\\'
# LET documento_encabezado.nombreFile ='130337391E310000000001.XML'
LET nombreFile = ruta_originales,documento_anular.nombreFile CLIPPED
LET tiporecepcion = 'ANULAR'
LET out=om.XmlWriter.createFileWriter(nombreFile)
LET a=om.SaxAttributes.create()
CALL out.startDocument()
CALL a.addAttribute("xmlns:xs","http://www.w3.org/2001/XMLSchema")
CALL out.startElement("ANECF",a)
CALL a.clear()
CALL out.startElement("Encabezado",a)
CALL out.startElement("Version",null)
CALL out.characters("1.0")
CALL out.endElement("Version")
CALL a.clear()
CALL out.startElement("CantidadeNCFAnulados",NULL)
CALL out.characters(documento_anular.cantidadeCFanulados)
CALL out.endElement("CantidadeNCFAnulados")
CALL out.startElement("FechaHoraAnulacioneNCF",NULL)
CALL out.characters(documento_anular.fechaAnulacion)
CALL out.endElement("FechaHoraAnulacioneNCF")
CALL out.startElement("DetalleAnulacion",NULL)
CALL out.startElement("FechaHoraAnulacioneNCF",NULL)
CALL out.characters(documento_anular.fechaAnulacion)
CALL out.endElement("FechaHoraAnulacioneNCF")
CALL out.startElement("Anulacion",NULL)
CALL out.startElement("NoLinea",NULL)
CALL out.characters(documento_anular.numeroLineas)
CALL out.endElement("NoLinea")
CALL out.startElement("TipoeCF",NULL)
CALL out.characters(documento_anular.tipoeCF)
CALL out.endElement("TipoeCF")
CALL out.startElement("TablaRangoSecuenciasAnuladaseNCF",NULL)
CALL out.startElement("SecuenciaeNCFDesde",NULL)
CALL out.characters(documento_anular.secuenciaeCFdesde)
CALL out.endElement("SecuenciaeNCFDesde")
CALL out.startElement("SecuenciaeNCFHasta",NULL)
CALL out.characters(documento_anular.secuenciaeCFhasta)
CALL out.endElement("SecuenciaeNCFHasta")
CALL out.endElement("TablaRangoSecuenciasAnuladaseNCF")
CALL out.startElement("CantidadeNCFAnulados",NULL)
CALL out.characters(documento_anular.cantidadeCFanulados)
CALL out.endElement("CantidadeNCFAnulados")
CALL out.endElement("Anulacion")
CALL out.endElement("DetalleAnulacion")
CALL out.endElement("ANECF")
CALL out.endDocument()
#CALL procesoEncf(nombrefile,"test",tipoRecepcion)
END FUNCTION
FUNCTION otrosTags()
CALL out.startElement("InformacionReferencia",NULL)
CALL out.startElement("NCFModificado",null)
CALL out.characters(r_documento_encabezado.NCFmodificado)
CALL out.endElement("NCFModificado")
CALL out.startElement("FechaNCFModificado",null)
CALL out.characters(r_documento_encabezado.fechaNCFmodificado)
CALL out.endElement("FechaNCFModificado")
CALL out.startElement("CodigoModificacion",null)
CALL out.characters(r_documento_encabezado.codigoModificacion)
CALL out.endElement("CodigoModificacion")
CALL out.startElement("RazonModificacion",null)
CALL out.characters("No tenemos razones")
CALL out.endElement("RazonModificacion")
CALL out.endElement("InformacionReferencia")
END FUNCTION