- •Часть 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, недоступных для ведения
- •Оптимизация выборки данных
- •Справочник транзакций
Использование цветов
Дополнение COLOR команды WRITE позволяет задать цвет фона для каждого поля.
WRITE: / 'Head' COLOR COL_HEADING,
/ 'Key field' COLOR COL_KEY,
'Background',
'Negative' COLOR COL_NEGATIVE,
/ 'Total sum' COLOR COL_TOTAL INTENSIFIED OFF.
Результат выполнения такой программы будет выглядеть следующим образом:
Рисунок 23
Ниже показан список некоторых цветов.
Рисунок 24
События и управление выполнением программы
События
В ABAP/4 для описания взаимодействия программы с пользователем и системой существует набор событий. Для примера рассмотрим работу события AT LINE-SELECTION, которое возникает при двойном щелчке мышью на строке выходной страницы экрана.
TABLES: ABAPTREE.
SELECT * FROM ABAPTREE.
WRITE / ABAPTREE-REPNAME.
ENDSELECT.
AT LINE-SELECTION.
WRITE: / 'This line appears after drill-down'.
Условия
В ABAP/4 предусмотрены две базовые конструкции для определения условий.
Условие IF
DATA: N(4) TYPE N VALUE '123'.
IF N > 0.
WRITE / '>0'.
ELSEIF N = 0.
WRITE / 'zero'.
ELSE.
WRITE / 'other'.
ENDIF.
Логическое выражение в операторе IF во многом схожи с теми, что используются в других языках программирования.
При сравнении символьных строк могут использоваться следующие отношения:
a CA b (содердит любой) - a содержит как минимум один символ b;
a CO b (содержит только) - a содержит только символы из b (в любом порядке);
a CS b (содержит строку) - a содержит символьную строку b;
a CP b (содержит шаблон) - a содержит шаблон b (* - означает любую символьную строку, + - отдельный символ).
Например в следующей программе условие выполняется:
DATA: A(6) VALUE 'ABAP/4'.
IF A CP '*AP++'.
WRITE / 'a contains AP followed by two more characters'.
ENDIF.
Условие CASE
DATA: COLOR(10) VALUE 'yellow'.
CASE COLOR.
WHEN 'red'. WRITE 'color is red'.
WHEN 'green'. WRITE 'color is green'.
WHEN 'yellow'. WRITE 'color is yellow'.
WHEN OTHERS. WRITE 'non-standard color'.
ENDCASE.
Циклы
Повторяющиеся операции в ABAP/4 могут выполняться с помощью следующих элементарных операций.
Безусловный цикл
Предположим необходимо вычислить квадраты первых 100 чисел:
DATA: SQUARE_NUMBER TYPE I.
DO 100 TIMES.
SQUARE_NUMBER = SY-INDEX ** 2.
WRITE / SQUARE_NUMBER.
ENDDO.
Если заранее не известно число шагов, то можно использовать бесконечный цикл. А завершение его выполнения контролировать с помощью некоторого условия.
DO.
IF SY-INDEX > 5.
EXIT.
ENDIF.
WRITE / SY-INDEX.
ENDDO.
Цикл с условием завершения
Для организации цикла с неизвестным числом шагов, но при этом известно некое условие завершения цикла, используется конструкция WHILE.
WHILE SY-INDEX <= 5.
WRITE / SY-INDEX.
ENDWHILE.
Подпрограммы и функции
Для разработки модулей, предназначенных для многократного использования, ABAP/4 предлагает разработчикам различные средства, например:
Формы (или подпрограммы) - программные модели, локализованные в конкретной программе;
Функции - глобальные программные компоненты, которые могут вызываться из разных программ.
Формы (или подпрограммы)
Форма, или подпрограмма, выделяется операторными скобками FORM...ENDFORM и вызывается из основной программы с помощью оператора PERFORM:
DATA: FLAG VALUE 'G'.
WRITE FLAG.
PERFORM SET_FLAG.
WRITE FLAG.
FORM SET_FLAG.
FLAG = 'L'.
WRITE FLAG.
ENDFORM.
Результатом выполнения программы будет строка 'GLL', т.к. строка подпрограммы FLAG = 'L' изменяет глобальную переменную FLAG. Чтобы подпрограмма не изменяла значения глобальной переменной FLAG - необходимо объявить локальные переменные внутри подпрограммы:
...
FORM SET_FLAG.
DATA: FLAG.
FLAG = 'L'.
WRITE FLAG.
ENDFORM.
В данном случае результатом будет - 'GLG'.
Определение подпрограмм должно располагаться в конце исходного текста программы. Формы в ABAP/4 не возвращают значений. Возвращаемая из формы информация, ровно, как и передаваемая, определяется с помощью параметров интерфейсов.