Диалоговое программирование Ч.2. Основные элементы экрана


Основные элементы экрана

Теперь, когда у нас есть представление об элементах экрана, которые можно создать на экране, давайте продолжим и создадим некоторые из основных элементов.

Как обсуждалось ранее, для создания элементов экрана мы вызываем редактор компоновки, нажимая кнопку «Формат» в программе Screen Painter. Редактор графического макета является частью SAP GUI, и вы можете использовать его, если используете поддерживаемую версию SAP GUI на платформе Windows (SAP NetWeaver Application Server 6.10 с SAP GUI версии 6.10 или выше). Если вы не используете поддерживаемую платформу, система откроет буквенно-цифровой редактор. Оба редактора предлагают одинаковую функциональность, но разные интерфейсы. Графический редактор компоновки позволяет легко создавать элементы экрана с помощью перетаскивания.


Графический редактор компоновки состоит из трех компонентов:

Панель элементов 
Позволяет создавать все элементы экрана.
Рабочая область
Область, в которой вы проектируете экран, добавляя различные элементы экрана.
Атрибуты
Показывает основные атрибуты, связанные с элементом экрана при двойном щелчке по нему.

Далее мы рассмотрим шаги по созданию текстовых полей, флажков, переключателей и кнопок с помощью графического редактора макета в Screen Painter.

Поле текста.

Как упоминалось ранее, текстовые поля содержат метки для других полей и не редактируются. Чтобы создать текстовое поле, выполните следующие действия:

1. Выберите элемент из панели элементов и перетащите его в рабочую область, как показано ниже.


2. При необходимости отрегулируйте длину и высоту элемента.
3. Сохраните имя для элемента экрана.
4. Сохраните текст для элемента экрана. Этот текст будет отображаться внутри элемента.
5. Дважды щелкните на элемент экрана, чтобы открыть атрибуты элемента для сохранения дополнительных атрибутов. Если текстовый элемент отображается как метка для поля ввода-вывода, выберите Как ид. слева/Как ид. справа на вкладке Просмотр в разделе Атрибуты.

Флажки и радиокнопки


Чтобы создать флажок или переключатель, соответствующее поле программы/словаря должно быть типа C и длины 1. Когда флажок или переключатель выбран, соответствующий объект данных программы будет передан X. Мы можем определить, установлен ли флажок или переключатель Кнопка выбирается путем проверки соответствующего поля программы на наличие X или пробела.

В окне Screen Painter: Перейти к->вторичное окно->Поля ABAP-словаря/поля программы установите флажок (НазКн) или переключатель (ЗавКн) в столбце «Скопировать как». Эти параметры будут включены, только если поле имеет тип C и длину 1.


Элементы флажка и радиокнопки также можно создать, выбрав их из панели элементов. Радиокнопки должны быть сгруппированы таким образом, чтобы одновременно можно было выбрать только одну из кнопок в группе. Чтобы сгруппировать переключатели, выберите все кнопки, которые должны быть частью группы (удерживая клавишу (Ctrl) и щелкая каждый элемент), щелкните правой кнопкой мыши и выберите «Группа зависимых кнопок» в контекстном меню.

При желании флажкам и переключателям можно назначить функциональный код на панели элементов, который затем вызовет событие PAI в момент выбора флажка или переключателя. Это полезно, если вы хотите динамически включать/отключать поля, например, при выборе флажка или переключателя.


Чтобы назначить код функции, дважды щелкните элемент экрана, чтобы открыть панель атрибутов, и введите код функции (длиной до двадцати символов) в поле КодФкц.

Кнопка

До выпуска SAP ERP 4.6 кнопки были единственными элементами пользовательского интерфейса, которые запускали PAI, когда пользователь нажимал на них. Однако флажки, переключатели и списки теперь также могут запускать PAI. Каждой кнопке назначается функциональный код, который передается программе при срабатывании PAI. Вы можете поддерживать текст для кнопки статически в атрибутах или задать его динамически в программе.

Чтобы динамически установить текст кнопки, вам необходимо определить в программе объект данных с тем же именем, что и кнопка. Текст, который заполняется в этом объекте данных, будет отображаться как текст кнопки. Значок также может быть назначен кнопке на панели элементов.

Дважды щелкните элемент экрана, чтобы открыть панель атрибутов. Сохраните имя кнопки в поле «Имя», текст в поле «Текст», выберите значок в поле «ИмяПиктог» и назначьте код функции в поле «КодФкц», как показано ниже.


Доступ к функциональному коду можно получить в программе с помощью системного поля sy-ucomm. Также передается в поле ok_code, если поле ok_code назначено в списке элементов экрана. Список элементов экрана состоит из поля типа OK, как показано ниже. После того, как поле ok_code назначено в списке элементов, оно должно быть объявлено в программе как тип sy-ucomm.

Некоторые действия пользователя могут запускать PAI, но не передавать код функции (например, если пользователь нажимает клавишу (Enter) на клавиатуре). В таких случаях поле sy-ucomm или поле ok_code сохраняет код функции предыдущего действия. Чтобы предыдущие действия пользователя не выполнялись, когда код функции не отправляется, рекомендуется очищать поле ok_code после выполнения соответствующей задачи для действия пользователя.


