Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Boa tarde.

 

Ao fazer a consulta por NFe pendentes de manifestação no ambiente de homologação, depois de certas consultas, o último NSU retorna um valor inválido.

 

Informando um NSU = 0, sempre me retorna o resultado em PA de 500000 e indCont = 1, e a aplicação consulta novamente, porém com último NSU retornado.

 

Mas como indCont sempre está me retornando 1, acaba entrando em loop infinito. Na verdade, até a aplicação não conseguir mais se conectar ao WebService por volta da 170ª interação no loop.

 

Tenho que esperar por volta de 20 min para voltar a consultar e trazer retornos válidos.

 

Pesquisando na Internet, não encontrei nada sobre algum limite que a SEFAZ impõe sobre as consultas. 

 

Alguém tem alguma ciência disto?

Postado

Bom Dia,

  Breno...

  Em meus teste nunca travou, faço da seguinte maneira

...

var

lIndCont: string;

lUltNSU: integer;

 

      lUltNSU := 0 <<--------------- Para ir mais rápido esta variável deve sempre pegar o ultimo NSU processado.

 

      lIndCont := '0';

      repeat

        if ACBrNFe1.ConsultaNFeDest(CNPJ da Empresa , inTodas, ieTodos, lUltNSU) Then
        begin
           lIndCont := Get_Tag(ACBrNFe1.WebServices.ConsNFeDest.RetornoWS, 'indCont');
           if Get_Tag(ACBrNFe1.WebServices.ConsNFeDest.RetornoWS, 'cStat') = '138' then
           begin
               **** Aqui processo o retorno
           end;
        end;
 
     until (lIndCont = '0');

Liandro Costa

Analista / Programador Delphi

email: [email protected]

Sapucaia do Sul - RS

 

Postado

Boa tarde.

 

Eu já faço deste jeito.

 

    
repeat
      ACBrNFe.ConsultaNFeDest(dmp.jcdsUnidadeNegociounn_ds_cnpj.AsString,
                             StrToIndicadorNFe(ok,'1'),
                             StrToIndicadorEmissor(ok,'0'),
                             UltNSu);
      ultNSU := ACBrNFe.WebServices.ConsNFeDest.retConsNFeDest.ultNSU;
until (VarToStr(ACBrNFe.WebServices.ConsNFeDest.retConsNFeDest.indCont) = '0');
 
Digamos que eu tenha que fazer muitos testes para resolver um problema, o último NSU que ele retorna é inválido. NSU do tipo 15000000, depois 20000000, depois 25000000, e indCont sempre retornando 1. 
 
Acabo ficando preso em um loop.
 
Interrompo a execução.
Depois de alguns minutos, eu volto a fazer a consultar exatamente com os mesmos parâmetros iniciais. Agora o ultNSU retorna um NSU válido. E por volta da 4º consulta, indCont retorna 0 e saio do loop.
 
Parece ser algum tipo de bloqueio da SEFAZ, mas é um bloqueio... estranho.
Postado

 

Boa tarde.

 

Eu já faço deste jeito.

 

    
repeat
      ACBrNFe.ConsultaNFeDest(dmp.jcdsUnidadeNegociounn_ds_cnpj.AsString,
                             StrToIndicadorNFe(ok,'1'),
                             StrToIndicadorEmissor(ok,'0'),
                             UltNSu);
      ultNSU := ACBrNFe.WebServices.ConsNFeDest.retConsNFeDest.ultNSU;
until (VarToStr(ACBrNFe.WebServices.ConsNFeDest.retConsNFeDest.indCont) = '0');
 
Digamos que eu tenha que fazer muitos testes para resolver um problema, o último NSU que ele retorna é inválido. NSU do tipo 15000000, depois 20000000, depois 25000000, e indCont sempre retornando 1. 
 
Acabo ficando preso em um loop.
 
Interrompo a execução.
Depois de alguns minutos, eu volto a fazer a consultar exatamente com os mesmos parâmetros iniciais. Agora o ultNSU retorna um NSU válido. E por volta da 4º consulta, indCont retorna 0 e saio do loop.
 
Parece ser algum tipo de bloqueio da SEFAZ, mas é um bloqueio... estranho.

 

Mas, considerando que vai iniciar o processo agora, você informa o ultimo NSU retornado da ultima vez que fez o processo, ou deixa ele com 0 para começar tudo novamente?

- Sou desenvolvedor.

- De que linguagem, delphi? .NET? Java?

- Qualquer uma, sou desenvolvedor.

Postado

Temporariamente estou informando 0, pois ainda não estou salvando o último NSU no banco. Mas já estou implementando de buscar o último NSU do banco.

 

O CNPJ no qual estou consultando, só tem 4 notas não manifestadas que são retornadas.

 

Estou preocupado se, no cliente quando for recuperar notas e estiver muitas notas ainda não manifestadas, a quantidade de interações no loop até indCont = 0, o WebService acabar bloqueando(?) o cliente e a aplicação entrar em loop infinito.

 

Eu até poderia colocar uma condição para sair se o último NSU retornado foi maior que determinado valor. Apenas gostaria de saber se realmente existe algum bloqueio. Talvez seja por causa do ambiente de homologação. Ou não.

Postado

Mas é importante guardar o NSU da última nfe importada, e na próxima importação sempre passe o último NSU que a pesquisa irá iniciar por ele, passando Zero o processo fica muito demorado, pois irá varrer o bando de dados iniciando por Zero até achar tuas NFe´s.

  • Curtir 1

Liandro Costa

Analista / Programador Delphi

email: [email protected]

Sapucaia do Sul - RS

 

  • Membros Pro
Postado

A cada consulta sempre lhe retorna um NSU, este você guarda e usa para fazer a próxima consulta. Independente se o indCont retorne 0 ou 1 você sempre guarda o NSU que retorna.

 

Aqui fiz um loop que so para quando encontra um xml ou retorne indCont=0. Assim ele fica fazendo consultas sempre com o ultimo NSU retornado.

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