- •Часть 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
Пример использования: после загрузки фактических данных в SAP BW нужно выполнить последовательность планирования для выполнения пересчетов в бюджетной модели.
FUNCTION Z_S_START_CHECK. *"---------------------------------------------------------------------- *"*"Локальный интерфейс: *" IMPORTING *" VALUE(LS_ORGUNIT) TYPE /BIC/OISORGUNIT *" VALUE(LS_PARAM) TYPE ZSCHECK_PARAM *" EXPORTING *" VALUE(ZSGUID_22) TYPE ZSGUID_22 *" VALUE(ZSBAPIRET2) TYPE ZSBAPIRET2 *"---------------------------------------------------------------------- DATA: L_SEQNM TYPE RSPLS_SEQNM, L_SCREEN_MODE TYPE RSPLS_SCREEN_MODE, L_VAR_HANDLE TYPE RSR_HANDLE, LT_BAPIRET TYPE TABLE OF BAPIRET2, LS_BAPIRET TYPE BAPIRET2, LT_VALUES TYPE RSR_T_VARIABLE_VALUES, LS_VAL TYPE RSRRANGEEXT, L_SUBRC TYPE SY-SUBRC. DATA: LS_GUID22 TYPE GUID_22, S1 TYPE STRING, S2 TYPE STRING. FIELD-SYMBOLS: <FS_LINE> TYPE ANY, <FS_VAR_ID> TYPE ANY, <FS_VNAM> TYPE ANY, <FS_VALUES> TYPE RSR_T_RANGEEX, <FS_VALUES_L> TYPE RSRRANGEEXT. * ИМЯ ПОСЛЕДОВАТЕЛЬНОСТИ ПЛАНИРОВАНИЯ L_SEQNM = 'SF00_P02_2'. * Получение handle контейнера переменных CALL FUNCTION 'RSPLSSE_PLSEQ_SCREEN_NECESSARY' EXPORTING I_SEQNM = L_SEQNM I_OBJVERS = 'A' IMPORTING E_SCREEN_MODE = L_SCREEN_MODE E_VAR_HANDLE = L_VAR_HANDLE TABLES E_TK_RETURN = LT_BAPIRET. * Считывание контейнера переменных CALL FUNCTION 'RSR_VAR_GET_VALUES' EXPORTING I_VAR_CONT_HANDLE = L_VAR_HANDLE IMPORTING E_T_VALUES = LT_VALUES E_SUBRC = L_SUBRC TABLES E_T_RETURN = LT_BAPIRET. LOOP AT LT_VALUES ASSIGNING <FS_LINE>. CLEAR LS_VAL. ASSIGN COMPONENT 'VAR_ID' OF STRUCTURE <FS_LINE> TO <FS_VAR_ID>. ASSIGN COMPONENT 'VNAM' OF STRUCTURE <FS_VAR_ID> TO <FS_VNAM>. ASSIGN COMPONENT 'VALUES' OF STRUCTURE <FS_LINE> TO <FS_VALUES>. LOOP AT <FS_VALUES> ASSIGNING <FS_VALUES_L>. DELETE <FS_VALUES>. ENDLOOP. CASE <FS_VNAM>. WHEN 'SVAR_0FISCPER3_S0'. LS_VAL-SIGN = 'I'. LS_VAL-OPT = 'EQ'. LS_VAL-LOW_EXT = LS_PARAM-FISCPER3. LS_VAL-HIGH_EXT = ''. APPEND LS_VAL TO <FS_VALUES>. WHEN 'SVAR_0FISCYEAR_S0'. LS_VAL-SIGN = 'I'. LS_VAL-OPT = 'EQ'. LS_VAL-LOW_EXT = LS_PARAM-FISCYEAR. LS_VAL-HIGH_EXT = ''. APPEND LS_VAL TO <FS_VALUES>. WHEN 'SVAR_SFORM_I1'. WHEN 'SVAR_SCHKRULE_S0'. LS_VAL-SIGN = 'I'. LS_VAL-OPT = 'EQ'. LS_VAL-LOW_EXT = LS_PARAM-SCHKRULE. LS_VAL-HIGH_EXT = ''. APPEND LS_VAL TO <FS_VALUES>. WHEN 'SVAR_SVERSION_S0'. LS_VAL-SIGN = 'I'. LS_VAL-OPT = 'EQ'. LS_VAL-LOW_EXT = LS_PARAM-SVERSION. LS_VAL-HIGH_EXT = ''. APPEND LS_VAL TO <FS_VALUES>. WHEN 'SVAR_SORGUNIT_I0'. LS_VAL-SIGN = 'I'. LS_VAL-OPT = 'EQ'. LS_VAL-LOW_EXT = LS_ORGUNIT. LS_VAL-HIGH_EXT = ''. APPEND LS_VAL TO <FS_VALUES>. WHEN OTHERS. MESSAGE W001(00) WITH 'Параметры посл. план. изменены'. ENDCASE. ENDLOOP. * Сохранение значений переменных в контейнер CALL FUNCTION 'RSR_VAR_SET_VALUES' EXPORTING I_VAR_CONT_HANDLE = L_VAR_HANDLE I_T_VALUES = LT_VALUES IMPORTING E_SUBRC = L_SUBRC TABLES E_T_RETURN = LT_BAPIRET. * Запуск последовательности планирования CALL FUNCTION 'RSPLSSE_PLSEQ_EXECUTE' EXPORTING I_SEQNM = L_SEQNM I_FAST_ENQUEUE = 'X' TABLES E_TK_RETURN = LT_BAPIRET. LOOP AT LT_BAPIRET INTO LS_BAPIRET WHERE ID = 'ZSCHK' AND NUMBER = 998. SPLIT LS_BAPIRET-MESSAGE AT '=' INTO S1 S2. LS_GUID22 = S2. APPEND LS_GUID22 TO ZSGUID_22. ENDLOOP. LOOP AT LT_BAPIRET INTO LS_BAPIRET WHERE ( ID = 'RSPLS' OR ID = 'RSPLF' ) AND TYPE EQ 'E'. APPEND LS_BAPIRET TO ZSBAPIRET2. ENDLOOP. ENDFUNCTION.