Начал я тут тоже СКД изучать и вот с какой хитрой задачкой столкнулся. Может ли тут вообще СКД справиться или это не тот случай - есть справочник с иерархией элементов. Справочник "Статьи движения денежных средств". На самом верху иерархии располагаются два элемента: ПРИХОД, РАСХОД. Внутри каждого из них располагается остальная иерархия элементов. Например:
ПРИХОД==> Зарплата==> Зарплата от ООО "Лютик"
| |==> Зарплата от ООО "Цветик"
|==>Займы
|==>Мат.помощь
РАСХОД==> Общественный транспорт==>Метро
| |==>Автобус
| |==>Маршрутное такси
|==> Содержание автомобиля==>Технические работы
|==>Запчасти
|==>Топливо
Так же есть простенький регистр движений в котором отражается в качестве измерения собственно статья и в качестве ресурса - сумма проходящая по этой статье. Теперь собственно суть задачки - надо сделать отчёт, который бы показывал оборот по статьям за указаный пользователем период. Не проблема, делается это с полпинка. И с применением СКД очень красиво получается. Теперь к этому отчёту надо добавить ещё одну колонку - процент. Смысл её в следующем - на самой вершине иерархии статей движения скапливаются суммы, которые принимаются за 100% т.е. например:
ПРИХОД 30000 тыс.руб 100%
РАСХОД 20000 тыс.руб 100%
При раскрытии пользователем иерархии статей, нам надо, чтобы на вершинах группировок считался этот самый процент относительно самого верхнего элемента но с учётом процентов тех элементов, которые находятся с раскрытыми на одной ступеньке иерархии. Т.е. раскрыли например РАСХОД и должна выйти такая картина:
РАСХОД 20000 100%==> Общественный транспорт 10000 50% ==>Метро 3333 33%
| |==>Автобус 3333 33%
| |==>Маршрутное такси 3333 33%
|=======> Содержание автомобиля 10000 50% ==>Технические работы 3333 33%
|==>Запчасти 3333 33%
|==>Топливо 3333 33%
Вот возможно ли это с полпинка реализовать в СКД? И в каком тут направлении надо копать? Я представляю как это без СКД сделать - через рекурсию идём по веткам иерархии, попутно вычисляем процент по вершинам ветки. Алгоритм получится конечно не идеальный и медленный но работать он будет. А вот как это всё в СКД сделать... Чего то мозга не хватает.