RE:Facturación Electronica
Publicado por
Ernesto (1 intervención) el 05/10/2010 15:25:44
Hola charly .
No entiendo bien tu pregunta, yo soy de Argentina y aquí se rige por la AFIP.
yo genere de acurdo a los requisitos un XML con mi sistema de facturación con progress, que luego levanta a la pagina de AFIP
Eje.
/* VAN DEFINICIONES*/
/* LECTURA A TABLAS DE FACTURACIÓN*/
OUTPUT TO I:\Emp\XML\FACTURA.XML.
PUT "<?xml version=" '"1.0"' " encoding=" '"UTF-8"' "?>" SKIP.
PUT "<comprobantes>" SKIP.
PUT " <comprobante>" SKIP.
PUT " <tipo>" tipo "</tipo>" SKIP.
PUT " <ptovta>".
REPEAT I=1 TO LENGTH(PtoVta).
PUT SUBSTRING(PtoVta,I,1) FORMAT "X(1)".
END.
PUT "</ptovta>" SKIP.
PUT " <cuitemisor>" CuitEmisor "</cuitemisor>" SKIP.
PUT " <fechaemision>" FechaEmision "</fechaemision>" SKIP.
PUT " <idioma>" Idioma "</idioma>" SKIP.
PUT " <concepto>" Concepto "</concepto>" SKIP.
IF TIPO =19 THEN
DO:
PUT " <ape>".
REPEAT I=1 TO LENGTH(Ape).
PUT SUBSTRING(Ape,I,1) FORMAT "X(1)".
END.
PUT "</ape>" SKIP.
END.
PUT " <moneda>".
REPEAT I=1 TO LENGTH(Moneda).
PUT SUBSTRING(Moneda,I,1) FORMAT "X(1)".
END.
PUT "</moneda>" SKIP.
PUT " <tipocambio>" TipoCambio "</tipocambio>" SKIP.
PUT " <destinocmp>" DestinoCmp "</destinocmp>" SKIP.
IF NroDocReceptor <>0 THEN
DO:
PUT " <tipodocreceptor>" TipoDocReceptor "</tipodocreceptor>" SKIP.
PUT " <nrodocreceptor>" NroDocReceptor "</nrodocreceptor>" SKIP.
PUT " <idimpositivoreceptor>".
REPEAT I=1 TO LENGTH(IdImpositivoReceptor).
PUT SUBSTRING(IdImpositivoReceptor,I,1) FORMAT "X(1)".
END.
PUT "</idimpositivoreceptor>" SKIP.
END.
PUT " <receptor>".
REPEAT I=1 TO LENGTH(Receptor).
PUT SUBSTRING(Receptor,I,1) FORMAT "X(1)" .
END.
PUT "</receptor>" SKIP .
PUT " <domicilioreceptor>".
REPEAT I= 1 TO LENGTH(DomicilioReceptor).
PUT SUBSTRING(DomicilioReceptor,I,1) FORMAT "X(1)".
END.
PUT "</domicilioreceptor>" SKIP.
PUT " <importetotal>" ImporteTotal "</importetotal>" SKIP.
/* forma de pagos */
IF TIPO =19 THEN
DO:
PUT " <formaspago>" SKIP.
PUT " <formapago>" SKIP.
PUT " <codigo>" Codigo "</codigo>" SKIP.
PUT " <descripcion>".
REPEAT I=1 TO LENGTH(Descripcion).
PUT SUBSTRING(Descripcion,I,1) FORMAT "X(1)".
END.
PUT "</descripcion>" SKIP.
PUT " </formapago>" SKIP.
PUT " </formaspago>" SKIP.
END.
PUT " <incoterms>".
REPEAT I=1 TO 3.
PUT SUBSTRING(Incoterms,I,1) FORMAT "X(1)".
END.
PUT "</incoterms>" SKIP.
PUT " <detalleincoterms>".
REPEAT I=1 TO LENGTH(DetalleIncoterms).
PUT SUBSTRING(DetalleIncoterms,I,1) FORMAT "X(1)".
END.
PUT "</detalleincoterms>" SKIP.
IF OtrosDatosComerciales<>"" THEN
DO:
PUT " <otrosdatoscomerciales>".
REPEAT I=1 TO LENGTH(OtrosDatosComerciales).
PUT SUBSTRING(OtrosDatosComerciales,I,1) FORMAT "X(1)".
END.
PUT "</otrosdatoscomerciales>" SKIP.
END.
IF APE="N" AND TIPO =19 THEN
DO:
/* Permisos destino */
PUT " <permisosdestinos>" SKIP.
PUT " <permisodestino>" SKIP.
PUT " <permisoemb>".
/*
REPEAT I=1 TO LENGTH(PermisoEmb).
PUT SUBSTRING(PermisoEmb,I,1) FORMAT "X(1)".
END.
*/
PUT PermisoEmb.
PUT " </permisoemb>" SKIP.
PUT " <destino>" Destino "</destino>" SKIP.
PUT " </permisodestino>" SKIP.
PUT " </permisosdestinos>" SKIP.
END.
IF TIPO <>19 THEN
DO:
TipoAsoc = int(ENTRY(1,TmpCtasCtesPFJExp.CompAso[1],"-")).
PtoVtaAsoc = int(ENTRY(2,TmpCtasCtesPFJExp.CompAso[1],"-")).
Nroasoc = int(ENTRY(3,TmpCtasCtesPFJExp.CompAso[1],"-")).
/* Comprobante Asiciados */
PUT " <cmpasociados>" SKIP.
PUT " <cmpasociado>" SKIP.
PUT " <tipoasoc>" TipoAsoc "</tipoasoc>" SKIP.
PUT " <ptovtaasoc>" PtoVtaAsoc "</ptovtaasoc>" SKIP.
PUT " <nroasoc>" Nroasoc "</nroasoc>" SKIP.
PUT " </cmpasociado>" SKIP.
PUT " </cmpasociados>" SKIP.
END.
/* Detalle de la venta */
PUT " <detalles>" SKIP.
FOR EACH TmpCtasCtesPFJDet WHERE TmpCtasCtesPFJDet.CodEmp =TmpCtasCtesPFJ.CodEmp AND
TmpCtasCtesPFJDet.NroInt =TmpCtasCtesPFJ.NroInt NO-LOCK:
Cod= TmpCtasCtesPFJDet.CodArt .
DesDet=TmpCtasCtesPFJDet.Descripcion .
DesDet=ENTRY(1,DesDet,"//").
DesDet=REPLACE(DesDet,"/","").
DesDet=REPLACE(DesDet,"á","a") .
DesDet=REPLACE(DesDet,"é","e") .
DesDet=REPLACE(DesDet,"í","i") .
DesDet=REPLACE(DesDet,"é","e") .
DesDet=REPLACE(DesDet,"ó","o") .
DesDet=REPLACE(DesDet,"ú","u") .
Cant=STRING(TmpCtasCtesPFJDet.Cantidad) .
PrecioUnit= STRING(TmpCtasCtesPFJDet.PrUniNet).
Importe = STRING(TmpCtasCtesPFJDet.PrUniNet * TmpCtasCtesPFJDet.Cantidad).
FIND FIRST Articulos WHERE Articulos.NroInt = TmpCtasCtesPFJDet.NroIntArt NO-LOCK NO-ERROR.
IF AVAILABLE Articulos THEN
DO:
UniMed="".
FIND FIRST UniMed WHERE UniMed.Descripcion=Articulos.UniMed NO-LOCK NO-ERROR.
IF AVAILABLE UniMed THEN
DO:
UniMed= STRING(UniMed.Codigo).
END.
END.
PUT " <detalle>" SKIP.
PUT " <cod>".
REPEAT I=1 TO LENGTH(Cod).
PUT SUBSTRING(Cod,I,1) FORMAT "X(1)".
END.
PUT "</cod>" SKIP.
PUT " <desc>".
REPEAT I=1 TO LENGTH(DesDET) .
PUT SUBSTRING(DesDET,I,1) FORMAT "X(1)".
END.
PUT "</desc>" SKIP.
PUT " <unimed>".
REPEAT I=1 TO LENGTH(UniMed ) .
PUT SUBSTRING(UniMed,I,1) FORMAT "X(1)".
END.
PUT "</unimed>" SKIP.
PUT " <cant>".
REPEAT I=1 TO LENGTH(cant).
PUT SUBSTRING(Cant,I,1) FORMAT "X(1)".
END.
PUT "</cant>" SKIP.
PUT " <preciounit>".
REPEAT I=1 TO LENGTH(PrecioUnit).
PUT SUBSTRING(PrecioUnit,I,1) FORMAT "X(1)".
END.
PUT "</preciounit>" SKIP.
PUT " <importe>".
REPEAT I=1 TO LENGTH(importe).
PUT SUBSTRING(Importe,I,1) FORMAT "X(1)".
END.
PUT "</importe>" SKIP.
PUT " </detalle>" SKIP.
END.
PUT " </detalles>" SKIP.
PUT " <otrosdatosgenerales>".
REPEAT I=1 TO LENGTH(OtrosDAtosGenerales).
IF SUBSTRING(OtrosDAtosGenerales,I,1)<>CHR(13) THEN
DO:
PUT SUBSTRING(OtrosDAtosGenerales,I,1) FORMAT "X(1)".
END.
ELSE PUT SKIP.
END.
PUT "</otrosdatosgenerales>" SKIP.
PUT " </comprobante>" SKIP.
PUT "</comprobantes>" .
OUTPUT CLOSE.
Saludos Ernesto Cruciani.