"
Supported by

ABAP used to like inverting dates

Every day I learn something new in ABAP. Sometimes I’d rather not learn them. Like this one.

Table T056P has a date field. While SELECTing this table using the date as criteria I couldn’t get any result even though the code seemed correct. Using SE16N I found that the date range was also not working as expected: it would only should results if the final date was put in the LOW field and the initial date in the HIGH. Bizarre.

Then I noticed that the field’s data element is called DATAB_INV and the domain is DATUM_INV. The domain gave me the hint. It’s called “Inverted date”.

Using transaction SE17 (which is so old that it didn’t even use conversion routines yet) to peek into the table’s raw content I noticed that the date values were numbers like 79949176.

After some investigation I found that this date format is (or was…) standard and the ABAP even has some commands to handle it:

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

These commands are so obsolete that they’re not even allowed in ABAP OO.

But I’m using ABAP OO and I need to use these freak dates. What now?

Well, since SE16N can correctly display the dates even though they’re internally stored in an inverted format… I decided to copy the conversion routine’s code:


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.

It worked. I just hope I don’t run into one of these ever again.

Greetings from Abapinho

4 comentários a “ABAP used to like inverting dates”

  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” ;)

  3. Rui Nunes Diz:

    Olá Nuno,

    Uma dica, não precisas da SE17, na SE16N em “Extras” -> “Change Settings” podes activar a opção “Output without Conversion Exit”.

    Parabéns pelo excelente trabalho que tens desenvolvido neste blog.

  4. Nuno Godinho Diz:

    Olá Rui, obrigado pela dica. É bom saber disso!

    Obrigado :)

Deixe um comentário


About Abapinho
Abapinho runs on WordPress
Articles (RSS) e Comments (RSS).