Задание. Реализовать печать макета «Заказ клиента» из обычной и управляемой формы одноименного документа.
Выполнение задания.
1. Пусть дан документ «ЗаказКлиента», в котором есть реквизиты документа и табличная часть.
А так же две формы: управляемая и обычная, с размещенными на них реквизитами. Создан простейший макет.
2. Создадим подчиненный объект документа – команду «Печать». С ее помощью реализуем возможность печати макета из управляемой формы.
В свойстве команды «Тип параметра команды» укажем «ДокументСсылка.ЗаказКлиента».
В модуле команды создадим процедуру ОбработкаКоманды:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
Команды.ПечатьЗаказа(ПараметрКоманды); //вызов клиентского общего модуля Команды
КонецПроцедуры
В
3. Создадим общий модуль Команды. Определим его свойства как показано на рисунке
Определим в модуле экспортную процедуру ПечатьЗаказа:
Процедура ПечатьЗаказа(ПараметрКоманды) Экспорт
ТабДок = Новый ТабличныйДокумент;
НаСервере.Печать(ТабДок, ПараметрКоманды); //вызов серверного общего модуля Команды
ТабДок.ОтображатьСетку = Ложь;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Ложь;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.Показать();
КонецПроцедуры
4. Создадим общий модуль НаСервере. Определим его свойства как показано на рисунке
Определим в модуле экспортную процедуру Печать:
Процедура Печать(ТабДок, ПараметрКоманды) Экспорт
Документы.ЗаказКлиента.Печать(ТабДок, ПараметрКоманды); //вызов модуля менеджера документа
КонецПроцедуры
5. Создадим модуль менеджера документа. Именно в нем мы полностью пропишем алгоритм заполнения макета.
Процедура Печать(ТабДок, Ссылка) Экспорт
Макет = Документы.ЗаказКлиента.ПолучитьМакет("Печать");
Запрос = Новый Запрос;
Запрос.Текст = "…"; //сам текст запроса нам не принципиален
Запрос.Параметры.Вставить("Ссылка", Ссылка); //в качестве параметра указываем Ссылку – параметр процедуры
Выборка = Запрос.Выполнить().Выбрать();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
Шапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСоставШапка = Макет.ПолучитьОбласть("СоставШапка");
ОбластьСостав = Макет.ПолучитьОбласть("Состав");
ТабДок.Очистить();
ВставлятьРазделительСтраниц = Ложь;
Пока Выборка.Следующий() Цикл
Если ВставлятьРазделительСтраниц Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабДок.Вывести(ОбластьЗаголовок);
Шапка.Параметры.Заполнить(Выборка);
ТабДок.Вывести(Шапка, Выборка.Уровень());
ТабДок.Вывести(ОбластьСоставШапка);
ВыборкаСостав = Выборка.Состав.Выбрать();
Пока ВыборкаСостав.Следующий() Цикл
ОбластьСостав.Параметры.Заполнить(ВыборкаСостав);
ТабДок.Вывести(ОбластьСостав, ВыборкаСостав.Уровень());
КонецЦикла;
ВставлятьРазделительСтраниц = Истина;
КонецЦикла;
КонецПроцедуры
Пунктами 1-5 мы реализовали печать макета с помощью команды из управляемой формы.
Теперь реализуем печать из обычной формы.
6. Добавим на обычную форму кнопку «Печать» и создадим для нее сответсвующий обработчик
Процедура Печать(Кнопка)
Команды.ПечатьЗаказа(Ссылка); //вызов клиентского общего модуля Команды
КонецПроцедуры
Итак, реализованный подход организации печати одного макета документа из обычной и управляемой форм документа показан на следующем рисунке: