Jump to content

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png click.png click.png

Enviar Lote GNRE, gera exceção no retorno para Status de conclusão


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

Recommended Posts

Bom dia, venho aqui para tirar dúvidas sobre como manipular os dados ao Enviar o XML do Lote GNRE.

Da maneira que eu faço hoje, no meu ponto de vista, está gerando exceções onde deveriam ser apenas mensagens.

Vou mostrar usando o código do Exemplo:

  ACBrGNRE1.Guias.Clear;
  GerarGNRE;
  ACBrGNRE1.Enviar;

  MemoResp.Lines.Text   := UTF8Encode(ACBrGNRE1.WebServices.Retorno.RetWS);
  memoRespWS.Lines.Text := UTF8Encode(ACBrGNRE1.WebServices.Retorno.RetWS);
  LoadXML(MemoResp, WBResposta);

O método Enviar (unit ACBrGNRE2):

function TACBrGNRE.Enviar(Imprimir: Boolean): Boolean;
var
  i: Integer;
begin
  Guias.GerarGNRE;
  
  if Guias.Count <= 0 then
    GerarException(ACBrStr('ERRO: Nenhuma GNRE adicionada ao Lote'));

  if Guias.Count > 50 then
    GerarException(ACBrStr('ERRO: Conjunto de GNRE transmitidas (máximo de 50 GNRE)' +
      ' excedido. Quantidade atual: ' + IntToStr(Guias.Count)));

  Result := WebServices.Envia;

  if FGNREGuia <> nil then
  begin
    for i := 0 to Guias.Count - 1 do
    begin
      if Guias.Items[i].Confirmada and Imprimir then
        Guias.Items[i].Imprimir;
    end;
  end;

end;

Até então está tudo perfeito, o problema começa aqui:
Método WebServices.Envia (unit ACBrGNREWebServices);

function TWebServices.Envia: Boolean;
begin
  if not FEnviar.Executar then
    FEnviar.GerarException( FEnviar.Msg );

  FRetorno.numeroRecibo := FEnviar.numero;
  if not FRetorno.Executar then
    FRetorno.GerarException( FRetorno.Msg );

  Result := True;
end;

if not FRetorno.Executar then
  FRetorno.GerarException( FRetorno.Msg );

Acredito que deveria gerar exceção se realmente ocorressem erros...

FRetorno.Executar (unit ACBrGNREWebServices):

function TGNRERetRecepcao.Executar: Boolean;
var
  IntervaloTentativas, Tentativas: Integer;
begin
  Result := False;

  TACBrGNRE(FPDFeOwner).SetStatus(stGNRERetRecepcao);
  try
    Sleep(FPConfiguracoesGNRE.WebServices.AguardarConsultaRet);

    Tentativas := 0;
    IntervaloTentativas := max(FPConfiguracoesGNRE.WebServices.IntervaloTentativas, 1000);

    while (inherited Executar) and
      (Tentativas < FPConfiguracoesGNRE.WebServices.Tentativas) do
    begin
      Inc(Tentativas);
      sleep(IntervaloTentativas);
    end;
  finally
    TACBrGNRE(FPDFeOwner).SetStatus(stGNREIdle);
  end;

  if FGNRERetorno.codigo = 402 then  // Lote processado ?
    Result := TratarRespostaFinal;
end;

Ele gera exceção sempre que o código for diferente de 402, mas temos que lembrar que essa função é responsável por enviar o Lote, e já consulta o mesmo.
Caso dê erros no envio creio que deveria ser gerado exceções (como ele já faz), mas na consulta do retorno apenas se existir realmente um erro, como no caso do código de retorno 404, pois seria necessário corrigir e enviar o lote novamente nesse caso.

Exemplo:
 


  if FGNRERetorno.codigo <> 404 then  // Sem erros no lote?
    Result := TratarRespostaFinal;

 

Caso for eu quem esteja fazendo errado, peço que me mostrem como fazer, muito obrigado.

 

 

Segue em anexo os status e mensagens retornadas na consulta.

 

QUADRO IV - SITUACOES DE PROCESSAMENTO DO LOTE.png

Link to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.