POPUP_TO_CONFIRM - Как по мне, то это один из удачных примеров как нужно было бы делать правильные функции общего использования, за небольшим исключением о котором напишу ниже, этот ФМ может использоваться в 99% случаев, когда нужно вывести какую-то информацию и запросить реакцию пользователя. В общем виде ФМ можно вызвать в следующем виде:
INCLUDE <icon>.
DATA: l_answer(1) TYPE c.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = 'Текст заголовка окна'
text_question = 'Вы уверены?'
text_button_1 = 'Да'
icon_button_1 = 'ICON_CHECKED'
text_button_2 = 'Полюбому'
icon_button_2 = 'ICON_EXECUTE_OBJECT'
default_button = '3'
display_cancel_button = 'X'
start_column = 25
start_row = 6
popup_type = 'ICON_MESSAGE_WARNING'
iv_quickinfo_button_1 = 'Типа похоже что да!'
iv_quickinfo_button_2 = 'Да 100% надо!'
IMPORTING
answer = l_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
По параметрам можно сказать следующее:
titlebar - Текст заголовка окна
text_question - Собственно сам текст вопроса в окне
text_button_1 - Собственно текст на первой кнопке. Если переменную не определять, по умолчанию будет выведено 'Да'
icon_button_1 - Имя пиктограммы которую требуется вывести на первой кнопке, имена пиктограмм смотреть в транзакции ICON.
text_button_2 - Собственно текст на второй кнопке. Если переменную не определять, по умолчанию будет выведено 'Нет'
icon_button_2 - Имя пиктограммы которую требуется вывести на второй кнопке, имена пиктограмм как уже говорилось смотреть в транзакции ICON.
default_button - Номер кнопки которая будет выбрана по умолчанию, в данном случае по умолчанию выбрана кнопка CANCEL. По умолчанию активной становится первая кнопка.
display_cancel_button - Признак, нужно выводить третью кнопку CANCEL или нет. По умолчанию кнопка выводиться. Для отключения как обычно надо передать параметр SAPACE.
start_column - Начальная колонка вывода окна, верхний левый угол, по умолчанию = 25.
start_row - Начальная строка вывода окна, верхний левый угол, по умолчанию = 6.
popup_type - Иконка выводимая рядом с текстом вопроса. По умолчанию обычно это знак вопроса, но можно вывести другие символы типа восклицательный знак, знак стоп и т.д. Тонкость только одна, имена пиктограмм должны начинаться на 'ICON_MESSAGE_*'. Имена пиктограмм можно посмотреть в транзакции ICON.
iv_quickinfo_button_1 - Собственно говоря всплывающая подсказка для первой кнопки
iv_quickinfo_button_2 - Аналогично всплывающая подсказка для второй кнопки.
answer - Номер выбранной/нажатой пользователем кнопки. Выводится для первой кнопки = '1', для второй = '2', для кнопки Cancel значение = 'A'.
Теперь из недочетов, кнопки всегда выводится 2, вот если бы бойцы дожали и кнопку два, можно было бы скрывать как и кнопку Cancel, то в принципе большего от этого ФМ, можно было бы и не требовать, хотя нет.. кажется зря они жестко завязались на тип
popup_type = 'ICON_MESSAGE_*', можно было бы и разрешить выводить любую из пиктограмм.
В общем виде экран вопроса будет выглядеть как на рисунке
POPUP_TO_CONFIRM_1.
Вариант без кнопки CANCEL ниже и пример на рисунке
POPUP_TO_CONFIRM_2.
INCLUDE <icon>.
DATA: l_answer(1) TYPE c.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = 'Текст заголовка окна'
text_question = 'Вы уверены?'
text_button_1 = 'Да'
icon_button_1 = 'ICON_CHECKED'
text_button_2 = 'Полюбому'
icon_button_2 = 'ICON_EXECUTE_OBJECT'
default_button = '1'
display_cancel_button = space
start_column = 25
start_row = 6
popup_type = 'ICON_MESSAGE_WARNING'
iv_quickinfo_button_1 = 'Типа похоже что да!'
iv_quickinfo_button_2 = 'Да 100% надо!'
IMPORTING
answer = l_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
А теперь самое интересное. В данном ФМ, есть еще три параметра, которые позволяют значительно расширить возможности выводимого текста + внести в вывод элементы интерактивности.
diagnose_object - Имя текста который требуется вывести в окно.
userdefined_f1_help - Имя текста расширенной подсказки. Если этот параметр заполнен, тогда система выводит дополнительную кнопку с пиктограммой 'I' - Информация.
parameter - Таблица параметров переменных и значений. Эти переменные должны быть заданы в текстах, тогда система автоматически заменит введенные в тексте переменные на значения из этой таблицы.
Для этого сначала надо создать тексты. Для создания текстов используется транзакция SE61, пример на рисунке
SE61-1.png, при этом обратите внимание, что класс документа должен быть "Текст в диалоге", идентификатор текста 'DT'. Текст диалога задаем свой и жмем кнопку "Создать". Далее пишем текст, в местах где должны быть переменные вставляем имя переменной в следующем виде, как например &OBJECT&. Примеры кодов форматирования строк выбираем по смыслу. В примере рисунок
SE61-2.png После этого созданный объект можно использовать при вызове ФМ. Значения переменных задаются в таблице parameter, как в примере ниже. Для вывода текста информации в примере использовался стандартный уже созданный текст GRP_CUT_OR_DELETE_INFO, в принципе аналогично можно создать свой текст справки. Вид текста должен быть так же 'DT'. Вид окна показан на рисунке
POPUP_TO_CONFIRM_3.
INCLUDE <icon>.
DATA: l_answer(1) TYPE c,
lt_param LIKE spar OCCURS 1 WITH HEADER LINE,
l_text1 LIKE dokhl-object VALUE 'YUUK_TEST_DIALOG',
l_text2 LIKE dokhl-object VALUE 'GRP_CUT_OR_DELETE_INFO'.
lt_param-param = 'OBJECT'.
lt_param-value = 'OBJ_CKKS'.
APPEND lt_param.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = 'Текст заголовка окна'
diagnose_object = l_text1
text_question = 'Вы уверены?'
text_button_1 = 'Да'
icon_button_1 = 'ICON_CHECKED'
text_button_2 = 'Полюбому'
icon_button_2 = 'ICON_EXECUTE_OBJECT'
default_button = '3'
display_cancel_button = 'X'
userdefined_f1_help = l_text2
start_column = 25
start_row = 6
popup_type = 'ICON_MESSAGE_WARNING'
iv_quickinfo_button_1 = 'Типа похоже что да!'
iv_quickinfo_button_2 = 'Да 100% надо!'
IMPORTING
answer = l_answer
TABLES
parameter = lt_param
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
В общем функциональный модуль довольно неплохой и практически полностью готов к употреблению в своих программах... и можно сказать даже рекомендуем, ну чтобы не изобретать свою вермишель
