Академический Документы
Профессиональный Документы
Культура Документы
СОДЕРЖАНИЕ
2
-3-
4
-5-
Для обеспечения возможности регистрации пользователя в системе, в ней
должна быть создана основная запись пользователя, связанная с соответствующим
мандантом.
SAP-системы доступны на целом ряде языков. Поле ввода Язык используется
при начале каждого сеанса работы для выбора языка регистрации.
SAP Easy Access - это стандартный первый экран, появляющийся после
выполнения регистрации в системе.
Навигация по системе может осуществляться с помощью компактной
древовидной структуры, которую можно настроить в соответствии с
индивидуальными пожеланиями пользователя.
Роль описывает набор логически взаимосвязанных транзакций. Эти транзакции
представляют собой набор типичных функций, используемых тем или иным
пользователем с его рабочей станции.
Группы операций (роли пользователей) должны быть настроены через
генератор профилей для того, чтобы пользователи системы SAP могли работать с
меню, соответствующими роду их деятельности. Полномочия на операции из меню
также присваиваются пользователям через группы операций. С версии 4.6
стандартная система содержит предварительно определенные группы операций
(роли пользователей) для каждой прикладной сферы.
Для получения справки по полям, меню, функциям и сообщениям используется
F1.
Для получения информации по допустимым значениям ввода используется
справка F4. К справке F4 можно также обратиться, нажав кнопку у правой границы
выбранного поля.
Если в определенном поле ввода стоит маленькая галочка, то переход к
следующему экрану приложения возможен только после ввода в это поле
разрешенного значения.
6
-7-
Наиболее важными инструментами разработок являются:
навигатор по объектам (транзакция SE80);
ABAP-редактор (SE38) для написания программ;
редактор экранов и редактор меню для создания графических
интерфейсов пользователя;
построитель функций (SE37) для разработки функциональных модулей;
построитель классов для объектно-ориентированного программирования;
инструменты тестирования и оптимизации:
отладчик;
динамический анализ;
SQL-трассировка;
Computer Aided Test Tool (CATT) - инструментальные средства
тестирования.
7
-8-
8
-9-
Домен используется для определения технических атрибутов поля таблицы и
содержит технические свойства поля таблицы, такие, как длина поля, тип поля,
атрибуты вывода и все ограничения на основании значений по умолчанию.
Элемент данных представляет собой семантическое определение поля таблицы
и может содержать краткое описание поля, например, при нажатии функциональной
клавиши F1. Начиная с версии 4.6 технические атрибуты поля могут быть
определены в элементе данных и нет неободимости использовать домен.
Ведение таблиц, элементов данных и доменов осуществляется
централизованно в ABAP-словаре. При активации поля оно сохраняется в базе
данных под тем же самым именем.
Двухуровневая концепция доменов позволяет определять и вести технические
атрибуты полей на уровне домена. Домен может описывать технические атрибуты
любого количества полей, вследствие чего при изменении технических атрибутов
полей необходимо выполнить изменения только в домене, а не в отдельных полях.
Такой механизм гарантирует также то, что если домены идентичны, значения полей
можно сравнивать без каких-либо преобразований.
Существует несколько видов таблиц в ABAP словаре:
1) прозрачная таблица;
2) таблица пула;
3) кластерная таблица.
На рисунке 1отображены основные характеристики различных видов таблиц.
9
- 10 -
Таблицы пула состоят из большого количества небольших таблиц и служат для
хранения истории и статистических данных.
Кластерные таблицы служат для хранения данных с пересекающимися по
данным первичными ключами. Это позволяет увеличить скорость считывания
данных.
В большинстве случаев при разработке используются прозрачные таблицы.
При создании прозрачных таблиц необходимо указывать следующие
характеристики:
- Класс данных
- Категория размера таблицы
- Параметры буферизации
- Журнал модификации
11
- 12 -
12
- 13 -
9. Поддержка как устаревших операторов, так и современного процедурно-
ориентированного и объектно-ориентированного стиля программирования
10.Функции объектно-ориентированного программирования включают в себя
поддержку:
Инкапсуляции (классы и интерфейсы)
Разделения областей видимости компонентов классов
Наследования и вложенных интерфейсов
Полиморфизма и позднего связывания
Обработки событий на основе “publish-subscribe” модели
Логика ДинПро
SAP GUI
Рабочий процесс
Логика ДинПро
(экраны)
Логика обработки
Другие интерфейсы
данных (ABAP
программы)
Интерфейс БД
15
- 16 -
Все операторы языка ABAP (кроме декларативных) являются частью блоков
обработки. Операторы, не заключенные в блоки обработки по умолчанию
принадлежат к блоку обработки события START-OF-SELECTION.
Вызов блоков обработки может производиться либо извне ABAP программы
(ABAP процессором или процессором экрана) либо операторами ABAP, которые
сами являются частью блока обработки (вызов подпрограмм). Диалоговые модули и
модули обработки событий вызываются неявно ABAP процессором.
SAP GUI
Экран
Среда выполнения
Процессор Процессор Процессор
Логика Динпро
ABAP программа
Глобальные Блок Блок Блок
объявления обработки обработки обработки
7) Тип I
Программы типа I называются includes. Они позволяют разбивать программу
на более мелкие модули. Программу типа I можно вставить в любом месте любой
программы с использованием оператора INCLUDE <Имя программы типа I>.
Среда разработки ABAP/4 имеет механизм для автоматического разбиения пулов
модулей и функциональных групп на несколько программ типа I.
Пример:
PROGRAM FIRST_PROGRAM.
<Оператор><операнд><дополнение1><операнд><дополнение2>…
Пример:
Вариант 1.
Вариант 2.
18
- 19 -
Пример:
DATA:
name(25) TYPE C,
z_code(5) TYPE N,
counter TYPE I VALUE 1.
Пример:
20
- 21 -
DATA:
counter TYPE I VALUE max_counter.
Если тип не указан, по умолчанию используется тип С(1). Если поле и
соответствующее ему значение литерала или константы имеют разные размеры, это
начальное значение или усекается или дополняется пробелами справа (если оно
меньше).
MOVE и COMPUTE.
Команда MOVE всегда копирует исходное поле в целевое.
MOVE: исходное TO целевое.
COMPUTE целевое = исходное.
Ключевое слово COMPUTE – единственное, которое разрешается опускать в
операторах языка.
Если у исходного и целевого полей разный тип и размер данных, ABAP/4 всегда
преобразует содержимое исходного поля к формату целевого. Ошибка выполнения
23
- 24 -
происходит только в том случае, когда преобразование приводит к потере
информации.
Так как ABAP/4 поддерживает различные типы и размеры данных, которые
можно комбинировать, используя команды move и compute, существует множество
комбинаций возможных преобразований: цифры внутри символьного поля могут
рассматриваться как число, целевое поле заполняться пробелами, исходное -
усекаться, числа – преобразовываться в дату и наоборот и т. д.
C помощью команды move можно копировать структурированные объекты
типа записей или внутренних таблиц.
Пример:
MOVE: receiver TO receiver_tab.
MOVE: receiver_tab TO target.
Пример:
TRANSLATE list USING ‘,.’.
Поиск символьных строк в полях или внутренних таблицах осуществляется по
команде SEARCH. Системное поле sy-fdpos содержит сдвиг найденной строки
относительно начала.
Пример:
SEARCH list FOR ‘Green’.
IF sy-subrc NE 0.
WRITE ‘Not found’.
ENDIF.
DO 4 TIMES.
line-col1 = sy-index.
line-col2 = sy-index ** 2.
INSERT line INTO TABLE itab.
ENDDO.
25
- 26 -
line-col1 = 2. line-col2 = 3.
СОБЫТИЯ ABAP/4
Cобытия, INITIALIZATION
инициализируемые AT SELECTION- SCREEN
системой START-OF-SELECTION
GET
END-OF-SELECTION
Cобытия, AT LINE-SELECTION
инициализируемые AT PFN
пользователем AT USER-COMMAND
События, TOP-OF-PAGE
инициализируемые END-OF-PAGE
программой
REPORT ZELSEIF .
26
- 27 -
DATA RESULT TYPE I.
RESULT = 1.
IF RESULT < 0.
WRITE / 'RESULT LESS THAN ZERO'.
ELSEIF RESULT = 0.
WRITE / 'RESULT EQUAL ZERO'.
ELSE.
WRITE / 'RESULT GREATER THAN ZERO'.
ENDIF.
DO 4 TIMES.
CASE SY-INDEX.
WHEN ONE.
WRITE / 'THAT IS'.
WHEN 2.
WRITE 'A'.
WHEN THREE.
WRITE 'GOOD'.
WRITE 'EXAMPLE'.
WHEN OTHERS.
27
- 28 -
WRITE '!'.
ENDCASE.
ENDDO.
SKIP.
SKIP.
DO 10 TIMES.
ADD SY-INDEX TO COUNT.
ENDDO.
WRITE: / 'COUNT = ', COUNT.
SEARCH_ME = 23.
WHILE NUMBER <> SEARCH_ME.
ADD 1 TO TRIES.
NUMBER = ( MIN + MAX ) / 2.
IF NUMBER > SEARCH_ME.
MAX = NUMBER - 1.
ELSE.
MIN = NUMBER + 1.
ENDIF.
ENDWHILE.
SKIP.
ПОДПРОГРАММЫ
Поскольку формы являются внутренними модулями, они имеют доступ к
глобальным данным вызывающей программы. Функции вызываются из различных
программ, поэтому к ним применяются более жёсткие интерфейсные правила,
позволяющие изменять только их параметры и локальные данные. Формы языка
ABAP/4 не возвращают значений.
Форма или подпрограмма определяется парой операторов FORM/ENDFORM и
вызывается из основной программы с помощью оператора PERFORM.
При необходимости объединить и локализовать данные, принадлежащие
только этой подпрограмме, следует определить эту локальную переменную внутри
формы обычным образом, c помощью ключевого слова DATA.
Применение локальных переменных улучшают читабельность исходных
текстов. Напротив, работа с глобальными данными в подпрограмме может привести
к ошибкам и затруднённому анализу текста программ.
Статические переменные STATICS применяются, когда необходимо сохранить
содержимое локального объекта данных от однго вызова подпрограммы до другого,
(то есть внутри неё).
Возвращаемая из формы информация передаётся с помощью параметров
интерфейса.
Иногда для выполнения подпрограммы необходимо передать туда параметры,
которым при каждом вызове присваиваются необходимые фактические значения.
В ABAP/4 поддерживаются различные способы передачи параметров.
Параметры интерфейса бывают 2-х типов:
только для чтения (USING);
изменяемые (CHANGING).
По способам передачи их можно классифицировать так:
передаваемые по значению (BY VALUE)
передаваемые по ссылке (BY REFERENCE)
Параметры, описанные как using, не могут изменяться внутри формы, однако
при выполнении программы различий между определениями USING и CHANGING
нет. Чтобы облегчить чтение программы, рекомендуется по-разному обозначать
входные (USING) и выходные (CHANGING) параметры, передаваемые по ссылке.
Дополнение TABLES itab1, itab2, … позволяет передавать в подпрограмму
внутренние таблицы. Они могут передаваться со строкой заголовка (HEADER LINE)
или без. Если внутренняя таблица передаётся без header line, то после имени
внутренней таблицы должны стоять []: itab[]. Параметры таблицы всегда
передаются по ссылке.
Подпрограммы можно также вызывать из других программ. Например:
29
- 30 -
ФУНКЦИИ
ИНТЕРФЕЙСНЫЕ ПАРАМЕТРЫ
Формальные параметры функции подразделяются на импортируемые,
экспортируемые и изменяемые. В операторе CALL FUNCTION описание
формальных параметров располагается слева от знака =, а фактических – справа.
Фактические параметры идентифицируются по имени формальных. Значение
дополнения IMPORTING и EXPORTING зависит от того, где они употребляются: в
вызывающей или в вызываемой функции.
Передача параметров по значению и по ссылке синтаксически различается по
дополнениям VALUE(P) и REFERENCE(P).
Для любого параметра можно задать тип, указав ссылку на структуру или на
поле в Dictionary, или применить прямую ссылку на тип.
Импортируемые и изменяемые параметры могут быть отнесены к разряду
необязательных.
В интерфейсе функции разрешено использовать внутренние таблицы, которые
всегда вызываются по ссылке.
ИСКЛЮЧЕНИЯ
Так как функции обычно вызываются несколькими программами, в них не
всегда можно предусмотреть обобщённую обработку ошибок или непредсказуемых
30
- 31 -
событий. Вместо этого в подобных случаях выполнение функции прекращается, а в
вызывающую программу поступает сообщение. Данная технология реализована с
помощью исключений.
Исключения можно задать, используя команду RAISE – прекратить выполнение
с ошибкой. Как только эта команда начинает обрабатываться, выполнение функции
немедленно прекращается. Также для задания исключений можно использовать
команду MESSAGE … RAISING – выводится сообщение, информирующее об
исключении.
В конце списка исключений можно использовать ключевое слово OTHERS для
указания на оставшиеся исключения. Номер исключения возвращает в вызывающую
программу функция SY-SUBRC. Если SY-SUBRC = 0 – нет исключений.
В вызывающей программе можно определить исключение по его номеру и в
соответствии с этим определить, как продолжить работу. В противном случае
происходит ошибка выполнения, и вызывающая программа не реагирует на событие.
Пример:
DO 5 TIMES.
PERFORM CHANGE USING 1
NUMBER_I
NUMBER_P
<POINTER>
31
- 32 -
PERSON
ALPHA+NUMBER_I(<POINTER>).
WRITE: / NUMBER_I, NUMBER_P, <POINTER>,
PERSON-NAME, PERSON-AGE, ALPHA.
enddo.
*-----------------------------------------------------
CALL FUNCTION 'MY_FUNC' EXPORTING X = 23
Y = 40
IMPORTING Z = HHH
EXCEPTIONS CRASH = 1.
WRITE: / HHH.
PAR_NUMBER_I
PAR_NUMBER_P
PAR_POINTER
PAR_PERSON STRUCTURE PERSON
PAR_PART_OF_ALPHA.
STATICS I TYPE I.
I = I + 1.
ADD PAR_1 TO PAR_NUMBER_I.
PAR_NUMBER_P = 0.
PAR_PERSON-NAME+4(1) = ALPHA.
PAR_PERSON-AGE = NUMBER_P + 25.
ADD NUMBER_I TO PAR_POINTER.
PAR_PART_OF_ALPHA = SPACE.
WRITE: /'I = ', I.
ENDFORM.
Для чтения таблиц базы данных используется оператор SELECT. Она является
частью Open SQL, который интегрирован в состав языка ABAP/4.
32
- 33 -
Ниже приводится обзор синтаксиса оператора SELECT языка Open SQL.
Чтение списка всех полей всех записей таблицы в рабочую область таблицы.
Пример:
SELECT * FROM MARA.
…
ENDSELECT.
33
- 34 -
Получение статистической информации о данных в таблице.
Пример:
DATA:
COUNT TYPE I, SUM TYPE P DECIMALS 2, AVG TYPE F.
34
- 35 -
35
- 36 -
Пример:
REPORT ZASDFGHJ.
TABLES ZGAN01.
* SELECTION-SCREEN:
* Обработка событий
36
- 37 -
AT SELECTION-SCREEN.
CASE SY-UCOMM.
WHEN 'SAVE'.
PERFORM INSERT_REC USING NNAME DAT.
WHEN 'DELETE'.
PERFORM DELETE_REC USING NNAME DAT.
WHEN 'MODIFY'.
PERFORM MODIFY_REC USING NNAME DAT.
ENDCASE.
START-OF-SELECTION.
SORT.
FORMAT COLOR COL_TOTAL INTENSIFIED OFF.
SELECT * FROM ZGAN01.
WRITE : / ZGAN01-NNAME HOTSPOT ON
COLOR COL_HEADING, ZGAN01-DAT.
ENDSELECT.
FORMAT COLOR OFF.
END-OF-SELECTION.
* Вставить запись
FORM INSERT_REC
USING PNNAME LIKE ZGAN01-NNAME
PDAT LIKE ZGAN01-DAT.
ZGAN01-NNAME = PNNAME.
ZGAN01-DAT = PDAT.
INSERT ZGAN01.
ENDFORM.
* Удалить запись
FORM DELETE_REC
USING PNNAME LIKE ZGAN01-NNAME
PDAT LIKE ZGAN01-DAT.
DELETE FROM ZGAN01
WHERE NNAME = PNNAME OR DAT = PDAT.
ENDFORM.
* Обновить запись
FORM MODIFY_REC
USING PNNAME LIKE ZGAN01-NNAME
PDAT LIKE ZGAN01-DAT.
37
- 38 -
SELECT SINGLE * FROM ZGAN01 WHERE NNAME = PNNAME.
ZGAN01-NNAME = PNNAME.
ZGAN01-DAT = PDAT.
MODIFY ZGAN01.
ENDFORM.
38
- 39 -
Пример:
INCLUDE <SYMBOL>.
DATA DN(15).
DATA VAR(10) VALUE 'EXPERIMENT'.
Дополнение COLOR оператора WRITE позволяет задать цвет фона для каждого
поля.
40
- 41 -
42
- 43 -
Основным приемом детализации объекта является двойной щелчок мышью на
объекте экрана, что соответствует событию AT LINE-SELECTION. По умолчанию
аналогичное событие возникает при нажатии функциональной клавиши F2.
Следующий пример иллюстрирует обработку события AT LINE-SELECTION
в ответ на двойной щелчок мыши:
Пример:
START-OF-SELECTION.
WRITE ‘BASIC LIST’.
AT LINE-SELECTION.]
WRITE ‘NEW LIST AFTER DOUBLE-CLICK’.
43
- 44 -
ПОЛОЖЕНИЕ КУРСОРА И СКРЫТАЯ ИНФОРМАЦИЯ (команда HIDE,
команда GET CURSOR)
Пример:
LOOP AT I_TABLE.
WRITE / I_TABLE-NAME.
HIDE I_TABLE-ID.
ENDLOOP.
Пример:
DATA: FIELDNAME(30),
44
- 45 -
FIELDVALUE LIKE MARA-MATNR.
START-OF-SELECTION.
SELECT * FROM MARA
WRITE / MARA-MATNR.
ENDSELECT.
AT LINE-SELECTION.
GET CURSOR FIELD FIELDNAME VALUE FIELDVALUE.
IF SY-SUBRC = 0 AND FIELDNAME = ‘MARA-MATNR’.
WRITE: ‘SELECTED MATERIAL:’, FIELDVALUE.
ENDIF.
Рисунок 3.
45
- 46 -
Контроллер Автоматизации связывается с единственным элементом управления
(Sapgui.Application), который непосредственно является контейнером для
других элементов управления.
Контроллер Автоматизации выполнен на ABAP с использованием классов
CL_GUI_CFW, CL_GUI_OBJECT, и CL_GUI_CONTROL. Они позволяют создавать и
уничтожать специализированное средство управления, устанавливать и получать
атрибуты, и вызывать их методы.
Чтобы обеспечивать адекватную производительность в среде клиент-сервер,
система обеспечивает механизм буферизации называемый очередью автоматизации,
которая буферизует ряд вызовов методов различных экземпляров элементов
управления и посылает все за один шаг.
Связь между Контроллером Автоматизации и ABAP Objects Control Framework
использует GUI RFC вызовы (см. Рисунок 4).
Пример:
CALL METHOD cl_gui_control=>set_focus
EXPORTING control = control
46
- 47 -
EXCEPTIONS cntl_error = 1
cntl_system_error = 2.
Где control ссылка на объект ( TYPE REF TO CL_GUI_CONTROL )
управления на который устанавливается фокус.
Иерархия наследования классов ABAP, работающих с Control Framework
приведена а рисунке 5.
ALV Grid Control (ALV = SAP List Viewer) – гибкий инструмент для
отображения списков. Grid Control использует controls technology для того, чтобы
добиться современного экранного отображения (см. рисунок 6).
47
- 48 -
Controls (элементы управления) – программные компоненты, установленные на
локальном компьютере. Для того, чтобы связаться с этими компонентами все
control wrappers используют методы Control Framework.
Ограничения.
ALV Grid Control не позволяет отобразить блок или иерархические списки. В
настоящее время, простые списки могут быть отображены только в однострочном
формате.
Метод Применение
сonstructor Создает экземпляр ALV Grid Control
set_table_for_first_display Выводит и отображает таблицу
refresh_table_display Обновляет отображенные данные
49
- 50 -
Для отображения данных как минимум должны быть предоставлены
следующие два типа информации чтобы отобразить данные:
внутренняя таблица с данными для отображения – называемая таблицей
выходных данных;
описание структуры этих данных объявленной в ALV Grid Control через
каталог полей или через соответствующую структуру словаря данных.
ОБРАБОТКА СОБЫТИЙ
50
- 51 -
Для создания обработчика в приложении определяется локальный класс перед
событием START-OF-SELECTION. В классе определяются методы для реакции на
интересующие события.
Пример:
DATA:
GRID1 TYPE REF TO CL_GUI_ALV_GRID,
CUSTOM_CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
*--------------------------------------------------------
* PREDEFINE A LOCAL CLASS FOR EVENT HANDLING
*--------------------------------------------------------
* CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED.
*--------------------------------------------------------
* START OF SELECTION
*--------------------------------------------------------
START-OF-SELECTION.
* Делать что-либо
*--------------------------------------------------------
* END OF SELECTION
*--------------------------------------------------------
END-OF-SELECTION.
*--------------------------------------------------------
* LOCAL CLASSES: IMPLEMENTATION
*--------------------------------------------------------
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
*--------------------------------------
METHOD HANDLE_DOUBLE_CLICK.
DATA: LT_ROWS TYPE LVC_T_ROW.
* GET SELECTED ROW
CALL METHOD GRID1->GET_SELECTED_ROWS
IMPORTING ET_INDEX_ROWS = LT_ROWS.
CALL METHOD CL_GUI_CFW=>FLUSH.
51
- 52 -
IF NOT LT_ROWS IS INITIAL.
****
ELSE.
MESSAGE I004(02) WITH TEXT-IO1.
ENDIF.
ENDMETHOD.
ENDCLASS.
*-------------------------------------------------------*
* MODULE PBO_XXXX OUTPUT
*-------------------------------------------------------*
MODULE PBO_XXXXX OUTPUT.
SET HANDLER
LCL_EVENT_RECEIVER=>handle_double_click FOR GRID1.
ENDMODULE.
КАТАЛОГ ПОЛЕЙ
Как правило рекомендуется заполнить эти поля в каталоге перед тем, как список
будет отображен первый раз и передать в метод
SET_TABLE_FOR_FIRST_DISPLAY. Чтобы настроить каталог сгенерированный
ALV для специфических условий перед выводом списка используется
функциональный модуль LVC_FIELDCATALOG_MERGE.
Методы get_frontend_fieldcatalog и
set_frontend_fieldcatalog позволяют изменить каталог после вывода
списка.
53
- 54 -
ОБЛАСТИ ЭКРАНА
ДЕРЕВО НАВИГАЦИИ
ГЛОБАЛЬНАЯ НАСТРОЙКА
Включает разделы:
Атрибуты формуляра. Общая информации и опции вывода;
Интерфейс формуляра. Здесь определяются поля для передачи данных;
Глобальные определения. Здесь определяются дополнительные поля для
обработки формуляра;
Страницы и окна.
АТРИБУТЫ ФОРМУЛЯРА
56
- 57 -
Включают не только название и описание но и состояние формуляра (активный
не активный). Формуляр может иметь две версии активную и неактивную. Программ
вызывает только активную версию формуляра. Для активации выбирается кнопка –
АКТИВИРОВАТЬ.
В атрибутах также указывается класс разработки и возможность по переводу
формуляра.
Класс разработки может быть изменен с начального экрана «Перейти-Запись
каталога объектов»
АТРИБУТЫ ВЫВОДА
СТРАНИЦЫ
57
- 58 -
PARAMETERS:
p_matnr LIKE MARA-MATNR VALUE … .
58
- 59 -
1) Начальное значение параметра определяется с помощью дополнения default
(а не value, как для data). Однако это дополнение не является обязательным.
2) Структурированные параметры не поддерживаются (типа записей,
задаваемых с помощью операторов BEGIN OF / END OF).
3) Параметры типа C длиной 1 могут выводиться на экран в виде
переключателя, если использовать дополнение as checkbox в определении
параметра. При выборе поля значение параметра будет равно Х, в противном случае
он будет пустым.
Каждый параметр связан со своей определяемой на естественном языке меткой
(или названием поля), которая отображается на экране перед полем ввода. Эту метку
можно изменить или перевести на другой язык без изменения исходного текста
программы.
СОСТАВНЫЕ КРИТЕРИИ ВЫБОРКИ
60
- 61 -
События AT SELECTION-SCREEN и AT SELECTION-SCREEN ON P/S
рекомендуется использовать для проверки введенных пользователем данных на
допустимость значений и правдоподобие.
Каждое сообщение об ошибке, получаемое по событию AT SELECTION-
SCREEN, немедленно останавливает программу-отчет и обновляет экран выбора.
При этом можно изменить все критерии выборки. Если используется дополнение on
p/s, то после события разрешается ввод только данного параметра или составного
критерия. Текст сообщения об ошибке создается или изменяется двойным щелчком
мыши на поле текста и хранится в системной таблице, содержащей информацию,
определяемую на естественном языке.
Для ускорения получения отчета следует запретить неограниченные запросы к
базе данных. Во избежание этого в составном критерии можно указать количество
строк, которое следует использовать в предложении WHERE оператора SELECT.
Если внутренняя таблица, содержащая составной критерий, пуста, а
пользователь не указал никакого критерия, то желательно выводить на экран
сообщение об ошибке.
Пример:
REPORT ZQWERTY .
TABLES: MARA.
DATA: BEGIN OF ITBL OCCURS 10,
MATNR LIKE MARA-MATNR,
MTART LIKE MARA-MTART,
END OF ITBL.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN ULINE.
INITIALIZATION.
AT SELECTION-SCREEN.
CASE SY-UCOMM.
WHEN 'CODE1'.
MOVE 1 TO C1.
MESSAGE I001(ZZ) WITH TEXT-006.
WHEN 'CODE2'.
MOVE 2 TO C1.
MESSAGE S002(ZZ) WITH '2'.
ENDCASE.
START-OF-SELECTION.
WRITE / C1.
ЭКРАНЫ ДИАЛОГА
64
- 65 -
FIELD Обозначает точку переноса содержимого поля
ON Используется в сочетании с FIELD
VALUES Используется в сочетании c FIELD
CHAIN Стартует цепочку обработки полей
ENDCHAIN Завершает цепочку обработки полей
CALL Вызывает подэкран
LOOP Цикл обработки экранной таблицы
ENDLOOP Завершает цикл обработки экранной таблицы
Пример:
PROCESS BEFORE OUTPUT.
MODULE INIT_SCREEN_100.
MODULE STATUS_0100.
LOOP AT ITAB WITH CONTROL
MODULE SET_VALUES.
ENDLOOP.
LOOP AT ITAB.
MODULE GET_DATA.
FIELD F1 MODULE CHECK_F1.
CHAIN.
FIELD F2, F3.
MODULE CHECK_FIELDS1.
FIELD F4, F5.
MODULE CHECK_FIELDS2.
ENDCHAIN.
ENDLOOP.
MODULE USER_COMMAND_0100.
PROCESS ON HELP-REQUEST.
PROCESS ON VALUE-REQUEST.
В ABAP программе:
MODULE <mod> OUTPUT.
ENDMODULE.
Существует вызов модуля для кода функции типа E. Это обычно клавиши
Назад, Выход или Отменить. При этом не происходит вызовов других модулей, а
вызывается модуль, описанный в Логике ДинПро как:
MODULE <NAME> AT-EXIT COMMAND.
Передачи данных с экрана в программу также не происходит. Если модулей
MODULE <NAME> AT-EXIT COMMAND будет несколько, то работает только
первый.
Вызов модуля по условию.
Синтаксис в логике ДинПро:
FIELD <f> MODULE <mod> ON INPUT|REQUEST|*-INPUT.
Поле на экране может быть одного имени с программным (например, имя поля
внутренней таблицы) или иметь ссылку на Словарь. Тогда оно наследует все
свойства такого поля (check input value, check value range, help ).
Другая задача обработки экранных элементов - верификация введенной
информации. Это делается автоматически (если элемент ссылается на Словарь) или
программным путем.
Виды проверки:
Автоматические
Внутри логики ДинПро
Синтаксис:
FIELD <f> VALUES (<v1>, <v2>,...).
FIELD <f>
SELECT *
FROM <dbtab>
WHERE <k1> = <f1> AND <k2> = <f2> AND...
[INTO <g>]
WHENEVER [NOT] FOUND SEND ERRORMESSAGE|WARNING
[<num> [WITH <h1>... <h 4>]].
ПРОВЕРКА В ДИАЛОГОВЫХ МОДУЛЯХ
Синтаксис:
Для проверки одного поля
FIELD <F> MODULE <MOD>.
Для проверки нескольких полей:
CHAIN.
FIELD: <f1>,<f2>,...
MODULE <mod1>.
FIELD: <g1>, <g2>,
MODULE <mod2>.
ENDCHAIN.
Синтаксис:
MESSAGE E<number>(<message class>) WITH TEXT-T01.
Транзакция SE91 используется для Создания сообщений.
68
- 69 -
69
- 70 -
1. Модификации – это изменение объектов SAP в системе заказчика.
Существует возможность расширить систему на следующих уровнях:
В ABAP программах (function module exits). Изменения производятся в
функциональном модуле с чётко определённым интерфейсом.
В GUI интерфейсах (menu exits). Изменения производятся в специальных
функциях или методах класса (например для контекстного меню CL_CONTEXT_)
На экранах – вставляя свой экран в специальный подэкран, предусмотренный
расширением SAP (screen exits)
На экранах, обрабатывая customer code который ссылается на поле на экране
(field exits)
В таблицах или структурах ABAP Dictionary (репозитария) – через команду
APPEND STRUCTURE в транзакции SE11 или через добавление CI_ include
структуры
70
- 71 -
1. Используя транзакцию SE37 ввести в поле для поиска объекта
EXIT_(name of program)* или EXIT_* .
2. Для поиска User exits, используемых для управления предопределенных
процедур Customizing-а (access sequence) используйте транзакцию
NACE.
Если нажать на кнопку справа от подсвеченного ‘желтым’ то появится
следующее окно После этого необходимо выбрать строку в этом окне (‘коричневым’
подсвеченная строка), а после чего нажать кнопку. В результате Вы увидите User exit
типа ‘User exits которые используют таблицы’, который используется для
управления выполнением стандартных программ посредством Настройки.
Пример:
FORM KOBEV_601.
SY-SUBRC = 0.
ELSE.
SY-SUBRC = 4.
ENDIF.
ENDIF.
ENDFORM.
71
- 72 -
1) Для написания и первоначальной отладки кода используйте
конструкцию
IF SY-UNAME = 'USER'.
ВАШ КОД.
ENDIF.
Вместо 'USER' должно быть имя пользователя под которым вы входите в SAP.
IF SY-UNAME = 'User'.
BREAK-POINT.
ENDIF.
Самая информативная утилита для нахождения дополнительной информации
это отладчик. В нем можно найти необходимые структуры данных и поля.
Проверить область видимости и т.п.
ТРАНЗАКЦИОННЫЕ МОДИФИКАЦИИ
72
- 73 -
BTE позволяют присоединить дополнительный компонент, в виде
функционального модуля, в системе SAP R/3
BTE использует следующие интерфейсы:
73
- 74 -
LOOP AT DAT.
WRITE: / DAT-STR.
ENDLOOP.
77