Ir para conteúdo
  • Cadastre-se

dev botao

Correção De Erro Na Função Tretdpec.lerxml


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

Recommended Posts

Boa tarde, fiz uma alteração na função TRetDPEC.LerXml da unit pcnRetDPEC, permitindo assim a obtenção dos valores dos campos tpAmb, verAplic, cStat e xMotivo para quando nenhuma DPEC é anexada ao arquivo de retorno.

 

Essa situação pode ocorrer, por exemplo, ao utilizar a consulta DPEC para uma chave que não tenha sido enviada anteriormente, caso onde o serviço retornará a cstat 127 (Inexiste DPEC para a chave de acesso informada), ou em qualquer situação onde nenhuma DPEC seja anexada ao retorno.

 

Alteração da função de:

function TRetDPEC.LerXml: boolean;
var
  ok: boolean;
begin
  Result := False;
  try
    if Leitor.rExtrai(1, 'infDPECReg') <> '' then
    begin
      (*AR04 *)FId := Leitor.rAtributo('infDPECReg Id=');
      (*AR05 *)FtpAmb := StrToTpAmb(ok, Leitor.rCampo(tcStr, 'tpAmb'));
      (*AR06 *)FverAplic := Leitor.rCampo(tcStr, 'verAplic');
      (*AR07 *)FcStat := Leitor.rCampo(tcInt, 'cStat');
      (*AR08 *)FxMotivo := Leitor.rCampo(tcStr, 'xMotivo');
      if cStat = 124 then
      begin
        (*AR09 *)FdhRegDPEC := Leitor.rCampo(tcDatHor, 'dhRegDPEC');
        (*AR10 *)nRegDPEC := Leitor.rCampo(tcStr, 'nRegDPEC');

        (*AR10 *)FchNFe := Leitor.rCampo(tcStr, 'chNFe');
      end;
      Result := True;
    end;
  except
    Result := False;
  end;
end;

para:

function TRetDPEC.LerXml: boolean;
var
  ok: boolean;
begin
  Result := False;
  try
    if Leitor.rExtrai(1, 'infDPECReg') <> '' then
    begin
      (*AR04 *)FId := Leitor.rAtributo('infDPECReg Id=');
      (*AR05 *)FtpAmb := StrToTpAmb(ok, Leitor.rCampo(tcStr, 'tpAmb'));
      (*AR06 *)FverAplic := Leitor.rCampo(tcStr, 'verAplic');
      (*AR07 *)FcStat := Leitor.rCampo(tcInt, 'cStat');
      (*AR08 *)FxMotivo := Leitor.rCampo(tcStr, 'xMotivo');
      if cStat = 124 then
      begin
        (*AR09 *)FdhRegDPEC := Leitor.rCampo(tcDatHor, 'dhRegDPEC');
        (*AR10 *)nRegDPEC := Leitor.rCampo(tcStr, 'nRegDPEC');

        (*AR10 *)FchNFe := Leitor.rCampo(tcStr, 'chNFe');
      end;
      Result := True;
    end
    else //Não foi anexado um retorno de DPEC "retDPEC" ao XML, logo não encontrou a tag infDPECReg. Ver pg 139 e 140 do manual de orientação 5.0, item 8.6.3
         //Retorno: Estrutura XML de retorno, "pode" conter uma DPEC localizada. {Nem sempre vai encontrar uma DPEC anexada ao retorno}
    begin
      if Leitor.rExtrai(1, 'retConsDPEC') <> '' then
      begin
        (*BR03 *)FtpAmb := StrToTpAmb(ok, Leitor.rCampo(tcStr, 'tpAmb'));
        (*BR04 *)FverAplic := Leitor.rCampo(tcStr, 'verAplic');
        (*BR05 *)FcStat := Leitor.rCampo(tcInt, 'cStat');
        (*BR06 *)FxMotivo := Leitor.rCampo(tcStr, 'xMotivo');
        Result := True;
      end
    end;
  except
    Result := False;
  end;
end;

Além disso, a função "TNFeConsultaDPEC.Executar" da unit ACBrNFeWebServices, deveria ter seu resultado alterado de:

Result := ({RetDPEC}FretDPEC.cStat = 125);

para:

Result := ({RetDPEC}FretDPEC.cStat in [124, 125]); 

Uma vez que quando o resultado da consulta traz uma DPEC anexada, o componente trata a tag "infDPECReg", e nesta tag o cStat para "DPEC recebido pelo Sistema .." é 124 e não 125. O cStat 125 fica para a tag "retConsDPEC".

 

 

Alguém poderia verificar isso e subir para o svN?

Editado por adenilton
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3858 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.