- •Часть 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, недоступных для ведения
- •Оптимизация выборки данных
- •Справочник транзакций
Формирование структуры признаков из настроечной таблицы
В предыдущем примере по чтению инфо-куба структура признаков создается статически. Обычно признаков нужно добавить большое кол-во или формировать разные структуры в зависимости от «ситуации». Поэтому лучше формировать из настроечной таблицы:
- в настроечной таблице перечислены необходимые поля;
- структура формируется из структуры настроечной таблицы:
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING i_structure_name = 'ZEXPORT_ASTK' CHANGING ct_fieldcat = lt_fieldcat EXCEPTIONS inconsistent_interface = 1 program_error = 2.
Отправка e-mail сообщения из abap на внешний адрес
Представленная функция выполняет отправку произвольного сообщения электронной почты внешним адресатам. Эта возможность полезна для отправки различных уведомлений пользователям (например, уведомление об ошибочной загрузке файла).
FUNCTION Z_S_SEND_MESSAGE.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" REFERENCE(I_MSG_ADDR) TYPE STRING
*" REFERENCE(I_HEADER) TYPE STRING
*" REFERENCE(I_BODY) TYPE ZST_STRING
*"----------------------------------------------------------------------
CONSTANTS: C_CHARX(1) TYPE C VALUE 'X',
C_CHARU(1) TYPE C VALUE 'U',
C_YES(3) TYPE C VALUE 'Yes', "#EC NEEDED
C_NO(2) TYPE C VALUE 'No'. "#EC NEEDED
DATA:
* Comment data comes from function module CATSXT_SIMPLE_TEXT_EDITOR
WA_COMMENTS TYPE LINE OF CATSXT_LONGTEXT_ITAB,
IT_COMMENTS TYPE CATSXT_LONGTEXT_ITAB.
*-- Work area for all the internal tables used for Sending Mail
DATA: WA_PACKING_LIST TYPE SOPCKLSTI1,
WA_CONTENTS_TXT TYPE SOLISTI1,
WA_RECLIST TYPE SOMLRECI1.
*-- Variables used for Sending Mail
DATA: GV_SMTP_ADDR TYPE ADR6-SMTP_ADDR,
SENDER TYPE SOEXTRECI1-RECEIVER,
SEND_ADR_TYPE TYPE SO_ADR_TYP.
DATA: GV_COUNT TYPE SY-INDEX,
GV_LINE_NO TYPE SY-INDEX. "#EC NEEDED
*-- MAIL related Internal tables
DATA: WA_DOC_CHNG TYPE SODOCCHGI1, " document attributes
IT_PACKING_LIST TYPE STANDARD TABLE OF SOPCKLSTI1, " attachment table
IT_CONTENTS_TXT TYPE STANDARD TABLE OF SOLISTI1, " object text
IT_RECLIST TYPE STANDARD TABLE OF SOMLRECI1. " mail recipients
* For GUI shortcut attachment
** DATA: it_shortcut TYPE soli_tab.
* Initialize some data
GV_SMTP_ADDR = I_MSG_ADDR.
SENDER = 'NO.REPLY@adm.gazprom.ru'.
SEND_ADR_TYPE = 'SMTP'.
**Put the Email ID of approver in list of Recepients of Notification Email.
* Get the mail Id for Purchase Group Owner
CLEAR: WA_RECLIST, IT_RECLIST.
*-- Populate Mail Id's
WA_RECLIST-REC_TYPE = C_CHARU. "U = Internet address
WA_RECLIST-EXPRESS = C_CHARX. "Send express "X = Value for activated
WA_RECLIST-RECEIVER = GV_SMTP_ADDR.
APPEND WA_RECLIST TO IT_RECLIST.
CLEAR: GV_SMTP_ADDR, WA_RECLIST.
*-- If receiver table is not initial
CHECK IT_RECLIST[] IS NOT INITIAL.
*--To check Mail ID's internal table should not be Empty.
*--populate document attributes
*-- Mail subject line
CLEAR: WA_DOC_CHNG.
WA_DOC_CHNG-OBJ_NAME = 'HEADING'.
WA_DOC_CHNG-OBJ_DESCR = I_HEADER.
*-- Mail body
IF IT_COMMENTS IS NOT INITIAL.
CLEAR: WA_CONTENTS_TXT, IT_CONTENTS_TXT.
WA_CONTENTS_TXT = 'Comments from Requestor:'(029).
APPEND WA_CONTENTS_TXT TO IT_CONTENTS_TXT.
APPEND INITIAL LINE TO IT_CONTENTS_TXT.
LOOP AT IT_COMMENTS INTO WA_COMMENTS.
WA_CONTENTS_TXT = WA_COMMENTS.
APPEND WA_CONTENTS_TXT TO IT_CONTENTS_TXT.
ENDLOOP.
APPEND INITIAL LINE TO IT_CONTENTS_TXT.
ENDIF.
LOOP AT I_BODY INTO WA_CONTENTS_TXT.
APPEND WA_CONTENTS_TXT TO IT_CONTENTS_TXT.
ENDLOOP.
APPEND INITIAL LINE TO IT_CONTENTS_TXT.
*-- Document size
CLEAR: GV_LINE_NO, GV_COUNT.
DESCRIBE TABLE IT_CONTENTS_TXT LINES GV_COUNT.
GV_LINE_NO = GV_COUNT.
READ TABLE IT_CONTENTS_TXT INTO WA_CONTENTS_TXT INDEX GV_COUNT.
WA_DOC_CHNG-DOC_SIZE = ( GV_COUNT - 1 ) * 255 + STRLEN( WA_CONTENTS_TXT ).
*-- Populate packing list for body text
WA_PACKING_LIST-HEAD_START = 1.
WA_PACKING_LIST-HEAD_NUM = 0.
WA_PACKING_LIST-BODY_START = 1.
WA_PACKING_LIST-BODY_NUM = GV_COUNT."v_table_lines.
WA_PACKING_LIST-DOC_TYPE = 'RAW'.
APPEND WA_PACKING_LIST TO IT_PACKING_LIST.
CLEAR WA_PACKING_LIST.
*-- Sending the EMail document in given format
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
DOCUMENT_DATA = WA_DOC_CHNG
PUT_IN_OUTBOX = C_CHARX "'X'
SENDER_ADDRESS = SENDER
SENDER_ADDRESS_TYPE = SEND_ADR_TYPE
COMMIT_WORK = C_CHARX "'X'
TABLES
PACKING_LIST = IT_PACKING_LIST
CONTENTS_TXT = IT_CONTENTS_TXT
RECEIVERS = IT_RECLIST
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
DOCUMENT_TYPE_NOT_EXIST = 3
OPERATION_NO_AUTHORIZATION = 4
PARAMETER_ERROR = 5
X_ERROR = 6
ENQUEUE_ERROR = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFUNCTION.