Печать отчёта вида дерева произвольной вложенности в Excel | |
---|---|
Аркадий Автор Сообщений: 252 Откуда: Санкт-Петербург Дата регистрации: 30.11.2005 |
Добрый день!
Возможно ли элегантно сформировать данные для печати отчёта вида дерева с небольшим количеством одинаковых параметров, распределённых по группам произвольной вложенности (по типу приложенного к сообщению). Например, в приложенном отчёте 455 самостоятельных сумм, и он ещё не самый большой. Каждая ячейка в Excel имеет имя, содержащее номер поля (здесь - от 1 до 455). Конечно, можно было бы просто написать что-то типа бесконечного числа SUM(CASE WHEN...) всех сочетаний в SELECT, но не хочется, и поддерживать такую конструкцию затруднительно, так как структура отчёта или алгоритмы могут поменяться. Есть табличка с документами для расчёта, табличка со структурой дерева отчёта (содержит коды строк отчёта) и табличка с алгоритмами для расчёта каждой уникальной в отчёте строки (привязаны к дереву). Таким образом, для попадания в ячейку необходимо соответствовать условиям всех вышенаходящихся узлов. Вроде такого Группа1 поле11=значение11 строка1 поле2=значение2 строка2 поле2=значение3 Группа2 поле22=значение22 строка1 поле2=значение2 строка2 поле2=значение3 ........Группа21 поле99=значение99 ............ строка1 поле2=значение2 ............ строка2 поле2=значение3 Т. е. для попадания в Группу21\строка1 должны быть выполнены условия поле22=значение22 (для группы2 первого уровня) и поле99=значение99 (для группы21 второго уровня) и поле2=значение2 Возможно ли создать такой рекурсивный запрос, желательно WITH RECURSIVE на Postgres, чтобы получить табличку вида (код строки Excel, сумма) или ещё лучше (код строки таблички с данными, код строки Excel) или всё что угодно, содержащее связь данных со строкой отчёта Excel. Если для этого не хватает данных, то каких. Хочется поддерживать структуру подобных отчётов и формировать их автоматически. Исправлено 1 раз(а). Последнее : Аркадий, 27.01.23 16:18 |
Re: Печать отчёта вида дерева произвольной вложенности в Excel | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
А группировка в Эксель не подходит? там
"" Возможно ли создать такой рекурсивный запрос, желательно WITH RECURSIVE на Postgres, чтобы получить табличку вида (код строки Excel, сумма) или ещё лучше (код строки таблички с данными, код строки Excel) или всё что угодно, содержащее связь данных со строкой отчёта Excel. Если для этого не хватает данных, то каких. Покажи нам как это делать это Исправлено 1 раз(а). Последнее : of63, 31.01.23 22:40 |
Re: Печать отчёта вида дерева произвольной вложенности в Excel | |
---|---|
Аркадий Автор Сообщений: 252 Откуда: Санкт-Петербург Дата регистрации: 30.11.2005 |
Это один из примеров отчёта подобного вида. Вот и я бы хотел подготовить данные для Excel. Причём в общем виде итог по группе может не быть равен сумме строк, если они являются чем-то вроде "из них..." (только некоторые интересующие). В рекурсии я имею связь двух соседних уровней, те, что выше, теряются, а нужны условия всех вышестоящих. Может, такая проблема не является уникальной, и есть решение. |
Re: Печать отчёта вида дерева произвольной вложенности в Excel | |
---|---|
lemenev Сообщений: 113 Дата регистрации: 23.06.2022 |
Серьёзно займись рекурсией. Для деревьев это хорошо работает. Только на Fox, а не на Excel. Потом выгрузи готовое куда тебе надо. И ещё. Всю рекурсию организуй сам. Единственным SQL запросом не обойдёшься.
В своей программе ты можешь организовать связь любого количества уровней. Это вопрос организации хранимых данных. А может быть нужно хранить не данные уровней, а накопленные суммы – тебе виднее. |
Re: Печать отчёта вида дерева произвольной вложенности в Excel | |
---|---|
Владимир Максимов Сообщений: 14097 Откуда: Москва Дата регистрации: 02.09.2000 |
Вас структура данных интересует? Т.е. как можно хранить древовидную структуру с тем, чтобы получить выборки не только по ближайшим уровням? Есть такие структуры. С точки зрения нормализации базы данных - они избыточны. Т.е. имеют дополнительные ("дублирующие") значения, кроме ссылки на родителя. Поиск в интернете дает много статей на эту тему. Ну, вот, например Как хранить в БД древовидные структуры 1. Дополнительная таблица с "развернутой" структурой вида Id - код записи ParentId - ссылка на родителя любого уровня Level - уровень Т.е. здесь для каждого узла указываются вообще все родительские узлы всех уровней вложенности. Ну, или наоборот, все дочерние узлы. Это как смотреть 2. Дополнительные поля с левой и правой границей (вложенные множества, Nested Set) Этот вариант сложнее для понимания, но позволяет делать выборки сразу по всем родительским или дочерним узлам одной "ветки" любого уровня вложенности. Правда, эта структура не дает ответ на вопрос об уровне вложенности, поэтому обычно еще добавляется одно поле с уровнем вложенности, ну и "до кучи" оставляют и прямую ссылку на родителя ParentId Эту структуру действительно сложно понять "с ходу". Поищите в интернете статьи на эту тему. Есть много разных картинок, облегчающих понимание этой структуры. Обычно описывают правило обхода как в лабиринте - держитесь всегда одной "стенки" 3. "Фасетная" кодировка Это дополнительное поле, где перечислены все коды родителя через разделитель. Ну, например, в виде "001.002.001.002" Общий недостаток всех этих структур - сложность модификации. Любое изменение дерева в этих структурах - это, как правило, изменение большого количества записей. Рекурсивные запросы в базах данных - это надо мозги "переформатировать". Там очень не очевидные правила работают. В смысле, не такие, как для "обычных" запросов Join. Особенно для корневого узла структуры что-то сильно "накручивают" |
Re: Печать отчёта вида дерева произвольной вложенности в Excel | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Доб. Я не понимаю... Это адекватно? сможешь привести эти сложные примеры? Ты про эксель вообще? ) () Рекурсия возможна в экселе... и на его VBA...а она необходима?... задачи я так и не понял () надеюсь, не путаем бесконечное повторение процедуры с "РЕКУРСИИВНЫМ" вызовом (я обычно называю его "самовызов"... название плохое? назовитте по-своему)... Да! Саомовызов, Рекурсия - это начало понимания "рядов", добро пожаловать ()() Раньше этому в ВУЗах учили, сейчас по-советом "друзей"... это неправильно ()() Главное свойстово процедуры, есть то , чтобы она знала, что она вложенная... Если кто напишет рекурсивную процедуру, которая не имеет "IF не вложенная ли я", то сообщите Исправлено 6 раз(а). Последнее : of63, 02.02.23 22:34 |
Re: Печать отчёта вида дерева произвольной вложенности в Excel | |
---|---|
Аркадий Автор Сообщений: 252 Откуда: Санкт-Петербург Дата регистрации: 30.11.2005 |
Задача - не вычислять тысячи SUM(CASE... в подобных отчётах, используя все сочетания параметров, что проще простого, а создать несколько алгоритмов (функций) и комбинировать их автоматически.
Для этого, для примера, создано простенькое дерево, соответствующее форме отчёта. Excel тут вообще ни при чём. При чёрт-те каком изменении отчёта мне легче перетащить и добавить соответствующие ветки дерева на Foxe. |
Re: Печать отчёта вида дерева произвольной вложенности в Excel | |
---|---|
Аркадий Автор Сообщений: 252 Откуда: Санкт-Петербург Дата регистрации: 30.11.2005 |
Да, возможно, как предварительный этап перед формированием отчёта немного доукомплектовать дерево вспомогательными значениями всех уровней.
|
© 2000-2024 Fox Club  |