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