Ir para conteúdo
  • Cadastre-se

dev botao

Problema Ao Autorizar Lote De Ct-E


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

Recommended Posts

Postado

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.

  • Consultores
Postado

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 / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

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;
  • Membros Pro
Postado

Estive com o mesmo problema aqui, fiz o seguinte pra resolver:

 

Depois de enviar o lote, você consulta a chave de cada cte dentro do lote e verifica o status dele 1 a 1;

 

Dessa maneira resolve.

Postado

Gustavo

 

Também estou com o mesmo problema, mas agora além de verificar o status como você faz, estou verificando o conteúdo do protocolo

 

  if (ACBRCTe1.Conhecimentos.Items[0].CTe.procCTe.cStat = 100) and (ACBRCTe1.Conhecimentos.Items[0].CTe.procCTe.nProt <> '') then

  • Solution
Postado

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

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