Преобразовать таблицу значений в дерево с несколькими уровнями вложенности.
Подскажите, пожалуйста, как-то можно, легким движением руки получить из таблицы значений дерево с несколькими уровнями вложенности?
Когда уровень 1. Все понятно. Создаем запрос с итогами, затем выгружаем с обходом по группировками. Или засовываем в построитель и так же выгружаем.
Но, что делать если, допустим надо сгруппировать сначала по одному значению, а затем результат(полученные строки с одним родителем) разбить еще по одному значению...
Когда уровень 1. Все понятно. Создаем запрос с итогами, затем выгружаем с обходом по группировками. Или засовываем в построитель и так же выгружаем.
Но, что делать если, допустим надо сгруппировать сначала по одному значению, а затем результат(полученные строки с одним родителем) разбить еще по одному значению...
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(32)
А если не знаешь?
Вот пришел тебе пор HTTP запрос "Хочу вот такое дерево с такими колонками, с такими агрегатами и такими ресурсами" - что будешь делать? Напомню - тебе приходит не готовая XML-СКД, а некоторое описание хотелок (в согласованном формате).
Как ты этот вопрос решишь на СКД? Можно, конечно. Но это чисто программная работа с СКД. Надо нарисовать какой-то универсальный программный метод.
В СКД это сделать не сложно.
Конечно не сложно. Если знаешь точный набор входящих параметров (имена колонок, типизацию, агрегаты).
А если не знаешь?
Вот пришел тебе пор HTTP запрос "Хочу вот такое дерево с такими колонками, с такими агрегатами и такими ресурсами" - что будешь делать? Напомню - тебе приходит не готовая XML-СКД, а некоторое описание хотелок (в согласованном формате).
Как ты этот вопрос решишь на СКД? Можно, конечно. Но это чисто программная работа с СКД. Надо нарисовать какой-то универсальный программный метод.
(1)
//(С) Александр Синцов
// Процедура выгружает данные из таблицы значений в дерево значений
// данные выгружаются только в таблицу со сходным набором реквизитов
//
// Параметры:
//
// КлючСтроки - имя колонки ТаблицыЗначений - уникальный идентификатор
// КлючСвязи - имя колонки ТаблицыЗначений - указатель привязки к строке Дерева,
// своего рода указатель на "Родителя"
//
Функция ВыгрузитьТаблицуЗначенийВДеревоЗначений(Таблица, КлючСтроки = "КлючСтроки", КлючСвязи = "КлючСвязи") Экспорт
Дерево = Новый ДеревоЗначений;
Для Каждого Колонка Из Таблица.Колонки Цикл
Дерево.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения);
КонецЦикла;
Для Каждого СтрокаТаблицы Из Таблица Цикл
СтрокаГруппировки = Дерево.Строки.Найти(СтрокаТаблицы[КлючСвязи], КлючСтроки,Истина);
Если СтрокаГруппировки = Неопределено Тогда
ЗаполнитьЗначенияСвойств(Дерево.Строки.Добавить(), СтрокаТаблицы);
Иначе
ЗаполнитьЗначенияСвойств(СтрокаГруппировки.Строки.Добавить(), СтрокаТаблицы);
КонецЕсли;
КонецЦикла;
Возврат Дерево;
КонецФункции //ВыгрузитьТаблицуЗначенийВДеревоЗначений()
// Процедура выгружает данные из дерева значений в таблицу значений
// данные выгружаются только в таблицу со сходным набором реквизитов
//
Функция ВыгрузитьДеревоЗначенийВТаблицуЗначений(Дерево, Таблица = Неопределено) Экспорт
Если Таблица = Неопределено Тогда
Таблица = Новый ТаблицаЗначений;
Для Каждого Колонка Из Дерево.Колонки Цикл
Таблица.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения);
КонецЦикла;
КонецЕсли;
Для Каждого СтрокаДерева Из Дерево.Строки Цикл
ЗаполнитьЗначенияСвойств(Таблица.Добавить(), СтрокаДерева);
ВыгрузитьДеревоЗначенийВТаблицуЗначений(СтрокаДерева, Таблица);
КонецЦикла;
Возврат Таблица;
КонецФункции //ВыгрузитьДеревоЗначенийВТаблицуЗначений()
Показать
(7) То есть ты предполагаешь, что система сама должна догадаться, по каким колонкам ТЗ и в каком именно порядке (иерархии) тебе захотелось создать дерево? (я уже не спрашиваю о колонках ресурсов и прочих негруппируемых полей из этой ТЗ)
Напиши свой метод, и продай его вендору.
Напиши свой метод, и продай его вендору.
(18) Хааа. Для этого сначала придется скомпоновать ТЗ.
А если тебе надо 5 уровне группировки по колонкам "Фигня", "Хренота", "Контрагент", "Клавиатура" и "Инфостарт". При этом в других колонках дерева надо посчитать СУММА(Сумма), Количество(Человеки), Максимум(КакаяТоДата).
И как тебе поможет твоё предложение?
А если тебе надо 5 уровне группировки по колонкам "Фигня", "Хренота", "Контрагент", "Клавиатура" и "Инфостарт". При этом в других колонках дерева надо посчитать СУММА(Сумма), Количество(Человеки), Максимум(КакаяТоДата).
И как тебе поможет твоё предложение?
(31)
Как в иерархическом справочнике. Когда элементы могут быть подчинены таким же.
У автора может быть простая таблица на входе для которой он хочет посчитать итоги по разным колонкам и представить результат в виде дерева. Т.е. дерево, но нет там иерархического подчинения. Обычные итоги.
Что значит "как у справочника"?
Как в иерархическом справочнике. Когда элементы могут быть подчинены таким же.
У автора может быть простая таблица на входе для которой он хочет посчитать итоги по разным колонкам и представить результат в виде дерева. Т.е. дерево, но нет там иерархического подчинения. Обычные итоги.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот