Шаблон внешней печатной формы в управляемом приложени

Главная » Универсальное для управляемых форм


Пример создания внешней печатной формы АКТа для Бухгалтерии 3.0, аналогично и для других типовых конфигураций

В конфигураторе 1C Предприятия 8 создаем внешнюю обработку (Файл->Новый->Внешняя обработка), задаем имя

Открываем модуль обработки и пишем код:

// Функция формирует табличный документ с Внешней печатной формой
//
// Возвращаемое значение:
//  Табличный документ - печатная форма акта
//
Функция ПечатьВнешнейПечатнойФормы(МассивОбъектов, ОбъектыПечати, Подписант) Экспорт
    ТабДок = новый ТабличныйДокумент;
    
    Макет = ПолучитьМакет("Макет");
    
    ОбластьШапки   = Макет.ПолучитьОбласть("Шапка");
    ОбластьДанные  = Макет.ПолучитьОбласть("Данные");
    ОбластьПодвал  = Макет.ПолучитьОбласть("Подвал");
    
    Запрос = новый запрос;
    Запрос.УстановитьПараметр("МассивОбъектов",МассивОбъектов);
    Запрос.Текст = "ВЫБРАТЬ
    |    РеализацияТоваровУслугТовары.Номенклатура,
    |    РеализацияТоваровУслугТовары.Сумма,
    |    РеализацияТоваровУслугТовары.Количество,
    |    РеализацияТоваровУслугТовары.Цена,
    |    РеализацияТоваровУслугТовары.Ссылка КАК Ссылка
    |ИЗ
    |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    |ГДЕ
    |    РеализацияТоваровУслугТовары.Ссылка В(&МассивОбъектов)
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    РеализацияТоваровУслугУслуги.Номенклатура,
    |    РеализацияТоваровУслугУслуги.Сумма,
    |    РеализацияТоваровУслугУслуги.Количество,
    |    РеализацияТоваровУслугУслуги.Цена,
    |    РеализацияТоваровУслугУслуги.Ссылка
    |ИЗ
    |    Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги
    |ГДЕ
    |    РеализацияТоваровУслугУслуги.Ссылка В(&МассивОбъектов)      
    |
    |УПОРЯДОЧИТЬ ПО
    |    Ссылка";
    
    ОбщаяВыборка = Запрос.Выполнить().Выгрузить();
    
    Для Каждого СсылкаНаОбъект из МассивОбъектов Цикл
        
        ОбластьШапки.Параметры.ТекстЗаголовка = "Акт №  "+СсылкаНаОбъект.Номер;
        ОбластьШапки.Параметры.Организация = СсылкаНаОбъект.Организация;
        
        ТабДок.Вывести(ОбластьШапки);
        
        Отбор = Новый Структура;
        Отбор.Вставить("Ссылка",СсылкаНаОбъект);
        
        Выборка = ОбщаяВыборка.НайтиСтроки(Отбор);
        
        ИтогоСумма      = 0;
        ИтогоКоличество = 0;
        
        Для Каждого Стр из Выборка Цикл
            ЗаполнитьЗначенияСвойств(ОбластьДанные.Параметры,Стр);
            
            ИтогоСумма = ИтогоСумма + Стр.Сумма;
            ИтогоКоличество = ИтогоКоличество + Стр.Количество;
            
            ТабДок.Вывести(ОбластьДанные);
        КонецЦикла;
        
        ОбластьПодвал.Параметры.ИтогоСумма      = ИтогоСумма;
        
        ОбластьПодвал.Параметры.Подписант      = Подписант;


        ТабДок.Вывести(ОбластьПодвал);
        
        ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЦикла;
    
    Возврат ТабДок;
КонецФункции

