Anthero Vieria Neto Postado 21 Outubro, 2016 Postado 21 Outubro, 2016 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.
Carlos Fcps Postado 1 Fevereiro, 2017 Postado 1 Fevereiro, 2017 estou com esse problema no envio da nfce para posto de combustível, monstra a mensagem "Lote Processado". Alguém sabe como resolver esse problema ou se estou fazendo algo errado.
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora