Публикация предназначена в первую очередь для тех, кто впервые сталкивается с написанием внешних печатных форм под управляемое приложение.
Здесь будет рассмотрен один из способов создания внешней печатной формы под Управляемое Приложение (Управление Торговлей 11.1.1.11).
Во-первых, регистрация внешней обработки, отчета, печатной формы под УТ 11 отличается от регистрации таких же отчетов, печатных форм, обработок под обычное приложение.
Первое, что необходимо сделать, в модуле обработки прописать функцию СведенияОВнешнейОбработке
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг");
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //возможны варианты - ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов,
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Акт приема-передачи"); //имя под kt обработка зарегистрирована будет в справочнике внешних обработок
ПараметрыРегистрации.Вставить("Версия", "1.1");
ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма к документу РеализацияТоваровУслуг ");
//команды
ТаблицаКоманд = Новый ТаблицаЗначений;
ТаблицаКоманд.Колонки.Добавить("Представление"); //как будет выглядеть описание печ.формы для пользователя
ТаблицаКоманд.Колонки.Добавить("Идентификатор"); //имя нашего макета
ТаблицаКоманд.Колонки.Добавить("Использование"); //ВызовСерверногоМетода
ТаблицаКоманд.Колонки.Добавить("ПоказыватьОповещение"); //Истина
ТаблицаКоманд.Колонки.Добавить("Модификатор"); //ПечатьМХL
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = "Акт приема-передачи";
НоваяКоманда.Идентификатор = "МакетАкт"; //Внешняя печатная форма
НоваяКоманда.Использование = "ВызовКлиентскогоМетода"; //здесь можно прописать использование как серверного так и клиентского, отличие в том, что серверный метод будет обращаться к экспортной процедуре из модуля объекта, клиентский - к экспортной процедуре из модуля формы объекта
НоваяКоманда.ПоказыватьОповещение = Истина;
НоваяКоманда.Модификатор = "ПечатьMXL";
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Далее, если используем вызов серверного метода, то в модуле обработки добавляем процедуру печати
Процедура Печать(МассивОбъектов, ПараметрыПечати,КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
//здесь объект, который будет распечатан содержится в параметре МассивОбъектов, можно либо перебрать массив и распечатать каждый:
Для Каждого ТекущийДокумент Из МассивОбъектов Цикл
КонецЦикла
//либо воспользоваться запросом:
//это пример запроса, не использовать
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Запрос.Текст ="ВЫБРАТЬ
| *
|ИЗ
| Документ.РасходнаяНакладная КАК РасходнаяНакладная
|ГДЕ
| РасходнаяНакладная.Ссылка В (&МассивОбъектов)
//Или, если всегда будет распечатывать только один объект, можно прописать:
СсылкаНаОбъект = МассивОбъектов[0];
///////Далее Свой код
КонецПроцедуры
Если используется клиентский метод то создаем форму обработки и соответсвующую процедуру
&НаКлиенте
Процедура Печать(ИдентификаторКоманды,ОбъектыНазначения) Экспорт
//здесь объект, который будет распечатан содержится в параметре ОбъектыНазначения, соответственно для распечатки надо перебрать все что там содержится, можно сделать банально, если всегда печатается один объект
СсылкаНаОбъект = ОбъектыНазначения[0];
//Далее либо процедуру печати пишем здесь, при необходимости можно прописать обращение к серверной процедуре
///////Далее Свой код
КонецПроцедуры
Лично я столкнулся с такой штукой, у меня есть печатная форма, которая использует шаблон Word, в обычном приложении труда не составит написать соответствующую процедурку, которая выгрузит шаблон в соответствующее приложение и заполнит его. В УП это должно происходить на клиенте, соответственно я в процедуре Печать прописываю запуск нужного мне приложения, а шаблон, который хранится в макете, можно вытащить на сервере.
&НаКлиенте
Процедура Печать(ИдентификаторКоманды,ОбъектыНазначения) Экспорт
СсылкаНаОбъект = ОбъектыНазначения[0];
НазваниеФайла = ПолучитьИмяВременногоФайла("doc");
Макет = ВернутьМакет();
Макет.Записать(НазваниеФайла);
mWordObject = Новый COMObject("Word.Application");
Попытка
WordDoc = mWordObject.Documents.Add(НазваниеФайла);
Исключение
КонецПопытки;
///////Далее Свой код
КонецПроцедуры
&НаСервере
Функция ВернутьМакет()
СсылкаНаОбъект = РеквизитФормыВЗначение("Объект");
Макет = СсылкаНаОбъект.ПолучитьМакет("МакетАкт");
Возврат Макет;
КонецФункции
В довесок выкладываю несколько внешних печатных форм, форм для заполнения ТЧ документов под управляемое приложение (УТ11.1.1.11), т.к предприятие на котором работую, специфичное, обработки содержат минимальный необходимый код.