// Экспортная процедура печати, вызываемая из основной программы
//
// Параметры:
// ВХОДЯЩИЕ:
//  МассивОбъектовНазначения - Массив - список объектов ссылочного типа для печати документа
//                 Как правило, содержит один элемент с ссылкой на вызвавший форму объект (документ, справочник)
//
// ИСХОДЯЩИЕ:
//  КоллекцияПечатныхФорм - ТаблицаЗначений - таблица сформированных табличных документов.
//                 Как правило, содержит одну строку с именем текущей печатной формы
//  ОбъектыПечати - СписокЗначений - список объектов печати. 
//  ПараметрыВывода - Структура - Параметры сформированных табличных документов. Содержит поля:
//                          ДоступнаПечатьПоКомплектно - булево - по умолчанию Ложь
//                            ПолучательЭлектронногоПисьма
//                            ОтправительЭлектронногоПисьма
//
Процедура Печать(МассивОбъектовНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "АКТПечатьВнешняя") Тогда 
        ТабличныйДокумент = ПечатьВнешнейПечатнойФормы(МассивОбъектовНазначения, ОбъектыПечати, "");
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "АКТПечатьВнешняя", "АКТ (внешний)", ТабличныйДокумент);
        
    ИначеЕсли УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "АКТПечатьВнешняяИван") Тогда 
        ТабличныйДокумент = ПечатьВнешнейПечатнойФормы(МассивОбъектовНазначения, ОбъектыПечати, "Иванов А.Ю.");
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "АКТПечатьВнешняяИван", "АКТ (внешний) Иванов", ТабличныйДокумент);          
        
    ИначеЕсли УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "АКТПечатьВнешняяПетр") Тогда 
        ТабличныйДокумент = ПечатьВнешнейПечатнойФормы(МассивОбъектовНазначения, ОбъектыПечати, "Петров В.С.");
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "АКТПечатьВнешняяПетр", "АКТ (внешний) Петров", ТабличныйДокумент);
    КонецЕсли;


КонецПроцедуры


