"
Apoiado por

Dantes o ABAP gostava de inverter datas

Todos os dias o ABAP me revela coisas novos. Às vezes coisas que mais valia eu nem saber que existem. Como esta.

A tabela T056P tem um campo com uma data. Fazendo um SELECT a esta tabela filtrando pela data não conseguia obter nada de jeito. Mas o código parecia correcto. Na SE16N descobri que o intervalo de datas também não funcionava conforme esperado: só apresentava resultados quando a data final era colocada no LOW e a inicial no HIGH. Bizarro.

Até que reparei que o elemento de dados se chamava DATAB_INV e que usa o domínio DATUM_INV. Foi ao olhar para o domínio que se fez luz. INV neste caso quer dizer INVertido.

Usei a transacção SE17 (por ser tão antiga que não usa as rotinas de conversão) para ver o conteúdo real da T056P e descobri que as datas são tipo 79949176.

Depois de investigar um bocado descobri que este formato de datas invertido é (ou foi…) standard e que até há uns comandos ABAP para o tratar:


CONVERT INVERTED-DATE dat1 INTO DATE dat2.
CONVERT DATE dat2 INTO INVERTED-DATE dat1.

Comandos esses que são tão obsoletos que nem podem ser usados em ABAP OO.

Só que eu estou a usar ABAP OO e calhou-me na rifa ter de lidar com este tipo de datas. E agora?

E agora, como a SE16N consegue mostrar estas datas correctamente decidi copiar o código das rotinas de conversão e pronto:


METHOD TO_INVERTED_DATE.
  DATA: chdat(8) TYPE c,
        houtput(8) TYPE n.

  r_inverted_date = i_date.

  MOVE i_date TO chdat.
  houtput = '99999999' - chdat.  "Zwischenspeichern in houtput, damit
  r_inverted_date = houtput.

ENDMETHOD.

Funcionou.

Espero nunca mais me cruzar com uma data destas.

O Abapinho saúda-vos.

2 comentários a “Dantes o ABAP gostava de inverter datas”

  1. Ricardo Amorim Diz:

    De pateta não tem nada, aliás era uma técnica bastante astuta, e só quem trabalhou em tempos em que disco, memória e processadores eram muito limitados e em que bases de dados (sejam elas relacionais ou não) eram uma miragem, percebe o porquê de “datas complementadas a noves”.

  2. Nuno Godinho Diz:

    Olá Ricardo, obrigado, depois de ler o que escreveste entendo que realmente era uma boa técnica e tens toda a razão, não é pateta. Mas para quem nunca se tinha cruzado com isto foi um choque porque é bastante obscuro. Ainda bem que já não são necessárias! Vou tirar de lá o “pateta” ;)

Deixe um comentário


Acerca do Abapinho
O Abapinho é suportado pelo WordPress
Artigos (RSS) e Comentários (RSS).