Ir para conteúdo
  • Cadastre-se

dev botao

ACBrOFX - Erro ao ler arquivo OFX exportado do Santander: "Invalid argument to date enconde"


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

Recommended Posts

Postado

Olá pessoal, tudo bem com vocês?

Estou utilizando o componente ACBrOFX para ler um arquivo OFX do Santander e estou recebendo este erro: "Invalid argument to date encode."

O arquivo realmente contém datas em um formato estranho. Por exemplo:

<DTSTART>202310593339[-3:GMT]

Alguém reconhece esse formato de data?

O erro acontece também no exemplo do ACBr para o componente ACBrOFX ao clicar em "Ler Arquivo" depois de selecionar o arquivo OFX que deixo em anexo.

image.thumb.png.a86827b2147ce61649e5f13570e03917.png

Qualquer informação que ajude a solucionar o problema será bem vinda :)

Santander.ofx

  • Curtir 1
  • 2 semanas depois ...
Postado

Oi Jhoni !

Eu disse UTF mas queria dizer UTC.  Me parece que a data vem com AAAAMMxxxxxx onde xxxxxx são minutos

divide por 3600 e depois por 24 subtrai a diferença do uso e voce tem o dia.

Alterei o ACBROfx.pas e testei com o seu arquivo. Parece que funcionou bem voltou a data do de 03/10/2023

inclui a função abaixo no metodo Import para converter as datas

Não subi a unit porque não tenho certeza da minha análise sobre xxxxxx serem minutos.

========================

function TACBrOFX.Import: Boolean;
var

  ..............
  function GetData(Texto:string): string;
  var Ano,Mes,Dia: word;
      UTCDia,Fuso:extended;
      umDia: TdateTime;
     function IsUTC(var Fuso:extended): boolean;
     var inicio,fim: integer;
     begin
       result := Pos('GMT',InfLine(sLine)) > 0;
       if result then
       begin
         inicio := Pos('[',InfLine(sLine));
         fim := Pos(':',InfLine(sLine));
         Fuso := StrToInt(Copy(InfLine(sLine), inicio + 1, length(InfLine(sLine)) - (fim +1) -1 ));
       end
       else
        Fuso := 0;
     end;

  begin     Ano := StrToInt(Copy(InfLine(sLine), 1, 4));
     Mes := StrToInt(Copy(InfLine(sLine), 5, 2));
     if IsUTC(Fuso) then
       Dia := Trunc(((StrToInt(Copy(InfLine(sLine), 7, 6)) div 3600) div 24 ) + Fuso)
     else
       Dia := StrToInt(Copy(InfLine(sLine), 7, 2));
     UmDia := EncodeDate(Ano,Mes,Dia);
     result := DateToStr(UmDia);
  end;

begin; 
   .............
   .............
  
     // Date Start
        if FindString('<DTSTART>', sLine) then
        begin
          if Trim(sLine) <> '' then
            DateStart := GetData(sLine);
        end;


        // Date End
        if FindString('<DTEND>', sLine) then
        begin
          if Trim(sLine) <> '' then
            DateEnd := GetData(sLine);
        end;

ACBrOFX.pas

  • Curtir 2
  • 2 semanas depois ...
Postado

Boa tarde @softwareamigo

Não estou seguro que seja esse formato que você mencionou, pois se não me engano esse valor "202310593339" era para ser o dia 10/10/2023 no extrato e não o dia 3/10/2023.

Vou ver se consigo um arquivo OFX do extrato com mais algumas datas, bem como o extrato em um formato que pode ser facilmente lido por humanos para comparação (vou ver se consigo um PDF).

Também li as especificações e os Schemas no site oficial da Financial Data Exchange (About-FDX - OFX Work Group (financialdataexchange.org)), mas não encontrei um formato de data e hora que fosse correspondente.

Estou achando que o Santander está com alguma falha ou está usando algum padrão próprio muito específico para as datas nesse arquivo.

Sobre o seu algoritmo, percebi que você divide xxxxxx por 3600 e por 24 o que teoricamente lhe dá um número de dias e depois subtrai por um número de horas. Nesse caso, acho que é inconsistente subtrair as três horas de UTC do numero de dias obtido, pois são unidades de medida diferentes (horas e dias).

Talvez o mais correto seria dividir xxxxxx por 3600 para obter um numero de horas (hhhh = xxxxxx div 3600), subtrair de hhhh as 3 horas do UTC (uuuu = hhhhh - 3) e por fim dividir esse valor por 24 (dd = uuuu div 24) obtendo em dd o número de dias.

No entanto, mesmo assim, a data obtida seria 6/10/2023, que acho que não é a data esperada, se não me engano, a data esperada deveria ser 10/10/2023 (vou confirmar quando possível para ter certeza).

Muito obrigado :)

  • Membros Pro
Postado

Bom dia!

Estava com problemas com a importação de arquivos do Santander, com o ajuste proposto acima.

Após analisar muitos arquivos, acabei percebendo que os arquivos que meus clientes estavam baixando do Santander não estava com um fator que indicaria o dia, mas sim, o dia e a hora.
 

Assim, fiz um ajuste para verificar se os dígitos após o ano/mês possui mais que 6 caracteres, considero que o campo não seja uma data UTC.

 

Segue o ajuste para validação.

ACBrOFX.pas

  • Obrigado 1
  • Consultores
Postado
55 minutos atrás, Innovae Brasil Engenharia disse:

Segue o ajuste para validação.

Bom dia,

Criada a TK-4712 para avaliação.

Obrigado pela contribuição.

Consultor SAC ACBr

Alexandre de Paula
Ajude o Projeto ACBr crescer - Assine o SAC                    

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  ícone Discórdia Discord   

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

 

  • 2 semanas depois ...
  • Consultores
  • Solution
Postado

Por favor atualize seus fontes, pelo SVN do ACBr... 

Já subimos para o nosso repositório de fontes, modificações que podem corrigir algum dos itens referentes a esse tópico...

Por favor atualize seus fontes, faça testes, e se possível comente em uma nova resposta, se o problema foi resolvido...

Dúvidas, sobre o uso do SVN ?  Clique aqui e veja um vídeo

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

  • 3 semanas depois ...
  • Consultores
Postado

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Este tópico foi criado há 615 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...
The popup will be closed in 10 segundos...