Ir para conteúdo
  • Cadastre-se

dev botao

Manifestação do Destinatário 2254 - Falha na validação de esquema Xml


Ver Solução Respondido por BigWings,
  • Este tópico foi criado há 2538 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Moderadores
  • Solution
Postado
5 minutos atrás, Marceloal disse:

Teu XML não contém a informação da versão do evento:

<verEvento/>

O correto seria:

<verEvento>1.00</verEvento>

Houve algumas alterações recentemente com relação a isso:

Citar

Revision: 14154
Author: italojjr
Date: quarta-feira, 15 de novembro de 2017 16:17:43
Message:
15/11/2017
[*] Correção ficou faltando passar a versão do evento.
Por: Soad Misleh Giroto / Italo Jurisato Ju

Teus fontes estão atualizados?

5 minutos atrás, Nelson Mega Campinas disse:

Mesmo caso... 

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Postado
1 hora atrás, BigWings disse:

Teu XML não contém a informação da versão do evento:


<verEvento/>

O correto seria:


<verEvento>1.00</verEvento>

Houve algumas alterações recentemente com relação a isso:

Teus fontes estão atualizados?

Mesmo caso... 

Obrigado!

Postado

Certo!

Agora como capturar a versão do evento?

Assim?
==========================================================================

InfEvento.versaoEvento := FrmPrincipalManifesto.ACBrNFe.EventoNFe.Versao; 
==========================================================================

**********************************************************************************************

E então o código ficaria assim?
==========================================================================
 begin

    with FrmPrincipalManifesto.ACBrNFe.EventoNFe.Evento.Add do
    begin
      InfEvento.cOrgao := 91;
      // InfEvento.ChNFE := ChNFE;
      InfEvento.ChNFE := DM.FDQNotas.FieldByName('MAN_CHAVENFE').AsString;
      InfEvento.CNPJ := DM.FDQFilial.FieldByName('CNPJ').AsString;
      InfEvento.dhEvento := Now;
      InfEvento.tpEvento := teManifDestConfirmacao;
      //Está me retornando vazio a versão, creio que estou fazendo errado para capturar a versão
      InfEvento.versaoEvento := FrmPrincipalManifesto.ACBrNFe.EventoNFe.Versao;
    end;

  end;

  begin
    FrmPrincipalManifesto.ACBrNFe.EnviarEvento(1);
  end;
==========================================================================

 

Estou fazendo errado pois não está capturando a versão!

 

Postado
2 horas atrás, BigWings disse:

Teu XML não contém a informação da versão do evento:


<verEvento/>

O correto seria:


<verEvento>1.00</verEvento>

Houve algumas alterações recentemente com relação a isso:

Teus fontes estão atualizados?

Mesmo caso... 

Verifiquei aqui!
O Fontes está atualizado e o schemas está direcionando para o local certo!
Por segurança, deletei o ACBr e baixei novamente, porém mesmo assim não consegui capturar a versão!
Então eu devo estar fazendo errado mesmo!

Qual o código para capturar a versão correta?

  • Moderadores
Postado
41 minutos atrás, VagnerCiec disse:

Verifiquei aqui!
O Fontes está atualizado e o schemas está direcionando para o local certo!
Por segurança, deletei o ACBr e baixei novamente, porém mesmo assim não consegui capturar a versão!
Então eu devo estar fazendo errado mesmo!

Qual o código para capturar a versão correta?

Creio que não é possível "capturar" a versão, você deve informar ela para o componente:

      InfEvento.versaoEvento := '1.00';

 

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Postado
Em 17/11/2017 at 13:01, BigWings disse:

Creio que não é possível "capturar" a versão, você deve informar ela para o componente:


      InfEvento.versaoEvento := '1.00';

 

Esqueci de responder!
Deu certo o InfEvento.versaoEvento := '1.00';

Mas eu coloquei como um parâmetro visível e alterável pelo usuário caso seja necessário!

Obrigado!

Postado

Eu aqui novamente!

