- •Часть 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 Dictionary, выбрав переключатель Domain.
Рисунок 17
В окне Maintain Domain введите все необходимые поля, после чего сохраните домен и активируйте его.
Рисунок 18
Работа с данными Копирование полей с помощью команд Move и Compute
Самый простой способ работы с данными в программе - их перемещение посредством команд Move и Compute.
В следующем примере после применения команды Move поле Name содержит строку 'ERP Group', а COUNTER - число 25.
DATA: NAME(25),
COUNTER TYPE I.
MOVE: 'ERP Group' TO NAME,
25 TO COUNTER.
Общий формат оператора Move:
MOVE SOURCE TO TARGET.
Если Вы привыкли писать целевое поле с левой стороны оператора, то можно воспользоваться командой Compute.
COMPUTE TARGET = SOURCE.
Ключевое слово COMPUTE можно опускать. Следующая команда полностью аналогична предыдущей.
TARGET = SOURCE.
При необходимости заполнить несколько полей одинаковыми значениями можно объединить команды COMPUTE. Например:
DATA: PHONE_1 LIKE SOURCE,
PHONE_2 LIKE PHONE_1,
PHONE_3 LIKE PHONE_2,
PHONE_4 LIKE PHONE_3.
PHONE_4 = PHONE_3 = PHONE_2 = PHONE_1 = SOURCE.
Преобразования содержимого полей
Если у исходного и целевого полей разный тип и размер данных, ABAP/4 всегда преобразует содержимое исходного поля к формату целевого. Например, вычислите сумму двух полей типа character, а результат сохраните в тип integer.
DATA: NUMBER_1(4) VALUE '1771',
NUMBER_2(3),
RESULT TYPE I.
NUMBER_2 = '005'.
RESULT = NUMBER_1 + NUMBER_2.
WRITE / RESULT.
NUMBER_2 = ' 5'.
RESULT = NUMBER_1 + NUMBER_2.
WRITE / RESULT.
В обоих вариантах поле RESULT будет равным 1776.
В другом примере нужно вычислить дату того же дня следующей недели:
DATA: ANY_DATE TYPE D,
SAME_DAY_OF_NEXT_WEEK TYPE D.
ANY_DATE = '19991231'.
SAME_DAY_OF_NEXT_WEEK = ANY_DATE + 7.
WRITE / SAME_DAY_OF_NEXT_WEEK.
Так для даты '19991231' (31 декабря 1999) результатом будет '20000107' (7 января 2000).
Рассмотрим следующий пример работы с символьными полями:
DATA: SHORT_NAME(8),
LONG_NAME(16).
LONG_NAME = SHORT_NAME = 'Washington'.
WRITE: / SHORT_NAME, LONG_NAME.
В данном случает значение 'Washington' передается полю SHORT_NAME, т.е. сократится до 8 символов, а потом из SHORT_NAME передается в LONG_NAME. Т.е. и LONG_NAME станет равным 'Washingt'.
В данном примере правильным было бы написать так:
...
SHORT_NAME = LONG_NAME = 'Washington'.
WRITE: / SHORT_NAME, LONG_NAME.
Копирование структурированных объектов
Для копирования структурированных объектов данных можно воспользоваться приемом явного пошагового копирования компонентов. Для этого придется написать длинную и сложно поддерживаемую программу. Оператор MOVE-CORRESPONDING позволяет копировать данные из одной структуры в другую компоненты с одинаковыми именами.
Рассмотрим следующий пример.
DATA: BEGIN OF MY_CUSTOMER,
ID(8) TYPE N,
NAME(25),
CITY(25),
END OF MY_CUSTOMER,
BEGIN OF CITY_OF_CUSTOMER,
CITY LIKE MY_CUSTOMER-CITY,
TEXT(30),
ID LIKE MY_CUSTOMER-ID,
END OF CITY_OF_CUSTOMER.
MY_CUSTOMER-ID = '87654321'.
MY_CUSTOMER-NAME = 'ERP Group'.
MY_CUSTOMER-CITY = 'Moscow'.
CITY_OF_CUSTOMER-TEXT = 'Old text'.
MOVE-CORRESPONDING MY_CUSTOMER TO CITY_OF_CUSTOMER.
WRITE: / 'ID = ', CITY_OF_CUSTOMER-ID,
/ 'CITY = ', CITY_OF_CUSTOMER-CITY,
/ 'TEXT = ', CITY_OF_CUSTOMER-TEXT.
После применения команды MOVE-CORRESPONDING в новой структуре CITY_OF_CUSTOMER поля ID станет равным '87654321', поле CITY = 'Moscow', а поле TEXT останется неизменным, т.к. в исходной структуре нет поля с таким именем.
Если одноименные поля будут разных типов, их содержимое преобразуется согласно общим правилам преобразования типов в языке ABAP/4.
С помощью команды MOVE можно также копировать структурированные объекты типа записей или внутренних таблиц.
...
DATA: CURRENT_CUSTOMER LIKE MY_CUSTOMER,
BEGIN OF PREVIOUS_CUSTOMER,
IDENTIFIER LIKE MY_CUSTOMER-ID,
NAME LIKE MY_CUSTOMER-NAME,
CITY LIKE MY_CUSTOMER-CITY,
END OF PREVIOUS_CUSTOMER.
CURRENT_CUSTOMER-ID = '12345678'.
MOVE CURRENT_CUSTOMER TO PREVIOUS_CUSTOMER.
WRITE: / 'ID = ', PREVIOUS_CUSTOMER-IDENTIFIER.
Но в отличие от команды MOVE-CORRESPONDING имена полей (IDENTIFIER и ID) должны иметь одинаковый элементарный тип и длину.
С помощью команды MOVE можно аналогичным образом копировать все строки из одной таблицы в другую.