Руководство для участников курса Версия курса 2й квартал 2005 г. Продолжительность курса 5 Дн. Номер материала 50072594
Скачать 38.91 Mb.
|
Глава 9: Диалоги пользователя BC400 Рисунок 136: Создание нескольких вторичных списков Событие AT LINE-SELECTION также может быть инициировано выбором строки во вторичном списке. Это означает, что в этом случае также выполняется соответствующий блок обработки в программе. Следовательно, для правильного выполнения в рамках блока должна существовать возможность определения того, в каком списке был произведен выбор текущей строки. Для этого можно использовать системное поле sy-lsind . В данном поле отображается текущий уровень списка: “0” для основного списка, “1” для первого вторичного списка и т. д. На рисунке выше показана функция поля sy-lsind и то, каким образом этому полю присваивается значение: каждый раз при выборе строки значение в поле sy-lsind автоматически увеличивается на одну единицу; при каждом возврате на предыдущий уровень списка sy-lsind уменьшается на одну единицу. Можно создать до 20 уровней списка. Поле sy-lsind используется для управления обработкой в блоке AT LINE-SELECTION (например, с помощью оператора CASE). Оператор WRITE всегда выполняется на текущем уровне списка. Если при выборе строки в блоке AT LINE-SELECTION вторичный список не генерируется, то значение sy-lsind автоматически уменьшается на одну единицу. Затем на экране отображается тот уровень, на котором была выбрана строка. 240 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Списки Рисунок 137: Простой пример синтаксиса Показанная выше программа-образец имеет следующую функцию: • В основном списке выводится текст “ Основной список ” вместе с текущим значениемsy-lsind, равным нулю. • При выборе строки основного списка во вторичном списке появляется текст “ 1-ый вторичный список ” с текущим значением sy-lsind, равным единице. • При выборе строки из вторичного списка появляется второй вторичный список, в котором выводится текст “ 2-ой вторичный список ” с текущим значением sy-lsind, равным двум. • При выборе строки во втором вторичном списке значение sy-lsind увеличивается до 3, но следующий вторичный список не создается. Поэтому значениеsy-lsind автоматически уменьшается на одну единицу, и на экране снова отображается второй вторичный список. 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 241 Глава 9: Диалоги пользователя BC400 Рисунок 138: Пример использования вторичного списка На рисунке выше показан пример программы, в которой используется основной и вторичный список: • Направления авиаперелетов с подробными данными должны отображаться в основном списке. Они считываются из таблицы базы данных SPFLI. • Во вторичном списке должно отображаться расписание рейсов для выбранного направления с соответствующими подробными данными. Они считываются из таблицы базы данных SFLIGHT. Для выбора соответствующей информации для вторичного списка (после выбора строки в основном списке) выбранная строка или, по крайней мере, ключевые значения этой строки должны быть доступны для события AT LINE-SELECTION . Данная процедура показана на следующем рисунке. 242 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Списки Рисунок 139: Буферизация специфичных для строки данных в скрытой области Для получения доступа к ключевым значениям выбранной строки после выбора строки основного списка следует внедрить описанную ниже процедуру: • Для каждой строки основного списка соответствующие ключевые значения хранятся в скрытой области в пределах программы. • При выборе строки данные, скрытые для этой определенной строки, снова становятся доступными. Для сохранения специфичных для строки ключевых значений в скрытой области используется оператор HIDE (здесь: HIDE: wa_spfli-carrid, wa_spfli-connid. ), который должен выполняться сразу после генерации каждой строки основного списка. После выбора строки соответствующие ключевые значения переносятся обратно в исходные поля (здесь: wa_spfli-carrid и wa_spfli-connid), и инициируется событие AT LINE-SELECTION. Эта процедура показана на рисунке ниже. Рекомендация: Предварительный вывод полей HIDE с помощью оператора WRITE не требуется. Это означает, что с помощью оператора HIDE для каждой строки основного списка можно также сохранить информацию, которая не появляется в основном списке, в скрытой области. Поле HIDE может также являться “плоской” структурой. 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 243 Глава 9: Диалоги пользователя BC400 Рисунок 140: Поток данных для выбора строк Рекомендация: В отличие от основных списков, вторичные списки не имеют фиксированных стандартных заголовков, поскольку эти заголовки могут присваиваться динамически. Следовательно, может возникнуть необходимость внедрения собственных заголовков с использованием операторов WRITE. На следующем рисунке показан весь блок AT LINE-SELECTION программы-образца. В этом блоке данные (здесь: расписание рейсов) в основном считываются и выводятся с помощью скрытых значений, которые были перенесены обратно в исходные поля. 244 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Списки Рисунок 141: Экран исходного текста (пример приложения) Рекомендация: Программа-образец имеет имя SAPBC400UDD_DETAIL_LIST и является компонентом пакета BC400. 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 245 Глава 9: Диалоги пользователя BC400 246 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Списки Упражнение 12: Списки Цели упражнения Выполнив это упражнение, вы сможете • внедрять в программу вторичные списки Практический пример При выборе пользователем строки основного списка на экране должен появляться вторичный список с подробной информацией. Задание 1: Подготовка к генерации вторичного списка 1. Скопируйте программу ZBC400_##_SELECT_SFLIGHT или соответствующий шаблон SAPBC400DDS_AUTHORITY_CHECK в новую программу ZBC400_##_DETAIL_LIST. 2. Убедитесь в том, что соответствующие ключевые значения для создания вторичного списка будут доступны в программе после выбора строки основного списка (даты рейса). 3. Для создания основного и вторичного списка в программу необходимо внедрить два функциональных блока. Задание 2: Создание вторичного списка 1. В первой строке вторичного списка выведите ключевую информацию из выбранного расписания рейсов. Ниже поместите горизонтальную линию и одну пустую строку. 2. Из таблицы базы данных SBOOK должны выбираться все записи о бронировании для выбранного расписания рейсов с последующим выводом во вторичном списке. Для вывода каждой записи о бронировании должны считываться только следующие поля: BOOKID, CUSTOMID, CUSTTYPE, CLASS, ORDER_DATE, SMOKER, CANCELLED. Продолжение на следующей странице 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 247 Глава 9: Диалоги пользователя BC400 3. Дополнительно: Во вторичном списке выведите поля LOCCURAM и LOCCURKEY: для этого необходимо использовать дополнение CURRENCY к оператору WRITE, которое позволит проверить, что сумма LOCCURAM отформатирована согласно валюте LOCCURKEY. Рекомендация: WRITE: wa_sbook-loccuram CURRENCY wa_sbook-loccurkey, wa_sbook-loccurkey. 4. Дополнительно: Выведите поле BOOKID с использованием цвета COL_KEY. 248 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Списки Решение 12: Списки Задание 1: Подготовка к генерации вторичного списка 1. Скопируйте программу ZBC400_##_SELECT_SFLIGHT или соответствующий шаблон SAPBC400DDS_AUTHORITY_CHECK в новую программу ZBC400_##_DETAIL_LIST. a) Этот шаг выполняется в соответствии с обычной процедурой. 2. Убедитесь в том, что соответствующие ключевые значения для создания вторичного списка будут доступны в программе после выбора строки основного списка (даты рейса). a) См. выдержку из исходного текста в примере решения. 3. Для создания основного и вторичного списка в программу необходимо внедрить два функциональных блока. a) См. выдержку из исходного текста в примере решения. Задание 2: Создание вторичного списка 1. В первой строке вторичного списка выведите ключевую информацию из выбранного расписания рейсов. Ниже поместите горизонтальную линию и одну пустую строку. a) См. выдержку из исходного текста в примере решения. 2. Из таблицы базы данных SBOOK должны выбираться все записи о бронировании для выбранного расписания рейсов с последующим выводом во вторичном списке. Для вывода каждой записи о бронировании должны считываться только следующие поля: BOOKID, CUSTOMID, CUSTTYPE, CLASS, ORDER_DATE, SMOKER, CANCELLED. a) См. выдержку из исходного текста в примере решения. Продолжение на следующей странице 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 249 Глава 9: Диалоги пользователя BC400 3. Дополнительно: Во вторичном списке выведите поля LOCCURAM и LOCCURKEY: для этого необходимо использовать дополнение CURRENCY к оператору WRITE, которое позволит проверить, что сумма LOCCURAM отформатирована согласно валюте LOCCURKEY. Рекомендация: WRITE: wa_sbook-loccuram CURRENCY wa_sbook-loccurkey, wa_sbook-loccurkey. a) См. выдержку из исходного текста в примере решения. 4. Дополнительно: Выведите поле BOOKID с использованием цвета COL_KEY. a) См. выдержку из исходного текста в примере решения. Результат Выдержка из исходного текста (без необязательных компонентов): SAPBC400UDS_DETAIL_LIST REPORT sapbc400uds_detail_list. CONSTANTS actvt_display TYPE activ_auth VALUE ’03’. DATA: wa_flight TYPE sbc400focc, wa_sbook TYPE sbook PARAMETERS pa_car TYPE s_carr_id. START-OF-SELECTION. AUTHORITY-CHECK OBJECT ’S_CARRID’ ID ’CARRID’ FIELD pa_car ID ’ACTVT’ FIELD actvt_display. CASE sy-subrc. WHEN 0. SELECT carrid connid fldate seatsmax seatsocc FROM sflight INTO CORRESPONDING FIELDS OF wa_flight WHERE carrid = pa_car. Продолжение на следующей странице 250 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Списки wa_flight-percentage = 100 * wa_flight-seatsocc / wa_flight-seatsmax. WRITE: / wa_flight-carrid, wa_flight-connid, wa_flight-fldate, wa_flight-seatsocc, wa_flight-seatsmax, wa_flight-percentage,’%’. * Hide key values of the current line HIDE: wa_flight-carrid, wa_flight-connid, wa_flight-fldate. ENDSELECT. IF sy-subrc NE 0. WRITE: ’No ’, pa_car, ’flights found !’. ENDIF. WHEN OTHERS. WRITE: / ’Authority-Check Error’(001). ENDCASE. CLEAR wa_flight. AT LINE-SELECTION. IF sy-lsind = 1. WRITE: / wa_flight-carrid, wa_flight-connid, wa_flight-fldate. ULINE. SKIP. * Reading bookings of the selected flight SELECT bookid customid custtype class order_date smoker cancelled FROM sbook INTO CORRESPONDING FIELDS OF wa_sbook WHERE carrid = wa_flight-carrid AND connid = wa_flight-connid AND fldate = wa_flight-fldate. * Creating detail list WRITE: / wa_sbook-bookid, wa_sbook-customid, wa_sbook-custtype, wa_sbook-class, wa_sbook-order_date, wa_sbook-smoker, wa_sbook-cancelled. ENDSELECT. Продолжение на следующей странице 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 251 Глава 9: Диалоги пользователя BC400 ENDIF. CLEAR wa_flight. Выдержка из исходного текста (с необязательными компонентами): SAPBC400UDS_DETAIL_LIST1 REPORT sapbc400uds_detail_list1. CONSTANTS actvt_display TYPE activ_auth VALUE ’03’. DATA: wa_flight TYPE sbc400focc, wa_sbook TYPE sbook. PARAMETERS pa_car TYPE s_carr_id. START-OF-SELECTION. AUTHORITY-CHECK OBJECT ’S_CARRID’ ID ’CARRID’ FIELD pa_car ID ’ACTVT’ FIELD actvt_display. CASE sy-subrc. WHEN 0. SELECT carrid connid fldate seatsmax seatsocc FROM sflight INTO CORRESPONDING FIELDS OF wa_flight WHERE carrid = pa_car. wa_flight-percentage = 100 * wa_flight-seatsocc / wa_flight-seatsmax. WRITE: / wa_flight-carrid, wa_flight-connid, wa_flight-fldate, wa_flight-seatsocc, wa_flight-seatsmax, wa_flight-percentage,’%’. * Hide key values of the current line HIDE: wa_flight-carrid, wa_flight-connid, wa_flight-fldate. ENDSELECT. IF sy-subrc NE 0. WRITE: ’No ’, pa_car, ’flights found !’. ENDIF. WHEN OTHERS. WRITE: / ’Authority-Check Error’(001). Продолжение на следующей странице 252 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Списки ENDCASE. CLEAR wa_flight. AT LINE-SELECTION. IF sy-lsind = 1. WRITE: / wa_flight-carrid, wa_flight-connid, wa_flight-fldate. ULINE. SKIP. * Reading bookings of the selected flight SELECT bookid customid custtype class order_date smoker cancelled loccuram loccurkey FROM sbook INTO CORRESPONDING FIELDS OF wa_sbook WHERE carrid = wa_flight-carrid AND connid = wa_flight-connid AND fldate = wa_flight-fldate. * Creating detail list WRITE: / wa_sbook-bookid COLOR col_key, wa_sbook-customid, wa_sbook-custtype, wa_sbook-class, wa_sbook-order_date, wa_sbook-smoker, wa_sbook-cancelled, wa_sbook-loccuram CURRENCY wa_sbook-loccurkey, wa_sbook-loccurkey. ENDSELECT. ENDIF. CLEAR wa_flight. 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 253 Глава 9: Диалоги пользователя BC400 Резюме по уроку Теперь вы сможете: • описывать атрибуты и преимущества ABAP-списков • внедрять заголовки списков и столбцов • внедрять многоуровневые списки • внедрять интерактивные списки 254 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Экран выбора Урок: Экран выбора Обзор урока На этом уроке рассматриваются преимущества использования экрана выбора. В дополнение к предыдущим определениям PARAMETERS, здесь также представлена опция ограничения SELECT-OPTIONS, которая позволяет установить более сложные ограничения для выбора данных. Кроме того, описывается использование ABAP-событий AT SELECTION-SCREEN для внедрения проверки ввода или проверки полномочий с возможным выводом диалогового сообщения об ошибках на экране выбора. Цели урока Прослушав этот урок, вы сможете • описывать свойства и преимущества экранов выбора • внедрять опции ограничения выбора данных на экране выбора • внедрять проверку ввода и полномочий с выводом диалога при обнаружении ошибок на экране выбора Практический пример С помощью экрана выбора программы можно разрешить пользователям устанавливать намного более сложные ограничения для выбора данных, чем те, которые допускаются простыми определениями PARAMETERS. В случае отрицательного результата проверки ввода или полномочий на экране выбора должно появляться соответствующее сообщение об ошибке, после чего пользователь может выполнить повторную попытку ввода. 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 255 Глава 9: Диалоги пользователя BC400 Преимущества экранов выбора Рисунок 142: Архитектура и цель использования экрана выбора Экраны выбора используются для ввода критериев выбора в целях выбора данных. Например, при создании программой списка данных из очень большой таблицы базы данных часто целесообразно предварительно выбрать те записи данных, которые действительно необходимы пользователю, и считывать из базы данных только эти записи. Помимо сокращения потребности в памяти, это также позволяет сократить нагрузку на сеть. 256 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 06-04-2006 BC400 Урок: Экран выбора Рисунок 143: Атрибуты экрана выбора Экран выбора имеет следующие стандартные функции: • Тексты на экране выбора (тексты критериев выбора) могут быть введены на нескольких языках. Во время выполнения тексты автоматически выводятся на экран на языке входа в систему пользователя (автоматический выбор языка). • Выполняется автоматическая проверка типов: если пользователем были введены данные, тип которых не соответствует типу поля ввода, то они игнорируются SAP GUI и не появляются на экране выбора. • Помимо указания отдельных значений (PARAMETERS), на экране выбора можно также внедрить сложные критерии выбора (SELECT-OPTIONS). В качестве ограничений могут вводиться интервалы, сравнительные условия или даже модели. • Если поле ввода определяется с помощью элемента словаря (т.е. является элементом данных), то при нажатии функциональной клавиши F1 (справка по вводу) можно вызвать документацию по полям (документацию элемента данных). С помощью функциональной клавиши F4 (справка по вводу) вызывается средство поиска элемента данных, предназначенное для просмотра допустимых значений ввода. • Созданные экраны выбора могут быть сохранены как варианты для повторного использования или обработки в фоновом режиме. 06-04-2006 © 2006 г. SAP AG All rights reserved. Авторские права защищены. 257 |