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,ambiente 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 ",comando2 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 CALL out.endDocument() END IF IF r_documento_encabezado.tipoEcf = '32' AND montoFactura < 250000 THEN LET tipoRecepcion = "normal32" END IF CALL ambiente() RETURNING ambiente CALL procesoEncf(nombrefile,ambiente,tipoRecepcion,xsucid,xbodega,xoperacion,' ') 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 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.FechaVencimientoSecuencia IS NOT NULL AND r_documento_encabezado.FechaVencimientoSecuencia <> ' ' 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 DISPLAY "EN GENERAFILE: ",r_documento_encabezado.indicadorMontoGravado 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 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 CALL out.startElement("TipoPago",NULL) CALL out.characters(r_documento_encabezado.tipoPago) 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.tipoPago) 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 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") 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 CALL out.startElement("MontoGravadoTotal",NULL) CALL out.characters(r_documento_encabezado.montoGravadoTotal) CALL out.endElement("MontoGravadoTotal") IF r_documento_encabezado.montoGravadoI1 <> '0' THEN CALL out.startElement("MontoGravadoI1",NULL) CALL out.characters(r_documento_encabezado.montoGravadoI1) CALL out.endElement("MontoGravadoI1") 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 THEN CALL out.startElement("MontoGravadoI3",NULL) CALL out.characters(r_documento_encabezado.montoGravadoI3) CALL out.endElement("MontoGravadoI3") END IF IF r_documento_encabezado.tipoEcf <> '46' THEN # IF r_documento_encabezado.itbis1 <> '00' THEN CALL out.startElement("ITBIS1",NULL) CALL out.characters(r_documento_encabezado.itbis1) CALL out.endElement("ITBIS1") # END IF 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 IF r_documento_encabezado.montoGravadoI3 IS NOT NULL THEN CALL out.startElement("ITBIS3",NULL) CALL out.characters(r_documento_encabezado.itbis3) CALL out.endElement("ITBIS3") END IF CALL out.startElement("TotalITBIS",NULL) CALL out.characters(r_documento_encabezado.totalItbis) CALL out.endElement("TotalITBIS") 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 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.montoExento > 0 THEN CALL out.startElement("MontoExento",NULL) CALL out.characters(r_documento_encabezado.montoExento) CALL out.endElement("MontoExento") 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") 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) 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 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) CALL out.startElement("MontoGravadoTotal",NULL) CALL out.characters(r_documento_encabezado.montoGravadoTotal) CALL out.endElement("MontoGravadoTotal") CALL out.startElement("MontoGravadoI1",NULL) CALL out.characters(r_documento_encabezado.montoGravadoTotal) CALL out.endElement("MontoGravadoI1") CALL out.startElement("TotalITBIS",NULL) CALL out.characters(r_documento_encabezado.totalItbis) CALL out.endElement("TotalITBIS") 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 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) 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.tipoPago) 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) CALL out.startElement("MontoGravadoTotal",NULL) CALL out.characters(r_documento_encabezado.montoGravadoTotal) CALL out.endElement("MontoGravadoTotal") CALL out.startElement("MontoGravadoI1",NULL) CALL out.characters(r_documento_encabezado.montoGravadoTotal) CALL out.endElement("MontoGravadoI1") 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 CALL out.startElement("TotalITBIS",NULL) CALL out.characters(r_documento_encabezado.totalItbis) CALL out.endElement("TotalITBIS") 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 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, ambiente STRING, mensaje, respuesta, codigo 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("RncEmisor",NULL) CALL out.characters(documento_anular.rnc_emisor) CALL out.endElement("RncEmisor") 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.endElement("Encabezado") CALL out.startElement("DetalleAnulacion",NULL) 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("Secuencias",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("Secuencias") 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() LET ambiente = ambiente() CALL procesoEncf(nombrefile,ambiente,tipoRecepcion, 0,0,'anular',' ') RETURNING mensaje, respuesta, codigo RETURN mensaje, respuesta, codigo 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