Page 1 of 1

Factura Electronica Argentina - XML de la AFIP

PostPosted: Thu Jul 16, 2015 9:50 pm
by Marcelo Roggeri
Hola buenas tardes, el contenido de un archivo XML que me devuelve la AFIP, al consultar un rango de facturas aprobadas, lo que necesito es parsear el mismo para extraer los datos de los comprobantes.
He estado viendo en el foro y se me ocurrio primero grabar el contenido en un archivo XML pero no lo pude hacer, de esta manera:
MemoWrit( "comprobantesAfip.xml",wsfev1:XmlResponse)
y luego intentar parsear el archivo de la forma que dicen algunos colegas en este foro.
Cualquier ayuda es bienvenida.
Gracias
Marcelo

Re: Factura Electronica Argentina - XML de la AFIP

PostPosted: Thu Jul 16, 2015 11:19 pm
by Marcelo Roggeri
Bueno ya logre guardar el archivo XML había que indicarle la ruta
MemoWrit( "c:\ruta\comprobantesAfip.xml",wsfev1:XmlResponse)
Ahora la idea es parsear este archivo para cual pido ayuda.
Code: Select all  Expand view

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<FECompConsultarResponse xmlns="http://ar.gov.afip.dif.FEV1/">
    <FECompConsultarResult>
        <ResultGet>
            <Concepto>1</Concepto>
            <DocTipo>80</DocTipo>
            <DocNro>123456667449</DocNro>
            <CbteDesde>1</CbteDesde>
            <CbteHasta>1</CbteHasta>
            <CbteFch>20150709</CbteFch>
            <ImpTotal>2144.1</ImpTotal>
            <ImpTotConc>0</ImpTotConc>
            <ImpNeto>1821.25</ImpNeto>
            <ImpOpEx>0</ImpOpEx>
            <ImpTrib>0</ImpTrib>
            <ImpIVA>322.85</ImpIVA>
            <FchServDesde /><FchServHasta />
            <FchVtoPago />
            <MonId>PES</MonId>
            <MonCotiz>1</MonCotiz>
            <Iva><AlicIva>
            <Id>5</Id>
            <BaseImp>1253.46</BaseImp>
            <Importe>263.23</Importe>
            </AlicIva><AlicIva>
            <Id>4</Id>
            <BaseImp>567.79</BaseImp>
            <Importe>59.62</Importe>
            </AlicIva></Iva>
            <Resultado>A</Resultado>
            <CodAutorizacion>12345673167388</CodAutorizacion>
            <EmisionTipo>CAE</EmisionTipo>
            <FchVto>20150719</FchVto>
            <FchProceso>20150709182717</FchProceso>
            <PtoVta>4</PtoVta>
            <CbteTipo>1</CbteTipo>
        </ResultGet>
    </FECompConsultarResult>
</FECompConsultarResponse>
</soap:Body>
</soap:Envelope>

 

Re: Factura Electronica Argentina - XML de la AFIP

PostPosted: Fri Jul 17, 2015 12:34 am
by horacio
Te mando toda la rutina que yo utilizo para emitir facturas electrónicas. Hay una rutina para leer archivos xml. Fijate si te sirve

Code: Select all  Expand view

    Aadd( aRespuesta, aText[ nIdx ] )
            End
        ElseIf( c_ServicioLlamado = 'TA' )
            If( aText[ nIdx, 1 ] == 'generationTime' .or.  ;
                 aText[ nIdx, 1 ] == 'expirationTime' .or.  ;
                 aText[ nIdx, 1 ] == 'token'  .or.  ;
                 aText[ nIdx, 1 ] == 'sign' )
            Aadd( aRespuesta, aText[ nIdx ] )
            End
        ElseIf( c_ServicioLlamado = 'FECAESolicitar' )
            If( aText[ nIdx, 1 ] == 'Resultado' .or.  ;
                 aText[ nIdx, 1 ] == 'Reproceso' .or.  ;
                 aText[ nIdx, 1 ] == 'CAE'  .or.  ;
                 aText[ nIdx, 1 ] == 'CAEFchVto' .or.  ;
                 aText[ nIdx, 1 ] == 'Code'  .or.  ;
                 aText[ nIdx, 1 ] == 'Msg' )
            Aadd( aRespuesta, aText[ nIdx ] )
            End
        End
    Next
    Return( aRespuesta )

