Есть в природе так называемые маски для ввода, но в SAP нет такого понятия.
Вместо этого в ABAP есть такое свойство домена как “Conversion exit” или “Подпрограмма преобразования”.
В чём фикус – признаётся разница между отображением данных и внутренним хранением. Примеры:
Для реализации такого поведения требуется два фрагмента кода:
Преобразование из внутреннего формата хранения в формат ввода/вывода
Преобразование из формата ввода/вывода во внутренний формат хранения
Для примера разберём алгоритм поведения альфа-преобразования:
Берём INTERNAL (0000101101), убираем оттуда лидирующие нули, кладём в EXTERNAL (101101)
Берём EXTERNAL (101101), если поле содержит только цифры, то сдвигаем все поля вправо, заполняя пустое место символами нулей и кладём в INTERNAL (0000101101)
Для полноты демонстрации реализуем кое-что веселее альфа-преобразования – номер телефона:
Принимаем следующий формат вывода: +7(701)123-45-67
Принимаем следующий внутренний формат: 10 значащих цифр 7011234567
Итак!
1. Функциональный модуль ZCONVERSION_EXIT_ZPHON_INPUT
FUNCTION zconversion_exit_zphon_input. *"---------------------------------------------------------------------- *"*"Локальный интерфейс: *" IMPORTING *" VALUE(INPUT) TYPE CLIKE *" EXPORTING *" VALUE(OUTPUT) TYPE CLIKE *"---------------------------------------------------------------------- *1234567890 *+7(123)456-78-90 *1234567890123456 lv_zero = 10 - STRLEN( lv_external ). OUTPUT = lv_external(10).
2. Функциональный модуль ZCONVERSION_EXIT_ZPHON_OUTPUT
FUNCTION zconversion_exit_zphon_output. *"---------------------------------------------------------------------- *"*"Локальный интерфейс: *" IMPORTING *" VALUE(INPUT) TYPE CLIKE *" EXPORTING *" VALUE(OUTPUT) TYPE CLIKE *"---------------------------------------------------------------------- *+7(123)456-78-90 *1234567890123456 CONCATENATE '+7(' lv_internal(3) ')' lv_internal+3(3) '-' lv_internal+6(2) '-' lv_internal+8(2) INTO OUTPUT. CONCATENATE '+7(' lv_internal(4) ')' lv_internal+4(2) '-' lv_internal+6(2) '-' lv_internal+8(2) INTO OUTPUT.
3. Создаём домен
Обратите внимания на разницу между типом поля (10) и длинной вывода (16).
В нашем домене пять знаков подпрограммы (ZPHON) преобразования должны быть равны пяти знакам в именах двух наших функциональных модулей. Это стандартная кодировка:
CONVERSION_EXIT_ZZZZZ_INPUT – преобразовывает из внешнего формата во внутренний
CONVERSION_EXIT_ZZZZZ_OUTPUT – преобразовывает из внутреннего формата во внешний
Для тестирования напишем простую программку:
report zivab_test1.
На селективном экране уже видно, что выводимый формат отличается от значений, присвоенных в коде программы:
И если запустить, то можно будет увидеть оба варианта первого параметра:
Волшебные слова “using no edit mask” предназначены для редкой необходимости вывести именно техническое содержимое поля.