- •Часть I. Основы языка 5
- •Часть II. Расширенные приемы программирования в sap bw 37
- •Часть III. Полезные советы 85
- •Вступление
- •Задание атрибутов программы
- •Составление исходного текста программы
- •Локальные данные программы Определение полей с помощью элементарных типов и ссылок
- •Записи и внутренние таблицы
- •Объявление составных неэлементарных типов и объектов
- •Область определения данных
- •Глобальные таблицы словаря Dictionary
- •Отображение определения
- •Отображение содержимого таблицы
- •Создание таблицы или структуры
- •Использование таблиц и структур в программе
- •Создание доменов
- •Работа с данными Копирование полей с помощью команд Move и Compute
- •Преобразования содержимого полей
- •Копирование структурированных объектов
- •Арифметические выражения и математические функции
- •Операции со строками текста Конкатенация и разделение строк
- •Замена и преобразование символов в строке
- •Поиск символьных строк в полях или внутренних таблицах
- •Символ «Перенос каретки»
- •Запись данных
- •Простой формат вывода
- •Использование символов и пиктограмм
- •Использование цветов
- •Интерфейсы форм
- •Подпрограммы и функции Глобальные функции
- •Функциональные группы
- •Создание функций
- •Вызов функции
- •Чтение таблиц базы данных Построение простейшего запроса
- •Использование конструкции where
- •Чтение единственного элемента таблицы
- •Извлечение ограниченного числа полей
- •Упорядочение результатов запроса
- •Динамическая выборка данных
- •Вложенные циклы select
- •Часть II. Расширенные приемы программирования в sap bw Тип функции планирования
- •Создание класса
- •Определение нового типа функции планирования
- •Разработка класса Считывание значений управляющих параметров
- •Определение ссылочных данных
- •Добавление сообщений в спул вывода
- •Обработка данных для изменения
- •Badi для консолидации (перенос данных)
- •Чтение данных инфо-провайдера
- •Формирование структуры признаков из настроечной таблицы
- •Отправка e-mail сообщения из abap на внешний адрес
- •Выполнение расчетов в параллельных (фоновых) задачах
- •Подпрограмма преобразования
- •Вызов транзакции через web интерфейс
- •Передача параметров
- •Загрузка данных из 1с 8
- •Загрузка справочников
- •Загрузка транзакционных данных
- •Загрузка данных из файлов Excel с помощью ole
- •Загрузка сообщений (tcode se91) из файла Excel
- •Программа загрузки данных из файла csv в таблицу бд
- •Вызов последовательности планирования из abap
- •Динамическое программирование
- •Определение полей таблицы в runtime
- •Создание динамической таблицы в runtime
- •Генерирование abap подпрограммы в runtime
- •Создание пользовательского средства поиска
- •Часть III. Полезные советы Создание abap программы без ключа разработчика
- •Поиск внутренних таблиц
- •Редактирование данных в таблицах sap, недоступных для ведения
- •Оптимизация выборки данных
- •Справочник транзакций
Арифметические выражения и математические функции
В ABAP/4 включен достаточный для разработки коммерческих приложений набор математических функций. Например, sin, cos и др.
DATA: A TYPE P, B LIKE A, X LIKE A, Y LIKE A,
INCOME TYPE I, TAX TYPE P, NET_INCOME TYPE P,
ALPHA TYPE P.
Y = A * X + B.
NET_INCOME = INCOME * ( 1 - TAX ).
Y = X * COS( ALPHA ).
B = EXP( A * LOG( Y ) ).
Арифметические выражения можно объединять в скобки. Заметим, что круглые скобки для группировки подвыражений разделяются, как минимум, одним пробелом.
DATA: N1 TYPE P, N2 TYPE P, N3 TYPE P, N4 TYPE P, N5 TYPE P.
N5 = ( N1 - N2 / N3 ) * ( N4 + N1 ) / N5.
Приоритет выполнения арифметических выражений в ABAP/4 аналогичен тому, что используется в большинстве современных языков программирования.
Операции со строками текста Конкатенация и разделение строк
Символьные строки объединяются (конкатенируются) с помощью команды CONCATENATE.
DATA: FIRST_NAME(25), MIDDLE_NAME(2), LAST_NAME(25),
FULL_NAME(54).
FIRST_NAME = 'Stas'.
MIDDLE_NAME = 'G'.
LAST_NAME = 'Makarov'.
CONCATENATE FIRST_NAME MIDDLE_NAME LAST_NAME INTO FULL_NAME.
WRITE / FULL_NAME.
После выполнения этой операции в поле FULL_NAME будет содержаться строка 'StasGMakarov'.
Если строки должны иметь разделители, то это задается следующим образом:
DATA: DIRECTORY_1(2), DIRECTORY_2(10), FILE_NAME(10),
PATH(24).
DIRECTORY_1 = 'a:'.
DIRECTORY_2 = 'usr'.
FILE_NAME = 'programs'.
CONCATENATE DIRECTORY_1 DIRECTORY_2 FILE_NAME
INTO PATH
SEPARATED BY '\'.
WRITE / PATH.
После выполнения этой операции в поле PATH будет содержаться строка 'a:\usr\programs'.
В связи со встроенным механизмом удаления пробелов в начале и конце строки в ABAP, для того, что бы объединить строки через пробел, нужно использовать константу SPACE.
DATA: FIRST_NAME(25), MIDDLE_NAME(2), LAST_NAME(25),
FULL_NAME(54).
FIRST_NAME = 'Stas'.
MIDDLE_NAME = 'G'.
LAST_NAME = 'Makarov'.
CONCATENATE FIRST_NAME MIDDLE_NAME LAST_NAME INTO FULL_NAME
SEPARATED BY SPACE.
WRITE / FULL_NAME.
После выполнения этой операции в поле FULL_NAME будет содержаться строка 'Stas G Makarov'.
Обратная операция разделения символьной строки осуществляется для произвольного разделителя:
DATA: LIST(40),
NAME_1(25), NAME_2(25), NAME_3(25).
LIST = 'Stas,Makarov,IBS'.
SPLIT LIST AT ',' INTO NAME_1 NAME_2 NAME_3.
WRITE: / NAME_1, NAME_2, NAME_3.
В итоге значения полей будет следующим: NAME_1 = 'Stas'; NAME_2 = 'Makarov'; NAME_3 = 'IBS'.
Если заранее не известно, на сколько частей разобьется та или иная строка, лучше копировать во внутреннюю таблицу, которая может содержать произвольное число строк.
DATA: NAMES LIKE NAME_1 OCCURS 10 WITH HEADER LINE.
LIST = ' Stas,Makarov,Moscow,IBS '.
SPLIT LIST AT ',' INTO TABLE NAMES.
LOOP AT NAMES.
WRITE / NAMES.
ENDLOOP.
Замена и преобразование символов в строке
Для замены строки используется команда REPLACE.
DATA: STRING(80),
EXPRESSION(30).
STRING = 'Variable: &. The variable & is substituted later.'.
REPLACE '&' WITH 'X' INTO STRING.
WRITE / STRING.
В результате получим строку 'Variable: X. The variable & is substituted later.'. Для замены всех символов & на X вводится команда TRANSLATE.
...
TRANSLATE STRING USING '&X'.
WRITE / STRING.