Поля ввода/вывода

Как обсуждалось ранее, поля ввода-вывода используются для ввода или отображения данных. Чтобы создать поле ввода-вывода, вы можете перетащить поле ввода-вывода из панели элементов в рабочую область, аналогично текстовым полям.

Однако, если у элемента экрана есть соответствующие поля в вашей программе или в словаре данных ABAP, вы можете выполнить следующие шаги, чтобы добавить поле ввода-вывода:

1. Выберите значок  Окно словаря/поле программы на панели инструментов.
2. Введите имя таблицы или имя поля в поле «Имя таблицы/поля» и нажмите «Получить из словаря» или «Получить из программы» в зависимости от того, откуда вы хотите выбрать поле.
3. Выберите поле и нажмите Продолжить.
4. Как только вы переместите курсор в рабочую область, вы увидите курсор с выделенным блоком полей. Щелкните место в рабочей области, где вы хотите отобразить элемент(ы) экрана.



Список

Списки — это специальные поля ввода-вывода, которые отображают возможные записи в раскрывающемся списке. Эти поля полезны, если вы хотите, чтобы пользователь выбирал только из доступных вариантов. Пользователь не может напрямую ввести значение в поле со списком. Если функциональный код назначен окну списка, он активирует PAI в тот момент, когда значение будет выбрано из списка.

Список состоит из двух столбцов: ключ и значение. Вы можете настроить список так, чтобы он отображал как ключ, так и значение или только значение. Когда пользователь выбирает значение в поле списка, соответствующему программному объекту данных будет передан ключ значения. Это полезно, когда вы хотите показать внешний формат данных пользователю, но использовать внутренний формат внутри.

Чтобы установить поле ввода-вывода в виде списка, дважды щелкните элемент экрана и выберите «Список» или «Список с ключом» в раскрывающемся списке в атрибутах поля. Вы можете заполнить значения в поле списка либо из словаря данных ABAP (из справки по поиску или диапазона значений), либо из логики потока, используя событие POV. Это рекомендуемый метод, хотя вы также можете заполнить поле списка, установив атрибут From Program для списка значений. В таких случаях список заполняется путем передачи внутренней таблицы функциональному модулю VRM_SET_VALUES, вызываемому в модуле PBO.



Экранная таблица

Табличные элементы управления используются для отображения данных в табличном формате. Вы можете использовать табличный элемент управления, если хотите отобразить несколько строк данных (например, список рейсов). 

Табличные элементы управления можно создавать на экране напрямую или с помощью мастера. 

Создание табличного элемента управления без мастера.


Шаги по созданию табличного элемента:

1. Выберите элемент управления таблицей на панели элементов и перетащите его в рабочую область. Укажите имя для элемента управления таблицей.

2. Щелкните значок «Поля словаря/программы» на панели инструментов, чтобы выбрать поля для элемента управления «Таблица». Введите имя таблицы ABAP-словаря данных или имя внутренней таблицы и выберите либо кнопку «Получить из словаря», либо кнопку «Получить из программы» соответственно. Выберите поля, которые необходимо добавить в элемент управления таблицей, и нажмите «Продолжить».


4. Наведите курсор на элемент управления таблицей и щелкните, чтобы добавить столбцы. Вы можете повторить этот процесс, чтобы выбрать дополнительные столбцы из разных таблиц. В этот момент элемент управления таблицей должен выглядеть так.
Вы можете поддерживать дополнительные атрибуты, такие как разделители, режимы выбора строк и столбцов, как показано выше.

Aтрибуты
Атрибут Описание
С ЗаглСц Позволяет создавать заголовки столбцов с текстовыми полями или полями ввода/вывода.
ВозмКонфиг Позволяет сохранять параметры управления таблицей (например, ширину столбца) в файл во время выполнения. Система будет читать этот файл всякий раз, когда отображается таблица.
С загл. Позволяет создать заголовок таблицы с текстовыми полями или полями ввода/вывода.
ИзмРазмера Позволяет изменять размер таблицы по вертикали и горизонтали.
Разд. линии Добавляет вертикальные разделители между столбцами и горизонтальные разделители между строками.
ВыделСтрок Позволяет выбрать строку таблицы. Вы можете установить его для выбора одной строки, нескольких строк или ни одной.
ВыделСтолбц Позволяет выбрать столбец таблицы. Вы можете установить его для выбора одной строки, нескольких строк или ни одной.
Со СцВыбора Указывает, должен ли столбец выбора строки отображаться в таблице. Если выбран этот параметр, вы должны указать имя столбца, и столбец будет сохранен внутри как флажок.
ФиксСтолбцы Позволяет отображать фиксированное количество столбцов, исключая один или несколько столбцов из горизонтальной прокрутки. Введите количество столбцов, которые вы хотите фиксировать (отсчет начинается слева и движется вправо).

Экранная таблица  отображает несколько строк данных, но только одна строка данных передается между программой и экраном одновременно. Для переноса данных между элементом управления таблицей и внутренней таблицей программы в логике потока на экране должен поддерживаться оператор цикла. Оператор цикла поддерживается как в PBO, так и в PAI. В цикле PBO записи переносятся из программы на экран, а в цикле PAI записи переносятся с экрана в программу, что позволяет фиксировать ввод данных пользователем.