Verifiquei que no componente ACBrNFe tem uma propriedade!
image.png.40fa8b21d7e5cd73f2f916585d2a2395.pngSeparPorNome

Bem como

image.png.b7dbcf4a5777f7b3730ff1b720a92ea1.pngExiste essas também

A minha dúvida e como capturar algumas informações, antes do download do XML, para que eu possa salvar no banco de dados!
Por exemplo o nome do fornecedor da nota.

ACBrNFe.NotasFiscais.Items[0].NFe.Dest.xNome        =      ACBrNFe.NotasFiscais.Items[0].NFe.Emit.xNome

Não sei se e nesse lugar que armazena, se for dessa forma ele não retorna nada! 
Porém antes de salvar o XML ele tem que capturar e armazenar em algum lugar para criar a pasta!
Então preciso Obter os seguintes dados do XML por exemplo!

Nome de quem emitiu
Valor da NFe

Como seria?
Isso capturando direto do componente, antes de salvar o arquivo XML no computador ou depois de salvar contanto que capture do componente!

Como fazer?

  • Consultores
Postado

Bom dia Vagner,

A propriedade SepararPorNome, note que se refere ao DownloadNFe, ou seja, essas propriedade devemos configura-las para definir o comportamento do método DistribuicaoDFe.

Pois este método baixa o XML das notas e com essas propriedades definimos em qual pasta os XML serão salvos e se desejamos separa-los pelo nome do emitente.

Já as propriedades que se encontram na segunda imagem se refere a configuração de como o componente deve se comportar quando emitimos notas. Neste caso não tem nada haver com Download.

Peço que estude o fragmento de código que se encontra na pasta: ...\Exemplos\ACBrDFe\ACBrNFe (DistribuicaoDFe.txt).

Veja como fazemos para obter o nome do emitente da nota bem com o valor da mesma (linhas 79 e 87) do arquivo TXT acima mencionado.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Moderadores
Postado
20 minutos atrás, Nelson Mega Campinas disse:

Estou realizando teste com a função ACBRNFe1.DistribuicaoDFePorNSU(CodUf,CNPJ,'0');

E retorna  Nenhum Documento Localizado com ultNSU e o maxNSU.

Nesta situação não teria que retornar os resumo das NFe dos últimos 90 dias?

O método DistribuicaoDFePorNSU é para consultar um NSU específico.

Para obter os documentos a partir de um determinado NSU use o método DistribuicaoDFePorUltNSU, caso passe 0 para o parâmetro UltNSU serão retornados os documentos dos últimos 90 dias.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Postado

Bom dia!

Estou fazendo a operação igual ao que vocês estão informando nesse tópico mas o XML do arquivo -resNFE.xml vem resumido e o código de retorno do evento está vindo com código 2254.

Colocando a versão ou não o erro ocorre da mesma forma.

      try
        lDadosEmitente := nil;
        Result := TDadosPessoa.DadosEstabelecimento(lDadosEmitente, lEstabelecimentoID);
        Result := Result and lDadosEmitente.TemInformacao;

        if Result then
        begin
          lACBrNFe.EventoNFe.Evento.Clear;
          lACBrNFe.EventoNFe.idLote := 1;

          lEvento := lACBrNFe.EventoNFe.Evento.Add;
          lEvento.InfEvento.cOrgao := 91;
          lEvento.InfEvento.ChNFE := pChave;
          lEvento.InfEvento.CNPJ := lDadosEmitente.CNPJ_CPFSomenteNumeros;
          lEvento.InfEvento.dhEvento := TSistema.Agora;
          lEvento.InfEvento.tpEvento := TpcnTpEvento.teManifDestConfirmacao;
          lEvento.InfEvento.versaoEvento := '1.00';
          Result := lACBrNFe.EnviarEvento(lACBrNFe.EventoNFe.idLote);
        end;

        Result := Result and lACBrNFe.DistribuicaoDFePorChaveNFe(
          lDadosEmitente.UFInt,
          lDadosEmitente.CNPJ_CPFSomenteNumeros,
          pChave
        );

        Result := Result and (lACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 138);
      finally
        FreeAndNil(lDadosEmitente);
      end;

 