#Область СведенияОВнешнейОбработке
// Сервисная экспортная функция. Вызывается в основной программе при регистрации обработки в информационной базе
// Возвращает структуру с параметрами регистрации
//
// Возвращаемое значение:
//        Структура с полями:
//            Вид - строка, вид обработки, один из возможных: "ДополнительнаяОбработка", "ДополнительныйОтчет", 
//                    "ЗаполнениеОбъекта", "Отчет", "ПечатнаяФорма", "СозданиеСвязанныхОбъектов"
//            Назначение - Массив строк имен объектов метаданных в формате: 
//                    <ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>]. 
//                    Например, "Документ.СчетЗаказ" или "Справочник.*". Параметр имеет смысл только для назначаемых обработок, для глобальных может не задаваться.
//            Наименование - строка - Наименование обработки, которым будет заполнено наименование элемента справочника по умолчанию.
//            Информация  - строка - Краткая информация или описание по обработке.
//            Версия - строка - Версия обработки в формате "<старший номер>.<младший номер>" используется при загрузке обработок в информационную базу.
//            БезопасныйРежим - булево - Принимает значение Истина или Ложь, в зависимости от того, требуется ли устанавливать или отключать безопасный режим 
//                            исполнения обработок. Если истина, обработка будет запущена в безопасном режиме. 
//
Функция СведенияОВнешнейОбработке() Экспорт
    //Инициализируем структуру с параметрами регистрации        
    ПараметрыРегистрации = Новый Структура;
    // Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать.
    // Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов...
    
    МассивНазначений = Новый Массив;
    // Теперь нам необходимо передать в виде массива имен, к чему будет подключена наша ВПФ
    // Имейте ввиду, что можно задать имя в таком виде: Документ.* - в этом случае обработка будет подключена ко всем документам в системе,
    // которые поддерживают механизм ВПФ
    МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг"); //Указываем документ к которому делаем внешнюю печ. форму           
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    
    ПараметрыРегистрации.Вставить("Наименование", "АКТ (Внешний)"); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
    ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);  // Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)
    ПараметрыРегистрации.Вставить("Версия", "1.0");   // эти два параметра играют больше информационную роль,
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма"); // т.е. это то, что будет видеть пользователь в информации к обработке
    
    // Создадим таблицу команд (подробнее смотрим ниже)
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, "Внешний: АКТ", "АКТПечатьВнешняя", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    ДобавитьКоманду(ТаблицаКоманд, "Внешний: АКТ (Иванов)", "АКТПечатьВнешняяИван", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    ДобавитьКоманду(ТаблицаКоманд, "Внешний: АКТ (Петров)", "АКТПечатьВнешняяПетр", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
    Возврат ПараметрыРегистрации;     
КонецФункции
#КонецОбласти


#Область Вспомогательное
// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ РЕГИСТРАЦИИ ОБРАБОТКИ


// Формирует структуру с параметрами регистрации регистрации обработки в информационной базе
//
// Параметры:
//    ОбъектыНазначенияФормы - Массив - Массив строк имен объектов метаданных в формате: 
//                    <ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>]. 
//                    или строка с именем объекта метаданных 
//    НаименованиеОбработки - строка - Наименование обработки, которым будет заполнено наименование элемента справочника по умолчанию.
//                            Необязательно, по умолчанию синоним или представление объекта
//    Информация  - строка - Краткая информация или описание обработки.
//                            Необязательно, по умолчанию комментарий объекта
//    Версия - строка - Версия обработки в формате "<старший номер>.<младший номер>" используется при загрузке обработок в информационную базу.
//
//
// Возвращаемое значение:
//        Структура
//
Функция ПолучитьПараметрыРегистрации(ОбъектыНазначенияФормы = Неопределено, НаименованиеОбработки = "", Информация = "", Версия = "1.0")


    Если ТипЗнч(ОбъектыНазначенияФормы) = Тип("Строка") Тогда
        ОбъектНазначенияФормы = ОбъектыНазначенияФормы;
        ОбъектыНазначенияФормы = Новый Массив;
        ОбъектыНазначенияФормы.Добавить(ОбъектНазначенияФормы);
    КонецЕсли; 
    
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
    ПараметрыРегистрации.Вставить("Назначение", ОбъектыНазначенияФормы);
    
    Если Не ЗначениеЗаполнено(НаименованиеОбработки) Тогда
        НаименованиеОбработки = ЭтотОбъект.Метаданные().Представление();
    КонецЕсли; 
    ПараметрыРегистрации.Вставить("Наименование", НаименованиеОбработки);
    
    Если Не ЗначениеЗаполнено(Информация) Тогда
        Информация = ЭтотОбъект.Метаданные().Комментарий;
    КонецЕсли; 
    ПараметрыРегистрации.Вставить("Информация", Информация);
    
    ПараметрыРегистрации.Вставить("Версия", Версия);


    Возврат ПараметрыРегистрации;


КонецФункции


// Формирует таблицу значений с командами печати
//    
// Возвращаемое значение:
//        ТаблицаЗначений
//
Функция ПолучитьТаблицуКоманд()


    Команды = Новый ТаблицаЗначений;
    
    //Представление команды в пользовательском интерфейсе
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    
    //Уникальный идентификатор команды или имя макета печати
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
    
    //Способ вызова команды: "ОткрытиеФормы", "ВызовКлиентскогоМетода", "ВызовСерверногоМетода"
    // "ОткрытиеФормы" - применяется только для отчетов и дополнительных отчетов
    // "ВызовКлиентскогоМетода" - вызов процедуры Печать(), определённой в модуле формы обработки
    // "ВызовСерверногоМетода" - вызов процедуры Печать(), определённой в модуле объекта обработки
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
    
    //Показывать оповещение.
    //Если Истина, требуется показать оповещение при начале и при завершении работы обработки. 
    //Имеет смысл только при запуске обработки без открытия формы
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    
    //Дополнительный модификатор команды. 
    //Используется для дополнительных обработок печатных форм на основе табличных макетов.
    //Для таких команд должен содержать строку ПечатьMXL
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));


    Возврат Команды; 
КонецФункции


// Вспомогательная процедура.
//
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование = "ВызовСерверногоМетода", ПоказыватьОповещение = Ложь, Модификатор = "ПечатьMXL")
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;      
КонецПроцедуры


#КонецОбласти

Добавляем Макет вывода печатной формы:


Подключение Внешней печатной формы:

Администрирование - Печатные формы, отчеты и обработки:

Image 19

Создам новую обработку:

Записываем и при открытии документа Реализация, нажав на Печать появляются доступные печатные формы с разными подписывающими.

Скачать Шаблон внешней печатной формы для управляемого приложения