Создание внешней печатной формы под Управляемое Приложение (Управление Торговлей 11.1.1.11)
Здесь будет рассмотрен один из способов создания внешней печатной формы под Управляемое Приложение (Управление Торговлей 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), т.к предприятие на котором работую, специфичное, обработки содержат минимальный необходимый код.