Шаблон внешней печатной формы в управляемом приложени
Главная » Универсальное для управляемых форм
Пример создания внешней печатной формы АКТа для Бухгалтерии 3.0, аналогично и для других типовых конфигураций
В конфигураторе 1C Предприятия 8 создаем внешнюю обработку (Файл->Новый->Внешняя обработка), задаем имя
Открываем модуль обработки и пишем код:
// Функция формирует табличный документ с Внешней печатной формой // // Возвращаемое значение: // Табличный документ - печатная форма акта // Функция ПечатьВнешнейПечатнойФормы(МассивОбъектов, ОбъектыПечати, Подписант) Экспорт ТабДок = новый ТабличныйДокумент; Макет = ПолучитьМакет("Макет"); ОбластьШапки = Макет.ПолучитьОбласть("Шапка"); ОбластьДанные = Макет.ПолучитьОбласть("Данные"); ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); Запрос = новый запрос; Запрос.УстановитьПараметр("МассивОбъектов",МассивОбъектов); Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровУслугТовары.Номенклатура, | РеализацияТоваровУслугТовары.Сумма, | РеализацияТоваровУслугТовары.Количество, | РеализацияТоваровУслугТовары.Цена, | РеализацияТоваровУслугТовары.Ссылка КАК Ссылка |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары |ГДЕ | РеализацияТоваровУслугТовары.Ссылка В(&МассивОбъектов) | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | РеализацияТоваровУслугУслуги.Номенклатура, | РеализацияТоваровУслугУслуги.Сумма, | РеализацияТоваровУслугУслуги.Количество, | РеализацияТоваровУслугУслуги.Цена, | РеализацияТоваровУслугУслуги.Ссылка |ИЗ | Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги |ГДЕ | РеализацияТоваровУслугУслуги.Ссылка В(&МассивОбъектов) | |УПОРЯДОЧИТЬ ПО | Ссылка"; ОбщаяВыборка = Запрос.Выполнить().Выгрузить(); Для Каждого СсылкаНаОбъект из МассивОбъектов Цикл ОбластьШапки.Параметры.ТекстЗаголовка = "Акт № "+СсылкаНаОбъект.Номер; ОбластьШапки.Параметры.Организация = СсылкаНаОбъект.Организация; ТабДок.Вывести(ОбластьШапки); Отбор = Новый Структура; Отбор.Вставить("Ссылка",СсылкаНаОбъект); Выборка = ОбщаяВыборка.НайтиСтроки(Отбор); ИтогоСумма = 0; ИтогоКоличество = 0; Для Каждого Стр из Выборка Цикл ЗаполнитьЗначенияСвойств(ОбластьДанные.Параметры,Стр); ИтогоСумма = ИтогоСумма + Стр.Сумма; ИтогоКоличество = ИтогоКоличество + Стр.Количество; ТабДок.Вывести(ОбластьДанные); КонецЦикла; ОбластьПодвал.Параметры.ИтогоСумма = ИтогоСумма; ОбластьПодвал.Параметры.Подписант = Подписант; ТабДок.Вывести(ОбластьПодвал); ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); КонецЦикла; Возврат ТабДок; КонецФункции // Экспортная процедура печати, вызываемая из основной программы // // Параметры: // ВХОДЯЩИЕ: // МассивОбъектовНазначения - Массив - список объектов ссылочного типа для печати документа // Как правило, содержит один элемент с ссылкой на вызвавший форму объект (документ, справочник) // // ИСХОДЯЩИЕ: // КоллекцияПечатныхФорм - ТаблицаЗначений - таблица сформированных табличных документов. // Как правило, содержит одну строку с именем текущей печатной формы // ОбъектыПечати - СписокЗначений - список объектов печати. // ПараметрыВывода - Структура - Параметры сформированных табличных документов. Содержит поля: // ДоступнаПечатьПоКомплектно - булево - по умолчанию Ложь // ПолучательЭлектронногоПисьма // ОтправительЭлектронногоПисьма // Процедура Печать(МассивОбъектовНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "АКТПечатьВнешняя") Тогда ТабличныйДокумент = ПечатьВнешнейПечатнойФормы(МассивОбъектовНазначения, ОбъектыПечати, ""); УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "АКТПечатьВнешняя", "АКТ (внешний)", ТабличныйДокумент); ИначеЕсли УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "АКТПечатьВнешняяИван") Тогда ТабличныйДокумент = ПечатьВнешнейПечатнойФормы(МассивОбъектовНазначения, ОбъектыПечати, "Иванов А.Ю."); УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "АКТПечатьВнешняяИван", "АКТ (внешний) Иванов", ТабличныйДокумент); ИначеЕсли УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "АКТПечатьВнешняяПетр") Тогда ТабличныйДокумент = ПечатьВнешнейПечатнойФормы(МассивОбъектовНазначения, ОбъектыПечати, "Петров В.С."); УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "АКТПечатьВнешняяПетр", "АКТ (внешний) Петров", ТабличныйДокумент); КонецЕсли; КонецПроцедуры #Область СведенияОВнешнейОбработке // Сервисная экспортная функция. Вызывается в основной программе при регистрации обработки в информационной базе // Возвращает структуру с параметрами регистрации // // Возвращаемое значение: // Структура с полями: // Вид - строка, вид обработки, один из возможных: "ДополнительнаяОбработка", "ДополнительныйОтчет", // "ЗаполнениеОбъекта", "Отчет", "ПечатнаяФорма", "СозданиеСвязанныхОбъектов" // Назначение - Массив строк имен объектов метаданных в формате: // <ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>]. // Например, "Документ.СчетЗаказ" или "Справочник.*". Параметр имеет смысл только для назначаемых обработок, для глобальных может не задаваться. // Наименование - строка - Наименование обработки, которым будет заполнено наименование элемента справочника по умолчанию. // Информация - строка - Краткая информация или описание по обработке. // Версия - строка - Версия обработки в формате "<старший номер>.<младший номер>" используется при загрузке обработок в информационную базу. // БезопасныйРежим - булево - Принимает значение Истина или Ложь, в зависимости от того, требуется ли устанавливать или отключать безопасный режим // исполнения обработок. Если истина, обработка будет запущена в безопасном режиме. // Функция СведенияОВнешнейОбработке() Экспорт //Инициализируем структуру с параметрами регистрации ПараметрыРегистрации = Новый Структура; // Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать. // Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов... МассивНазначений = Новый Массив; // Теперь нам необходимо передать в виде массива имен, к чему будет подключена наша ВПФ // Имейте ввиду, что можно задать имя в таком виде: Документ.* - в этом случае обработка будет подключена ко всем документам в системе, // которые поддерживают механизм ВПФ МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг"); //Указываем документ к которому делаем внешнюю печ. форму ПараметрыРегистрации.Вставить("Назначение", МассивНазначений); ПараметрыРегистрации.Вставить("Наименование", "АКТ (Внешний)"); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ); // Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим) ПараметрыРегистрации.Вставить("Версия", "1.0"); // эти два параметра играют больше информационную роль, ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма"); // т.е. это то, что будет видеть пользователь в информации к обработке // Создадим таблицу команд (подробнее смотрим ниже) ТаблицаКоманд = ПолучитьТаблицуКоманд(); ДобавитьКоманду(ТаблицаКоманд, "Внешний: АКТ", "АКТПечатьВнешняя", "ВызовСерверногоМетода", Истина, "ПечатьMXL"); ДобавитьКоманду(ТаблицаКоманд, "Внешний: АКТ (Иванов)", "АКТПечатьВнешняяИван", "ВызовСерверногоМетода", Истина, "ПечатьMXL"); ДобавитьКоманду(ТаблицаКоманд, "Внешний: АКТ (Петров)", "АКТПечатьВнешняяПетр", "ВызовСерверногоМетода", Истина, "ПечатьMXL"); ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции #КонецОбласти #Область Вспомогательное // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ РЕГИСТРАЦИИ ОБРАБОТКИ // Формирует структуру с параметрами регистрации регистрации обработки в информационной базе // // Параметры: // ОбъектыНазначенияФормы - Массив - Массив строк имен объектов метаданных в формате: // <ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>]. // или строка с именем объекта метаданных // НаименованиеОбработки - строка - Наименование обработки, которым будет заполнено наименование элемента справочника по умолчанию. // Необязательно, по умолчанию синоним или представление объекта // Информация - строка - Краткая информация или описание обработки. // Необязательно, по умолчанию комментарий объекта // Версия - строка - Версия обработки в формате "<старший номер>.<младший номер>" используется при загрузке обработок в информационную базу. // // // Возвращаемое значение: // Структура // Функция ПолучитьПараметрыРегистрации(ОбъектыНазначенияФормы = Неопределено, НаименованиеОбработки = "", Информация = "", Версия = "1.0") Если ТипЗнч(ОбъектыНазначенияФормы) = Тип("Строка") Тогда ОбъектНазначенияФормы = ОбъектыНазначенияФормы; ОбъектыНазначенияФормы = Новый Массив; ОбъектыНазначенияФормы.Добавить(ОбъектНазначенияФормы); КонецЕсли; ПараметрыРегистрации = Новый Структура; ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина); ПараметрыРегистрации.Вставить("Назначение", ОбъектыНазначенияФормы); Если Не ЗначениеЗаполнено(НаименованиеОбработки) Тогда НаименованиеОбработки = ЭтотОбъект.Метаданные().Представление(); КонецЕсли; ПараметрыРегистрации.Вставить("Наименование", НаименованиеОбработки); Если Не ЗначениеЗаполнено(Информация) Тогда Информация = ЭтотОбъект.Метаданные().Комментарий; КонецЕсли; ПараметрыРегистрации.Вставить("Информация", Информация); ПараметрыРегистрации.Вставить("Версия", Версия); Возврат ПараметрыРегистрации; КонецФункции // Формирует таблицу значений с командами печати // // Возвращаемое значение: // ТаблицаЗначений // Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; //Представление команды в пользовательском интерфейсе Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); //Уникальный идентификатор команды или имя макета печати Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); //Способ вызова команды: "ОткрытиеФормы", "ВызовКлиентскогоМетода", "ВызовСерверногоМетода" // "ОткрытиеФормы" - применяется только для отчетов и дополнительных отчетов // "ВызовКлиентскогоМетода" - вызов процедуры Печать(), определённой в модуле формы обработки // "ВызовСерверногоМетода" - вызов процедуры Печать(), определённой в модуле объекта обработки Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); //Показывать оповещение. //Если Истина, требуется показать оповещение при начале и при завершении работы обработки. //Имеет смысл только при запуске обработки без открытия формы Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); //Дополнительный модификатор команды. //Используется для дополнительных обработок печатных форм на основе табличных макетов. //Для таких команд должен содержать строку ПечатьMXL Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции // Вспомогательная процедура. // Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование = "ВызовСерверногоМетода", ПоказыватьОповещение = Ложь, Модификатор = "ПечатьMXL") НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор; КонецПроцедуры #КонецОбласти
Добавляем Макет вывода печатной формы:
Подключение Внешней печатной формы:
Администрирование - Печатные формы, отчеты и обработки:
Создам новую обработку:
Записываем и при открытии документа Реализация, нажав на Печать появляются доступные печатные формы с разными подписывающими.Скачать Шаблон внешней печатной формы для управляемого приложения