1-eve.xml

1-ped-eve.xml

43171105849430000104550550010374991036835882-resNFe.xml

20171122092805-con-dist-dfe.xml

20171122092806-dist-dfe.xml

Postado
19 minutos atrás, BigWings disse:

O método DistribuicaoDFePorNSU é para consultar um NSU específico.

Para obter os documentos a partir de um determinado NSU use o método DistribuicaoDFePorUltNSU, caso passe 0 para o parâmetro UltNSU serão retornados os documentos dos últimos 90 dias.

Deu certo

Obrigado!

Postado

Segundo outro post que li a respeito do assunto, dizem que primeiro você chamaria o evento DistribuicaoDFePorChaveNFe para pegar o XML contendo o NSU depois teria que chamar o evento DistribuicaoDFePorNSU. tentei fazer da seguinte forma mas ainda assim não vai.

      try
        lDadosEmitente := nil;
        Result := TDadosPessoa.DadosEstabelecimento(lDadosEmitente, lEstabelecimentoID);
        Result := Result and lDadosEmitente.TemInformacao;

//        if Result then
//        begin
//          lACBrNFe.EventoNFe.Evento.Clear;
//          lACBrNFe.EventoNFe.idLote := 1;
//
//          lEvento := lACBrNFe.EventoNFe.Evento.Add;
//          lEvento.InfEvento.cOrgao := 91;
//          lEvento.InfEvento.ChNFE := pChave;
//          lEvento.InfEvento.CNPJ := lDadosEmitente.CNPJ_CPFSomenteNumeros;
//          lEvento.InfEvento.dhEvento := TSistema.Agora;
//          lEvento.InfEvento.tpEvento := TpcnTpEvento.teManifDestConfirmacao;
//          lEvento.InfEvento.versaoEvento := '1.00';
//          Result := lACBrNFe.EnviarEvento(lACBrNFe.EventoNFe.idLote);
//        end;

        Result := Result and lACBrNFe.DistribuicaoDFePorChaveNFe(
          lDadosEmitente.UFInt,
          lDadosEmitente.CNPJ_CPFSomenteNumeros,
          pChave
        );

        Result := Result and (lACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 138);

        if Result then
        begin
          Result := Result and lACBrNFe.DistribuicaoDFePorNSU(
            lDadosEmitente.UFInt,
            lDadosEmitente.CNPJ_CPFSomenteNumeros,
            lACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[0].NSU
          );
        end;

        Result := Result and (lACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 138);

        if Result then
        begin
          for lIdx := 0 to lACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count -1 do
          begin
            TSistema.CopiaAreaTransferencia(
              lACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[lIdx].XML,
              True
            );
          end;
        end;

        Result := False;
      finally
        FreeAndNil(lDadosEmitente);
      end;

 

  • Moderadores
Postado
6 minutos atrás, flexsistemas disse:

Segundo outro post que li a respeito do assunto, dizem que primeiro você chamaria o evento DistribuicaoDFePorChaveNFe para pegar o XML contendo o NSU depois teria que chamar o evento DistribuicaoDFePorNSU. tentei fazer da seguinte forma mas ainda assim não vai.

Teu problema é no envio do evento de manifestação. Sem a manifestação você não vai conseguir baixar o XML completo.

Se está passando a versão do evento como no trecho de código que colou, deveria gerar a tag... você vai ser preciso debugar o código pra descobrir a razão de não estar gerando a versão no XML.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Postado
55 minutos atrás, flexsistemas disse:

Segundo outro post que li a respeito do assunto, dizem que primeiro você chamaria o evento DistribuicaoDFePorChaveNFe para pegar o XML contendo o NSU depois teria que chamar o evento DistribuicaoDFePorNSU. tentei fazer da seguinte forma mas ainda assim não vai.


      try
        lDadosEmitente := nil;
        Result := TDadosPessoa.DadosEstabelecimento(lDadosEmitente, lEstabelecimentoID);
        Result := Result and lDadosEmitente.TemInformacao;

