Pesquisar na Comunidade
Showing results for tags '401'.
Encontrado 1 registro
-
Enviar Lote GNRE, gera exceção no retorno para Status de conclusão
um tópico no fórum postou Anthero Vieria Neto ACBrGNRe
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.