Определение расширений BAPI

Переодически забываю этот метод. Запишу себе в блокнотик, чтоб не забывать.

Транзакция: se80

Класс: CL_EXITHANDLER

Метод: GET_INSTANCE

Точка прерывания: на первой строке CALL METHOD cl_exithandler=>get_class_name_by_interface

Имя искомого BADI: в переменной exit_name

Ставится точка прерывания и запускается нужная транзакция. В переменной exit_name будут всплывать имена подключаемых BADI.

Забавное использование стратегии деривации – в качестве хранилища данных

Транзакция FMDERIVE может использоваться как хранилище данных настроек.

    В первую очередь для того, чтобы не плодить Z-таблицы. Причем можно использовать и в целях не связанных с модулем FM.

В качестве минусов, конечно, можно отметить:

  • Нецелевое использование функциональности
  • Сложность распределения прав

В ней очень удобно хранить некоторые данные – полей в структуре достаточно много, разрешены диапазоны, сроки действия, выстроена система переноса.

Примеры использования:

  • Соответствие МВЗ и счетов затрат
  • Список допустимых комбинаций Счет + МВЗ + Заказ
    Для этого заходим в транзакцию FMDERIVE и создаём там новую стратегию:

(далее…)

Разбор вложенных структур

Проблемка и решение

Есть одна достаточно полезная подпрограмма для чтения данных из Excel. Даёшь ей файл, параметры и внутреннюю таблицу. И получаешь заполненную внутреннюю таблицу.

Там в кишках слепок таблицы Excel перекладывается в целевую таблицу.

image

Дальше перекладываются значения в зависимости от типов колонок.

Проблемы начались после того, как я в целевой таблице стал использовать вложенные структуры.

image

Соответственно ASSIGN COMPONENT стал вести не на целевое поле, а на структуру со всеми вытекающими неприятными последствиями.

И вот сделал такую переборку внутренних вложенных структур:

image

Тип “u” это как раз вложенные структуры (плоские).

Ну решение простое, можно конечно ещё извернуться с рекурсией и типом “v” (это уже посложнее – deep structure). Но это пока не требуется.

Вот так и использование DESCRIBE FIELD помогает.

Между делом

Вообще использование вложенных структур сильно может помочь. Основные преимущества подхода:

  • Возможность сравнения подструктур
  • Возможность использование move-corresponding в подструктурах

В моём случае подструктуры – это блоки дебета и кредита бухгалтерской проводки.

Можно сильно сократить объём кода и его понятность в некоторых местах, например:

image

Может также использоваться для пар старых-новых значений, или для сравнения данных (источник-назначение).