Книга: Разработка сложных отчетов в «1С:Предприятии 8». Система компоновки данных
Назад: Набор данных – объект
Дальше: Общий макет оформления

Программная компоновка

Теперь поместим в документ СборкаКомпьютера кнопку Печать, при нажатии которой будет исполняться программный код, выполняющий компоновку данных и представление отчетной формы документа. Создадим основную форму документа, так как до этого мы пользовались формой, автоматически сгенерированной платформой.

Затем создадим команду Печать и соответствующую ей кнопку формы и поместим ее в командную панель формы документа (рис. 2.251).

Рис. 2.251. Добавление в форму документа кнопки «Печать»

В обработчике команды Печать напишем следующий код (листинг 2.39).

Листинг 2.39. Обработчик команды «Печать»

&НаКлиенте

Процедура Печать(Команда)

 

Результат = ПечатьДокумента();

Результат.ОтображатьСетку = Ложь;

Результат.ОтображатьЗаголовки = Ложь;

Результат.Показать();

 

КонецПроцедуры

Отчет формируется в серверной функции ПечатьДокумента(). Затем заполненный данными табличный документ возвращается на клиента и показывается пользователю (листинг 2.40).

Листинг 2.40. Функция «ПечатьДокумента()»

&НаСервере

Функция ПечатьДокумента()

 

ДокументОбъект = РеквизитФормыВЗначение("Объект");

 

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

|СборкаКомпьютера.Дата,

|СборкаКомпьютера.Номер,

|СборкаКомпьютера.Мастер,

|СборкаКомпьютера.Продукция КАК СистемныйБлок,

|СборкаКомпьютера.Склад

|ИЗ

|Документ.СборкаКомпьютера КАК СборкаКомпьютера

|ГДЕ

|СборкаКомпьютера.Ссылка = &Ссылка";

 

Запрос.УстановитьПараметр("Ссылка", ДокументОбъект.Ссылка);

Результат = Запрос.Выполнить();

ШапкаДок = Результат.Выгрузить();

 

ВнешниеНаборыДанных = Новый Структура;

ВнешниеНаборыДанных.Вставить("СоставСБ",ДокументОбъект.ПереченьНоменклатуры);

ВнешниеНаборыДанных.Вставить("ДокументСБ",ШапкаДок);

 

СхемаКомпоновкиДанных = ДокументОбъект.ПолучитьМакет("ПечатьСборки");

Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

 

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,

Настройки);

 

ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,

ВнешниеНаборыДанных);

 

ДокументРезультат = Новый ТабличныйДокумент;

ПроцессорВывода = Новый

ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

 

ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

 

// Получение доп. макета для шапки и подвала.

Макет = ДокументОбъект.ПолучитьМакет("Подписи");

 

// Вывод своего макета.

Область = Макет.ПолучитьОбласть("Ответственный");

Область.Параметры.Руководитель =

Справочники.Сотрудники.НайтиПоКоду("000000003").Наименование;

ДокументРезультат.Вывести(Область);

 

Возврат ДокументРезультат;

 

КонецФункции 

В функции определяется запрос для выбора реквизитов текущего документа. Поле документа Продукция в запросе представлено как СистемныйБлок. В качестве параметра запроса используется ссылка на документ. Затем создаются два внешних набора данных – СоставСБ и ДокументСБ. Набор СоставСБ заполняется данными табличной части документа. Набор ДокументСБ заполняется данными результата выполнения определенного ранее запроса.

Заметим, что в данном случае запрос к информационной базе «1С:Предприятия» применен только для упрощения примера. На самом деле предполагается, что данные для внешних наборов данных нужно получать не из базы «1С:Предприятия», а из какого-то другого источника (например, из программного объекта или из какого-то внешнего источника).

Затем программно выполняется компоновка данных с использованием внешних наборов данных и выдача результата в табличный документ.

Иногда бывает нужно выводить какой-либо подвал под отчетом, например, подпись руководителя. Можно добавить эту строку в макет отчета, но мы покажем, как это сделать программным путем в отдельном макете, не изменяя схему компоновки данных отчета. У документа создан макет Подписи с областью Ответственный и параметром этой области Руководитель.

После формирования отчета в функции ПечатьДокумента() получается макет табличного документа Подписи, и параметр Руководитель заполняется наименованием определенного сотрудника из справочника Сотрудники. Затем область, содержащая этот параметр, выводится в табличный документ.

После этого заполненный данными табличный документ возвращается на клиента и показывается пользователю.

Запустим «1С:Предприятие». Откроем документ СборкаКомпьютера. Нажмем кнопку Печать. На экране появится разработанная нами печатная форма документа (рис. 2.252).

Рис. 2.252. Печатная форма документа

Теперь продемонстрируем оформление полученной печатной формы с помощью собственного макета оформления. Для этого возможны два решения:

  1. Создать предопределенный макет оформления непосредственно в схеме компоновки данных макета документа.
  2. Создать собственный общий макет оформления, добавив его в Общие макеты объектов конфигурации, и использовать его при настройке отчетов.

Второй вариант более универсален, так как может применяться в дальнейшем для различных отчетов, но может понадобиться и индивидуальный макет оформления для конкретного отчета.

Назад: Набор данных – объект
Дальше: Общий макет оформления