MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


4 participantes

    Importação de XML

    avatar
    andre vieira
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1
    Registrado : 24/08/2023

    Importação de XML  Empty Importação de XML

    Mensagem  andre vieira 24/8/2023, 15:25

    Olá pessoal podem me ajuda em uma situação


    segue o código que estou utilizando

    quando o xml tem todas as TAG ele puxa certinho.

    porem quando algum xml tem uma TAG por exemplo "vDesc" ele puxa normal e o próximo xml não tive essa TAG ele repete o valor para todos os xml que nao tem a TAg


    Option Explicit

    Public Sub gerarelatorioicms()
    On Error Resume Next

    Dim arqs, arq
    Dim NFe As New DOMDocument
    Dim produto As IXMLDOMNode
    Dim produtos As IXMLDOMNodeList
    Dim dicRelatorio As New Dictionary
    Dim dhEmi As Variant
    Dim nNF As String, chNFe$, cProd$, xProd$, CFOP$, CSTICMS$, uf$, uff$
    Dim vProd As Double, pICMS#, bcICMS#, vICMS#, vDesc#, vfrete#, vseguro#, voutros#, vipi#


    arqs = Application.GetOpenFilename("arquivos xml (*.xml), *.xml", , "selecione os arquios xml", , True)

    For Each arq In arqs

       NFe.Load (arq)
       
       nNF = NFe.SelectSingleNode("//nNF").Text
       dhEmi = NFe.SelectSingleNode("//dhEmi").Text
       chNFe = NFe.SelectSingleNode("//@Id").Text
       uf = NFe.SelectSingleNode("//UF").Text
       uff = NFe.getElementsByTagName("UF")(1).Text
       'Debug.Print NFe.getElementsByTagName("UF")(1).Text
       

    Set produtos = NFe.SelectNodes("//det")

    For Each produto In produtos




    cProd = produto.SelectSingleNode("prod/cProd").Text
    xProd = produto.SelectSingleNode("prod/xProd").Text
    vProd = FORMATARVALORES(produto.SelectSingleNode("prod/vProd").Text)
    CFOP = produto.SelectSingleNode("prod/CFOP").Text
    CSTICMS = produto.SelectSingleNode("imposto/ICMS//orig").Text & produto.SelectSingleNode("imposto/ICMS//CST").Text
    pICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//pICMS").Text)
    'SIMPLES NACIONAL
    pICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//CSOSN").Text) = 0

    vfrete = FORMATARVALORES(produto.SelectSingleNode("prod/vFrete").Text)


    vDesc = FORMATARVALORES(produto.SelectSingleNode("prod/vDesc").Text)


    vseguro = FORMATARVALORES(produto.SelectSingleNode("prod/vSeg").Text)
    voutros = FORMATARVALORES(produto.SelectSingleNode("prod/vOutro").Text)
    bcICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//vBC").Text)
    'SIMPLES NACIONAL
    bcICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//CSOSN").Text) = 0


    vICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//vICMS").Text)

    vICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//CSOSN").Text) = 0




    vipi = FORMATARVALORES(produto.SelectSingleNode("imposto/IPI//vIPI").Text)

    dicRelatorio(dicRelatorio.Count + 1) = Array(nNF, chNFe, dhEmi, cProd, xProd, vProd, CFOP, CSTICMS, pICMS, bcICMS, vICMS, uf, uff, vDesc, vfrete, vseguro, voutros, vipi)

    Next produto




    Next arq


    With Application
    Planilha1.Range("a3").Resize(dicRelatorio.Count, 18).Value = .Transpose(.Transpose(dicRelatorio.Items))

    End With
    End Sub


    Public Function FORMATARVALORES(ByVal VALOR As String) As Double

    FORMATARVALORES = Replace(VALOR, ".", ",")




    End Function

    Public Function FORMATARPERCENTUAIS(ByVal VALOR As String) As Double

    FORMATARVALORES = Replace(VALOR, ".", ",") / 100




    End Function

    Fernando Lucas gosta desta mensagem

    Marcelo David
    Marcelo David
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3898
    Registrado : 21/04/2011

    Importação de XML  Empty Re: Importação de XML

    Mensagem  Marcelo David 25/8/2023, 03:30

    Andre, muito bem vindo ao nosso Fórum.
    Atente-se para as regras:

    1. Tenha paciência com quem coloca aqui as suas duvidas.
    2. Clareza nos títulos dos tópicos e duvidas, evite a linguagem MSN.
    3. Não colocar diversas vezes a mesma dúvida.
    4. Explicar detalhadamente o problema e informar a versão do seu Office + Sistema Operativo.
    5. Retorne sempre se deu certo, esse retorno é muito importante.
    6. Respeite toda a equipe Staff e demais membros deste fórum.
    7. Use sempre o botão Busca, sempre que tiver uma dúvida e antes de abrir tópicos.
    8. Não usar palavras como "Urgente". O fórum é livre e ninguém é obrigado a responder com urgência.
    9. A publicidade é proíbida e só pode ser feita pelo Administrador ou depois de aprovada pelo Administrador.
    10. Se o seu tópico não for respondido, tem o direito de fazer um Up ao final de 24horas!
    11. A colocação de Códigos ou Exemplos, devem constar sempre os créditos de quem o elaborou.
    12. Fale, não GRITE!   Só letras Maiúsculas, na Internet é o mesmo que gritar!
    13. É proibido tirar duvidas nas Salas de Repositório, devem abrir um novo tópico nas salas de duvidas, relacionando o Exemplo em causa.
    14. É proibido adicionar links externos nos tópicos, que redirecionem para outros sites ("backlinks"), excepto DropBox ou do próprio fórum.
    15. É permitido adicionar links externos, nos códigos VBA dentro das Base de Dados.


    Adeque o título do seu tópico para as regra 2 e 12, por gentiliza.
    Melhore a clareza da dúvida e não escreva nos títulos apenas em maiúsculo, por favor.


    .................................................................................
    Aprenda como criar formulário desacoplado.
    Conheça meu canal no Youtube e se inscreva.
    Importação de XML  Marcel11
    franklin.crivelaro
    franklin.crivelaro
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 5
    Registrado : 05/01/2016

    Importação de XML  Empty Re: Importação de XML

    Mensagem  franklin.crivelaro 4/9/2023, 10:57

    Olá André.
    O que está acontecendo é que você passa o valor da tag para uma variável, e isso acontece dentro de um loop.
    A variável recebeu um valor na "rodada" anterior e na rodada atual não existe a tag no campo, dessa forma, o valor da variável não está sendo a atualizado por novo valor e permanece o valor anterior.
    A solução nesse caso é simples.
    Basta você esvaziar todas as variáveis como 1° ação dentro do for each, pode ser usando o "variável"= Emply or "variável "="" ou se preferir que a variável double apresente zero quando é vazio, use variável =0.

    Espero ter ajudado.
    Boa sorte

    VBDev60 e Fernando Lucas gostam desta mensagem

    avatar
    VBDev60
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2
    Registrado : 09/08/2016

    Importação de XML  Empty Re: Importação de XML

    Mensagem  VBDev60 4/9/2023, 16:28

    O Franklin está certo. A cada ciclo (loop) limpe as variáveis antes de carregá-las, assim, se as tags não existirem ficarão em branco/zeros.

    Conteúdo patrocinado


    Importação de XML  Empty Re: Importação de XML

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 19/7/2024, 00:18