Несколько слов о вложенных схемах компоновки данных
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
ПРИМЕР БЕЗ ПРОГРАММИРОВАНИЯ
Для начала давайте рассмотрим способ вывода отчета из вложенной схемы без программирования. У нас есть два отчета:
- Остатки товаров;
- Цены номенклатуры;
На основании двух отчетов необходимо составить один отчет, где отчет «Цены номенклатуры» будут вызываться как вариант отчета «Остатки товаров» (пример не совсем по смыслу, но демонстрирует возможности платформы).
Итак, сначала откроем отчет «Цены номенклатуры» в конфигураторе и сохраним схему отчета в файл.

Теперь перейдем в отчет «Остатки номенклатуры», откроем основную схему компоновки данных на вкладке «Вложенные схемы». После добавления новой вложенной схемы, загрузим сохраненную схему. Хочу обратить внимание на то, что нельзя изменять имя и заголовок отчета.

Создадим новый вариант отчета, дадим ему имя «Цены номенклатуры», подключим вложенный отчет. Должно выйти примерно так, как на картинке.

Запустим отчет в режиме «1С Предприятия» и убедимся, что нам доступны 2 варианта отчета.

ПРОГРАММНЫЙ ВЫВОД ОТЧЕТА С ВЛОЖЕННЫМИ СХЕМАМИ
Хорошо, теперь заделаем то же, но для программного вывода отчета. Задача та же, но отчет будем формировать программно. Такая ситуация может возникнуть например при вызове отчета из обработки.

Следующий код выводит отчет из макета обработки:
&НаКлиенте
Процедура ОстаткиНоменклатуры(Команда)
СформироватьОтчетОстаткиНоменклатуры();
КонецПроцедуры
&НаСервере
Процедура СформироватьОтчетОстаткиНоменклатуры()
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
СхемаКомпоновкиДанных = ОбработкаОбъект.ПолучитьМакет("Макет");
ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект");
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровкиКД = Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);
ПроцессорКомпоновкиДанны = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанны.Инициализировать(МакетКомпоновки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанны);
КонецПроцедуры
Перейдем к выводу вложенной схемы. Давайте посмотрим отладчиком, где ее искать.

Вот она, во вложенных схемах компоновки данных. Дело за малым, осталось программно вывести результат работы процессора компоновки в форму.
&НаКлиенте
Процедура ЦеныНоменклатуры(Команда)
СформироватьОтчетЦеныНоменклатуры();
КонецПроцедуры
&НаСервере
Процедура СформироватьОтчетЦеныНоменклатуры()
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
СхемаКомпоновкиДанных = ОбработкаОбъект.ПолучитьМакет("Макет");
ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект");
ВложеннаяСКД = СхемаКомпоновкиДанных.ВложенныеСхемыКомпоновкиДанных.Найти("Отчет1");
Если ВложеннаяСКД = Неопределено Тогда
ВызватьИсключение НСтр("ru=""Не удалось получить вложенную схему компоновки данных.""");
Возврат;
КонецЕсли;
Настройки = ВложеннаяСКД.Схема.НастройкиПоУмолчанию;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровкиКД = Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(ВложеннаяСКД.Схема, Настройки);
ПроцессорКомпоновкиДанны = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанны.Инициализировать(МакетКомпоновки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанны);
КонецПроцедуры
В заключение скажу, вложенные схемы – прекрасный механизм, который позволяет гибко использовать функционал схемы компоновки данных.
Статья написана по материалам сайта avtomat.biz
Вступайте в нашу телеграмм-группу Инфостарт