- •Часть 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, недоступных для ведения
- •Оптимизация выборки данных
- •Справочник транзакций
Определение ссылочных данных
Определение ссылочных данных осуществляется в методе IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~GET_REF_DATA_SEL. Если класс построен на интерфейсе IF_RSPLFA_SRVTYPE_IMP_EXEC, то данный метод будет отсутствовать.
Часто, удобнее присвоить в ограничение на ссылочные данные текущие ограничения на данные для изменения:
E_T_REF_CHARSEL = I_T_DATA_CHARSEL.
А далее вносить новые записи или изменять существующие:
LOOP AT L_T_CHAARR INTO L_S_CHAARR. L_R_REF_CHARSER-IOBJNM = L_S_CHAARR-CHANM. L_R_REF_CHARSER-SIGN = 'I'. L_R_REF_CHARSER-OPT = 'CP'. L_R_REF_CHARSER-LOW = '*'. L_R_REF_CHARSER-HIGH = ''. APPEND L_R_REF_CHARSER TO E_T_REF_CHARSEL. ENDLOOP.
Добавление сообщений в спул вывода
Для передачи сообщений в точку вызова необходимо включать следующий код:
DATA: L_DUMMY TYPE C.
MESSAGE ID 'ZS_S1' TYPE 'I' NUMBER '005' WITH 'Параметр 1' INTO L_DUMMY. I_R_MSG->ADD_MSG( ).
Обработка данных для изменения
Обработка данных осуществляется в методе IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~EXECUTE
В качестве параметров метода доступны таблицы с данными для изменения (C_TH_DATA) и таблица со ссылочными данными (I_TH_REF_DATA).
Пример обработки:
METHOD IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~EXECUTE. FIELD-SYMBOLS: <0CS_TRN_LC1> TYPE ANY, <0CS_TRN_LC2> TYPE ANY, <0CS_TRN_QTY1> TYPE ANY, <0CS_TRN_QTY2> TYPE ANY, <L_OU> TYPE ANY, <L_SOU> TYPE ANY, <L_LINE_S> TYPE ANY, <L_LINE> TYPE ANY, <L_LINE_O> TYPE ANY. DATA: SORGUNIT TYPE /BIC/OISORGUNIT, L_LINE TYPE REF TO DATA, L_DUMMY TYPE C. IF L_INIT_OK = 'X'. CLEAR C_TH_DATA. CREATE DATA L_LINE LIKE LINE OF C_TH_DATA. ASSIGN L_LINE->* TO <L_LINE>. LOOP AT I_TH_REF_DATA ASSIGNING <L_LINE_S>. MOVE-CORRESPONDING <L_LINE_S> TO <L_LINE>. ASSIGN COMPONENT 'SORGUNIT' OF STRUCTURE <L_LINE> TO <L_OU>. ASSIGN COMPONENT 'SSORGUNIT' OF STRUCTURE <L_LINE> TO <L_SOU>. SORGUNIT = <L_OU>. <L_SOU> = SORGUNIT. <L_OU> = L_OU. INSERT <L_LINE> INTO TABLE C_TH_DATA. IF SY-SUBRC NE 0. * ЗНАЧИТ СТРОЧКА С ТАКИМИ ПАРАМЕТРАМИ УЖЕ БЫЛА. НУЖНО АГРЕГИРОВАТЬ READ TABLE C_TH_DATA FROM <L_LINE> ASSIGNING <L_LINE_O>. ASSIGN COMPONENT '0CS_TRN_LC' OF STRUCTURE <L_LINE_O> TO <0CS_TRN_LC1>. ASSIGN COMPONENT '0CS_TRN_LC' OF STRUCTURE <L_LINE> TO <0CS_TRN_LC2>. ASSIGN COMPONENT '0CS_TRN_QTY' OF STRUCTURE <L_LINE_O> TO <0CS_TRN_QTY1>. ASSIGN COMPONENT '0CS_TRN_QTY' OF STRUCTURE <L_LINE> TO <0CS_TRN_QTY2>. <0CS_TRN_LC1> = <0CS_TRN_LC1> + <0CS_TRN_LC2>. <0CS_TRN_QTY1> = <0CS_TRN_QTY1> + <0CS_TRN_QTY2>. ENDIF. ENDLOOP. MESSAGE ID 'ZS_S1' TYPE 'I' NUMBER '005' WITH L_CHILDRENCOUNT INTO L_DUMMY. I_R_MSG->ADD_MSG( ). RETURN. ELSE. MESSAGE ID 'ZS_S1' TYPE 'E' NUMBER '004' INTO L_DUMMY. I_R_MSG->ADD_MSG( ). RETURN. ENDIF. ENDMETHOD.