xtt->MERGE( IV_BLOCK_NAME = ‘R’ IS_BLOCK =
{"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}]}
).
Что если в предыдущем примере на уровне {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, и для каждого уровня можно будет задать свой условный вывод