Link Search Menu Expand Document

Output level by condition

Что если в предыдущем примере на уровне {R-T;level=1} было бы не достаточно деление на:

  • {R-T;level=1;top=X} верхний и
  • {R-T;level=1;top=} нижний
    блоки ?

Иногда необходимо вывести заголовок для определенной БЕ иначе от остальных. В Excel можно воспользоваться условным фоматированием.
Но что если в заголовке нужно объединить несколько ячеек или скрыть заголовок полностью или сделать нужно в Word или Pdf ?

Условия в ABAP коде

Ранее этого можно было добиться воспользовавшись специальным методом ZCL_XTT_REPLACE_BLOCK=
>ON_TREE_CHANGE_LEVEL в котором можно было заменить уровень 1 на какой-либо другой.

То есть создать в шаблоне уровни 55, 66 или 77 (Любое довольно большой уровень который точно не будет выводиться)

и менять IV_LEVEL_INDEX->* на требуемый уровень. Если присвоить значение которого нет в шаблоне(-1) то уровень бы просто скрылся.

Но у данного способа есть существенный недостаток. Для того чтобы понять как будет выглядеть итоговый шаблон нужно зайти в редактор ABAP кода и посмотреть эти условия.

Декларативный способ

Для читабельности шаблона было введено 2 дополнения:

  • show_if для показа уровня по условия
  • hide_if для скрытия

Эти дополнения работают подобно конструкции CASE.
Если все условия ложны, сработает блок по умолчанию WHEN OTHERS для данного уровня. Который можно опустить и ничего не выведется в отчет (Но явное указанее hide_if предпочтительней)
В приведенном ниже примере строка 6 работает как WHEN OTHERS

Для указания текущего уровня введено ключевое слово row (Не чувствительно к регистру как и любой код на ABAP). С ним можно написать любое условие на ABAP. К примеру кроме математических условий =, <>, >=, <= и их аналогов EQ, NE, GT, LT также можно свободно использовать CP, NP, CO, CN, CA, NA, CS, NS

В результате каждый уровень {R-T;level=1} имеет свой заголовок:

  • C - Желтый
  • B - Состоящей из объединенных ячеек 2-х строк
  • A- По умолчанию
  • D - Скрыт

Сочетание: level, top, show_if, hide_if

Любое комбинирование допустимо. Условия можно задавать или опускать на любом уровне.

Если вы используете только level (без top, show_if, hide_if) подитоги будут отображены снизу (top=abap_false и без условий на вывод).

Дополнения show_if и hide_if можно использовать без level или top. Если вызвать zcl_xtt_replace_block=>tree_create( iv_fields = ‘’). Таблица преобразуется в дерево с уровнями 0, и для каждого уровня можно будет задать свой условный вывод