
- •Часть 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 кода для чтения данных инфо-куба.
TYPE-POOLS: RSD. DATA: LS_RUNPARAM LIKE LINE OF LT_RUNPARAM. DATA: L_T_SEL TYPE RSDD_T_SEL, L_TH_SFC TYPE RSDRI_TH_SFC, L_TH_SFK TYPE RSDRI_TH_SFK. DATA: L_S_RANGE TYPE RSDRI_S_RANGE, L_T_RANGE TYPE RSDRI_T_RANGE. DATA: L_S_SFC TYPE RSDRI_S_SFC, L_S_SFK TYPE RSDRI_S_SFK. DATA: L_EOD TYPE RS_BOOL. DATA: E_T_MESSAGE TYPE RSSEM_T_MESSAGE. DATA: SR_DATA TYPE REF TO DATA. DATA: L_HVIEW TYPE RSD_S_CUBE-VIEWHIOBJNM. DATA: L_YEAR TYPE /BI0/OIFISCYEAR. FIELD-SYMBOLS: <FS_SCOMP> TYPE /BIC/OISCOMP, <FS_SOPXTYPE> TYPE /BIC/OISOPXTYPE, <FS_SSEGM> TYPE /BIC/OISSEGM, <FS_AMOUNT> TYPE /BI0/OICS_TRN_GC, <LS_DATA> TYPE ANY, <LT_DATA> TYPE STANDARD TABLE. DATA: L_S_DATA TYPE TS_ALLOCATION_BASE. DATA: L_T_DATA TYPE TT_ALLOCATION_BASE. DATA: L_END_OF_DATA TYPE RS_BOOL, L_FIRST_CALL TYPE RS_BOOL. DATA: I_VALFROM TYPE BAPI1022_FIELD. DATA: IDX TYPE SY-TABIX. CONSTANTS: LS_SCS_ITEM TYPE /BIC/OISCS_ITEM VALUE 'C.720.90.00.N'. CALL FUNCTION 'RSD_TNAMES_GET_FOR_CUBE' EXPORTING I_INFOCUBE = 'S03_R01' IMPORTING E_VIEWHIOBJNM = L_HVIEW. * ФОРМИРОВАНИЕ РАЗВЕРТКИ И ФИЛЬТРА ДЛЯ ЧТЕНИЯ ДАННЫХ ИЗ S03_R01 CLEAR L_TH_SFC. * РАЗВЕРТКА ПО КОМПАНИИ CLEAR L_S_SFC. L_S_SFC-CHANM = 'SCOMP'. L_S_SFC-CHAALIAS = 'SCOMP'. L_S_SFC-ORDERBY = 0. INSERT L_S_SFC INTO TABLE L_TH_SFC. * РАЗВЕРТКА ПО ЭЛ-М ЗАТРАТ CLEAR L_S_SFC. L_S_SFC-CHANM = 'SOPXTYPE'. L_S_SFC-CHAALIAS = 'SOPXTYPE'. L_S_SFC-ORDERBY = 0. INSERT L_S_SFC INTO TABLE L_TH_SFC. * РАЗВЕРТКА ПО СЕГМЕНТАМ CLEAR L_S_SFC. L_S_SFC-CHANM = 'SSEGM'. L_S_SFC-CHAALIAS = 'SSEGM'. L_S_SFC-ORDERBY = 0. INSERT L_S_SFC INTO TABLE L_TH_SFC. * ВЫВОДИТЬ ПОКАЗАТЕЛЬ CLEAR L_TH_SFK. CLEAR L_S_SFK. L_S_SFK-KYFNM = '0CS_TRN_GC'. L_S_SFK-KYFALIAS = '0CS_TRN_GC'. L_S_SFK-AGGR = 'SUM'. INSERT L_S_SFK INTO TABLE L_TH_SFK. CLEAR L_T_RANGE. * ФИЛЬТР ПО ВЕРСИИ (ИЗ ПЕРЕМ ДАННЫХ) CLEAR: L_S_RANGE, LS_RUNPARAM. L_S_RANGE-CHANM = 'SVERSION'. L_S_RANGE-SIGN = 'I'. L_S_RANGE-COMPOP = 'EQ'. READ TABLE LT_RUNPARAM WITH TABLE KEY FIELDNAME = '/BIC/SVERSION' INTO LS_RUNPARAM. L_S_RANGE-LOW = LS_RUNPARAM-VALUE. APPEND L_S_RANGE TO L_T_RANGE. * ФИЛЬТР ПО КАТАЛОГУ ПОЗИЦИЙ (ИЗ ПЕРЕМ ДАННЫХ) CLEAR: L_S_RANGE, LS_RUNPARAM. L_S_RANGE-CHANM = '0CS_CHART'. L_S_RANGE-SIGN = 'I'. L_S_RANGE-COMPOP = 'EQ'. READ TABLE LT_RUNPARAM WITH TABLE KEY FIELDNAME = '/1FB/CS_CHART' INTO LS_RUNPARAM. L_S_RANGE-LOW = LS_RUNPARAM-VALUE. APPEND L_S_RANGE TO L_T_RANGE. * ФИЛЬТР ПО СЧЕТУ CLEAR: L_S_RANGE, LS_RUNPARAM. L_S_RANGE-CHANM = 'SCS_ITEM'. L_S_RANGE-SIGN = 'I'. L_S_RANGE-COMPOP = 'EQ'. L_S_RANGE-LOW = LS_SCS_ITEM. APPEND L_S_RANGE TO L_T_RANGE. * ФИЛЬТР ПО УРОВНЮ КОНТИРОВКИ (00, 01, 10) CLEAR L_S_RANGE. L_S_RANGE-CHANM = '0CS_PLEVEL'. L_S_RANGE-SIGN = 'I'. L_S_RANGE-COMPOP = 'EQ'. L_S_RANGE-LOW = '00'. APPEND L_S_RANGE TO L_T_RANGE. L_S_RANGE-LOW = '01'. APPEND L_S_RANGE TO L_T_RANGE. L_S_RANGE-LOW = '10'. APPEND L_S_RANGE TO L_T_RANGE. * ФИЛЬТР ПО ГОДУ (ИЗ ПЕРЕМ ДАННЫХ) CLEAR: L_S_RANGE, LS_RUNPARAM. L_S_RANGE-CHANM = '0FISCYEAR'. L_S_RANGE-SIGN = 'I'. L_S_RANGE-COMPOP = 'EQ'. READ TABLE LT_RUNPARAM WITH TABLE KEY FIELDNAME = 'FISCYEAR' INTO LS_RUNPARAM. L_S_RANGE-LOW = LS_RUNPARAM-VALUE. L_YEAR = LS_RUNPARAM-VALUE. APPEND L_S_RANGE TO L_T_RANGE. CLEAR: L_S_RANGE, LS_RUNPARAM. L_S_RANGE-CHANM = '0FISCPER3'. L_S_RANGE-SIGN = 'I'. L_S_RANGE-COMPOP = 'BT'. L_S_RANGE-LOW = '001'. READ TABLE LT_RUNPARAM WITH TABLE KEY FIELDNAME = 'FISCPERIOD' INTO LS_RUNPARAM. L_S_RANGE-HIGH = LS_RUNPARAM-VALUE. APPEND L_S_RANGE TO L_T_RANGE. CREATE DATA SR_DATA TYPE STANDARD TABLE OF (L_HVIEW) WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0. ASSIGN SR_DATA->* TO <LT_DATA>. L_FIRST_CALL = RS_C_TRUE. WHILE L_EOD IS INITIAL. CALL FUNCTION 'RSSEM_INFOPROV_READ' EXPORTING I_INFOPROV = 'S03_R01' I_AUTHORITY_CHECK = '' I_USE_AGGREGATES = 'X' "jhn300106 I_PACKAGESIZE = 10000 I_T_SFC = L_TH_SFC I_T_SFK = L_TH_SFK I_T_RANGE = L_T_RANGE IMPORTING E_END_OF_DATA = L_EOD E_T_DATA = <LT_DATA> E_T_MESSAGE = E_T_MESSAGE CHANGING C_FIRST_CALL = L_FIRST_CALL EXCEPTIONS NO_AUTHORIZATION = 1 SHFC_HIENODE = 2 NO_NCUM_QUERY_ALLOWED = 3 CUBE_LOCKED_DUE_2_COMPRESSION = 4. LOOP AT <LT_DATA> ASSIGNING <LS_DATA>. ASSIGN COMPONENT 'SCOMP' OF STRUCTURE <LS_DATA> TO <FS_SCOMP>. ASSIGN COMPONENT 'SOPXTYPE' OF STRUCTURE <LS_DATA> TO <FS_SOPXTYPE>. ASSIGN COMPONENT 'SSEGM' OF STRUCTURE <LS_DATA> TO <FS_SSEGM>. ASSIGN COMPONENT '0CS_TRN_GC' OF STRUCTURE <LS_DATA> TO <FS_AMOUNT>. READ TABLE L_T_DATA WITH TABLE KEY SCOMP = <FS_SCOMP> SOPXTYPE = <FS_SOPXTYPE> SSEGM = <FS_SSEGM> INTO L_S_DATA. IDX = SY-TABIX. IF SY-SUBRC = 0. L_S_DATA-CS_TRN_GC = L_S_DATA-CS_TRN_GC + <FS_AMOUNT>. MODIFY L_T_DATA FROM L_S_DATA INDEX IDX. ELSE. L_S_DATA-SCOMP = <FS_SCOMP>. L_S_DATA-SOPXTYPE = <FS_SOPXTYPE>. L_S_DATA-SSEGM = <FS_SSEGM>. L_S_DATA-CS_TRN_GC = <FS_AMOUNT>. INSERT L_S_DATA INTO TABLE L_T_DATA. ENDIF. ENDLOOP. ENDWHILE.