Ну так, пятничное настроение, вот решил описать с чем столкнулся на этой неделе. Может кому то из молодых абаперов будет интересно ))
Клепал отчет, связанный с курсами валют, где применяется таблица TCURR. У нее есть поле GDATU. Надо було сделать выборку для которой в условии использовалось поле GDATU. Выборка получалась некоректной... Посмотрел что там в таблице написано. В поле GDATU вот такие цифры примерно 80029898. Хотя по двойному счелчку (детальный просмотр записи) в поле появляется полноценная дата 01.01.1997.
Оказывется у домена элемента данных этого поля имеется подпрограмма преобразования. Которая нормальную дату конвертирует в обратную ))). Незнаю, может кто и знал, но мне от такого термина стало смешно.
Как получается обратная дата
1. Берут 01.01.1997 - это называется внешняя дата
2. Когда заполняется поле типа dats внешней датой, значение автоматически конвертируется в 19970101 - это внутренняя дата. Также для этого можно использовать ФМ:
Code:
CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL' " Получаем внутреннюю дату
EXPORTING
date_external = s_budat_ext
IMPORTING
date_internal = s_budat_int
EXCEPTIONS
date_external_is_invalid = 1.
3. А вот и обратная дата. Берут некий верхний придел 99999999 и вычитают из него внутреннюю дату. 99999999-19970101=80029898. Для этого используется ФМ:
Code:
CALL FUNCTION 'CONVERSION_EXIT_INVDT_INPUT' " получаем обратную дату
EXPORTING
input = s_budat_ext
IMPORTING
output = s_budat_inv.
ENDFORM. "INV_DAT
Вот так! Несложно подсчитать когда для SAPа настанет день "Д" . Сегодня 12.03.2009. В терминах сапа это 20090312. Обратная дата - это разница между "концом" и сегодняшним днем ))) 99999999-20090312=79909687. Переведем этот остаток в нормальный формат 87.96.7990. Ну вот, примрно 8 тыщ лет сап отработает и все! А что удивляться, в наше время даже табуретки недолговечны...