Внешняя печатная форма word.Часть2
Ребят, в статье ‘Внешняя печатная форма WORD’ пользователь Павел заметил, что все работает как надо, но при этом происходит открытие самой формы обработки, что доставляет некие неудобства. Я с ним согласился и решил поискать иные варианты решения данной проблемы. Что бы можно было сделать внешнюю печатную WORD без интерактивного взаимодействия пользователя с формой обработки, пускай и на доли секунды.
Итак, вот самое решение! Нижеуказанное решение протестировано на конфигурации ‘Бухгалтерия предприятия, редакция 3.0/БИТ.ФИНАНС 3.1’ и ‘Библиотека стандартных подсистем”, редакция 3.1 (3.1.2.264)’. Думаю в типовых решениях будет работать везде!
Качаем обработку из предыдущей статьи и начинаем вносить в неё изменения:
Скачать файлы ‘craft1c_ВнешняяПечатнаяФормаWord.epf’
Основная идея в том, что теперь вместо команды ‘ОткрытиеФормы’, мы будем использовать ‘ВызовКлиентскогоМетода’. В модуле объекта нашей обработки меняем одну строчку:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; МассивНазначений = Новый Массив; //Для каждого МД Из Метаданные.Документы Цикл // МассивНазначений.Добавить(МД.ПолноеИмя()); //КонецЦикла; //Для каждого МД Из Метаданные.Справочники Цикл //МассивНазначений.Добавить(Метаданные.Справочники.Сотрудники); //КонецЦикла; ПараметрыРегистрации.Вставить("Вид" , "ПечатнаяФорма"); ПараметрыРегистрации.Вставить("Назначение" , МассивНазначений); ПараметрыРегистрации.Вставить("Наименование" , "craft1c_ВнешняяПечатнаяФормаWord"); ПараметрыРегистрации.Вставить("Версия" , "1.1.1"); ПараметрыРегистрации.Вставить("БезопасныйРежим" , ЛОЖЬ); ПараметрыРегистрации.Вставить("Информация" , "craft1c_ВнешняяПечатнаяФормаWord"); ТаблицаКоманд = Новый ТаблицаЗначений; ТаблицаКоманд.Колонки.Добавить("Представление"); ТаблицаКоманд.Колонки.Добавить("Идентификатор"); ТаблицаКоманд.Колонки.Добавить("Использование"); ТаблицаКоманд.Колонки.Добавить("ПоказыватьОповещение"); ТаблицаКоманд.Колонки.Добавить("Модификатор"); НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = "craft1c_ВнешняяПечатнаяФормаWord"; НоваяКоманда.Идентификатор = "craft1c_ВнешняяПечатнаяФормаWord"; НоваяКоманда.Использование = "ВызовКлиентскогоМетода"; //ВАЖНО!!! ВызовКлиентскогоМетода НоваяКоманда.ПоказыватьОповещение = Истина; НоваяКоманда.Модификатор = "craft1c_ВнешняяПечатнаяФормаWord"; ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции |
Далее, все что нам теперь необходимо, это добавить экспортную клиентскую процедуру ‘печать’ в модуль формы обработки:
1 2 3 4 5 6 7 8 9 10 |
&НаКлиенте Процедура Печать(ПараметрыПечати, МассивОбъектов) Экспорт //здесь объект, который будет распечатан содержится в параметре МассивОбъектов, можно либо перебрать массив и распечатать каждый: Для Каждого ТекущийОбъект Из МассивОбъектов Цикл СобратьМакет(ТекущийОбъект); КонецЦикла КонецПроцедуры |
Насколько я понял, что бы понять как должен выглядеть клиентский метод, нужно посмотреть в процедуре общего модуля ‘ВыполнитьКлиентскийМетодОбработки’ доступные варианты. К примеру для внешней печатной формы будет вызвана команда ‘Печать’ для данного объекта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Выполняет клиентский метод обработки. Процедура ВыполнитьКлиентскийМетодОбработки(ВыполняемаяКоманда, Форма, ОбъектыНазначения) Экспорт ПоказатьОповещениеПриВыполненииКоманды(ВыполняемаяКоманда); ПараметрыОбработки = Новый Структура("ИдентификаторКоманды, ДополнительнаяОбработкаСсылка, ИмяФормы"); ПараметрыОбработки.ИдентификаторКоманды = ВыполняемаяКоманда.Идентификатор; ПараметрыОбработки.ДополнительнаяОбработкаСсылка = ВыполняемаяКоманда.Ссылка; ПараметрыОбработки.ИмяФормы = ?(Форма = Неопределено, Неопределено, Форма.ИмяФормы);; //... ИначеЕсли ВыполняемаяКоманда.Вид = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма") Тогда ФормаОбработки.Печать(ВыполняемаяКоманда.Идентификатор, ОбъектыНазначения); ИначеЕсли ВыполняемаяКоманда.Вид = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта") Тогда //.... |
Вот и все! Теперь заново добавляем/заменяем нашу обработку в справочник ‘Дополнительные отчеты и обработки‘ – все как в прошлой статье. Идем в справочник ‘Сотрудники’ и печатаем нашу печатную форму WORD. Появляется наша печатная форма без открытия формы самой обработки! Вот это круто!
Качаем новую версию обработки с внешней печатной формой word:
Скачать файлы Внешняя печатная форма word. Вариант 2.
Бонусом еще один вариант от пользователя Павла. Огромное спасибо ему!
Скачать файлы Внешняя печатная форма word. Вариант 3.