957 lines
34 KiB
Plaintext
957 lines
34 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,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 |