:: Visual Foxpro, Foxpro for DOS
Печать отчёта вида дерева произвольной вложенности в 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
Ratings: 0 negative/0 positive
Re: Печать отчёта вида дерева произвольной вложенности в Excel
of63

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
А группировка в Эксель не подходит? там неплохо красиво сделано...

"" Возможно ли создать такой рекурсивный запрос, желательно WITH RECURSIVE на Postgres, чтобы получить табличку вида
(код строки Excel, сумма) или ещё лучше (код строки таблички с данными, код строки Excel) или всё что угодно, содержащее связь данных со строкой отчёта Excel.
Если для этого не хватает данных, то каких.

Покажи нам как это делать это )



Исправлено 1 раз(а). Последнее : of63, 31.01.23 22:40
Ratings: 0 negative/0 positive
Re: Печать отчёта вида дерева произвольной вложенности в Excel
Аркадий
Автор

Сообщений: 252
Откуда: Санкт-Петербург
Дата регистрации: 30.11.2005
of63
А группировка в Эксель не подходит?
Это один из примеров отчёта подобного вида.
Вот и я бы хотел подготовить данные для Excel. Причём в общем виде итог по группе может не быть равен сумме строк, если они являются чем-то вроде "из них..." (только некоторые интересующие).
В рекурсии я имею связь двух соседних уровней, те, что выше, теряются, а нужны условия всех вышестоящих. Может, такая проблема не является уникальной, и есть решение.
Ratings: 0 negative/0 positive
Re: Печать отчёта вида дерева произвольной вложенности в Excel
lemenev

Сообщений: 113
Дата регистрации: 23.06.2022
Серьёзно займись рекурсией. Для деревьев это хорошо работает. Только на Fox, а не на Excel. Потом выгрузи готовое куда тебе надо. И ещё. Всю рекурсию организуй сам. Единственным SQL запросом не обойдёшься.

Аркадий
В рекурсии я имею связь двух соседних уровней, те, что выше, теряются, а нужны условия всех вышестоящих.

В своей программе ты можешь организовать связь любого количества уровней. Это вопрос организации хранимых данных. А может быть нужно хранить не данные уровней, а накопленные суммы – тебе виднее.
Ratings: 0 negative/0 positive
Re: Печать отчёта вида дерева произвольной вложенности в Excel
Владимир Максимов

Сообщений: 14098
Откуда: Москва
Дата регистрации: 02.09.2000
Аркадий
В рекурсии я имею связь двух соседних уровней, те, что выше, теряются, а нужны условия всех вышестоящих. Может, такая проблема не является уникальной, и есть решение.

Вас структура данных интересует? Т.е. как можно хранить древовидную структуру с тем, чтобы получить выборки не только по ближайшим уровням?

Есть такие структуры. С точки зрения нормализации базы данных - они избыточны. Т.е. имеют дополнительные ("дублирующие") значения, кроме ссылки на родителя.

Поиск в интернете дает много статей на эту тему. Ну, вот, например

Как хранить в БД древовидные структуры


1. Дополнительная таблица с "развернутой" структурой вида

Id - код записи
ParentId - ссылка на родителя любого уровня
Level - уровень

Т.е. здесь для каждого узла указываются вообще все родительские узлы всех уровней вложенности. Ну, или наоборот, все дочерние узлы. Это как смотреть


2. Дополнительные поля с левой и правой границей (вложенные множества, Nested Set)

Этот вариант сложнее для понимания, но позволяет делать выборки сразу по всем родительским или дочерним узлам одной "ветки" любого уровня вложенности. Правда, эта структура не дает ответ на вопрос об уровне вложенности, поэтому обычно еще добавляется одно поле с уровнем вложенности, ну и "до кучи" оставляют и прямую ссылку на родителя ParentId

Эту структуру действительно сложно понять "с ходу". Поищите в интернете статьи на эту тему. Есть много разных картинок, облегчающих понимание этой структуры. Обычно описывают правило обхода как в лабиринте - держитесь всегда одной "стенки"


3. "Фасетная" кодировка

Это дополнительное поле, где перечислены все коды родителя через разделитель. Ну, например, в виде "001.002.001.002"


Общий недостаток всех этих структур - сложность модификации. Любое изменение дерева в этих структурах - это, как правило, изменение большого количества записей.


Рекурсивные запросы в базах данных - это надо мозги "переформатировать". Там очень не очевидные правила работают. В смысле, не такие, как для "обычных" запросов Join. Особенно для корневого узла структуры что-то сильно "накручивают"
Ratings: 0 negative/0 positive
Re: Печать отчёта вида дерева произвольной вложенности в Excel
of63

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Аркадий
of63
А группировка в Эксель не подходит?
Это один из примеров отчёта подобного вида.
Вот и я бы хотел подготовить данные для Excel. Причём в общем виде итог по группе может не быть равен сумме строк, если они являются чем-то вроде "из них..." (только некоторые интересующие).
В рекурсии я имею связь двух соседних уровней, те, что выше, теряются, а нужны условия всех вышестоящих. Может, такая проблема не является уникальной, и есть решение.

Доб. Я не понимаю... Это адекватно? сможешь привести эти сложные примеры?
Ты про эксель вообще? )

() Рекурсия возможна в экселе... и на его VBA...а она необходима?... задачи я так и не понял

() надеюсь, не путаем бесконечное повторение процедуры с "РЕКУРСИИВНЫМ" вызовом (я обычно называю его "самовызов"... название плохое? назовитте по-своему)... Да! Саомовызов, Рекурсия - это начало понимания "рядов", добро пожаловать

()() Раньше этому в ВУЗах учили, сейчас по-советом "друзей"... это неправильно

()() Главное свойстово процедуры, есть то , чтобы она знала, что она вложенная... Если кто напишет рекурсивную процедуру, которая не имеет "IF не вложенная ли я", то сообщите



Исправлено 6 раз(а). Последнее : of63, 02.02.23 22:34
Ratings: 0 negative/0 positive
Re: Печать отчёта вида дерева произвольной вложенности в Excel
Аркадий
Автор

Сообщений: 252
Откуда: Санкт-Петербург
Дата регистрации: 30.11.2005
Задача - не вычислять тысячи SUM(CASE... в подобных отчётах, используя все сочетания параметров, что проще простого, а создать несколько алгоритмов (функций) и комбинировать их автоматически.
Для этого, для примера, создано простенькое дерево, соответствующее форме отчёта. Excel тут вообще ни при чём. При чёрт-те каком изменении отчёта мне легче перетащить и добавить соответствующие ветки дерева на Foxe.
Ratings: 0 negative/0 positive
Re: Печать отчёта вида дерева произвольной вложенности в Excel
Аркадий
Автор

Сообщений: 252
Откуда: Санкт-Петербург
Дата регистрации: 30.11.2005
Да, возможно, как предварительный этап перед формированием отчёта немного доукомплектовать дерево вспомогательными значениями всех уровней.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 17 akvvohinc  (Гостей: 16)

© 2000-2024 Fox Club 
Яндекс.Метрика