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