Один из простых способов выбрать последовательно материал — завод — склад, с учётом зависимости воспользоваться следующими ФМ:
Рубрика: SAP Dynpro
Создание и работа с классическим пользовательским интерфейсом SAP
Работа с SALV Hierseq Table
Для отображения иерархической таблицы с двумя уровнями иерархии (главный и подчиненный) в SALV модели используется класс — cl_salv_hierseq_table.
Примером подобной иерархии может служить заказ на закупку, который состоит из заголовочной части и позиций заказа. Связь в этой иерархии осуществляется с помощью ключевого поля «номер заказа» в заголовке и позиции заказа.
Таблица создается с помощью фабрично-статического метода factory(). При его вызове необходимо передать две таблицы с данными и таблицу, в которой прописана связь между ними с типом salv_t_hierseq_binding. В данной таблице указываются ключевые поля которые связывают таблицы, но не более 5 полей. Если у вас больше создавайте составные ключи в технических полях.
Следующий пример покажет, как вывести иерархическую таблицу закупочных заказов с позициями:
Работа с SALV Tree
Для отображения иерархического дерева состоящего из любого числа уровней иерархии в SALV модели используется класс — cl_salv_tree.
Строки в таком дереве называются узлами. Каждый узел, не важно, на каком он уровне, имеет одинаковую структуру со всеми остальными.
Дерево, как и другие классы SALV модели, создается с помощью фабрично-статического метода factory(). При этом при его вызове необходимо передавать не заполненную таблицу с данными, а пустую. Заполнение данных происходит на этапе определения узлов для созданного дерева. Объект дерева можно создать как в полно экранном режиме, так и в контейнере указав параметр r_container. Кроме того можно спрятать заголовок дерева – передав в параметр hide_header значение abap_true (X).
Иконки на экране выбора
Редко где в SAP транзакциях увидишь использование иконок на экране выбора, однако их использование может быть вполне полезным, вот например поле для выбора формата ALV выглядит более наглядным:
При этом дополнительной кодировки не требуется, достаточно указать код иконки в тексте критериев выбора:
Код иконки можно посмотреть в программе — SHOWICON.
Очистка selection-screen
Когда пользователь возвращается на экран выбора, данные которые были уже введены ранее сохраняются, для того чтобы программа обработки экрана выбора не сохраняла введенные значения можно воспользоваться следующим кодом:
1 2 3 4 5 6 |
START-OF-SELECTION. FIELD-SYMBOLS : <fs> . ASSIGN ('(RSDBRUNT)MEMKEY-INT_MODE') TO <fs> . IF sy-subrc = 0 . <fs> = '01' . ENDIF. |
Добавленное поле не показывается в ALV?
При использовании ФМ — REUSE_ALV_FIELDCATALOG_MERGE может возникнуть ситуация, когда добавленное в каталог новое поле не будет отображено в ALV, необходимо сбросить буфер ALV, для этого используйте программу: BCALV_BUFFER_DEL_SHARED или BALVBUFDEL.
Обработка событий в SALV модели
Объектная модель SALV не позволяет редактировать данные (нормальным способом), однако Вы можете обрабатывать множество других событий: нажатие на кнопки, hotspot элементы, ссылки, checkbox’ы, добавлять свои собственные функции, обрабатывать щелчки (двойные щелчки), нажатие специальных клавиш (F1,F2).
Получение данных из стандартных SAP GUI ALV отчётов
Приходилось ли Вам сталкиваться с ситуацией, когда стандартные ALV отчёты удовлетворяют частично Вашим потребностям, но при этом код в этих отчётах устроен слишком сложно, чтобы сразу понять всю логику выбора данных? Переписывать всю логику при этом будет достаточно накладно, но многие так и делают 🙂
Некоторые отчёты позволяют сделать обёртку над ними, они предоставляют все выбранные через них данные, получить к ним доступ можно через EXPORT TO MEMORY/IMPORT FROM MEMORY. В качестве примера может служить транзакция IA09 (программа riplko10), получить доступ к выбранным в ней данным можно следующим образом:
Редактируемый ALV в 3 строки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
REPORT zalv_grid. DATA: lo_alv TYPE REF TO cl_gui_alv_grid, lt_tab TYPE TABLE OF t001. SELECTION-SCREEN BEGIN OF SCREEN 1100. SELECTION-SCREEN END OF SCREEN 1100. SELECT * FROM t001 INTO TABLE lt_tab. *-- Строка 1 - создание инстанции грида CREATE OBJECT lo_alv EXPORTING i_parent = cl_gui_container=>screen0. *-- Строка 2 - привязка внутренней таблицы к гриду CALL METHOD lo_alv->set_table_for_first_display EXPORTING i_structure_name = 'T001' CHANGING it_outtab = lt_tab. *-- Строка 3 - показать экран с гридом CALL SELECTION-SCREEN 1100. |
Индикатор выполнения задачи
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
REPORT ZPROGRESS_INDICATOR. DATA: go_progress TYPE REF TO CL_AKB_PROGRESS_INDICATOR. CONSTANTS: co_max_times TYPE I VALUE 100000. INITIALIZATION. IF go_progress IS NOT BOUND. go_progress = CL_AKB_PROGRESS_INDICATOR=>get_instance( ). ENDIF. START-OF-SELECTION. WRITE 'TEST'. DO co_max_times TIMES. go_progress->display( EXPORTING total = co_max_times processed = sy-INDEX MESSAGE = 'В процессе..' ). ENDDO. |