- СКД: как вывести дерево из таблицы значений
- Создание дерева в СКД и выгрузка его в дерево значений
- Добавить комментарий Отменить ответ
- Свежие записи
- Вывод отчета СКД в коллекцию значений — Дерево Значений
- 1С 8.x : Вывод отчета СКД в коллекцию значений — Дерево Значений
- Вывод отчета СКД в коллекцию значений — Дерево Значений
СКД: как вывести дерево из таблицы значений
Имеется таблица значений, имеющая ссылку саму на себя (дерево):
Номенклатура, Количество, Цена, РодительНоменклатуры.
Надо вывести отчет в виде дерева.
Таблица значений собирается программно, нельзя написать одним запросом.
В СКД чтобы получить дерево, надо использовать набор данных типа Запрос, потом в Связи наборов данных указать зацикливание самого на себя.
Я же не могу написать запрос, у меня набор данных типа Объект, в который передаю свою ТЗ.
Тогда невозможно в связи сделать зацикливание.
Как же поступить? Как вывести дерево, используя в качестве данных таблицу значений, а не объект базы данных?
неверно. чтобы получить иерархию нужен набор. без разницы запрос или объект
(2) Мне нужна не просто иерархия, а дерево. Бесконечно-вложенная иерархия. Это не одно и то же.
(4) Спасибо, читаю.
— я правильно понимаю, что в одном из полей таблицы находится ссылка на саму эту таблицу ? и в чем смысл?
(3) Как в чем смысл? Ссылка на другую строку этой же таблицы. Это разложенная спецификация продукции.
Пример таблицы:
имя кол-во цена родитель
Рычаг 1 100р (пусто)
Лапа 1 50р Рычаг
Ось 1 40р Рычаг
Лист 0,5 20р Лапа
Прут 0,3 10р Ось
Есть два варианта решения:
1) Если ресурсы в вашем отчете рассчитываются не очень сложно (например: Сумма(Ресурс1)), то можно применить произвольную иерархию, как предложено в (4)
2) Если же ресурсы рассчитываются по сложному алгоритму (например: значение в вышестоящей строке-уровне, никак не зависит от значений на нижних уровнях), то вывести такую таблицу в виде дерева становится сложно, но все таки возможно.
Принцип следующий:
1. передаем всю таблицу в набор-объект.
2. создаем настройки, так что бы отчет выводился в нужном для нас виде (но без группировок по уровням и без сдвигов).
3. програмно меняет МакетКомпоновки так, чтобы для строки выводились в группировках и с нужным сдвигом
1. Добавим в таблицу две колонки:
— НомерДляСортировки — число
— УровеньСтрокиОтчета — число
В СКД добавляете набор данных — объект.
2. В настройках отчета делаете сортировку по полю «НомерДляСортировки»
3. При программном формировании СКД доработаем МакетКомпоновки, чтобы для строк с не нулевым уровнем выполнялся сдвиг и группировка:
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиСКД); // Добавляем новые параметры НовыйПарам = МакетКомпоновки.Макеты.Макет3.Параметры.Добавить(Тип("ПараметрОбластиВыражениеКомпоновкиДанных")); НовыйПарам.Имя = "ВертикальныйУровень"; НовыйПарам.Выражение = "Максимум(НаборДанных1.УровеньСтрокиОтчета)"; НовыйПарам = МакетКомпоновки.Макеты.Макет3.Параметры.Добавить(Тип("ПараметрОбластиВыражениеКомпоновкиДанных")); НовыйПарам.Имя = "Отступ"; НовыйПарам.Выражение = "Максимум(НаборДанных1.УровеньСтрокиОтчета)*2"; МакетКомпоновки.Макеты.Макет3.Макет[0].Ячейки[0].Оформление.УстановитьЗначениеПараметра("ВертикальныйУровень", Новый ПараметрКомпоновкиДанных("ВертикальныйУровень")); МакетКомпоновки.Макеты.Макет3.Макет[0].Ячейки[0].Оформление.УстановитьЗначениеПараметра("Отступ", Новый ПараметрКомпоновкиДанных("Отступ"));
Обращение к конкретным макетам нужно переделать — тут привидено для наглядности подхода.
Источник
Создание дерева в СКД и выгрузка его в дерево значений
Колонка «Наименование» не является справочником и не позволяет автоматически создать иерархию, конечно ее можно создать программно, но это трудоемко, особенно собирать суммы итогов по иерархии. Итак, нам нужно получить дерево значений без особо трудного кодирования. Для начала, создадим СКД и создадим 2 частично одинаковых выборки с данными, как показано на рисунках ниже:
Первая выборка, задающая иерархию
Вторая выборка, такая же как первая, но содержит больше колонок
Связи между выборками, образующих дерево
Структура итоговых данных — само дерево
Если посмотреть на результат в отчете, он будет выглядеть так
Ниже приведен код, позволяющий получить дерево из СКД в переменную «ДеревоЗначений»:
СхемаКомпоновкиДанных = РеквизитФормыВЗначение ( «Отчет» ). ПолучитьМакет ( «МакетДанные» );
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных ;
КомпоновщикНастроек . Инициализировать (Новый ИсточникДоступныхНастроекКомпоновкиДанных ( СхемаКомпоновкиДанных ));
КомпоновщикНастроек . ЗагрузитьНастройки ( СхемаКомпоновкиДанных . НастройкиПоУмолчанию );
НастройкиКомпоновщика = КомпоновщикНастроек . Настройки ;
ПараметрыНастройки = НастройкиКомпоновщика . ПараметрыДанных ;
// если нужны параметры — устанавливаем так
Параметр = ПараметрыНастройки . Элементы . Найти ( «Дата» );
Параметр . Использование = Истина;
Параметр . Значение = Отчет . Дата ;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных ;
МакетКомпоновкиДанных = КомпоновщикМакета . Выполнить ( СхемаКомпоновкиДанных , НастройкиКомпоновщика , , , Тип ( «ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений» ));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных ;
ПроцессорКомпоновкиДанных . Инициализировать ( МакетКомпоновкиДанных );
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений ;
ДеревоЗначений = Новый ДеревоЗначений ;
ПроцессорВывода . УстановитьОбъект ( ДеревоЗначений );
ПроцессорВывода . Вывести ( ПроцессорКомпоновкиДанных );
Добавить комментарий Отменить ответ
Свежие записи
Источник
Вывод отчета СКД в коллекцию значений — Дерево Значений
В системе компоновки данных существует возможность выводить отчет не только в табличный документ, но и в коллекции значений (таблица значений, дерево значений).
Для вывода отчета в коллекцию предназначен объект ПроцессорВыводаРезультатаКомпоновкиВКоллекциюЗначений.
Пример вывода отчета в дерево значений:
Код 1C v 8.х
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ДеревоЗначений = Новый ДеревоЗначений;
ПроцессорВывода.УстановитьОбъект(ДеревоЗначений);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
В данном примере результат вывода помещается в переменную ДеревоЗначений.
Работа с выводом в таблицу значений аналогична.
Стоит отметить, что при выводе результата компоновки в коллекцию значений существует несколько ограничений:
* В настройках нельзя использовать таблицы, диаграммы и вложенные схемы;
* Не используется условное оформление;
* Игнорируются папки в выбранных полях.
also
Как отчет на СКД сохранить в таблицу значений, а потом выгрузить в файл?
Источник
1С 8.x : Вывод отчета СКД в коллекцию значений — Дерево Значений
В системе компоновки данных существует возможность выводить отчет не только в табличный документ, но и в коллекции значений (таблица значений, дерево значений).
Для вывода отчета в коллекцию предназначен объект ПроцессорВыводаРезультатаКомпоновкиВКоллекциюЗначений.
Пример вывода отчета в дерево значений:
Код 1C v 8.х
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ДеревоЗначений = Новый ДеревоЗначений;
ПроцессорВывода.УстановитьОбъект(ДеревоЗначений);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
В данном примере результат вывода помещается в переменную ДеревоЗначений.
Работа с выводом в таблицу значений аналогична.
Стоит отметить, что при выводе результата компоновки в коллекцию значений существует несколько ограничений:
* В настройках нельзя использовать таблицы, диаграммы и вложенные схемы;
* Не используется условное оформление;
* Игнорируются папки в выбранных полях.
also
Как отчет на СКД сохранить в таблицу значений, а потом выгрузить в файл?
Источник
Вывод отчета СКД в коллекцию значений — Дерево Значений
В системе компоновки данных существует возможность выводить отчет не только в табличный документ, но и в коллекции значений (таблица значений, дерево значений).
Для вывода отчета в коллекцию предназначен объект ПроцессорВыводаРезультатаКомпоновкиВКоллекциюЗначений.
Пример вывода отчета в дерево значений:
Код 1C v 8.х
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ДеревоЗначений = Новый ДеревоЗначений;
ПроцессорВывода.УстановитьОбъект(ДеревоЗначений);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
В данном примере результат вывода помещается в переменную ДеревоЗначений.
Работа с выводом в таблицу значений аналогична.
Стоит отметить, что при выводе результата компоновки в коллекцию значений существует несколько ограничений:
* В настройках нельзя использовать таблицы, диаграммы и вложенные схемы;
* Не используется условное оформление;
* Игнорируются папки в выбранных полях.
Как отчет на СКД сохранить в таблицу значений, а потом выгрузить в файл?
Источник