Boa tarde!
Há algumas semanas viemos enfrentando problemas com a consulta de documentos fiscais na Sefaz.
Já o revisei o código atendo-me as instruções do tópico abaixo.
Ao consultar, caso recebamos o primeiro lote de 50 notas e o UltNSU seja menor que o MaxNSU, aguardasse o intervalo de 30 segundos e reiniciasse a consulta. Para CTe, utilizamos a mesma estrutura desse Bloco, a qual (para CTe) está funcionando perfeitamente.
As consultas são feitas pelo usuário mesmo, não deixamos o processo de forma automática (via thread ou timer), o Usuário clica em consultar e o sistema executa o bloco abaixo, assim que o sistema identifica um retorno com Status 137 ou 656, bloqueamos a consulta, reativando o botão 'Consultar' apenas 1h após o horário da última consulta que retornou um dos Status citado.
Este é o bloco responsável pela consulta das notas através do UltNSU.
/***************************************************************************************************************/
repeat
try
ACBrNFe.DistribuicaoDFePorUltNSU(UFtoCUF(FEmpresaParametroVO.EstadoCidade),
PegarNumeros(FEmpresaParametroVO.CNPJ),
mUltNSUNFe);
except //Deixar o sistema tratar o retorno
end;
var mRetornoDistDFe := ACBrNFe.WebServices.DistribuicaoDFe.retDistDFeInt;
mStat := mRetornoDistDFe.cStat;
mMotivo := mRetornoDistDFe.xMotivo;
mUltNSUNFe := mRetornoDistDFe.ultNSU;
mMaxNSUNFe := mRetornoDistDFe.maxNSU;
if (mStat = 138) then
begin
InsereDfeSefazHistorico(mStat, mMaxNSUNFe, mUltNSUNFe, '55', mMotivo);
InserirAlterar(mRetornoDistDFe);
Result := True;
end
else if (mStat = 137) then
begin
InsereDfeSefazHistorico(mStat, mMaxNSUNFe, mUltNSUNFe, '55', mMotivo);
Informa('Não há novos documentos a serem consultados!' + cgEnterEmString +
'A SEFAZ exige que a próxima consulta seja feita somente após o intervalo de 1h de espera.');
BloqueiaBuscaSefaz(0, mStat);
CarregarCadastro;
Exit;
end
else
begin
InsereDfeSefazHistorico(mStat, mMaxNSUNFe, mUltNSUNFe, '55', mMotivo);
var mErro := 'Falha ao realizar a consulta das notas fiscais.';
if (mStat = 656) then
mErro := 'Não há novos documentos a serem consultados!';
Informa(mErro + cgEnterEmString + IntToStr(mStat) + ' - A SEFAZ bloqueará a consulta por 1h');
BloqueiaBuscaSefaz(0, mStat);
CarregarCadastro;
Exit;
end;
if (mMaxNSUNFe.ToInteger > mUltNSUNFe.ToInteger) then
begin
PanelStatus('Aguardando retorno da SEFAZ');
Sleep(30000);
ACBrNFeStatusChange(nil);
end;
until mMaxNSUNFe = mUltNSUNFe;
/***************************************************************************************************************/
Porém, para NFe, não estamos conseguindo chegar a uma solução.
Estamos com os fontes do ACBr atualizados, conferi os novos links e já estão OK.
Conferi as alterações na NT e também já procurei em diversos tópicos para ver se alguém está tendo problemas parecidos.
/***************************************************************************************************************/
Agora, o problema:
Estou realizando a busca(aguardados 60 minutos da consulta anterior) com o ultNSU retornado na última busca.
O retorno está sempre mostrando que o maxNSU é 0
Visto que o maxNSU é o maior NSU disponível para consulta, faria sentido ser 0 caso não houvesse mais nenhum NSU para ser retornado, porém, esse cliente está a semanas sem que retorne nota alguma e cada vez mais está acontecendo este mesmo problema em outros clientes.
Revisei todo o código acima apresentado, pesquisei em diversos sites(inclusive alguns tópicos aqui anexados), li as últimas NTs (mais de uma vez) tentando encontrar onde estamos pecando, mas não consegui identificar.
É a primeira vez que posto algo aqui, então caso falte alguma informação para que possam me ajudar, peço desculpas e as inserirei assim que solicitada.
Caso alguém tenha alguma ideia do que eu poderia estar tentando fazer para resolver o problema e também caso possam esclarecer se é melhor deixar em processo automático essa busca de documentos ou manter como fazemos hoje onde o usuário pode fazer a consulta quando precisar(respeitando os bloqueios para evitar o consumo indevido).
Apenas para ilustrar, acabei de fazer uma consulta nesse exato momento.