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