Изменение существующих или создание новых печатных форм – задача довольно распространённая. Как правило, в таких случаях создаётся внешняя печатная форма и подключается через стандартную подсистему дополнительных отчётов и обработок. Однако, иногда возникают задачи, в которых печатная форма должна формироваться с учётом данных, вводимых пользователями непосредственно перед печатью. То есть, сначала должна открыться форма, в которую пользователь вводит данные, и только потом выполняется команда "Печать".
Допустим, нам нужно создать печатную форму некой справки, часть данных которой вводятся в форме перед печатью. Кнопка "Печать" должна располагаться на форме.
Создаём внешнюю обработку. В модуле обработки, в функции СведенияОВнешнейОбработке(), устанавливаем параметры регистрации внешней обработки.
Обычно для внешних печатных форм параметру "Вид" присваивается значение "Печатная форма", но так как у нас сначала должна открываться форма, то устанавливаем значение "Дополнительная обработка".
В этой же функции СведенияОВнешнейОбработке() при обращении к процедуре ДобавитьКоманду() для внешних печатных форм в параметр "Использование" обыкновенно передаётся значение "ВызовСерверногоМетода" или "ВызовКлиентскогоМетода". Здесь же мы укажем значение "ОткрытиеФормы".
В итоге функция будет выглядеть так:
Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка"); ПараметрыРегистрации.Вставить("Наименование", "Справка"); ПараметрыРегистрации.Вставить("Версия", "2.0"); ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина); ПараметрыРегистрации.Вставить("Информация", "Справка"); ТаблицаКоманд = ПолучитьТаблицуКоманд(); ДобавитьКоманду(ТаблицаКоманд, "Справка", "ПФ_MXL_Справка", "ОткрытиеФормы", Истина,""); ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции
Создаём макет печатной формы.
Далее создаём основную форму обработки и необходимые реквизиты формы. Создаём и размещаем на форме команду "Печать". Формировать табличный документ для печати будем в обработчике этой команды. В зависимости от того, какие данные требуются для печатной формы, организовываем заполнение табличного документа либо на клиенте, либо на сервере. В данном примере заполняем на сервере и затем возвращаем табличный документ на клиент.
Итак, в модуле формы:
&НаКлиенте Процедура Печать(Команда) Экспорт ТабДок = СформироватьТабДокНаСервере(); КонецПроцедуры &НаСервере Функция СформироватьТабДокНаСервере() ТабличныйДокумент = Новый ТабличныйДокумент; //Получим макет ПечатнаяФормаОбъект = РеквизитФормыВЗначение("Объект"); Макет = ПечатнаяФормаОбъект.ПолучитьМакет("ПФ_MXL_Справка"); // Заполняем табличный документ: //Область Шапка ОбластьШапка = Макет.ПолучитьОбласть("Шапка"); ОбластьШапка.Параметры.ДатаВыдачи = //Заполняем параметры ТабличныйДокумент.Вывести(ОбластьШапка); //Область ОсновнаяЧасть ОбластьОсновнаяЧасть = Макет.ПолучитьОбласть("ОсновнаяЧасть"); ОбластьОсновнаяЧасть.Параметры.ТекстСправки = //Заполняем параметры ТабличныйДокумент.Вывести(ОбластьОсновнаяЧасть); Возврат ТабличныйДокумент; КонецФункции
Табличный документ сформирован, осталось вывести его для печати в предназначенную для этого общую форму "Печать документов". Сделаем это с помощью стандартных механизмов БСП.
Дополним обработчик команды "Печать":
&НаКлиенте Процедура Печать(Команда) Экспорт ТабДок = СформироватьНаСервере(); //Создаём новую коллекцию печатных форм КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("Справка"); //Добавляем в коллекцию сформированный табличный документ КоллекцияПечатныхФорм[0].ТабличныйДокумент = ТабДок; //Устанавливаем параметры печати (при необходимости) КоллекцияПечатныхФорм[0].Экземпляров = 1; КоллекцияПечатныхФорм[0].СинонимМакета = "Справка"; //Так будет выглядеть имя файла при сохранении в файл из формы "Печать документов" //Вывод через стандартную процедуру БСП УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, Неопределено, ЭтаФорма); КонецПроцедуры
Теперь в результате выполнения команды "Печать" из формы нашей внешней обработки, табличный документ будет выводиться в форму "Печать документов", которая предоставляет удобный интерфейс для печати: