Для отображения иерархической таблицы с двумя уровнями иерархии (главный и подчиненный) в SALV модели используется класс — cl_salv_hierseq_table.

Примером подобной иерархии может служить заказ на закупку, который состоит из заголовочной части и позиций заказа. Связь в этой иерархии осуществляется с помощью ключевого поля «номер заказа» в заголовке и позиции заказа.

Таблица создается с помощью фабрично-статического метода factory(). При его вызове необходимо передать две таблицы с данными и таблицу, в которой прописана связь между ними с типом salv_t_hierseq_binding. В данной таблице указываются ключевые поля которые связывают таблицы, но не более 5 полей. Если у вас больше создавайте составные ключи в технических полях.
Следующий пример покажет, как вывести иерархическую таблицу закупочных заказов с позициями:

Читать далее

Для отображения иерархического дерева состоящего из любого числа уровней иерархии в SALV модели используется класс — cl_salv_tree.

Строки в таком дереве называются узлами. Каждый узел, не важно, на каком он уровне, имеет одинаковую структуру со всеми остальными.

Дерево, как и другие классы SALV модели, создается с помощью фабрично-статического метода factory(). При этом при его вызове необходимо передавать не заполненную таблицу с данными, а пустую. Заполнение данных происходит на этапе определения узлов для созданного дерева. Объект дерева можно создать как в полно экранном режиме, так и в контейнере указав параметр r_container. Кроме того можно спрятать заголовок дерева – передав в параметр hide_header значение abap_true (X).

Читать далее

Для того чтобы найти метод класса/интерфейса по его имени, достаточно зайти в таблицу SEOCOMPO,  в качестве компонента указать имя метода:

В случае если вам нужен не программный поиск, лучше воспользоваться инфо-системой репозитария — тр. SE15

Часто при отладке программы возникает ситуация когда необходимо протестировать вызов того или иного ФМ, ставим точку на вызове ФМ нажимаем F5, далее выходим из него по F7 и понимаем что не все параметры были указаны верно, к примеру при вызове ФМ ниже был не верно указан класс — lv_objkey:

Казалось бы уже ничего нельзя поделать (придется запускать заново), однако отладчик позволяет вернутся нам назад, для этого переведите курсор на позицию выше вызова ФМ и нажмите SHIFT + F12 (Перейти к оператору).

 

Редко где в SAP транзакциях увидишь использование иконок на экране выбора, однако их использование может быть вполне полезным, вот например поле для выбора формата ALV выглядит более наглядным:

При этом дополнительной кодировки не требуется, достаточно указать код иконки в тексте критериев выбора:

Код иконки можно посмотреть в программе — SHOWICON.

Иногда возникает ситуация когда при тестировании того или иного функционального модуля необходимо после его работы совершить обновление базы данных — вызвать commit work. Для того чтобы это сделать можно воспользоваться очень простым трюком. В SE37 заходим в меню ФМ -> Тест -> тестовые последовательности:

И указать в конце последовательности вызовов BAPI_TRANSACTION_COMMIT:

Работа с MIME репозитарием через ABAP возможна используя класс:  cl_mime_repository_api. Пример его использования:

Иногда возникают ситуации когда прав на запуск той или иной транзакции в системе нет, а права на отладку системы имеются, обойти ограничение на запуск, без изменения полномочий, можно следующим образом:

  • Ставим точку в ФМ: SMTR_KERNEL_CHECK_AUTHORITY
  • Нажимаем F7, чистим P_CANCEL_FLAG
Другая часто встречающаяся ситуация: есть полномочия на запуск программ, но нет на запуск функций, идем в SE38 и запускаем — RSFUNCTIONBUILDER.

 

Если у вас нет полномочий на «отладку системы», а есть простая отладка, и есть полномочия на SE37, заходим в ФМ — RS_TRANSACTION_TEST, ставим точку после проверки полномочий — ‘AUTH_CHECK_TCODE’ ID ‘TCODE’ FIELD objectname, меняем sy-subrc на 0 и вуаля 😉

Еще более простой обход проверки полномочий, даже не имея прав на отладку вы можете запустить транзакцию используя ФМ: CC_CALL_TRANSACTION_NEW_TASK.

Обновлено: способ с запуском ФМ CC_CALL_TRANSACTION_NEW_TASK пофиксен нотой безопасности.