importar XML de compra

Fórum sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (NFe, NFCe, NFSe, SPEED, Projeto ACBr, TEF, ECD, EFD, etc.)

Moderador: Moderadores

Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

importar XML de compra

Mensagem por HASA »

:(
Boa tarde, pessoal alguem coseguiu migrar os dados da fatura, é que as tags <dup> são iguais, eu não consegui pegar a partir da segunda parcela, somente a primeira.

- <cobr>
- <fat>
<nFat>000001701</nFat>
<vOrig>559.42</vOrig>
<vLiq>559.42</vLiq>
</fat>
- <dup>
<nDup>000001701A</nDup>
<dVenc>2011-02-05</dVenc>
<vDup>279.71</vDup>
</dup>
- <dup>
<nDup>000001701B</nDup>
<dVenc>2011-02-12</dVenc>
<vDup>279.71</vDup>
</dup>
</cobr>

Peguei uma dica aqui mesmo no forum que pegava apenas os dados do produto ai tentei implementar mais algumas coisinhas e as duplicatas não deu certo.
:(Neg
Hasa
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

importar XML de compra

Mensagem por alxsts »

Olá!

Qual linguagem você usa? Se for xHarbour, fica fácil com a classe TXmlDocument().
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

importar XML de compra

Mensagem por HASA »

:))

Olá alxsts, Uso Xharbour sim, na verdade peguei o exemplo do colega Gilberto e adaptei as minhas necessidades, só a parte da fatura que o exemplo não me atendeu, podemos mesclar as ideias ?

https://pctoledo.org/forum/viewto ... =43&t=9528

:))
Hasa
Kiko Fernandes
Usuário Nível 3
Usuário Nível 3
Mensagens: 213
Registrado em: 24 Out 2008 22:41
Localização: Foz do Iguaçu

importar XML de compra

Mensagem por Kiko Fernandes »

Hasa, eu uso a função NFe.LerNFe(cArqXML) do ACBrNFeMonitor.
no arquivo de retorno "SAINFE.TXT" quanto as duplicatas ele retorna da seguinte maneira:

[DUPLICATA001]
Numero=000001701A
DataVencimento=05-02-2011
Valor=279.71
[DUPLICATA002]
Numero=000001701B
DataVencimento=12-02-2011
Valor=279.71

o Retorno é um arquivo texto no padrão .ini

Experimente fazer um teste, caso não encontre outra solução para a rotina que você está usando.
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

importar XML de compra

Mensagem por HASA »

:))
kIKO, muito obrigado, vou tentar a solução ainda como está pois acabei de criar está quentinha, se esfriar essa e mais uma saida a tentar ok.
Valeuuuu
Hasa
:))
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

importar XML de compra

Mensagem por HASA »

