Для отображения динамического экрана выбора полей существует набор функциональных модулей, описанных в группе функций SSEL. Простой пример выбора полей из определенной таблицы продемонстрирован в программе DEMO_FREE_SELECTIONS.
Для непосредственной генерации и отображения экрана выбора используются модули FREE_SELECTIONS_INIT и FREE_SELECTIONS_DIALOG. Первый возвращает дескриптор экрана с указанными настройками, второй отображает данный экран и возвращает критерии выбора.
Ниже приведено описание некоторых параметров указанных функциональных модулей и примеры их использования. Более подробную информацию о динамических селекционных экранах можно найти в справке SAP help.sap.com.
FREE_SELECTIONS_INIT
Основные параметры
- SELECTION_ID — сгенерированный дескриптор экрана
- KIND — тип выборки
- T — для выбора доступны все поля указанных таблиц (по умолчанию)
- F — для выбора будут доступны поля, описанные в таблице FIELDS_TAB
- TABLES_TAB — список таблиц для выбора
- FIELDS_TAB — список полей для выбора
Пример 1
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
REPORT z_ssel_test. DATA: gv_selid TYPE rsdynsel-selid, gt_field_tab TYPE TABLE OF rsdsfields, gs_field LIKE LINE OF gt_field_tab, gt_table_tab TYPE TABLE OF rsdstabs, gs_table LIKE LINE OF gt_table_tab, gt_cond_tab TYPE rsds_twhere. gs_table-prim_tab = 'BSEG'. APPEND gs_table TO gt_table_tab. gs_field-tablename = 'BSEG'. gs_field-fieldname = 'BUKRS'. APPEND gs_field TO gt_field_tab. gs_field-fieldname = 'BELNR'. APPEND gs_field TO gt_field_tab. gs_field-fieldname = 'GJAHR'. APPEND gs_field TO gt_field_tab. CALL FUNCTION 'FREE_SELECTIONS_INIT' EXPORTING kind = 'T' IMPORTING selection_id = gv_selid TABLES tables_tab = gt_table_tab fields_tab = gt_field_tab EXCEPTIONS OTHERS = 4. IF sy-subrc <> 0. MESSAGE 'Ошибка инициализации' TYPE 'I' DISPLAY LIKE 'E'. LEAVE PROGRAM. ENDIF. CALL FUNCTION 'FREE_SELECTIONS_DIALOG' EXPORTING selection_id = gv_selid title = 'Выбор данных из таблицы BSEG' IMPORTING where_clauses = gt_cond_tab TABLES fields_tab = gt_field_tab EXCEPTIONS OTHERS = 4. |
FREE_SELECTIONS_DIALOG
Основные параметры
- SELECTION_ID — сгенерированный дескриптор экрана
- TITLE — GUI-заголовок
- PFKEY — GUI-статус
- FRAME_TEXT — текст рамки
- TREE_VISIBLE — если X, отображается дерево выбора полей
- AS_WINDOW — если X, то экран выбора отображается в модальном окне
- START_ROW — положение модального окна (номер строки)
- START_COL — положение модального окна (номер столбца)
- WHERE_CLAUSES — таблица выбранных данных, предназначенная для выбора данных из БД
- FIELD_RANGES — таблица выбранных данных, в виде диапазонов значений
Пример 2
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
REPORT z_ssel_test. DATA: gv_selid TYPE rsdynsel-selid, gt_field_tab TYPE TABLE OF rsdsfields, gs_field LIKE LINE OF gt_field_tab, gt_table_tab TYPE TABLE OF rsdstabs, gs_table LIKE LINE OF gt_table_tab, gt_cond_tab TYPE rsds_twhere. gs_table-prim_tab = 'BSEG'. APPEND gs_table TO gt_table_tab. gs_field-tablename = 'BSEG'. gs_field-fieldname = 'BUKRS'. APPEND gs_field TO gt_field_tab. gs_field-fieldname = 'BELNR'. APPEND gs_field TO gt_field_tab. gs_field-fieldname = 'GJAHR'. APPEND gs_field TO gt_field_tab. CALL FUNCTION 'FREE_SELECTIONS_INIT' EXPORTING kind = 'T' IMPORTING selection_id = gv_selid TABLES tables_tab = gt_table_tab fields_tab = gt_field_tab EXCEPTIONS OTHERS = 4. IF sy-subrc <> 0. MESSAGE 'Ошибка инициализации' TYPE 'I' DISPLAY LIKE 'E'. LEAVE PROGRAM. ENDIF. CALL FUNCTION 'FREE_SELECTIONS_DIALOG' EXPORTING selection_id = gv_selid title = 'Выбор данных из таблицы BSEG' tree_visible = '' frame_text = 'Параметры' as_window = 'X' start_row = 1 start_col = 1 no_intervals = 'X' IMPORTING where_clauses = gt_cond_tab TABLES fields_tab = gt_field_tab EXCEPTIONS OTHERS = 4. |
Пример 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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
REPORT z_ssel_test. DATA: gv_selid TYPE rsdynsel-selid, gt_field_tab TYPE TABLE OF rsdsfields, gs_field LIKE LINE OF gt_field_tab, gt_table_tab TYPE TABLE OF rsdstabs, gs_table LIKE LINE OF gt_table_tab, gt_cond_tab TYPE rsds_twhere, ls_pfkey TYPE rsdspfkey. gs_table-prim_tab = 'BSEG'. APPEND gs_table TO gt_table_tab. gs_field-tablename = 'BSEG'. gs_field-fieldname = 'BUKRS'. APPEND gs_field TO gt_field_tab. gs_field-fieldname = 'BELNR'. APPEND gs_field TO gt_field_tab. gs_field-fieldname = 'GJAHR'. APPEND gs_field TO gt_field_tab. CALL FUNCTION 'FREE_SELECTIONS_INIT' EXPORTING kind = 'T' IMPORTING selection_id = gv_selid TABLES tables_tab = gt_table_tab fields_tab = gt_field_tab EXCEPTIONS OTHERS = 4. IF sy-subrc <> 0. MESSAGE 'Ошибка инициализации' TYPE 'I' DISPLAY LIKE 'E'. LEAVE PROGRAM. ENDIF. ls_pfkey-pfkey = 'SEL'. ls_pfkey-program = sy-cprog. CALL FUNCTION 'FREE_SELECTIONS_DIALOG' EXPORTING selection_id = gv_selid pfkey = ls_pfkey title = 'Выбор данных из таблицы BSEG' tree_visible = '' frame_text = 'Параметры' IMPORTING where_clauses = gt_cond_tab TABLES fields_tab = gt_field_tab EXCEPTIONS OTHERS = 4. |
Присоединиться к обсуждению...