1. Любое выражение должно заканчиваться точкой.
2. Двоеточие после ключевого слова обозначает повторение выражений, приведенных после двоеточия и перечисленных через запятую для данного ключевого слова.
Например:
Код:
...
WRITE: 'Hello World',
' - this is my first programm'.
...
Равен последовательности:
...
WRITE 'Hello World'.
WRITE ' - this is my first programm'.
...
3. Ключевые слова и переменные регистронезависимые, т.е. код:
...
DATA gv_value TYPE i. " А можно так: data gv_value type i.
WRITE gv_value. " write gv_value.
...
Идентичен коду:
...
data GV_VALUE type I.
wrITE gv_Value.
...
4. Вызов функциональных модулей производится только в верхнем регистре: Т.е. код:
...
CALL FUNCTION 'ztest_func'.
...
Работать не будет, а правильно:
...
CALL FUNCTION 'ZTEST_FUNC'.
...
Определение данных в языке ABAP/4
Элементарные типы данных
ABAP/4 обеспечивает набор элементарных типов, таких как символьный, целый и дата и поддерживает 2 концепции конструирования (с помощью записей и внутренних таблиц), которые помогают строить сложные типы и объекты данных.
Можно также создавать неэлементарные типы и структуры данных и хранить их определения в словаре ABAP/4 Dictionary, чтобы впоследствии использовать их во всех компонентах системы.
Элементарные типы используются в ABAP/ 4 так же, как и в других языках.
В ABAP/4 используются следующие элементарные типы:
Characters. Поддерживаются два символьных типа:
С (собственно символьный) и N (текст, состоящий из цифр).
Numbers. Поддерживается три цифровых типа:
I (целые числа), P (упакованные числа) и F (числа с плавающей запятой).
Date. Поддерживается один тип даты:
D (дата).
Time. Поддерживается один тип для задания времени: T (время).
Hexadecimal.
Поддерживается один шестнадцатеричный тип: X (шестнадцатеричный).
Каждое поле определяется с помощью ключевого слова DATA и ссылки на элементарный тип.
Пример:
DATA:
name(25) TYPE C,
z_code(5) TYPE N,
counter TYPE I VALUE 1.
Длина поля определяется числом в круглых скобках, которое следует после имени поля. Если размер поля в операторе data не задан, ABAP/4 использует значение размера поля по умолчанию. Ключевое слово value позволяет задать начальное значение переменной counter.
Каждый элементарный тип обладает своим значением по умолчанию, которое применяется в тех случаях, когда до выполнения программы не было задано начальное значение переменной.
Аналогично полям задаются неэлементарные типы. Понятие тип (TYPE) не связано с выделением памяти, а для полей, описанных как DATA, память всегда выделяется.
Пример:
TYPES
t_flag TYPE С.
DATA add_flag TYPE t_flag.
Для всех типов в качестве значений можно задавать константы:
Пример:
CONSTANTS:
company_name(3) TYPE C,
max_counter TYPE I VALUE 9999.
Константы нельзя изменять. Любой оператор, изменивший константу, вызовет сообщение об ошибке при синтаксической проверке или во время выполнения.
Константы используются для определения начальных значений:
Пример:
DATA:
counter TYPE I VALUE max_counter.
Если тип не указан, по умолчанию используется тип С(1). Если поле и соответствующее ему значение литерала или константы имеют разные размеры, это начальное значение или усекается или дополняется пробелами справа (если оно меньше).
Переменные типа N содержат текстовые строки, состоящие из цифр. С их помощью записываются цифры, которые используются для идентификации и сортировки внутренних таблиц. Начальные значения полей типа C заполняются пробелами справа, а поля типа N - цифрой 0 слева. Размер поля типа N по умолчанию равен 1, а начальное значение состоит из соответствующего длине числа нулей.
Поле дата (DATA) имеют тип D с фиксированным размером поля в 8 знаков. Внутреннее представление поля date: YYYYMMDD (Y - год, М - месяц, D - день).
Сложные типы
Кроме полей ABAP/4 поддерживает специальные конструкции для сложных (или составных) объектов данных: записи и внутренние таблицы.
Структуры содержат фиксированное число объектов данных (компонентов структуры), определяемых с помощью ключевых слов DATA BEGIN OF и DATA END OF. Можно определить структуру со следующими полями.
Пример:
DATA: BEGIN OF customer,
id(8) TYPE n,
name(25),
telephone(12),
END OF customer.
После того как структура определена, можно работать и с отдельными компонентами и со всей структурой.
Пример:
DATA vendor LIKE customer.
customer-id = 87654321.
customer-name = Green.
customer-telephone = 211-22-34.
MOVE customer TO vendor.
В приведенном примере дополнительное ключевое слово LIKE определяет структуру vendor, имеющую такой же формат, как и структура customer.
Разработчик может начинать с элементарных типов и полей, а затем, применяя в любом порядке описанные выше правила, строить вложенные структуры записей и таблиц.
Пример:
TYPES: BEGIN OF address,
city(25),
street(30),
END OF address,
BEGIN OF person,
name(25),
address type address,
END OF person.
DATA: receiver TYPE person.
DATA: receiver_tab LIKE receiver OCCURS 0
WITH HEADER LINE.
DATA: target LIKE receiver OCCURS 0 WITH HEADER LINE.
После определения объектов данных в операторе data, их можно использовать в любом месте программы. Обычно определение данных размещается в начале программы. Большие программы часто имеют файл типа INCLUDE, содержащий список с определениями всех данных. Данные программы доступны в любой подпрограмме и их разрешено переопределять в подпрограмме. Локальные объекты данных в подпрограмме являются приоритетными по сравнению с глобальными переменными, имеющими идентичные имена. Переменные программы для всех других программ недоступны. Их можно добавить в файл INCLUDE, который содержит определения данных других программ, а также определить их как глобальные переменные в словаре Dictionary,автоматически доступном для всех программ ABAP/4.
Операторы языка ABAP/4
MOVE и COMPUTE.
Команда MOVE всегда копирует исходное поле в целевое.
MOVE: исходное TO целевое.
COMPUTE целевое = исходное.
Ключевое слово COMPUTE единственное, которое разрешается опускать в операторах языка.
Если у исходного и целевого полей разный тип и размер данных, ABAP/4 всегда преобразует содержимое исходного поля к формату целевого. Ошибка выполнения происходит только в том случае, когда преобразование приводит к потере информации.
Так как ABAP/4 поддерживает различные типы и размеры данных, которые можно комбинировать, используя команды move и compute, существует множество комбинаций возможных преобразований: цифры внутри символьного поля могут рассматриваться как число, целевое поле заполняться пробелами, исходное - усекаться, числа преобразовываться в дату и наоборот и т. д.
C помощью команды move можно копировать структурированные объекты типа записей или внутренних таблиц.
Пример:
MOVE: receiver TO receiver_tab.
MOVE: receiver_tab TO target.
Если исходный и конечный объекты данных относятся к одному и тому же типу (например, к внутренней таблице), в операторе MOVE их содержимое копируется за одну операцию.
Команда MOVE-CORRESPONDING копирует из одной записи в другую компоненты с одинаковыми именами. Поля с одинаковыми именами копируются независимо от их позиции внутри записи.
ОПЕРАЦИИ С СИМВОЛЬНЫМИ СТРОКАМИ.
Символьные строки объединяются с помощью команды CONCATENATE.
Пример:
DATA: str1(3) VALUE 'Red',
str2(6) VALUE 'Yellou',
str3(6) VALUE 'Green',
str4(50).
CONCATENATE str1 str2 str3 INTO str4 SEPARATED BY ','.
Обратная операция разделения символьной строки осуществляется для произвольно выбранного разделителя.
Пример:
DATA:
list(40) VALUE 'Edison, Smith, Jon Green, Yang, Black',
name1(20), name2(20), name3(20), name4(20), name5(20).
SPLIT list AT ',' INTO name1 name2 name3 name4 name5.
Если одно из полей, в которое записывается результат, имеет недостаточную длину, все компоненты усекаются, и переменная sy-subrc получает ненулевое значение. Если число компонентов больше числа целевых полей, то информация теряется. В качестве целевого объекта можно использовать внутреннюю таблицу.
Пример:
DATA names LIKE name1 OCCURS 100.
SPLIT list AT ',' INTO TABLE names.
Сдвинуть символьную строку можно командой SHIFT.
Пример:
SHIFT name1 BY 3 places.
SHIFT name2 RIGHT.
SHIFT name3 UP TO 'Jon’.
Для замены определённых символов в строке используется оператор REPLACE, который замещает первую встретившуюся подстроку внутри строки.
Пример:
REPLACE E WITH Maв INTO list.
Поиск символьных строк в полях или внутренних таблицах осуществляется по команде SEARCH. Системное поле sy-fdpos содержит сдвиг найденной строки относительно начала.
Пример:
SEARCH list FOR Green.
IF sy-subrc NE 0.
WRITE ‘Not found’.
ENDIF.