Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SE37 - Построитель функций => Тема начата: Uukrul от Июль 06, 2008, 03:26:25 pm
-
BP_POPUP_DIALOG - Выдает простенькое информационное окно с кнопкой "Дальше" и фиксированной позицией на экране. В общем виде к сожалению кое какой функционал в этой функции был не доделан. Например заполнение переменной title, можно не делать, все равно нигде не отражается, так же не работает переменная icon, тоже не отражается на экране, да и объявление кстати переменной icon, сделано в коде с ошибкой типа DATA: icon. Что в общем-то ну никак не может хранить значение иконки. Но в принципе, для простенького информационного сообщения можно использовать.
CALL FUNCTION 'BP_POPUP_DIALOG'
EXPORTING
title = space
caption = 'Краткий текст'
value = '1:'
comment = 'Общее описание значения перменной'
icon = space.
-
SMPO_DISPLAY_MESSAGES - Позволяет отрисовать список сообщений в модальном окошке, например типа в ходе работы какого-либо функционала, можно не выдавать ошибки командой MESSAGE а накопить их во внутреннюю табличку, а затем вывести в отдельном окне используя данную функцию. Пример вызова и результат, так сказать на лицо ;)
DATA: lt_messages LIKE rsuvm_msg OCCURS 1 WITH HEADER LINE.
lt_messages-msgty = 'E'.
lt_messages-msgid = 'MC'.
lt_messages-msgno = '004'.
APPEND lt_messages.
lt_messages-msgty = 'E'.
lt_messages-msgid = 'MC'.
lt_messages-msgno = '009'.
lt_messages-msgv1 = 'EKKO'.
APPEND lt_messages.
lt_messages-msgty = 'E'.
lt_messages-msgid = 'MC'.
lt_messages-msgno = '020'.
lt_messages-msgv1 = 'TEST_OBJ'.
lt_messages-msgv2 = sy-uname.
APPEND lt_messages.
CALL FUNCTION 'SMPO_DISPLAY_MESSAGES'
EXPORTING
titlebar = 'Список сообщений'
header_text_1 = 'Описание 1'
header_text_2 = 'Описание 2'
TABLES
messages = lt_messages.
Класс сообщений MC, взял от фонаря...
-
KLPOPUP_TO_DISPLAY_TEXT - Аналог функции BP_POPUP_DIALOG, выдает информационное окно из двух строк и кнопкой "Дальше". Позиция выводимого окна может быть задана произвольно.
CALL FUNCTION 'KLPOPUP_TO_DISPLAY_TEXT'
EXPORTING
titel = 'Заголовок окна'
textline1 = 'Строка сообщения 1'
textline2 = 'Строка сообщения 2'
start_column = 25
start_row = 6.
POPUP_TO_DISPLAY_TEXT_LO - Тоже самое что предыдущая функция, но выводит 3 строки сообщения... вообщем как обычно каждый индусский кролик пишет свой экранчик.
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT_LO'
EXPORTING
titel = 'Заголовок'
textline1 = 'Строка 1'
textline2 = 'Строка 2'
textline3 = 'Строка 3'
start_column = 15
start_row = 6.
-
COPO_POPUP_TO_DISPLAY_TEXTLIST - Позволяет вывести список строк в диалоговом окошке типа abap-list. Имеет два режима выполнения и скажем так при выводе можно задать выводить строку нормальной яркости или выделено, других опций форматирования текста к сожалению нет. Пример выполнения:
DATA: l_tabix(2) TYPE n,
l_function LIKE sy-ucomm,
lt_text_table LIKE tline OCCURS 1 WITH HEADER LINE.
lt_text_table-tdformat = '*'.
lt_text_table-tdline = 'Строка текста 1'.
APPEND lt_text_table.
lt_text_table-tdformat = '*'.
lt_text_table-tdline = '@12@ Строка текста с иконкой 2'.
APPEND lt_text_table.
lt_text_table-tdformat = 'U1'.
lt_text_table-tdline = '@15@ Выделенная строка текста с иконкой 3'.
APPEND lt_text_table.
lt_text_table-tdformat = '*'.
DO 20 TIMES.
l_tabix = sy-tabix + 10.
CONCATENATE 'Строка текста в цикле' l_tabix
INTO lt_text_table-tdline SEPARATED BY space.
APPEND lt_text_table.
ENDDO.
CALL FUNCTION 'COPO_POPUP_TO_DISPLAY_TEXTLIST'
EXPORTING
task = 'DISPLAY'
titel = 'Список для просмотра'
IMPORTING
function = l_function
TABLES
text_table = lt_text_table.
CALL FUNCTION 'COPO_POPUP_TO_DISPLAY_TEXTLIST'
EXPORTING
task = 'DECIDE'
titel = 'Список для просмотра'
IMPORTING
function = l_function
TABLES
text_table = lt_text_tabl
task - Режим отражения списка. Возможны два значения 'DISPLAY' или 'DECIDE', в первом случае это список в возможностью пролистывания через кнопки, а во-втором случае выводятся две кнопки "Копирвоать" и "Изменить".
lt_text_tabl - Список строк для вывода. В поле lt_text_table-tdformat можно задать фактически только одно значение, которое выделяет текст "U1", остальные значения не имеет смысла так как не обрабатываются.
Возвратный параметр FUNCTION для режима "DISPLAY" при нажатии на кнопку ОК, всегда содержит значение BACK, для режима "DECIDE", если нажата кнопка "Скопировать" = ACCE, для кнопки "Изменить" = MODI. В остальное вроде как ясно из примера.
-
POPUP_WITH_TABLE_DISPLAY_OK - Еще одна функция для вывода списка строк в формате abap-list. Из особенностей можно управлять размером и положением окна, передавать любую таблицу строк. Вообще-то если 15 символ в строках будет F - то в этой позиции выведется иконка крестика, а если S - тогда иконка "ОК", ну и еще из пользы, есть кнопка печати списка.
DATA: l_tabix(2) TYPE n,
l_choise LIKE sy-tabix,
lt_valuetab LIKE tline OCCURS 1 WITH HEADER LINE.
DO 20 TIMES.
l_tabix = sy-tabix + 10.
CONCATENATE 'Строка' l_tabix
INTO lt_valuetab SEPARATED BY space.
IF sy-tabix = 4. lt_valuetab+15(1) = 'F'. ENDIF.
IF sy-tabix = 6. lt_valuetab+15(1) = 'S'. ENDIF.
APPEND lt_valuetab.
ENDDO.
CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY_OK'
EXPORTING
endpos_col = 60
endpos_row = 10
startpos_col = 2
startpos_row = 2
titletext = 'Заголовок списка'
IMPORTING
choise = l_choise
TABLES
valuetab = lt_valuetab
EXCEPTIONS
break_off = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
l_choise - теоретически должен был бы содержать номер выбранной в списке строки, но на самом деле ничего не выполняет и всегда равен нулю...
PS (02.03.2011): Кстати еще одна проблема, заголовок окна не устанавливается и всегда будет "Register", ну забыли бойцы там добавить в тексте амперсанд чтобы переданный текст выводился в заголовке. Кстати если кто думает что ФМ полностью бесполезен, то зря например очень легко можно вывести такую вот красоту как на рисунке POPUP_WITH_TABLE_DISPLAY_OK_2.png
-
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.
В общем функциональный модуль довольно неплохой и практически полностью готов к употреблению в своих программах... и можно сказать даже рекомендуем, ну чтобы не изобретать свою вермишель ;)
-
POPUP_TO_CONFIRM_STEP - Как говорит нам классика с версии 6.0, "Do not use! Please use POPUP_TO_CONFIRM", типа модуль устарел для использования, но если очень хочется, то можно. Выводится две кнопки "Да" и "Нет", можно добавить еще кнопку Cancel.
DATA: l_answer(1) TYPE c.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
DEFAULTOPTION = 'Y'
textline1 = 'Строка 1'
TEXTLINE2 = 'Строка 2'
titel = 'Заголовок окна'
START_COLUMN = 25
START_ROW = 6
CANCEL_DISPLAY = 'X'
IMPORTING
ANSWER = l_answer.
l_answer - Выбранная кнопка. Если выбрано "Да" - 'J', если "Нет" - 'N', если выбрано "Cancel" - 'A'.
Комментарии:
PS 02.02.2009: Кстати, сам SAP этот модуль довольно активно местами использует...
-
K_KKB_POPUP_RADIO2 и K_KKB_POPUP_RADIO3 - Позволяют вывести окно диалога с двумя и соответственно тремя радио-кнопками. Опять же можно и самому нарисовать, но смысле нет, если уже нарисовали до нас. Вызовы очень простые. Пример и как выглядит ниже:
DATA: l_result TYPE i.
CALL FUNCTION 'K_KKB_POPUP_RADIO2'
EXPORTING
i_title = 'Заголовок окна'
i_text1 = 'Выбор 1'
i_text2 = 'Выбор 2'
i_default = 2
IMPORTING
i_result = l_result
EXCEPTIONS
cancel = 1
OTHERS = 2.
IF sy-subrc <> 0. l_result = 2. ENDIF.
CASE l_result.
WHEN 1.
WHEN 2.
WHEN OTHERS.
ENDCASE.
CALL FUNCTION 'K_KKB_POPUP_RADIO3'
EXPORTING
i_title = 'Заголовок окна'
i_text1 = 'Выбор 1'
i_text2 = 'Выбор 2'
i_text3 = 'Выбор 3'
i_default = 2
IMPORTING
i_result = l_result
EXCEPTIONS
cancel = 1
OTHERS = 2.
IF sy-subrc <> 0. l_result = 2. ENDIF.
CASE l_result.
WHEN 1.
WHEN 2.
WHEN 3.
WHEN OTHERS.
ENDCASE.
-
K_KKB_PREPARE_CONVERSION - Диалоговое окно запроса данных курса, точнее в окне предлагается ввести данные кода валюты, дату и тип курса, курс надо будет читать самому, т.е. это только диалоговое окно запроса данных от пользователя и ничего больше. Нашлось по ходу в той же группе функций что и окна вывода радио-кнопок.
DATA: l_waers LIKE kkbc-kwaer,
l_date LIKE sy-datlo,
l_kurs LIKE tcurv-kurst.
l_waers = 'USD'.
l_date = sy-datum.
l_kurs = 'M'.
CALL FUNCTION 'K_KKB_PREPARE_CONVERSION'
CHANGING
pre_waers = l_waers
pre_date = l_date
pre_kurs = l_kurs
EXCEPTIONS
answer_cancel = 1
error_in_fields = 2
OTHERS = 3.
CASE sy-subrc.
WHEN 0. "OK
WHEN 1.
WHEN 2.
WHEN OTHERS.
ENDCASE.
08.02.2009: Как читать курсы, пример ФМ лежит кстати тут: http://sapforum.biz/index.php/topic,386.0.html
-
C14A_POPUP_ASK_FILE_OVERWRITE - Запрос подтверждения перезаписи файла. Случайно тут попалась функция из того же разряда, можно и самому сделать, а можно использовать уже готовое. Тем более вызов простой. Обратите внимание, что проверку на существование файла, данная функция не выполняет, т.е. проверку пишете сами, а уже далее если файл существует, используете этот ФМ, для запроса у пользователя, что делать с файлом.
DATA: l_bool LIKE boole-boole.
CALL FUNCTION 'C14A_POPUP_ASK_FILE_OVERWRITE'
IMPORTING
e_flg_continue = l_bool.
IF l_bool = 'X'. <Пользователь выбрал перезапись файла> ENDIF.
Кстати, данная функция использует ФМ POPUP_TO_CONFIRM_WITH_MESSAGE - который тоже, если подумать иногда можно прикручивать к своим программам. Так сказать еще одна вариация Да/Нет/Идите нафиг. Причем, последнюю кнопку можно скрыть из окна диалога.
CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
EXPORTING
defaultoption = 'Y'
diagnosetext1 = 'Однако есть проблема!'
diagnosetext2 = 'Ее похоже надо решать,'
diagnosetext3 = 'сама не рассосется!'
textline1 = 'Что очень плохо'
textline2 = 'так как решать не хочется'
titel = 'Начальника, есть проблема, да?'
start_column = 25
start_row = 6
cancel_display = 'X'
IMPORTING
answer = l_bool.
Примеры как оно выглядит на рисунках ниже...
-
BP_START_DATE_EDITOR - Как по мне очень полезная функция, позволяет запросить у пользователя параметры выполнения фонового задания, т.е оно конечно можно нарисовать и свой экран, но используя данный ФМ, вы получите такое же окно какое появляется при планировании стандартных отчетов в системе ну и как большой плюс эти параметры потом можно передавать в функции планирования заданий. В общем данный ФМ размещаю тут и в теме по работе с JOB-ами (http://sapforum.biz/index.php/topic,381.0.html), хотя там опишу чуток больше, чем в данной теме. И так вызов редактора времени запуска выполнения задания:
INCLUDE lbtchdef.
DATA: ls_stdt_input LIKE tbtcstrt,
l_stdt_modify_type LIKE btch0000-int4,
ls_stdt_output LIKE tbtcstrt.
ls_stdt_input-startdttyp = btc_stdt_datetime.
ls_stdt_input-sdlstrtdt = sy-datum.
ls_stdt_input-sdlstrttm = sy-uzeit.
CALL FUNCTION 'BP_START_DATE_EDITOR'
EXPORTING
stdt_dialog = 'Y'
stdt_input = ls_stdt_input
stdt_opcode = btc_edit_startdate
IMPORTING
stdt_modify_type = l_stdt_modify_type
stdt_output = ls_stdt_output
EXCEPTIONS
fcal_id_not_defined = 1
incomplete_last_startdate = 2
incomplete_startdate = 3
invalid_dialog_type = 4
invalid_eventid = 5
invalid_opcode = 6
invalid_opmode_name = 7
invalid_periodbehaviour = 8
invalid_predecessor_jobname = 9
last_startdate_in_the_past = 10
no_period_data_given = 11
no_startdate_given = 12
period_and_predjob_no_way = 13
period_too_small_for_limit = 14
predecessor_jobname_not_unique = 15
startdate_interval_too_large = 16
startdate_in_the_past = 17
startdate_is_a_holiday = 18
startdate_out_of_fcal_range = 19
stdt_before_holiday_in_past = 20
unknown_fcal_error_occured = 21
no_workday_nr_given = 22
invalid_workday_countdir = 23
invalid_workday_nr = 24
notbefore_stdt_missing = 25
workday_starttime_missing = 26
no_eventid_given = 27
OTHERS = 28.
INCLUDE lbtchdef - Полезный инклуд который включает в себя стандартные константы при работе с фоновыми заданиями. Можно его и не использовать, но все равно будет нужно брать значения констант из этого модуля. Вообще, рекомендую его прибить где-то в сторонке и использовать в случае работы с фонами.
В данном примере, я открываю окно планирования задания при этом активной будет закладка выполнения по дата/время и при этом я заполню дату и время по умолчанию, поэтому если пользователя все устраивает, то ему останется нажать только кнопку сохранения на экране запроса. То, что нас интересует планирование по дате запуска, определяется параметром ls_stdt_input-startdttyp = btc_stdt_datetime, где btc_stdt_datetime константа из lbtchdef, если перейти в модуль, то видно что это значение 'D', так что можно просто присвоить 'D', а можно типа, чтобы красиво, через предопределенные константы, или если бы например нам нужно было немедленный запуск задания, то тут нужно было задать константу btc_stdt_immediate, которая содержит значение 'I'.
Далее, задаем дату и время по умолчанию, в примере это типа текущее время:
ls_stdt_input-sdlstrtdt = sy-datum.
ls_stdt_input-sdlstrttm = sy-uzeit.
Затем вызываем ФМ. Передает параметр, stdt_dialog = 'Y', т.е. показать окно диалога и дальше передаем нашу структуру. Параметр stdt_opcode = btc_edit_startdate, тоже константа и по умолчанию, значение "14" задает, что мы хотим иметь возможность изменения данных, т.е. доступен режим редактирования, в отличии от btc_show_startdate, которая выведет окно со всеми полями в режиме просмотра. Кстати, данным ФМ-ом можно пользоваться не только в режиме диалога, например stdt_dialog = 'N', а stdt_opcode = btc_check_only, позволяет проверить данные условий запуска задания.
В общем виде пример окна будет как на рисунке BP_START_DATE_EDITOR.PNG, ниже. Вещь однако полезная, а уж кошерности вашим программам придаст выше крыши ;)
-
F4_DATE - Классика жанра, окно запроса даты у пользователя. С версии 4.6 позволяет так же запросить и номер недели. Пример вызова ниже, пример экрана там же.
DATA: l_select_date LIKE workflds-gkday,
l_select_week LIKE scal-week,
l_select_week_begin LIKE sy-datum,
l_select_week_end LIKE sy-datum,
l_date_for_first_month LIKE workflds-gkday.
l_date_for_first_month = sy-datum.
CALL FUNCTION 'F4_DATE'
EXPORTING
date_for_first_month = l_date_for_first_month
display = ' '
factory_calendar_id = ' '
gregorian_calendar_flag = ' '
holiday_calendar_id = ' '
progname_for_first_month = sy-repid
IMPORTING
select_date = l_select_date
select_week = l_select_week
select_week_begin = l_select_week_begin
select_week_end = l_select_week_end
EXCEPTIONS
calendar_buffer_not_loadable = 1
date_after_range = 2
date_before_range = 3
date_invalid = 4
factory_calendar_not_found = 5
holiday_calendar_not_found = 6
parameter_conflict = 7
OTHERS = 8.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
WRITE: / l_select_date,
/ l_select_week,
/ l_select_week_begin,
/ l_select_week_end.
Из интересного по входным параметрам:
- DATE_FOR_FIRST_MONTH - Вроде как первая дата начала месяца, но похоже что нигде не используется, так как любое значение которое передается, игнорируется.
- DISPLAY - Если передается Х, то календарь просто показывается, выбранное значение даты не возвращается, т.е. типа только показать календарь, если передать SPACE, тогда возвращается выбранная дата.
- FACTORY_CALENDAR_ID - Код производственного календаря.
- GREGORIAN_CALENDAR_FLAG - Флаг использования грегорианского каледаря.
- HOLIDAY_CALENDAR_ID - Код календаря праздничных дней. Вообще-то можно передавать или код календаря праздничных дней или код производственного календаря, но не то и другое вместе.
- PROGNAME_FOR_FIRST_MONTH - Честно не разбирался, по умолчанию передается имя отчета, похоже надо для правильного отражения окна календаря.
На выходе имеем следующий расклад:
- SELECT_DATE - Выбранная дата. Если пользователь выбрал дату, то остальные поля пустые.
- SELECT_WEEK Выбранная неделя.
- SELECT_WEEK_BEGIN - Дата начала выбранной недели.
- SELECT_WEEK_END - Дата конца выбранной недели.
Если пользователь выбрал кнопку отмены, то надо проверить параметр SELECT_DATE на значений 00000000.
-
POPUP_TO_SELECT_MONTH - Очень полезная функция для запроса у пользователя месяца и года. Выдает приятное окошко, пример ниже, если пользователь отказался от выбора то параметр return_code = 4, иначе return_code = 0. Как говориться не все так плохо в SAP ;). Начальный месяц можно задать в качестве параметра.
DATA: l_actual_month LIKE isellist-month,
l_return_code LIKE sy-subrc.
CONCATENATE sy-datum(4) sy-datum+4(2) INTO l_actual_month.
CALL FUNCTION 'POPUP_TO_SELECT_MONTH'
EXPORTING
actual_month = l_actual_month
* FACTORY_CALENDAR = ' '
* HOLIDAY_CALENDAR = ' '
language = sy-langu
start_column = 8
start_row = 5
IMPORTING
selected_month = l_actual_month
return_code = l_return_code
EXCEPTIONS
factory_calendar_not_found = 1
holiday_calendar_not_found = 2
month_not_found = 3
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
-
SO_WIND_SPOOL_LIST - Диалоговое окно со списком запросов спула для пользователя, запросы можно разделить по двум критериям, запросы вывода списков отчетов и запросы формуляров. Пользователю предлагается выбрать номер спула, выбранный номер запроса возвращается в из функции. Что с ним делать дальше уже решать, вам... а это только окошко.
DATA: l_spool_number LIKE rspotype-rqnumber,
l_spool_title LIKE rsporq-rqtitle.
CALL FUNCTION 'SO_WIND_SPOOL_LIST'
EXPORTING
owner = sy-uname
* OTF_ONLY = ' '
* LIST_ONLY = ' '
IMPORTING
spool_number = l_spool_number
spool_title = l_spool_title.
-
POPUP_TO_INFORM - Выводит простое информационное окно, максимум может быть выведено 4 текстовых строки. Как для быстрого вывода какой-то информации пользователю в модельном окне, можно использовать.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = 'Заголовок окна'
txt1 = 'Строка 1'
txt2 = 'Строка 2'
txt3 = 'Строка 3'
txt4 = 'Строка 4'.
-
POPUP_TO_CONFIRM_LOSS_OF_DATA - Еще одно полезное окошко с предупреждением что при выходе данные могут быть потеряны и двумя кнопками "Да" и "Нет".
DATA: l_answer(1) TYPE c.
CALL FUNCTION 'POPUP_TO_CONFIRM_LOSS_OF_DATA'
EXPORTING
textline1 = 'Первая строка 1'
textline2 = 'Вторая строка 2'
titel = 'Заголовок'
start_column = 25
start_row = 6
defaultoption = 'N' "J
IMPORTING
answer = l_answer.
-
POPUP_GET_VALUES - Диалоговое окно просмотра и запроса.
*&---------------------------------------------------------------------*
DEFINE systmess.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
DATA: is_sval TYPE sval,
it_sval TYPE TABLE OF sval.
DATA: lv_bukrs TYPE bukrs,
lv_date TYPE d,
lv_rcode.
is_sval-tabname = 'BKPF'.
is_sval-fieldname = 'BUKRS'.
APPEND is_sval TO it_sval. CLEAR is_sval.
is_sval-tabname = 'BKPF'.
is_sval-fieldname = 'BUDAT'.
is_sval-value = sy-datum.
APPEND is_sval TO it_sval. CLEAR is_sval.
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
popup_title = 'FM POPUP_GET_VALUES'
IMPORTING
returncode = lv_rcode
TABLES
fields = it_sval
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.
IF sy-subrc = 0.
CASE lv_rcode.
WHEN space.
LOOP AT it_sval INTO is_sval.
CASE is_sval-fieldname.
WHEN 'BUKRS'.
lv_bukrs = is_sval-value.
WHEN 'BUDAT'.
lv_date = is_sval-value.
ENDCASE.
ENDLOOP.
WHEN 'A'.
MESSAGE 'Отменено пользователем' TYPE 'S'.
ENDCASE.
ELSE.
systmess.
ENDIF.
RETURNCODE:
" " - выходная таблица содержит введенные значения
"A" - отменено пользователем, начальные значения.
-
POPUP_DISPLAY_MESSAGE - Вывод информационного окна по параметрам сообщения. В общем все прозрачно, окно выводится диалоговое, причем не зависимо от типа сообщения I, E, W, A будет просто диалог, по параметрам все прозрачно, ну разве что можно указать заголовок окна в котором выводится текст сообщения.
CALL FUNCTION 'POPUP_DISPLAY_MESSAGE'
EXPORTING
TITEL = 'Обанаружены проблемы'
msgid = 'M7'
msgty = 'A'
msgno = '004'
* MSGV1 =
* MSGV2 =
* MSGV3 =
* MSGV4 =
.
PS: Кстати, в связи с тем, что независимо от типа сообщения нет прерывания программы, например в ситуации с типом сообщения "A", то такую проблему надо обработать уже самостоятельно. Обычно при типе сообщения "A", как мы знаем, дальнейшее выполнение программы должно быть остановлено.
-
LVC_ITEM_DETAIL - Выводит окошко с ALV-таблицей из двух колонок. Раздобыто в недрах работы класса CL_GUI_ALV_GRID, но можно использовать отдельно. Из полезного можно сформировать набор табличек со значениями из двух колонок, тогда в окне появляются кнопки листания и можно просматривать данные листая содержимое. Пример вызова довольно не сложный:
DATA: gt_fieldcatalog TYPE lvc_t_fcat,
gs_fieldcatalog TYPE lvc_s_fcat,
gs_layout TYPE lvc_s_layo.
DATA: gt_outtab TYPE lvc_t_detm,
ls_detail TYPE lvc_s_detm,
lt_detail_tab TYPE lvc_t_deta,
ls_detail_tab TYPE lvc_s_deta.
DATA: l_index LIKE sy-tabix,
l_ctabix(2) TYPE c,
l_ctabix_top(2) TYPE c.
* Сформировать каталог полей. Поля должны быть имеено такие!
CLEAR: gt_fieldcatalog[], gs_fieldcatalog.
gs_fieldcatalog-fieldname = 'COLUMNTEXT'.
gs_fieldcatalog-ref_table = 'LVC_S_DETA'.
gs_fieldcatalog-key = 'X'.
gs_fieldcatalog-seltext = 'Поле'.
gs_fieldcatalog-scrtext_s = 'Поле'.
gs_fieldcatalog-outputlen = 30.
APPEND gs_fieldcatalog TO gt_fieldcatalog.
CLEAR gs_fieldcatalog.
gs_fieldcatalog-fieldname = 'VALUE'.
gs_fieldcatalog-ref_table = 'LVC_S_DETA'.
gs_fieldcatalog-seltext = 'Содержимое'.
gs_fieldcatalog-scrtext_s = 'Содержимое'.
gs_fieldcatalog-outputlen = 20.
APPEND gs_fieldcatalog TO gt_fieldcatalog.
* Заполнить 5 вариантов, в каждом варианте ражное число строк для примера
l_index = 0.
DO 5 TIMES.
CLEAR: lt_detail_tab[].
WRITE: sy-index TO l_ctabix_top LEFT-JUSTIFIED.
l_index = sy-uzeit+4(2).
WAIT UP TO 5 SECONDS.
DO l_index TIMES.
WRITE: sy-index TO l_ctabix LEFT-JUSTIFIED.
CONCATENATE 'Группа_' l_ctabix_top '-' l_ctabix INTO ls_detail_tab-columntext.
ls_detail_tab-value = l_ctabix.
APPEND ls_detail_tab TO lt_detail_tab.
ENDDO.
MOVE lt_detail_tab TO ls_detail-detailtab.
ls_detail-blockindex = sy-index.
APPEND ls_detail TO gt_outtab.
ENDDO.
* Убрать стандартный тулбар ALV-таблицы
gs_layout-no_toolbar = 'X'.
* Сформировать заголовок
CONCATENATE 'ALV-Таблица, всего записей:' l_ctabix_top INTO gs_layout-grid_title.
* Вывод данных
CALL FUNCTION 'LVC_ITEM_DETAIL'
EXPORTING
i_title = 'Заголовок окна'
i_screen_start_column = '1'
i_screen_start_line = '1'
i_screen_end_column = '70'
i_screen_end_line = '10'
it_fieldcatalog = gt_fieldcatalog
is_layout = gs_layout
TABLES
t_outtab = gt_outtab.
В коде я там задержку даю в 5 секунд чтобы в таблице попались разные результаты для демонстрации. Результат работы ниже, в общем как если надо быстро показать, то даже и не сложно все делается.
-
POPUP_TO_DECIDE_WITH_MESSAGE - Окно с кнопками, возможна кнопка отмены. На кнопках можно вывести свои иконки, и 6 строк текста, заголовок окна так же изменяем. Позиция окна задается при вызове или может оставаться по умолчанию. Система при попытке использовать данный ФМ, говорит, что он морально устарел, но так как по ходу он используется и очень активно, то а почему бы и нет. Общий вызов данной функции следующий:
TYPE-POOLS: icon.
DATA: l_answer(1) TYPE c.
CALL FUNCTION 'POPUP_TO_DECIDE_WITH_MESSAGE'
EXPORTING
defaultoption = '2'
diagnosetext1 = 'Диагностика проблемы 1'
diagnosetext2 = 'Диагностика проблемы 2'
diagnosetext3 = 'Диагностика проблемы 3'
textline1 = 'Комментарий о проблеме 1'
textline2 = 'Комментарий о проблеме 2'
textline3 = 'Комментарий о проблеме 3'
text_option1 = 'Кнопка 1'
text_option2 = 'Кнопка 2'
icon_text_option1 = 'ICON_ANNOTATION'
icon_text_option2 = 'ICON_CHANGE_TEXT'
titel = 'Шеф есть проблемы'
start_column = 25
start_row = 6
cancel_display = 'X'
IMPORTING
answer = l_answer.
Обращаем внимание, что передавать надо имена иконок и пула типов. Далее если выведены все три кнопки то параметр возврата l_answer, будет иметь следующие значения, если нажата:
- Первая кнопка = '1'
- Вторая кнопка = '2'
- Кнопка 'Отмена' = 'А'
Пример как это выгляди на рисунке POPUP_TO_DECIDE_WITH_MESSAGE.png ниже
-
DATA: l_tabix(2) TYPE n,
l_choise LIKE sy-tabix,
lt_valuetab LIKE tline OCCURS 1 WITH HEADER LINE.
а что за тип tline ?
и какого еще типа может быть эта таблица ?
l_choise PS (02.03.2011): Кстати еще одна проблема, заголовок окна не устанавливается и всегда будет "Register", ну забыли бойцы там добавить в тексте амперсанд чтобы переданный текст выводился в заголовке. Кстати если кто думает что ФМ полностью бесполезен, то зря например очень легко можно вывести такую вот красоту как на рисунке POPUP_WITH_TABLE_DISPLAY_OK_2.png
и как вы нарисовали таблицу POPUP_WITH_TABLE_DISPLAY_OK_2.png ? ... можно код?
-
а что за тип tline ?
Ну SE11 вам в руки и посмотрите, тоже мне проблема тип и поля структуры посмотреть.
и как вы нарисовали таблицу POPUP_WITH_TABLE_DISPLAY_OK_2.png ? ... можно код?
Ну как-то так наверное:
DATA: l_tabix(2) TYPE n,
l_choise LIKE sy-tabix,
lt_valuetab LIKE tline OCCURS 1 WITH HEADER LINE.
WRITE: sy-uline(50) TO lt_valuetab. APPEND lt_valuetab.
DO 20 TIMES.
l_tabix = sy-tabix + 10.
CONCATENATE sy-vline 'Строка' l_tabix sy-vline
INTO lt_valuetab SEPARATED BY space.
lt_valuetab+49(1) = sy-vline.
APPEND lt_valuetab.
ENDDO.
WRITE: sy-uline(50) TO lt_valuetab. APPEND lt_valuetab.
CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY_OK'
EXPORTING
endpos_col = 60
endpos_row = 10
startpos_col = 2
startpos_row = 2
titletext = 'Заголовок списка'
IMPORTING
choise = l_choise
TABLES
valuetab = lt_valuetab
EXCEPTIONS
break_off = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
-
POPUP_DISPLAY_TEXT - Вывод текстов в диалоговом окне. Тексты для вывода создаются через стандартную транзакцию SE61, вид текста DT - Текст в диалоге.
DATA: l_cancelled(1) TYPE c.
CALL FUNCTION 'POPUP_DISPLAY_TEXT'
EXPORTING
language = sy-langu
popup_title = 'Тестовый вывод текста в диалоге'
start_column = 10
start_row = 3
text_object = 'YTSH_TEST'
help_modal = 'X'
IMPORTING
cancelled = l_cancelled
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Из положительного, текст может быть довольно большим, его можно распечатать или выполнить поиск по тексту. Параметры вызова модуля в комментариях как мне кажется не нуждаются.
-
FINB_BAPIRET2_DISPLAY - Вывод сообщений ошибок, структура параметра совместима по структуре BAPIRET2, так что можно быстро оформить вывод информационного окна со списком ошибок, после например работы какой-либо BAPI функции.
DATA: lt_message TYPE /eacc/t_bapiret2,
ls_return LIKE bapiret2.
ls_return-type = 'E'.
ls_return-id = 'M3'.
ls_return-number = '001'.
APPEND ls_return TO lt_message.
ls_return-type = 'W'.
APPEND ls_return TO lt_message.
ls_return-type = 'S'.
APPEND ls_return TO lt_message.
CALL FUNCTION 'FINB_BAPIRET2_DISPLAY'
EXPORTING
it_message = lt_message.
-
C14A_POPUP_GET_VALUE_OF_FLAG - Небольшой модулек позволяющий вывести окно с чек-боксом. Все довольно прозрачно из особенностей, если в окне выбрать отмену, то результат всегда будет возвращен как = space, даже если вы по умолчанию задали признак "Х".
DATA: BEGIN OF lt_test OCCURS 0,
flag(1) TYPE c,
END OF lt_test.
DATA: l_set(1) TYPE c,
l_cancel(1) TYPE c.
CALL FUNCTION 'C14A_POPUP_GET_VALUE_OF_FLAG'
EXPORTING
i_table_name = 'LT_TEST'
i_field_name = 'FLAG'
i_field_descr =' Флаг выбора'
I_FLG_DEF_VALUE = 'X'
IMPORTING
e_flg_value = l_set
e_flg_cancel = l_cancel
EXCEPTIONS
illegal_input = 1
internal_error = 2
OTHERS = 3.
PS: Кстати, группа функций данного модуля, очень интересная, там много чего можно себе надергать для использования.
-
RSCRMBW_DISPLAY_BAPIRET2 - Еще один вариант вывода таблицы типа BAPIRET2 в диалоговом окне. Как по мне вариант не очень удачный, так как параметр таблицы MESSAGE надо сформировать самому, т.е. функция просто выводит строку MESSAGE без заполнения полей параметров, да и окно какое-то простенькое. В общем как по мне, то модуль FINB_BAPIRET2_DISPLAY - http://sapforum.biz/index.php/topic,223.msg12061.html#msg12061 (http://sapforum.biz/index.php/topic,223.msg12061.html#msg12061), описанный чуть выше, более предпочтителен для такого действия. Но мало ли, может и этот кому пригодится.
-
POPUP_TO_DECIDE - Случайно тут попалось, так сказать еще один вариант окошка с 2 или 3 кнопками размещенными вертикально, используется при сохранении заказов ММ, если заказ содержит ошибки или предупреждения. Из полезного, можно задавать иконку кнопки, текст и номер кнопки активный по умолчанию. Кнопку отмены CANCEL можно скрывать. Пример вызова в тестовом режиме на рисунке POPUP_TO_DECIDE_EXAMPLE.png, результат вызова на рисунке POPUP_TO_DECIDE.png.
(http://sapforum.biz/index.php?action=dlattach;topic=223.0;attach=3876;image)
Возвращаются значения:
- 1 - если нажата первая кнопка
- 2 - если нажата вторая кнопка
- A - если нажата кнопка отмены CANCEL или ESC с клавиатуры.
-
SSFH_PASSWORD_PROMPT - Запрос пароля. Понадобилось тут окошко для ввода пароля, ну как обычно, да есть и такое в системе, хотя как обычно можно конечно и свои варианты как написать так и подправить стандартные для этой цели. На выходе что-то такое получется как на картинке ниже.
DATA: l_signer TYPE ssfparms-signer,
l_headline TYPE ssfid,
l_password TYPE ssfinfo-password.
l_signer = sy-uname.
l_headline = 'Петров В.И.'.
CALL FUNCTION 'SSFH_PASSWORD_PROMPT'
EXPORTING
signer = l_signer
headline = l_headline
IMPORTING
password = l_password
EXCEPTIONS
canceled_by_user = 1
OTHERS = 2.
IF sy-subrc = 0.
* Пароль введен
ELSE.
* Ввод пароля отменен
ENDIF.