FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Factura Electronica Argentina - XML de la AFIP
Posts: 344
Joined: Sat Jul 22, 2006 09:04 PM
Factura Electronica Argentina - XML de la AFIP
Posted: Thu Jul 16, 2015 09:50 PM

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

FWH - Harbour - BCC7 - PellesC
Posts: 344
Joined: Sat Jul 22, 2006 09:04 PM
Re: Factura Electronica Argentina - XML de la AFIP
Posted: Thu Jul 16, 2015 11:19 PM
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 (fw): Select all Collapse
<?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>
FWH - Harbour - BCC7 - PellesC
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Factura Electronica Argentina - XML de la AFIP
Posted: Fri Jul 17, 2015 12:34 AM
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 (fw): Select all Collapse
    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. )
Posts: 344
Joined: Sat Jul 22, 2006 09:04 PM
Re: Factura Electronica Argentina - XML de la AFIP
Posted: Fri Jul 17, 2015 12:39 AM

Hola Horacio, muchas gracias ahí lo miro y veo que puedo hacer.
Saludos
Marcelo

FWH - Harbour - BCC7 - PellesC
Posts: 582
Joined: Fri Oct 07, 2005 02:17 PM
Re: Factura Electronica Argentina - XML de la AFIP
Posted: Fri Jul 17, 2015 12:56 AM

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

Enrrique Vertiz Pitta

Lima-Peru

xHb 1.23.1026X, Fwh 25.01, BCC74, MySQL 8.0.X, SQLLIB 1.9m
Posts: 1380
Joined: Fri Oct 14, 2005 01:28 PM
Re: Factura Electronica Argentina - XML de la AFIP
Posted: Sat Jul 18, 2015 12:49 PM
Resistencia - "Ciudad de las Esculturas"

Chaco - Argentina
Posts: 344
Joined: Sat Jul 22, 2006 09:04 PM
Re: Factura Electronica Argentina - XML de la AFIP
Posted: Tue Jul 21, 2015 02:59 PM

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

FWH - Harbour - BCC7 - PellesC

Continue the discussion