Ir para conteúdo
  • Cadastre-se

dev botao

ACBrNFSeX - Erro na leitura do XML Fortaleza/CE


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

Recommended Posts

  • Solution
Postado

ACBr revision 25950 (27/06/2022 10:42:53)

Retorno do Log na consulta do NFSe/Lote:

Método Executado: ConsultarNFSe
 
Parâmetros de Envio
Num. Ini. NFSe: 
Num. Fin. NFSe: 
Data Inicial  : 27/06/2022
Data Final    : 27/06/2022
 
Parâmetros de Retorno
Sucesso       : True
 
Erro(s):
Código  : X999
Mensagem: Erro de Conexão: '27/03:00' is not a valid integer value
Correção: 
---------
 
NFS-e Numero....: 666
Cod. Verificacao: 746212305
Prestador.......: 
Tomador.........: 

---------------------------------------------------------------------------------

Trecho do XML de retorno da prefeitura de Fortaleza:

<DataEmissaoRps>2022-06-27-03:00</DataEmissaoRps>
<NaturezaOperacao>1</NaturezaOperacao>
<OptanteSimplesNacional>2</OptanteSimplesNacional>
<IncentivadorCultural>2</IncentivadorCultural>
<Competencia>2022-06-27-03:00</Competencia>

     O problema esta na unidade ACBrUtil.DateTime, na função AjustarData.

     A função ParseDataHora da mesma unit, faz a chamada substituindo "-" por "/"

xData := AjustarData(StringReplace(xData, '-', '/', [rfReplaceAll]));

  Trecho da função AjustarData

function AjustarData(const DataStr: string): string;
var
  Ano, Mes, Dia, i: Integer;
  xData: string;
begin
  xData := DataStr;

  i := Pos('/', xData);

  if i = 0 then
  begin
    Result := xData;
  end
  else
  begin
    if i = 5 then
    begin
      xData := copy(xData, 1, 10); //alterado para utilizar os 10 primeiros digitos
      Ano := StrToInt(Copy(xData, 1, 4));
      xData := Copy(xData, 6, Length(xData));
      i := Pos('/', xData);
      Mes := StrToInt(Copy(xData, 1, i-1));
      Dia := StrToInt(Copy(xData, i+1, Length(xData)));

      Result := FormatFloat('0000', Ano) + '/' +
                FormatFloat('00', Mes) + '/' +
                FormatFloat('00', Dia);
    end

     Como a posição da "/" = 5, o código pega o Ano = 2022, o mês = 06, porém o Dia ele retornava "27/03:00",  retornando a exceção na primeira NFSe lida no arquivo.

     Ao acrescentar a linha:     

xData := copy(xData, 1, 10); //utilizar os 10 primeiros digitos

     A leitura voltou ao normal, na consulta por NFSe e Lote.

Postado

Boa noite Italo,

    Atualizei os fontes e a leitura do xml funcionou perfeitamente, colocar o tratamento na função ParseDataHora , ficou bem melhor.

    Muito obrigado pela atenção, vocês são nota 10!

  • Curtir 1
  • Este tópico foi criado há 878 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.

The popup will be closed in 10 segundos...