Ir para conteúdo
  • Cadastre-se

dev botao

Retorno Se Perdendo Do Ws Paraná


Ver Solução Respondido por Italo Giurizzato Junior,
  • Este tópico foi criado há 3699 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado (editado)

Italo, boa tarde,

 

Está acontecendo algo que não consegui identificar o que é nos Fontes...

 

Quando enviando NF-e tanto no Ambiente de Produção/Homologação para o WS do PARANÁ em modo SÍNCRONO, o Retorno do cStat do erro está vindo direto na variável onde deveria vir cStat=104, ocorrendo um RAISE antes de sair da Função ACBrNFe.Enviar.

 

Fiz um DEBUG na unit ACBrNFeWebServices e identifiquei que o Retorno dentro do componente está vindo diferente quando usando o WS do Paraná.

 

Fiz um teste usando o WS de Santa Catarina e funciona normal, veja:

 

Linha 2095 (ACBrNFeWebServices.pas): 

Result := (NFeRetornoSincrono.cStat = 104) and (NFeRetornoSincrono.protNFe.cStat = 100);

 

No teste para SC, o retorno é NFeRetornoSincrono.cStat = 104 e o NFeRetornoSincrono.protNFe.cStat é o retorno do erro ocorrido, ou então =100 quando nota autorizada.

 

Porém no WS do Paraná, o Retorno do erro é diretamente no NFeRetornoSincrono.cStat (num teste que fiz com Inscrição Estadual em branco para Destinatário com IE, ocorre o erro 231 diretamente em NFeRetornoSincrono.cStat)

 

Pelo que pude ver, o componente lê o cStat final da propriedade NFeRetornoSincrono.protNFe.cStat, porém no caso do WS do Paraná está vindo em branco (zero), e então ocorre um raise na função de enviar com a mensagem de erro em branco.

 

No meu código, para enviar a nota faço o seguinte:

ACBrNFe.Enviar('1', False{Imprimir}, True{Sincrono});

cStat := ACBrNFe.WebServices.Enviar.cStat;

Já ocorre raise no comando Enviar com a mensagem de erro em branco (e o cStat nesse momento está zero).

 

 

Desde já, obrigado.

Editado por dalpiaze
Postado

Ítalo, bom dia,

 

Acho que descobri o que é...

 

Parece que o WS do Paraná, diferente dos outros WS, quando o Lote/Nota é rejeitado por algum erro, não retorna cStat=104 (Lote Processado), como por exemplo no WS do RS.

 

Assim, estou enviando NF-e para o WS do Paraná que está com rejeição 231(erro de inscrição estadual). O retorno do cStat=231 é diretamente na primeira tag onde para os outros ws retorna 104.

 

No código da unit pcnRetConsSitNFe.pas é que ocorre o problema:

(Veja que na função, se cStat=104 então ele lê os retornos para protNFe, mas no caso do WS do Paraná, cStat está 231 por exemplo, aí o protNFe fica todo em branco)

function TRetConsSitNFe.LerXml: Boolean;
var
  ok: Boolean;
  i: Integer;