LOOP AT itab INTO wa WITH CONTROL tbl_ctrl.
ENDLOOP.
*или
LOOP WITH CONTROL tbl_ctrl.
MODULE mod.
ENDLOOP.
itab — внутреннее имя таблицы, wa — рабочая область, а tbl_ctrl — имя элемента управления таблицей. Вы не можете вызывать какие-либо модули внутри этого цикла. Имя рабочей области должно совпадать с именем структуры, используемой в табличном управлении. Если столбцы управления таблицей вставляются из таблицы словаря данных ABAP, то они должны быть определены с помощью оператора TABLES в программе ABAP и использоваться в качестве рабочей области в цикле.

В PAI синтаксис оператора цикла выглядит следующим образом:
LOOP AT itab.
MODULE mod.
ENDLOOP.
*или
LOOP WITH CONTROL tbl_ctrl.
MODULE mod.
ENDLOOP.
В цикле PAI можно вызывать модули для обработки вводимых пользователем данных и обновления внутренней таблицы. Если экран состоит из более чем одного табличного элемента управления, то оператор цикла следует поддерживать для каждого табличного элемента управления.

Пример:
*&---------------------------------------------------------------------*
*& Report ZTEST_EXAMPLE_001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztest_example_001.

TABLES: scarr, sflight. "рабочая область таблицы
CONTROLS gt_tab TYPE TABLEVIEW USING SCREEN 0100. "Экранная таблица
DATA: gv_rad_01,  "Радикнопка 1
      gv_rad_02,  "Радикнопка 2
      gv_ok_code TYPE sy-ucomm, "OK код
      gt_sflight TYPE TABLE OF sflight, "основная таблица
      gt_tmp     LIKE gt_sflight."временная таблица


START-OF-SELECTION.
  SELECT * FROM sflight "Выборка данных из табл. БД
    INTO CORRESPONDING FIELDS OF TABLE @gt_sflight.
  CALL SCREEN 0100. "Вызов экрана

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  CLEAR gv_ok_code.   "Очистка ОК код
  gt_tmp = gt_sflight.  " Копируем данные
  DELETE gt_tmp "Оставляем только выбранную авиакомпанию
    WHERE carrid <> scarr-carrid. " scarr-carrid - это эл. из списка(listbox)
  DESCRIBE TABLE gt_tmp.    "Получаем Кол-во строк в sy-tfill
  gt_tab-lines = sy-tfill. "Устанавливаем кол-во строк для экр.табл.
  SET PF-STATUS 'GUI_100'. "Статус
*  SET TITLEBAR 'xxx'.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE gv_ok_code.
    WHEN 'EXIT'. "Выход
      LEAVE TO SCREEN 0.
    WHEN 'CANCEL'.
      LEAVE TO SCREEN 0.
    WHEN 'BACK '.
      LEAVE TO SCREEN 0.
    WHEN 'LIST_01'. "выбр эл. из списка

    WHEN 'BUT_01'.  "нажатие на "Кнопка 1"
  ENDCASE.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  PASS_DATA  OUTPUT
*&---------------------------------------------------------------------*
*       Вставить строку в экранную таблицу
*   используя рабочую область таблицы sflight
*----------------------------------------------------------------------*
MODULE insert_data OUTPUT.
  READ TABLE gt_tmp INTO sflight INDEX gt_tab-current_line.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  READ_TABLE  INPUT
*&---------------------------------------------------------------------*
*      Импорт экранную таблицу во внутреннюю таблицу
*----------------------------------------------------------------------*
MODULE read_table INPUT.
  MODIFY TABLE gt_sflight FROM sflight.
ENDMODULE.
Результат:

Элемент управления таблицей должен быть определен в программе ABAP с помощью оператора CONTROLS, как показано выше: 
CONTROLS tbl_ctrl TYPE TABLE VIEW USING SCREEN dynnr.
Здесь tbl_ctrl — это имя элемента управления «Таблица», а dynnr — это номер экрана, для которого определен элемент управления «Таблица».

Оператор CONTROLS определяет табличный элемент управления tbl_ctrl как структуру типа CXTAB_CONTROL. Мы можем управлять управлением таблицей с помощью компонентов структуры CXTAB_CONTROL. Например, компонент CURRENT_LINE содержит текущую обрабатываемую строку.

Создание табличного элемента управления с помощью мастера

SAP предоставляет мастер для быстрого создания элемента управления таблицей; с помощью мастера все необходимые шаги и код генерируются автоматически.

Выполните следующие действия, чтобы создать табличный элемент управления с помощью мастера.

1. В графическом редакторе макета выберите Экр. таблица (с пом. ассист.) и перетащите его в рабочую область, чтобы запустить мастер.


Мастер проведет вас через несколько шагов. Мастер предоставляет подробное объяснение для каждого шага; прежде чем начать, прочитайте объяснение каждого шага и нажмите «Продолжить». Активируйте экран и программу.


Комментарии