Ir para conteúdo
  • Cadastre-se

dev botao

Problema Ao Autorizar Lote De Ct-E


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

Recommended Posts

Bom dia, pessoal.

Está ocorrendo um problema quando há envio de um lote e entre eles há uma rejeição, por exemplo:

CT-es 1,2 e 3 ocorre a rejeição no 2, ele grava no 1 (I.E inválida por exemplo). 

1 - Autorizado porém recebe Rejeição (I.E inválida) referente ao 2

2 - Recebe status 100 porém houve rejeição (I.E inválida). 

3 - Autorizado

Em resumo, parece que há um problema no índice ao processar o retorno fazendo com que meu sistema receba status 100 sendo que não foi autorizado e outro que foi autorizado receber uma rejeição.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Gustavo,

 

Infelizmente a SEFAZ não retorna o na mesma sequencia que você envia.

 

Se todos os CT-e do lote forem autorizados no retorno vai estar na mesma sequencia do envio.

 

Mas se um deles for rejeitado, este será colocado em primeiro lugar.

 

exemplo

 

envio dos CT-e: 1, 2 e 3 (nesta sequencia)

 

se o 2 for rejeitado temos no retorno a seguinte sequencia: 2, 1 e 3

 

Você deve estar lendo o retorno e atualizando o banco de dados sem checar exatamente quem você esta lendo, acreditando que o retorno encontra-se na mesma sequencia do envio.

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

A rotina a baixo sempre funcionou e gravo utilizando a chave, houve alteração na rotina do ACBr recentemente?

    for i := 0 to (Lote.WebServices.Retorno.CteRetorno.ProtCTe.Count - 1) do
    begin
      sDataHora     := DateTimeToStr(Lote.WebServices.Retorno.CteRetorno.ProtCTe.Items[i].dhRecbto);
      sProtocolo    := Lote.WebServices.Retorno.CteRetorno.ProtCTe.Items[i].nProt;
      sStat         := IntToStr(Lote.WebServices.Retorno.CteRetorno.ProtCTe.Items[i].cStat);
      sMotivo       := Lote.WebServices.Retorno.CteRetorno.ProtCTe.Items[i].xMotivo;
      sConhecimento := Copy(Lote.WebServices.Retorno.CteRetorno.ProtCTe.Items[i].chCTe, 26, 3)
               + '.' + Copy(Lote.WebServices.Retorno.CteRetorno.ProtCTe.Items[i].chCTe, 29, 3)
               + '.' + Copy(Lote.WebServices.Retorno.CteRetorno.ProtCTe.Items[i].chCTe, 32, 3);

      MemoStatus.Add('  ' + sConhecimento + '  ' + sProtocolo + ' ' + sDataHora + '  ' + sStat + ' - ' + sMotivo);

      if ((Lote.WebServices.Retorno.CTeRetorno.ProtCTe.Items[i].cStat = 100) or     //Só grava na tabela CONHECIMENTOS se Autorizada ou Denegada
          (Lote.WebServices.Retorno.CTeRetorno.ProtCTe.Items[i].cStat = 110)) then
      begin
        try
          //Conhecimento
          qUpdConhecimento.SQL.Clear;
          qUpdConhecimento.SQL.Add('UPDATE CONHECIMENTOS SET');
          qUpdConhecimento.SQL.Add('       CTE_EMISSAO          = :xEmissao,');
          qUpdConhecimento.SQL.Add('       CTE_ENVIADO          = :xEnviado,');
          qUpdConhecimento.SQL.Add('       CTE_PROTOCOLADO      = :xProtocolado,');
          qUpdConhecimento.SQL.Add('       CTE_PROTOCOLO        = :xProtocolo,');
          qUpdConhecimento.SQL.Add('       CTE_IMPRESSO         = :xImpresso,');
          qUpdConhecimento.SQL.Add('       CTE_XML              = '+ QuotedStr(Lote.Conhecimentos.Items[i].XML));
//          qUpdConhecimento.SQL.Add('       CTE_XML              = :xXML,');
          qUpdConhecimento.SQL.Add('     , CTE_STATUS_CODIGO    = :xStatus,');
          qUpdConhecimento.SQL.Add('       CTE_STATUS_DESCRICAO = :xDescricao');
          qUpdConhecimento.SQL.Add(' WHERE CTE_CHAVE       = ' + QuotedStr(Copy(Lote.Conhecimentos.Items[i].CTe.inFCTe.ID,4,44)));
          qUpdConhecimento.ParamByName('xEmissao'    ).AsDateTime   := Lote.Conhecimentos.Items[i].CTe.Ide.dhEmi;
          qUpdConhecimento.ParamByName('xEnviado'    ).AsString     := 'S';
          qUpdConhecimento.ParamByName('xProtocolado').AsString     := 'S';
          qUpdConhecimento.ParamByName('xProtocolo'  ).AsString     := sProtocolo;
          qUpdConhecimento.ParamByName('xImpresso'   ).AsString     := 'N';
          qUpdConhecimento.ParamByName('xStatus'     ).AsSmallInt   := Lote.WebServices.Retorno.CteRetorno.ProtCTe.Items[i].cStat;
          qUpdConhecimento.ParamByName('xDescricao'  ).AsString     := Copy(Lote.WebServices.Retorno.CteRetorno.ProtCTe.Items[i].xMotivo, 1, 130);
//          qUpdConhecimento.ParamByName('xXML'        ).AsWideString := Lote.Conhecimentos.Items[i].XML;
          qUpdConhecimento.ExecSQL;
Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa noite Gustavo,

 

Post como anexo o lote que contem mais de um CT-e e que um deles (não pode ser o primeiro) tenha sido rejeitado.

E post como anexo também o retorno do envio do respectivo lote,

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Solution

Bom dia Italo,

 

Fiz a simulação aqui e finalmente entendi. Achei que os retornos eram gravados no índice respectivo ao envio dos CT-es. Fica abaixo a forma em que utilizei para "sincronizar".

    for i := 0 to (Lote.WebServices.Retorno.CteRetorno.ProtCTe.Count - 1) do
    begin
      for j := 0 to (Lote.Conhecimentos.Count - 1) do
      begin
        if Copy(Lote.Conhecimentos.Items[j].CTe.inFCTe.ID,4,44) = Lote.WebServices.Retorno.CteRetorno.ProtCTe.Items[i].chCTe then
          break;
      end;
      //resto da rotina
    end;

grato pela ajuda e atenção de todos.

 

Ótima semana

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3266 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.