Создать этот пример Выберите шаблон и создайте новый отчёт с помощью демонстрационного сервиса.

xtt->merge( iv_block_name = 'R' is_block =

JSON
{"TITLE":"Title","T":[{"GROUP":"GRP A","CAPTION":"<Caption 1 />","DATE":"2020-10-21","SUM1":5971.44,"SUM2":5021.46},{"GROUP":"GRP C","CAPTION":"<Caption 2 />","DATE":"2020-10-19","SUM1":2276.75,"SUM2":7717.2},{"GROUP":"GRP B","CAPTION":"<Caption 3 />","DATE":"2020-10-20","SUM1":3031.38,"SUM2":445.22},{"GROUP":"GRP A","CAPTION":"<Caption 4 />","DATE":"2020-10-21","SUM1":9476.79,"SUM2":3683.27},{"GROUP":"GRP A","CAPTION":"<Caption 5 />","DATE":"2020-10-21","SUM1":4604.0,"SUM2":5525.85},{"GROUP":"GRP C","CAPTION":"<Caption 6 />","DATE":"2020-10-19","SUM1":2159.71,"SUM2":2260.94},{"GROUP":"GRP B","CAPTION":"<Caption 7 />","DATE":"2020-10-20","SUM1":2490.3,"SUM2":6388.81},{"GROUP":"GRP A","CAPTION":"<Caption 8 />","DATE":"2020-10-21","SUM1":5476.81,"SUM2":406.18},{"GROUP":"GRP D","CAPTION":"<Caption 9 />","DATE":"2020-10-18","SUM1":689.66,"SUM2":518.6},{"GROUP":"GRP C","CAPTION":"<Caption 10 />","DATE":"2020-10-19","SUM1":5451.87,"SUM2":4061.85},{"GROUP":"GRP D","CAPTION":"<Caption 11 />","DATE":"2020-10-18","SUM1":4573.55,"SUM2":5436.0},{"GROUP":"GRP C","CAPTION":"<Caption 12 />","DATE":"2020-10-19","SUM1":1196.35,"SUM2":522.46},{"GROUP":"GRP C","CAPTION":"<Caption 13 />","DATE":"2020-10-19","SUM1":7686.95,"SUM2":2727.98},{"GROUP":"GRP D","CAPTION":"<Caption 14 />","DATE":"2020-10-18","SUM1":978.18,"SUM2":295.55},{"GROUP":"GRP D","CAPTION":"<Caption 15 />","DATE":"2020-10-18","SUM1":71.12,"SUM2":8878.56}]}

).


Создать демо 051

Output level by condition

Предпросмотр запроса

Назначение

Демо-класс ZCL_XTT_DEMO_051 выбирает разные макеты строк на одном уровне иерархии. show_if и hide_if оставляют правило выбора в шаблоне, где его видит автор формы, и одинаково работают для Excel, Word и PDF.

Что если в предыдущем примере на уровне {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, и для каждого уровня можно будет задать свой условный вывод