К основному контенту

ABAP кратко

/h - start debugging 
/hs - system debugging 
/ha - debugging - no screens 


l_         - локальная переменная с единственным значением
lt_        - локальная таблица
ls_       - локальная структура
lr_        - локальная переменная типа Range
lv_        - локальная переменная
lty_     - локальный тип
t_         - локальный тип
p_        - параметр
so_      - selection option
<ls_>  - field symbol на структуру (все остальное по аналогии)
lcl_      - локальный класс
lo_       - объект
rg_       - range


range это внутренняя таблица, которая состоит из 4 полей: sign, options, low и high. По сути range это аналог select-options и заполняется точно также: SIGN = 'I' (включить) или 'E' (исключить), OPTIONS содержит отношение (EQ, NE, LT, LE, GE, GT, ... ), а LOW и HIGH конкретные значения. Удобство range в том, что его можно привязывать к любым полям любых таблиц (АВАР/внутренние)

Структуры содержат фиксированное число полей и служат для объединения простых полей в более сложный, например, данные о сотруднике. Структуры объявляются служебными словами BEGIN OF и END OF.

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

SY-DATUM Актуальная дата сервера приложений
SY-UZEIT Актуальное время сервера приложений
SY-INDEX Счетчик цикла DO
SY-TABIX Индекс в цикле LOOP
SY-SUBRC Код возврата, содержит результат последней выполненной операции. SY-SUBRC = 0 в случае успешного выполнения.
SY-LANGU Язык входа в систему
SY-BATCH Программа выполняется в фоновом режиме
SY-BINPT Программа выполняется в рамках пакетного ввода
SY-REPID Имя текущей программы
SY-UNAME Имя пользователя

В общем виде, если очень на пальцах и быстро, ракурс служит для скрытия физических имен таблиц и полей и предоставления общего интерфейса доступа к базе данных разработчикам клиентской части. Например у меня есть таблица ZZZZ и пять полей с именами Z1 по Z5, я делаю ракурс без объединения таблиц с именем ZYZ и делаю присвоение полей типа 

ZYZ-ID = ZZZZ-Z1 
ZYZ-NAME = ZZZZ-Z2 
ZYZ-DESC = ZZZZ-Z3 

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


1. Для каждого экрана обработка двух событий:
РВО - обработка логики перед выводом на экран
РВО-модули (Process Before Output - обработка событий до раскрытия экрана);
РАI - обработка логики после ввода с экран
РАI-модули (Process After Input - обработка событий после ввода команды пользователем с экрана);
2. Модули этих событий обрабатываются последовательно друг за другом.
3. Для выполнения модуля диалоговому процессору передается контроль и управление.
4. После обработки всех модулей событий РВО содержимое всех одноименных полей программы копируются в соответствующие поля экрана.
5. Перед обработкой первого модуля событий РАI содержимое одноименных полей из шаблона экрана копируются в соответствующие поля АВАР/4-программы.
6. По ОК-коду можно узнать и обработать код введенной команды.

Комментарии

Популярные сообщения из этого блога

ABAP

*пример простой программы с двумя строками текста: report abaptest . write 'Customerlist ' . *Программа должна начинаться с декларации REPORT *Второй оператор выводит на экран слова * комментарий в начале строки или " комментарий в любом месте строки write 'Customer list ' at 10 . *комманда write содержит необязательное дополнение, задающее позицию появления текста write : 'Custome rlist' , 'Booking' . *общая часть перед двоеточием, последовательные части отделяются запятыми *------------------------------------------------------- * * ПОЛЯ * *------------------------------------------------------- data : customer_name( 25 ) type с , vendor__name like customer_name. *data - определяется поле (переменная), like - наследование types t_name( 25 ) type с . data : customer_name type t_name, vendor_name type t_name. *Тип, определенный как t_name, назначается для полей vendor_name и customer_name,...

Трассировка

https://abap-blog.ru/ 1. Начиная с  SAP_ABA 702  в отладчике появился инструмент позволяющий быстро включать трассировку (SE30/ST05): Добавляем инструмент:  Ставим точку перед вызовом SQL (В моем случае получение хранимого объекта): 2. ABAP отладчик ограничивает использование точек наблюдения (whatchpoints) на field-symbols, однако можно обойти это ограничение путём использования точки прерывания на базе исходного кода.  Рассмотрим пример кода: DATA: lt_test TYPE STANDARD TABLE OF i. FIELD-SYMBOLS: TYPE i. APPEND 1 TO lt_test. APPEND 2 TO lt_test. APPEND 3 TO lt_test. LOOP AT lt_test ASSIGNING . sy-tabix = sy-tabix. EN 1 2 3 4 5 6 7 8 9 DATA : lt _ test TYPE STANDARD TABLE OF i . FIELD - SYMBOLS : < lv _ test > TYPE i . APPEND 1 TO lt _ test . APPEND 2 TO lt _ test . APPEND 3 TO lt _ test . LOOP AT lt _ test ASSIGNING < lv _ test > .    sy -...