//----------------------------------------------------------------------------//
*: TimeFMT Devuelve la fecha y hora recibida en forma de texto
//----------------------------------------------------------------------------//
Static Function TimeFMT( dt, n_Horas )

    Local c          := ''
    Local cFechaHora := ''

    dt := dt + ( n_Horas / 24 )
    c := hb_TToS( dt )
    cFechaHora := SubStr( c, 01, 4 ) + '-' + SubStr( c, 05, 2 ) + '-' + SubStr( c, 07, 2 ) +  ;
                 'T' +  ;
                      SubStr( c, 09, 2 ) + ':' + SubStr( c, 11, 2 ) + ':' + SubStr( c, 13, 2 )  // +  '-' + '03:00'
    Return( cFechaHora )

//----------------------------------------------------------------------------//
*: MuestroRespuesta           :
*: Muestra informaci¢n recibida del WS correspondiente       :
*: Estado: OK (funcionando)          :
//----------------------------------------------------------------------------//
Function MuestroRespuesta( a_Respuesta )

    Local nIdx := 0

    Cls
    If( !Empty( a_Respuesta ) )
        ? 'COMIENZA LA VISUALIZACION DE LA RESPUESTA'
        ?
        For nIdx := 1 to Len( a_Respuesta )
            ? a_Respuesta[ nIdx, 01 ], a_Respuesta[ nIdx, 02 ]
        Next
        ?
        ? 'FINALIZO LA VISUALIZACION DE LA RESPUESTA'
        ? 'PRESIONE CUALQUIER TECLA PARA CONTINUAR'
    Else
        ? '****************************************************'
        ? ' HUBO ALGUN TIPO DE ERROR, NO HAY NADA PARA MOSTRAR '
        ? '****************************************************'
    End
    //Inkey( 0, 128 ) // 128 para que si muevo el mouse no me saque del inkey
    Return( .t. )
 

Re: Factura Electronica Argentina - XML de la AFIP

PostPosted: Fri Jul 17, 2015 12:39 am
by Marcelo Roggeri
Hola Horacio, muchas gracias ahí lo miro y veo que puedo hacer.
Saludos
Marcelo

Re: Factura Electronica Argentina - XML de la AFIP

PostPosted: Fri Jul 17, 2015 12:56 am
by Enrrique Vertiz
Saludos Marcelo

En los ejemplos de FWH esta el XmlReader.prg, ahi esta un ejemplo practico de como recorrer el XML e ir tomando los valores segun cada TAG, aqui lo adjunto, espero te sirva

#include "FiveWin.ch"

function Main()

local hFile := FOpen( "test.xml" )
Local oXmlDoc := TXmlDocument():New( hFile )
Local oXmlIter := TXmlIterator():New( oXmlDoc:oRoot ), oTagActual

while .T.
oTagActual = oXmlIter:Next()
If oTagActual != nil
MsgInfo( oTagActual:cName, oTagActual:cData )
HEval( oTagActual:aAttributes, { | cKey, cValue | MsgInfo( cKey, cValue ) } )
Else
Exit
Endif
End

FClose( hFile )

return nil

Re: Factura Electronica Argentina - XML de la AFIP

PostPosted: Sat Jul 18, 2015 12:49 pm
by MarioG

Re: Factura Electronica Argentina - XML de la AFIP

PostPosted: Tue Jul 21, 2015 2:59 pm
by Marcelo Roggeri
Gracias por la ayuda Horacio, Enrique y Mario.
Para recorrer los nodos se utiliza el método next() por lo que vi y para volver al primer nodo hay algún método?
Saludos