s_ss написал:
Есть пример, как SAP работает с преобразованием в/из даты
ФМ CONVERSION_EXIT_ESDAT_INPUT.
Сам я делал ФМ по преобразованию даты в короткую форму 'dd.mm.yy'.
Не, преобразования для дат я тоже делал (цель - не показывать даты 31.12.9999, т.к. пользователи пугаются).
Но, всякие выкрутасы типа
Code:
CONCATENATE INPUT+6(2) INPUT+4(2) INPUT+2(2)
INTO OUTPUT SEPARATED BY '.'.
Работают криво.
Потому сделал
======================
Code:
FUNCTION conversion_exit_datum_input.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(INPUT)
*" EXPORTING
*" VALUE(OUTPUT)
*"----------------------------------------------------------------------
CHECK: input NE space.
CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
EXPORTING
date_external = input
IMPORTING
date_internal = output
EXCEPTIONS
date_external_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE e888(fk) RAISING wrong_input.
ENDIF.
ENDFUNCTION.
Code:
FUNCTION conversion_exit_datum_output.
*"--------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(INPUT)
*" EXPORTING
*" VALUE(OUTPUT)
*"--------------------------------------------------------------------
IF input NE '99991231' AND input NE '00000000'.
DATA: ld_date LIKE sy-datum.
CLEAR output.
CHECK: NOT input IS INITIAL.
ld_date = input.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = ld_date
IMPORTING
date_external = output.
* EXCEPTIONS
* DATE_INTERNAL_IS_INVALID = 1
* OTHERS = 2.
ELSE.
CLEAR output.
ENDIF.
ENDFUNCTION.
======================
А преобразование, которое мне тогда нужно было, я таки сделал. Работает нормально, хоть и написано тривиально.