begin
  Result := False;
  try
    if leitor.rExtrai(1, 'retConsSitNFe') <> '' then
    begin
      (*ER03 *)FtpAmb    := StrToTpAmb(ok, leitor.rCampo(tcStr, 'tpAmb'));
      (*ER04 *)FverAplic := leitor.rCampo(tcStr, 'verAplic');

      // Consta no Retorno da NFC-e
      (*ER04a*)FnRec     := leitor.rCampo(tcStr, 'nRec');

      (*ER05 *)FcStat    := leitor.rCampo(tcInt, 'cStat');
      (*ER06 *)FxMotivo  := leitor.rCampo(tcStr, 'xMotivo');
      (*ER07 *)FcUF      := leitor.rCampo(tcInt, 'cUF');
      (*ER07a*)FdhRecbto := leitor.rCampo(tcDatHor, 'dhRecbto');
      (*ER07b*)FchNFe    := leitor.rCampo(tcStr, 'chNFe');

      case FcStat of 100,101,104,110,150,151,155,301,302:
        begin
          if ((Leitor.rExtrai(1, 'protNFe') <> '') or (Leitor.rExtrai(1, 'infProt') <> '')) then
          begin
            protNFe.tpAmb    := StrToTpAmb(ok, Leitor.rCampo(tcStr, 'tpAmb'));
            protNFe.verAplic := Leitor.rCampo(tcStr, 'verAplic');
            protNFe.chNFe    := Leitor.rCampo(tcStr, 'chNFe');
            protNFe.dhRecbto := Leitor.rCampo(tcDatHor, 'dhRecbto');
            protNFe.nProt    := Leitor.rCampo(tcStr, 'nProt');
            protNFe.digVal   := Leitor.rCampo(tcStr, 'digVal');
            protNFe.cStat    := Leitor.rCampo(tcInt, 'cStat');
            protNFe.xMotivo  := Leitor.rCampo(tcStr, 'xMotivo');
          end;
        end;
      end;
      if FcStat in [101,151,155] then
      begin
        if Leitor.rExtrai(1, 'infCanc') <> '' then
        begin
          retCancNFe.tpAmb    := StrToTpAmb(ok, Leitor.rCampo(tcStr, 'tpAmb'));
          retCancNFe.verAplic := Leitor.rCampo(tcStr, 'verAplic');
          retCancNFe.cStat    := Leitor.rCampo(tcInt, 'cStat');
          retCancNFe.xMotivo  := Leitor.rCampo(tcStr, 'xMotivo');
          retCancNFe.cUF      := Leitor.rCampo(tcInt, 'cUF');
          retCancNFe.chNFe    := Leitor.rCampo(tcStr, 'chNFe');
          retCancNFe.dhRecbto := Leitor.rCampo(tcDatHor, 'dhRecbto');
          retCancNFe.nProt    := Leitor.rCampo(tcStr, 'nProt');
        end;
      end;
      {eventos_juaumkiko}
      if Assigned(procEventoNFe) then
        procEventoNFe.Free;
      procEventoNFe := TRetEventoNFeCollection.Create(Self);
      i:=0;
      while Leitor.rExtrai(1, 'procEventoNFe', '', i + 1) <> '' do
      begin
        procEventoNFe.Add;
        procEventoNFe.Items[i].RetEventoNFe.Leitor.Arquivo := Leitor.Grupo;
        procEventoNFe.Items[i].RetEventoNFe.XML            := Leitor.Grupo; 
        procEventoNFe.Items[i].RetEventoNFe.LerXml;
        inc(i);
      end;
      Result := True;
    end;
  except
    Result := False;
  end;
end;

Com isso, na função "function TNFeRecepcao.Executar: Boolean;" da unit ACBrNFeWebServices, a leitura desses valores fica toda em branco também:

2063: NFeRetornoSincrono.LerXml;

       TACBrNFe( FACBrNFe ).SetStatus( stIdle );

       aMsg := 'Ambiente : '+TpAmbToStr(NFeRetornoSincrono.TpAmb)+LineBreak+
               'Versão Aplicativo : '+NFeRetornoSincrono.verAplic+LineBreak+
               'Status Código : '+IntToStr(NFeRetornoSincrono.protNFe.cStat)+LineBreak+
               'Status Descrição : '+NFeRetornoSincrono.protNFe.xMotivo+LineBreak+
               'UF : '+CodigoParaUF(NFeRetornoSincrono.cUF)+LineBreak+
               'dhRecbto : '+DateTimeToStr(NFeRetornoSincrono.dhRecbto)+LineBreak+
               'chNFe : '+NFeRetornoSincrono.chNfe+LineBreak;

       if FConfiguracoes.WebServices.Visualizar then
          ShowMessage(aMsg);

       if Assigned(TACBrNFe( FACBrNFe ).OnGerarLog) then
          TACBrNFe( FACBrNFe ).OnGerarLog(aMsg);

       FTpAmb    := NFeRetornoSincrono.TpAmb;
       FverAplic := NFeRetornoSincrono.verAplic;

       // Consta no Retorno da NFC-e
       FRecibo   := NFeRetornoSincrono.nRec;

       FcStat    := NFeRetornoSincrono.protNFe.cStat;  <--------- *******************************************
       FcUF      := NFeRetornoSincrono.cUF;
       FMsg      := NFeRetornoSincrono.protNFe.xMotivo; <--------- *******************************************
       FxMotivo  := NFeRetornoSincrono.protNFe.xMotivo; <--------- *******************************************
       chNFe     := NFeRetornoSincrono.ProtNFe.chNFe;

       // Alterado por Augusto Fontana em 09/07/2014.
       // Verificar se a NF-e foi autorizada com sucesso
       Result := (NFeRetornoSincrono.cStat = 104) and (NFeRetornoSincrono.protNFe.cStat = 100);

E por isso antes de sair da função de envio, cStat está = 0 e xMotivo/Msg = '' e então ocorre Raise em branco e não é possível obter os retornos dos erros...

 

 

Penso que algum ajuste para quando UF do WS='PR'(41) em alguma dessas duas unit's....

Obrigado.

  • Curtir 1
Postado (editado)

OK, segue arquivo XML de retorno para NF-e autorizada normal (WS Paraná envio sincrono)

 

2-pro-lot.xml

 

(Nesse caso o tratamento do componente ocorre normal sem problemas por causa da sub-tag com os dados protNFe)...

Editado por dalpiaze
  • Este tópico foi criado há 3699 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.