:-O
Alexandre Santos , vamos dar sequenvia a sua dica ?
:(
Hasa
alxsts escreveu:Olá!

Qual linguagem você usa? Se for xHarbour, fica fácil com a classe TXmlDocument().
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

importar XML de compra

Mensagem por alxsts »

Olá Hasa!

Perdoe-me pela demora.

Quando vi o teu post, lembrei-me de um trabalho que fiz para tratar um XML retornado pela consulta Confie Geral da Serasa.

Semelhante ao teu caso, onde existem várias ocorrências do bloco Dup, no meu caso existiam n ocorrências do bloco com informações referentes à Inscrição Estadual (lembrando que um único CNPJ pode ter várias Inscrições Estaduais).

No código abaixo, eu procurei a primeira ocorrência da tag que me interessava, e fiz um loop no XML extraindo o que precisava, procurando a próxima ocorrência da tag, até não existir mais. O parâmetro oXmlDoc é um objeto TXmlDocument(), onde foi carregado o conteúdo XML retornado pela Serasa.

Dê uma analisada pois o princípio é o mesmo. Depois podemos analisar o teu XML e adaptar.

Código: Selecionar todos

Method extractIEInfo( oXmlDoc )  CLASS ConsultaConfieGeral

   LOCAL oXmlNode, oXmlIter, oNode, hIe := Hash(), nIe, cName, cData

   oXmlNode := oXmlDoc:findFirst( "regsinsituacao1" )
   oXmlIter := TXmlIterator():new( oXmlNode )

   oNode := oXmlIter:getNode()

   While oNode != NIL

      oXmlIter := TXmlIteratorScan():new( oNode )

      Do Case
         Case oNode:cName == "regsinsituacao1"
            // insere um novo elemento na hash table ( a chave eh a IE )
            nIe := Val( oXmlIter:find( "NO_INSC" ):cData )
            If .Not. HHasKey( hIe, nIe )
               hIe[ nIe ] := AFill( Array( K_COUNT ), "" )
            EndIf

            hIe[ nIe ][ K_DT_SITUA ] := ::extract( NIL, "DT_SITUA", NIL, oNode )
            hIe[ nIe ][ K_DS_SITUA ] := ::extract( NIL, "DS_SITUA", NIL, oNode )

         Case oNode:cName == "regsinsituacao2"
            hIe[ nIe ][ K_NO_INSCR_EDIT ] := ::extract( NIL, "NO_INSCR_EDIT",  NIL, oNode )
            hIe[ nIe ][ K_CODSIT        ] := ::extract( NIL, "CODSIT",         NIL, oNode )

         Case oNode:cName == "regsinidentificacao1"
            hIe[ nIe ][ K_RAZAO_SOCIAL ] := ::extract( NIL, "NO_COMPLETO", NIL, oNode )

         Case oNode:cName == "regsinidentificacao2"
            hIe[ nIe ][ K_RAZAO_SOCIAL ] += ::extract( NIL, "NO_COMPLETO", NIL, oNode ) // concatena... (+=)

         Case oNode:cName == "regsinendereco1"
            hIe[ nIe ][ K_DE_ENDERECO   ] := ::extract( NIL, "DE_ENDERECO",    NIL, oNode )
            hIe[ nIe ][ K_NO_ENDERECO   ] := ::extract( NIL, "NO_ENDERECO",    NIL, oNode )
            hIe[ nIe ][ K_CO_UF         ] := ::extract( NIL, "CO_UF",          NIL, oNode )

         Case oNode:cName == "regsinendereco2"
            hIe[ nIe ][ K_CO_ENDERECO   ] := ::extract( NIL, "CO_ENDERECO",  NIL, oNode )
            hIe[ nIe ][ K_NO_BAIRRO     ] := ::extract( NIL, "NO_BAIRRO",    NIL, oNode )
            hIe[ nIe ][ K_NO_MUNICIPIO  ] := ::extract( NIL, "NO_MUNICIPIO", NIL, oNode )
            hIe[ nIe ][ K_CEP           ] := ::extract( NIL, "CEP",          NIL, oNode )
            hIe[ nIe ][ K_IBGE          ] := ::extract( NIL, "IBGE",         NIL, oNode )

         Case oNode:cName == "regsinativiecon1"
            hIe[ nIe ][ K_DE_ATIV_ECO   ] := ::extract( NIL, "DE_ATIV_ECO",    NIL, oNode )

         Case oNode:cName == "regsinativiecon2"
            hIe[ nIe ][ K_DE_ATIV_ECO   ] += ::extract( NIL, "DE_ATIV_ECO",    NIL, oNode ) // concatena... (+=)
            hIe[ nIe ][ K_CNAE          ] := ::extract( NIL, "CNAE",           NIL, oNode )

         Case oNode:cName == "regsinoutrasinfo1"
            hIe[ nIe ][ K_NFE           ] := ::extract( NIL, "NFE",            NIL, oNode )

         Case oNode:cName == "regsinoutrasinfo2"
            hIe[ nIe ][ K_ENQUADRA      ] := ::extract( NIL, "ENQUADRA",       NIL, oNode )
            hIe[ nIe ][ K_OPT_SIMPLES   ] := ::extract( NIL, "SIMPLES",        NIL, oNode )

         Case oNode:cName == "regsinendpadronizado"
            hIe[ nIe ][ K_TPLOGR        ] := ::extract( NIL, "TPLOGR"    ,     NIL, oNode )
            hIe[ nIe ][ K_LOGRADOURO    ] := ::extract( NIL, "LOGRADOURO",     NIL, oNode )
      EndCase
      oNode := oNode:oNext()
   EndDo

   ::hInfoIE := hIe
   ::determinarIEAtiva()

   RETURN
//------------------------------------------------------------------------------
Method extract( cTag, cAttrib, oXmlDoc, oNode ) CLASS ConsultaConfieGeral

   // retornar o valor da tag/item solicitados.
   // Nota: tag/item tem tratamento "Case-Sensitive"
   LOCAL cRet, oXmlNode, oXmlIter

   DEFAULT oXmlDoc TO ::oXMLContent
   DEFAULT cTag    TO ""
   DEFAULT cAttrib TO ""

   If oNode == NIL
      If ( oXmlDoc != NIL )
         If ! Empty( oXmlDoc ) .And. ! Empty( cTag ) .And. ! Empty( cAttrib )

            oXmlNode := oXmlDoc:findFirst( cTag )

            If oXmlNode != NIL
               oXmlIter := TXmlIteratorScan():new( oXmlNode )
               oXmlNode := oXmlIter:find( cAttrib )
               //
               If oXmlNode != NIL
                  cRet := oXmlNode:cData
               EndIf
               //
            EndIf
         EndIf
      EndIf
   Else
      oXmlIter := TXmlIteratorScan():new( oNode )
      oXmlNode := oXmlIter:find( cAttrib )
      If oXmlNode != NIL
         cRet     := oXmlNode:cData
      EndIf
   EndIf

   RETURN If( Empty( cRet ), "", cRet )
//------------------------------------------------------------------------------
Boa sorte!
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

importar XML de compra

Mensagem por HASA »

:D
Alexandre Santos , Vou tentar... Valeu...
:xau
Hasa
Responder