Pesquisar na Comunidade
Showing results for tags '402'.
Encontrado 2 registros
-
Boa tarde. Estou tentando conciliar um CT-e emitido via EPEC, no ambiente de Homologação da Sefaz MT, só que sempre está retornando a rejeição a seguir: “402 - Rejeicao : XML da area de dados com codificacao diferente de UTF-8.” Já verifiquei o XML, inclusive no Validador de Mensagens do Projeto CT-e, e não acusa erro. - Ao tentar emitir um documento com os mesmos dados, mas forma de emissão 1 – Normal, é autorizado normalmente. - Ao tentar emitir um evento EPEC, o mesmo é criado normalmente. - Ao tentar conciliar o CT-e (com tpEmiss = 4) referente a EPEC anterior, sempre é retornada a rejeição 402. Entrei em contato com o atendimento da Sefaz MT, mas não responderam mais. Expliquei a situação, pedindo para verificarem também se poderia ser algo relacionado ao ambiente, conforme e-mail abaixo: Analisei até o código-fonte (\Fontes\ACBrDFe\ACBrCTe\ACBrCTe.pas linha 338 em diante) e não percebi nada diferente: // Passo 2 calcular o SHA-1 da string idCTe se o Tipo de Emissão for EPEC ou FSDA if TipoEmissao in [teDPEC, teFSDA] then begin // Tipo de Emissão em Contingência SSL.CarregarCertificadoSeNecessario; sign := SSL.CalcHash(idCTe, dgstSHA1, outBase64, True); Passo2 := '&sign=' + sign; sEntrada := sEntrada + Passo2; end; Result := urlUF + sEntrada; Em anexo XMLs: CT-e com emissão Normal: 51240706137422000190570010000000311680036048-cte-normal.xml Evento EPEC: 11011351240706137422000190570010000000254289813233001-procEventoCTe.xml CT-e com tipo de emissão EPEC: 51240706137422000190570010000000254289813233-cte-epec.xml Envio do lote: 25-env-lot.xml e 25-env-lot-decodado.xml Rejeição retornada: 25-pro-lot.xml Caso alguém tenha passado por essa situação e possa contribuir com algo, fico grato, mas acredito não ter algo a ver com o ACBr, já que utilizamos a emissão e conciliação de EPEC normalmente em ambiente de Produção, pelo menos até o momento.
-
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.