Развёртка в Excel

Развёртка, оно же проваливание, оно же drilldown.

Если внутри SAP GUI оно реализуется просто, то как же быть, если отчёт у нас выгружается в Excel?

Один из простых сценариев решения такой задачи заключается в применении группировки:

Группировка в Excel

Структура и управление

В данном примере сделана двухуровневая группировка:

1. Первый уровень – просто счёта главной книги, с текстом.

2. Счёт раскладывается на некоторые контировки (текст склеен через слеши), на скриншоте эти строки выделены.

3. Каждая контировка раскладывается на документы, текстовка которых также представляет склейку (дата+вид+номер)

Кнопки управления группировкой в стандартном интерфейсе Excel вы можете найти в верхнем правом углу скриншота. После того как сделана хоть одна группировка, то появляется панелька слева с плюсиками, минусиками и номерами уровней.

Общая форма отчёта при этом никак не меняется. Колонки остаются такими же узкими, поэтому приходится в них упаковываться.

Реализация

Реализация такого следующая (предполагается использование ZWWW):

1. Выгружаем данные так, как если бы они были разгруппированы полностью. Данные должны быть предварительно правильно отсортированы.

2. Примечаем признаки, по которым мы алгоритмизируем свёртку. Если для этого требуются дополнительные данные – выгружаем их в скрытую колонку. Например в моём примере: первый уровень группировки делается по первой колонке (одинаковый номер пункта), а второй уровень группировки делается по скрытой колонке J.

3. Пишем макрос, который сворачивает наши строки, считывая данные. Сначала проходим первый уровень группировки, затем – второй. (забросил пример сюда: http://pastebin.com/WAEJHuCZ)

Суть макроса:

3.1. Делаем цикл по строкам, по всем выгруженным данным

3.2. Сравниваем значения в ячейках List.Cells(i, j).Value

3.3. В нужные моменты делаем вызовы для сворачивания:

adress = rownum_a & ":" & rownum_b
Rows(adress).Select
Selection.Rows.Group

4. После выгрузки строк в ZWWW пинаем макрос.

Вуаля.

В целом получается достаточно быстро, просто и надёжно.

Ограничения

Метод не идеален, и у него есть свои минусы:

1. Одно из существенных ограничений – это ограничение по объёму. То есть: если у нас отчёт является оборотной ведомостью по счетам ГК, то это значит, что он, как правило, формируется по всем счетам главной книги. Следовательно, в форму выгружаются сразу все документы за период, что может привести к существенным провалам в плане производительности. А если развёртку требуется делать не всегда, то цена такой фишки может быть завышенной. Таким образом можно прийти к двум вариантам (быстрый без развёртки, и медленный с развёрткой).

2. Второе существенное ограничение – это ограничение по форме. Мы можем использовать только общие колонки для всех уровней. Новые колонки при развёртке могут появиться например только в конце таблицы и без шапки.

3. Применяются макросы. Ну мало ли, есть у кого предубеждения против макросов и VBA вообще.

Добавить комментарий

Ваш адрес email не будет опубликован.