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

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}]}

).


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

Tree group by fields

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

Назначение

Демо-класс ZCL_XTT_DEMO_050 строит дерево по полям группировки методом TREE_CREATE. Используйте его для промежуточных итогов, заголовков групп и отдельных макетов разных уровней; для связи родитель-потомок предназначен TREE_CREATE_RELAT.

Если у вас есть обычная таблица с простыми итогами, вы можете использовать внутренние таблицы abap.
Но если вам также нужно отображать промежуточные итоги и другие иерархические структуры, лучше использовать деревья.
Существует два метода создания деревьев. Сейчас речь пойдет о первом из них TREE_CREATE.
О TREE_CREATE_RELAT вы можете прочитать на следующей странице.

Метод TREE_CREATE

    " Document structure
    BEGIN OF ts_root,
      title TYPE string,
      t     TYPE  REF TO data, " better to use general type than zcl_xtt_replace_block=>ts_tree
    END OF ts_root.

    ls_root-t = zcl_xtt_replace_block=>tree_create(
     it_table      = lr_table       " from 7.5 REF #(lt_rows)
     iv_fields     = 'GROUP'   ).   " Name of the fields delimited by ;

Самый простой способ описать данный метод - представить ALV grid с промежуточными итогами.

 iv_fields     = 'BUKRS'        " Подитоги по 1 полю
 iv_fields     = 'BUKRS;WERKS'  " Подитоги по 2 полям

для вычисления сумм (или средних значений) вы должны определить обработчик для обработки дерева и нижестоящих элементов

      on_prepare_tree_05 FOR EVENT prepare_tree OF zcl_xtt_replace_block
        IMPORTING
            ir_tree      " Type Ref To ZCL_XTT_REPLACE_BLOCK=>TS_TREE
            ir_data      " Type Ref To DATA
            ir_sub_data, " Type Ref To DATA

в первую очередь в обработчике вы должны преобразовать данные в исходные типы данных

  FIELD-SYMBOLS:
    <ls_data>     TYPE ts_tree_05,
    <ls_sub_data> TYPE ts_tree_05.

  " Cast to the application type
  ASSIGN:
   ir_data->*        TO <ls_data>,
   ir_sub_data->*    TO <lt_sub_data>.

и в цикле вы можете рассчитать все, что вам нужно

  " And calc sums
  LOOP AT <lt_sub_data> ASSIGNING <ls_sub_data>.
    <ls_data>-sum1  = <ls_data>-sum1 + <ls_sub_data>-sum1.
    <ls_data>-sum2  = <ls_data>-sum2 + <ls_sub_data>-sum2.
  ENDLOOP.

В шаблоне, если у вас есть разные форматирование строк для каждого уровня, вы можете указать для них дополнительные параметры ;level= и ;top=. Если нижестоящие элементы идут после родительского элемента, просто добавьте ;top=X для данного уровня, иначе ;top= или просто ничего не указывайте.

Также, если вы укажете уровень группировке в шаблоне, он будет реплицирован в окончательном отчете для соответствующих элементов.

Результат выглядит как в ALV GRID