- •Часть 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, недоступных для ведения
- •Оптимизация выборки данных
- •Справочник транзакций
Использование конструкции where
Для ограничения выборки записей из таблицы используется дополнение WHERE.
Например, необходимо отобрать только те записи, в которых имя человека включает строку 'MICHAEL':
REPORT Z_SELECT .
TABLES: UPERS.
SELECT * FROM UPERS WHERE EUNA LIKE '%MICHAEL%'.
WRITE: / UPERS-EUNA.
ENDSELECT.
Результат выполнения запроса:
Рисунок 34
В дополнении WHERE также можно использовать символы сравнения (>=, = и т.п.), оператор включения IN(a,b,c) и другие.
Чтение единственного элемента таблицы
При чтении единственной записи таблицы используется конструкция SELECT SINGLE и дополнение WHERE, в котором указаны все поля первичного ключа. После выполнения системный код возврата SY-SUBRC указывает на успешное (равно 0) или неуспешное (не равно 0) завершения запроса.
REPORT Z_SELECT .
TABLES: UPERS.
SELECT SINGLE * FROM UPERS WHERE EUNR = '00000002'.
IF SY-SUBRC = 0.
WRITE UPERS-EUNA.
ELSE.
WRITE 'not found'.
ENDIF.
В приведенном примере выводится один элемент с кодом '00000002'.
Извлечение ограниченного числа полей
В предыдущих примерах с помощью звездочки (*) выбирались все поля. Часто в этом нет необходимости, а для указания необходимых полей можно с помощью списка, следующего после оператора SELECT. Соответствующие поля программы перечисляются после оператора INTO в круглых скобках:
REPORT Z_SELECT .
TABLES: UPERS.
DATA: NAME LIKE UPERS-EUNA,
ADDRESS LIKE UPERS-ADRE.
SELECT EUNA ADRE INTO (NAME, ADDRESS) FROM UPERS.
WRITE: / NAME, ADDRESS.
ENDSELECT.
Важно помнить, что извлечение ограниченного числа полей является более производительным, чем извлечение всех полей таблицы. Если нет необходимости извлекать все поля, рекомендуется извлекать только необходимые.
Упорядочение результатов запроса
Для сортировки результата запроса применяется конструкция ORDER BY. Например, чтобы отсортировать результат самого простого запроса по полю EUNA необходимо написать:
REPORT Z_SELECT .
TABLES: UPERS.
SELECT * FROM UPERS ORDER BY EUNA.
WRITE: / UPERS-EUNA.
ENDSELECT.
Результат отсортированного списка выглядит следующим образом:
Рисунок 35
Динамическая выборка данных
В простейшем случае известно все, кроме логической структуры условий дополнения WHERE.
Для примера допустим, что необходимо выполнить запрос, в котором выбирались бы имена тех людей, коды которых находились бы в диапазоне, определенным пользователем. Для этих целей используется конструкция SELECT-OPTIONS.
REPORT Z_SELECT .
TABLES: UPERS.
SELECT-OPTIONS NUM FOR UPERS-EUNR.
SELECT * FROM UPERS WHERE EUNR IN NUM.
WRITE: / UPERS-EUNA.
ENDSELECT.
В данном примере программа просит пользователя ввести диапазон кодов, которые потом подставляются в условие конструкции SELECT.
Рисунок 36
Если выбрать диапазон кодов с 2 по 4, то в выборку попадут три записи с кодами (2,3 и 4).
Вложенные циклы select
Допустим нам необходимо вывести на экран список, состоящий из двух колонок: Название курса (UKURS-KNAME) и имя профессора (UKURS-PRFNR-EUNA), читающего этот курс. Причем чтобы узнать имя нужно "проскочить" через 2 таблицы - UKURS (Курсы) и UPERS (Люди).
REPORT Z_SELECT .
TABLES: UKURS, UPERS.
SELECT * FROM UKURS.
SELECT * FROM UPERS WHERE EUNR = UKURS-PRFNR.
WRITE: / UKURS-KNAME, UPERS-EUNA.
ENDSELECT.
ENDSELECT.