Если надо сформировать отчет по внешним данным, например по данным из внешнего источника или нельзя сформировать корректный отчет, то надо использовать в качестве источника набора данных "Объект".
В качестве источника набора данных могут быть:
- наборы записей регистров,
- таблицы значений,
- табличная часть,
- результат запроса,
- область ячеек табличного документа,
- прикладной объект.
Получение данных из запроса и табличной частит документа
Например сформируем печатную форму с помощью СКД. Для примера так же программно вставим область с подписями из другого макета в печатную форму.
В макете СКД 2 набора данных:
Так как они не связаны, то происходит объединение записей из обоих таблиц. В одном наборе будет только одна запись, так что она просто добавляется к каждой записи другого набора.
Обработчик команды «Печать»
&НаКлиенте
Процедура Печать(Команда)
Результат = ПечатьДокумента();
Результат.ОтображатьСетку = Ложь;
Результат.ОтображатьЗаголовки = Ложь;
Результат.Показать();
КонецПроцедуры
&НаСервере
Функция ПечатьДокумента()
ДокументОбъект = РеквизитФормыВЗначение("Объект"); // документ, по которому формируем печатную форму
//Формируем таблицу значений для набора данных
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|СборкаКомпьютера.Дата,
|СборкаКомпьютера.Номер,
|СборкаКомпьютера.Мастер,
|СборкаКомпьютера.Продукция КАК СистемныйБлок,
|СборкаКомпьютера.Склад
|ИЗ
|Документ.СборкаКомпьютера КАК СборкаКомпьютера
|ГДЕ
|СборкаКомпьютера.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ДокументОбъект.Ссылка);
Результат = Запрос.Выполнить();
ШапкаДок = Результат.Выгрузить();
//Формируем наборы данных для передачи в СКД
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("СоставСБ",ДокументОбъект.ПереченьНоменклатуры); // в СоставСБ выгружаем табличную часть ПереченьНоменклатуры документа
ВнешниеНаборыДанных.Вставить("ДокументСБ",ШапкаДок); // в ДокументСБ выгружаем результат запроса
//Формируем отчет
СхемаКомпоновкиДанных = ДокументОбъект.ПолучитьМакет("ПечатьСборки");
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных);
ДокументРезультат = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
// Добавим область из дополнительного макета и заполним её параметры
Макет = ДокументОбъект.ПолучитьМакет("Подписи");
Область = Макет.ПолучитьОбласть("Ответственный");
Область.Параметры.Руководитель = Справочники.Сотрудники.НайтиПоКоду("000000003").Наименование;
// Выводим в табличный документ область из дополнительного макета
ДокументРезультат.Вывести(Область);
Возврат ДокументРезультат;
КонецФункции
|