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