Я раньше как бы предполагал, что в SAP есть специальные механизмы для обработки и показа ошибок, но наконец-то решил попробовать.
Скажем типовая программа по массовой проводке или обработке документов в SAP строится по следующей схеме:
1. Выборка или сбор нужных данных
2. Подтверждение обрабатываемых данных
3. Цикл по подтверждённым данным
3.1 Запуск BAPI или BDC
3.2. Анализ результата
3.3. Красивый вывод
3.*. Конец цикла
4. Вывод итоговой информации
За несколько лет через меня таких программок прошло уже достаточно много.
Во-первых, вывод ошибок во write, построение drill-down — это дело просто муторное.
Во-вторых, если используется подтверждение на основе ALV с галочками, то вывод write (даже раскрашенный) начинает контрастировать.
В-третьих, при переключении из ALV на результат write и возврат обратно – задача со странными шаманскими бубнами типа “LEAVE TO LIST-PROCESSING” и геморроем со статусами.
И вот я посмотрел на то, как выглядит транзакция SLG1 – и копнул, как делается аналогичная функциональность. Не сильно меня это напугало, и был набросан инклюд, претендующий на универсальность, а сам код приобрел следующие черты:
************************************************
form post_plans.
perform BAL_LOG_REFRESH.
loop at it_plan where C = ‘X’.
perform BAL_LOG_CREATE using sy-tabix ‘ZFM’ ‘ZFM_LOAD_RELE’.
perform run_posting using it_plan-*……
endloop.
perform BAL_LOG_DISPLAY using ‘X’ ‘W’.
endform.************************************************
form run_posting using foo_a ….
. . .
CALL FUNCTION ‘BAPI_0050_CREATE’
TABLES
RETURN = it_return.
perform BAL_LOG_MSG_ADD_BAPI using it_return[].
endform.
************************************************
Вроде как просто, понятно, удобно.
Предварительное подтверждение на базе простого ALV:
А вот собственно результат который получается при нажатии на кнопку “Провести”:
Вся основная функциональность сосредоточена в группе функций SBAL и кучка примеров SBAL*. К руководству и использованию.
Из основных преимуществ:
- Базовая функциональность делается легко и просто используется
- Открывать список ошибок можно в отдельном окне
- Список сообщений легко фильтруется (например: только ошибки, или включать также предупреждения)
- Возможно сохранение журнала в базу данных (может быть полезно, если программа запускается в фоновом режиме)
- Можно добавлять и собственные сообщения (вплоть до ZZ[001] = &1 &2 &2 &4), что открывает простор для фантазии
Судя по всему, можно реализовать (сложнее, но похоже не намного):
- навешивание своих кнопочек
- навешивание собственных колонок
- drill-down, то бишь “проваливание”
Вот как раз задание самому себе на следующий раз – сделать проваливание.