//        if Result then
//        begin
//          lACBrNFe.EventoNFe.Evento.Clear;
//          lACBrNFe.EventoNFe.idLote := 1;
//
//          lEvento := lACBrNFe.EventoNFe.Evento.Add;
//          lEvento.InfEvento.cOrgao := 91;
//          lEvento.InfEvento.ChNFE := pChave;
//          lEvento.InfEvento.CNPJ := lDadosEmitente.CNPJ_CPFSomenteNumeros;
//          lEvento.InfEvento.dhEvento := TSistema.Agora;
//          lEvento.InfEvento.tpEvento := TpcnTpEvento.teManifDestConfirmacao;
//          lEvento.InfEvento.versaoEvento := '1.00';
//          Result := lACBrNFe.EnviarEvento(lACBrNFe.EventoNFe.idLote);
//        end;

        Result := Result and lACBrNFe.DistribuicaoDFePorChaveNFe(
          lDadosEmitente.UFInt,
          lDadosEmitente.CNPJ_CPFSomenteNumeros,
          pChave
        );

        Result := Result and (lACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 138);

        if Result then
        begin
          Result := Result and lACBrNFe.DistribuicaoDFePorNSU(
            lDadosEmitente.UFInt,
            lDadosEmitente.CNPJ_CPFSomenteNumeros,
            lACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[0].NSU
          );
        end;

        Result := Result and (lACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 138);

        if Result then
        begin
          for lIdx := 0 to lACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count -1 do
          begin
            TSistema.CopiaAreaTransferencia(
              lACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[lIdx].XML,
              True
            );
          end;
        end;

        Result := False;
      finally
        FreeAndNil(lDadosEmitente);
      end;

 

Ola Acredito que voce esteja passando pelo mesmo problema que eu, e resolvi desta forma!

1-Voce solicita a lista de NFE, se nao me engano, ele devolve ate 50... se nao tiver o Ultnsu, envio '0'

ACBrNFe1.DistribuicaoDFe(43,cnpj, UltNSu, '');

 

2-Voce deve passar por todo o DocZip, (apenas cabecalho com algumas informacoes da nota) ai eu extraio a chave e guardo/salvo!

for i := 0 to AcbrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count - 1 do

            chave := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resNFe.chNFe;

 

3-Na sequencia voce deve enviar evento da ciencia da operacao para cada docZip que receber

             ret := ManifestoNFE(ACBrNFe1, cnpj, chave, teManifDestCiencia, 1);

 

4-Ai depois de enviar o evento, voce consegue baixar o XML da nota

ACBrNFe1.DistribuicaoDFePorChaveNFe(43,CNPJ,chave);

 

o download do xml, ele faco, no momento em que o cliente vai importar a nota, e/ou quando ele quer visualizar o conteudo do xml!

 

Abraços

 

Jair Carlos Müller

Postado

Consegui fazer a coisa acontecer!!!

o único detalhe é que tive que alterar a unit ACBrNFeWebServices na linha 2862 TNFeEnvEvento.DefinirDadosMsg; pois essa não está passando o conteúdo infEvento.versaoEvento := FEvento.Evento.InfEvento.versaoEvento;

Mas funcionou sim!!!

não entendi esse teu evento ManifestoNFE do item 3 da tua explicação.

Postado (editado)
35 minutos atrás, flexsistemas disse:

Consegui fazer a coisa acontecer!!!

o único detalhe é que tive que alterar a unit ACBrNFeWebServices na linha 2862 TNFeEnvEvento.DefinirDadosMsg; pois essa não está passando o conteúdo infEvento.versaoEvento := FEvento.Evento.InfEvento.versaoEvento;

Mas funcionou sim!!!

não entendi esse teu evento ManifestoNFE do item 3 da tua explicação.


function manifestoNFE(ACBRNFE: TACBrNFe; sCNPJ: String; sChave: string; TipoManifesto: TpcnTpEvento; iLote: Integer): integer;
begin
  ACBrNFe.EventoNFe.Evento.Clear;
  with ACBrNFe.EventoNFe.Evento.Add do
  begin
     InfEvento.cOrgao   := 91;
     infEvento.chNFe    := sChave;
     infEvento.CNPJ     := sCnpj;
     infEvento.dhEvento := now;
     infEvento.tpEvento := TipoManifesto;
  end;
  ACBrNFe.EnviarEvento(iLote);
  //
  result := ACBrNFe.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.cStat;
end;

Editado por j2c9m7

Jair Carlos Müller

Postado

Bom dia!

Gostaria de agradecer a todos que ajudaram a desenvolver meu conhecimento sobre o assunto. Segue como fiz a implementação:

      TFrm_EsperaProcesso.MostraMensagemEspera;
      try
        lDadosEmitente := nil;
        Result := TDadosPessoa.DadosEstabelecimento(lDadosEmitente, lEstabelecimentoID);
        Result := Result and lDadosEmitente.TemInformacao;

        Result := Result and lACBrNFe.DistribuicaoDFePorChaveNFe(
          lDadosEmitente.UFInt,
          lDadosEmitente.CNPJ_CPFSomenteNumeros,
          pChave
        );

        TMensagem.Mensagem(lACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.cStat.ToString+'-'+lACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.xMotivo);

        Result := Result and (lACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 138);

        if Result then
        begin
          for lIdx := 0 to lACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count -1 do
          begin
            lChave := lACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[lIdx].resNFe.chNFe;

            lACBrNFe.EventoNFe.Evento.Clear;
            lACBrNFe.EventoNFe.idLote := 1;

            lEvento := lACBrNFe.EventoNFe.Evento.Add;
            lEvento.InfEvento.cOrgao := 91;
            lEvento.InfEvento.ChNFE := lChave;
            lEvento.InfEvento.CNPJ := lDadosEmitente.CNPJ_CPFSomenteNumeros;
            lEvento.InfEvento.dhEvento := TSistema.Agora;
            lEvento.InfEvento.tpEvento := TpcnTpEvento.teManifDestConfirmacao;
            lEvento.InfEvento.versaoEvento := '1.00';
            Result := lACBrNFe.EnviarEvento(lACBrNFe.EventoNFe.idLote);
            Result := Result and (lACBrNFe.WebServices.EnvEvento.cStat = 128);
            if Result then
            begin
              TMensagem.Mensagem(lACBrNFe.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.xEvento+':'+#13#10+lACBrNFe.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.xMotivo);
              Result := (lACBrNFe.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.cStat = 135);
              Result := Result or (lACBrNFe.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.cStat = 573);
            end;
          end;
        end;

        Result := Result and lACBrNFe.DistribuicaoDFePorChaveNFe(
          lDadosEmitente.UFInt,
          lDadosEmitente.CNPJ_CPFSomenteNumeros,
          pChave
        );

        Result := Result and (lACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 138);
        Result := Result and TSistema.ArquivoExiste(lACBrNFe.Configuracoes.Arquivos.DownloadNFe.PathDownload+lChave+'-nfe.xml');

        if Result then
          lPathNomeArquivo := lACBrNFe.Configuracoes.Arquivos.DownloadNFe.PathDownload+lChave+'-nfe.xml';
      finally
        FreeAndNil(lDadosEmitente);
        TFrm_EsperaProcesso.DestroiMensagemEspera;
      end;

 

Postado
Em 23/11/2017 at 13:21, jair ferreira disse:

Olá @flexsistemas

Esse código fará o download apenas do xml da chave informada ou apenas está manifestando?

esse comando que ele posto 

ACBrNFe.DistribuicaoDFePorChaveNFe

irá realizar o downlado exatamente da chave de acesso informada.

  • Este tópico foi criado há 2538 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.