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


2 participantes

    [Resolvido]Não importar XML Duplicado

    Maicon
    Maicon
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 267
    Registrado : 08/09/2012

    [Resolvido]Não importar XML Duplicado Empty [Resolvido]Não importar XML Duplicado

    Mensagem  Maicon 19/9/2022, 03:13

    Boa noite a todos

    Tenho exemplo excelente para importação de arquivos XML do Fabio Paes
    https://www.maximoaccess.com/t29286-importar-todas-as-nfe-nota-fiscal-eletronica-xml-de-uma-pasta-versao-xml-1-10-2-00-e-3-10

    Estou tentando incluir uma rotina dentro deste código que verifique na tabela : tbCompras se o arquivo XML , já foi importado se sim passar para o próximo.
    Sei que deveria criar a rotina no início do código como está logo abaixo, porém não estou conseguindo proceder esta alteração sem que trave o código.
    .Preciso que fazer o teste para  variável ch se for = 0 siga em frente se não pular para o próximo.
    Se alguém puder me ajudar agradeço

    Código:
    Do While NomeArq <> ""
    doc.Load (LocalXml & NomeArq) 'Pega a Pasta e o Nome do primeiro arquivo....'Verifica se o Arquivo foi aberto corretamente e se possui chave. Se possuir importa, se nao Pula pra o Proximo!
    If doc.validate.errorCode = -1072897500 And (doc.getElementsByTagName("chNFe").length) Then
    Set xDet = doc.getElementsByTagName("det")

    Código:
    Set rsFor = DB.OpenRecordset("tbCompras")
    ch = Nz(DLookup("ChaveNF", "tbCompras", "ChaveNF = '" & doc.getElementsByTagName("chNFe")(0).Text & "'"), 0)
    rsFor.Close
    Set rsFor = Nothing
    MsgBox (ch)


    .................................................................................
    "O talento vence jogos, mas só o trabalho em equipe ganha campeonatos."
    Michael Jordan

    Bons Estudos.
    Maicon
    Maicon
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 267
    Registrado : 08/09/2012

    [Resolvido]Não importar XML Duplicado Empty Solução

    Mensagem  Maicon 21/9/2022, 01:07

    Fiz esta alteração e já não importa mais duplicado.
    Desta forma se acessar a mesma pasta mais de uma vez o não gerará duplicidade no banco.
    Mais uma vez agradeço o excelente exemplo do nosso colega Fabio Paes.

    Quero implementar uma rotina para mover o arquivo da pasta ou renomear após a importação.
    Talvez também seja interessante que fazer esta varredura antes da importação do XML.
    Creio que seja mais rápido varrer uma pasta e verificar todos os arquivos que já foram importados do que no meio da importação realizar a verificação.
     
    Código:

    '---------------------------------------------------------------'
    '                Criado por FabioPaes                          '
    '          Em 12/02/2017 para MAXIMOACCESS                    '
    ' Em caso de correçoes reportar a origem para atualizar o codigo'
    '---------------------------------------------------------------'
    DoCmd.OpenForm "frmAguarde"
    Forms!frmaguarde!txt2 = "Xml Com Erros:"
    Diret = LocalXml
    NomeArq = Dir(Diret & "*.XML", vbArchive)
    Set db = CurrentDb()
    Set doc = New DOMDocument
    'Buscará todos os arquivos com extenção .xml da pasta selecionada
    Do While NomeArq <> ""
    doc.Load (LocalXml & NomeArq) 'Pega a Pasta e o Nome do primeiro arquivo....
    'Testar se XML ja foi importado (tbCompras)
    Set rsFor = db.OpenRecordset("tbCompras")
    Chave = Nz(DLookup("ChaveNF", "tbCompras", "ChaveNF = '" & doc.getElementsByTagName("chNFe")(0).Text & "'"), 0)
    rsFor.Close
    Set rsFor = Nothing
    If DCount("ChaveNF", "tbCompras", "ChaveNF = '" & doc.getElementsByTagName("chNFe")(0).Text & "'") > 0 Then Kill (LocalXml & NomeArq)
    If DCount("ChaveNF", "tbCompras", "ChaveNF = '" & doc.getElementsByTagName("chNFe")(0).Text & "'") > 0 Then GoTo Recomeco
    'Verifica se o Arquivo foi aberto corretamente e se possui chave. Se possuir importa, se nao Pula pra o Proximo!
    If doc.validate.errorCode = -1072897500 And (doc.getElementsByTagName("chNFe").length) Then
    Set xDet = doc.getElementsByTagName("det")


    Última edição por Maicon em 11/2/2023, 20:36, editado 2 vez(es) (Motivo da edição : Ajuste do código pois observei que ainda estava importando duplicado.)


    .................................................................................
    "O talento vence jogos, mas só o trabalho em equipe ganha campeonatos."
    Michael Jordan

    Bons Estudos.
    Maicon
    Maicon
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 267
    Registrado : 08/09/2012

    [Resolvido]Não importar XML Duplicado Empty Re: [Resolvido]Não importar XML Duplicado

    Mensagem  Maicon 11/2/2023, 20:58

    Note que criei um rótulo para caso haja a chave do xml a ser importado na tabela a função vai para proximo do Loop você tem que criar um rótulo lá para que a função pegue o proximo arquivo.
    Também inseri uma instrução para excluir o arquivo após importar. visto que no meu caso eu não uso a pasta principal dos xml para fazer importação de arquivos mas pode mover se preferir.

    Recomeco:
    'Loop dos arquivos, pega o proximo arquivo
    NomeArq = Dir()
    Loop


    .................................................................................
    "O talento vence jogos, mas só o trabalho em equipe ganha campeonatos."
    Michael Jordan

    Bons Estudos.
    Maicon
    Maicon
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 267
    Registrado : 08/09/2012

    [Resolvido]Não importar XML Duplicado Empty Re: [Resolvido]Não importar XML Duplicado

    Mensagem  Maicon 11/2/2023, 21:01

    Note que criei um rótulo para caso haja a chave do xml a ser importado na tabela a função vai para proximo do Loop você tem que criar um rótulo lá para que a função pegue o proximo arquivo.
    Também inseri uma instrução para excluir o arquivo após importar. visto que no meu caso eu não uso a pasta principal dos xml para fazer importação de arquivos mas pode mover se preferir.

    Recomeco:
    'Loop dos arquivos, pega o proximo arquivo
    NomeArq = Dir()
    Loop




    .................................................................................
    "O talento vence jogos, mas só o trabalho em equipe ganha campeonatos."
    Michael Jordan

    Bons Estudos.
    Waltair M Souza
    Waltair M Souza
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 105
    Registrado : 06/10/2012

    [Resolvido]Não importar XML Duplicado Empty Re: [Resolvido]Não importar XML Duplicado

    Mensagem  Waltair M Souza 20/2/2023, 18:54

    Boa tarde A todos

    Maicon, seria possível adaptar também para importar as parcelas dos vencimentos contidos na XML para uma tabela?
    Tabela = TbDuplicatas
    IdDupli  NumDupli      Valor      Vencimento
    1           Nºnfe-001     472,00   00/00/2023

    Cara se isso for possível eu serei eternamente grato a vocês, pois como está já me ajuda muito... Imagina se separar os valores e datas das parcelas

    tentei fazer pegando mais ou menos como o Fábio fez com os produtos entre "det" e "det"
    tentei sem sucesso pegar as duplicatas entre o "dup" e "dup"

    Grato.


    SO Win10 - Access 2013 64bits
    Maicon
    Maicon
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 267
    Registrado : 08/09/2012

    [Resolvido]Não importar XML Duplicado Empty Re: [Resolvido]Não importar XML Duplicado

    Mensagem  Maicon 19/3/2023, 00:56

    Na verdade você pode criar a tabela para inserir valores de duplicatas o processo seria o mesmo que para as outras tags xml.
    Porém você tem que tomar cuidado para que caso não existe dados de duplicata não trave todo teu seu código .
    Vou ver se te preparo um exemplo.


    .................................................................................
    "O talento vence jogos, mas só o trabalho em equipe ganha campeonatos."
    Michael Jordan

    Bons Estudos.

    Conteúdo patrocinado


    [Resolvido]Não importar XML Duplicado Empty Re: [Resolvido]Não importar XML Duplicado

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 7/5/2024, 14:33