1. В форму документа добавить процедуры:
// СтандартныеПодсистемы.Печать
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.Печать
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
2. Добавить в события формы документа:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
3. В модуль менеджера нового документа
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область Печать
// Заполняет список команд печати.
//
// Параметры:
// КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КонецПроцедуры
// Сформировать печатные формы объектов
//
// ВХОДЯЩИЕ:
// ИменаМакетов - Строка - Имена макетов, перечисленные через запятую
// МассивОбъектов - Массив - Массив ссылок на объекты которые нужно распечатать
// ПараметрыПечати - Структура - Структура дополнительных параметров печати
//
// ИСХОДЯЩИЕ:
// КоллекцияПечатныхФорм - Таблица значений - Сформированные табличные документы
// ПараметрыВывода - Структура - Параметры сформированных табличных документов
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);
КонецПроцедуры
Функция ДоступныеДляШаблоновПечатныеФормы() Экспорт
МассивДоступныхПечатныхФорм = Новый Массив;
Возврат МассивДоступныхПечатныхФорм
КонецФункции
#КонецОбласти
#КонецЕсли
4. В общий модуль УправлениеПечатьюПереопределяемый в процедуру ПриОпределенииОбъектовСКомандамиПечати добавить строчку.
Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт
СписокОбъектов.Добавить(Документы.НовыйДокумент);
КонецПроцедуры
5. В модуль дополнительной печатной формы добавить процедуры
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Функция СведенияОВнешнейОбработке() Экспорт
СведенияОВнешнейОбработке = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
СведенияОВнешнейОбработке.Вставить("Вид", ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма());
СведенияОВнешнейОбработке.Вставить("Назначение", ПолучитьНазначениеОбработки());
СведенияОВнешнейОбработке.Вставить("Наименование", "Новый документ");
СведенияОВнешнейОбработке.Вставить("Версия", "1.0");
СведенияОВнешнейОбработке.Вставить("Информация", "Новый документ");
СведенияОВнешнейОбработке.Вставить("БезопасныйРежим", Ложь);
СформироватьСписокКоманд(СведенияОВнешнейОбработке.Команды);
Возврат СведенияОВнешнейОбработке;
КонецФункции
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "НовыйДокумент");
Если ПечатнаяФорма <> Неопределено Тогда
ПечатнаяФорма.ТабличныйДокумент = СформироватьПечатнуюФорму(МассивОбъектов);
ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Новый документ'");
КонецЕсли;
КонецПроцедуры
#КонецОбласти
Функция СформироватьПечатнуюФорму(МассивОбъектов) Экспорт
Док = МассивОбъектов[0];
//Тут заполняем печатную форму
//Макет = ПолучитьМакет("Макет");
//ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
//ТабличныйДокумент.Вывести(ОбластьЗаголовок);
ТабличныйДокумент = Новый ТабличныйДокумент;
Возврат ТабличныйДокумент;
КонецФункции
#Область СлужебныеПроцедурыИФункции
Функция ПолучитьНазначениеОбработки()
Результат = Новый Массив;
Результат.Добавить("Документ.НовыйДокумент");
Возврат Результат;
КонецФункции
Функция ПолучитьСтруктуруТаблицыКоманд()
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Результат.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Результат.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Результат.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Результат.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Результат;
КонецФункции
Процедура ДобавитьКоманду(Команды, Идентификатор, Представление, Использование, ПоказыватьОповещение = Ложь, Модификатор = Неопределено)
НоваяКоманда = Команды.Добавить();
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Представление = Представление;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
Процедура СформироватьСписокКоманд(Команды)
ДобавитьКоманду(Команды, "НовыйДокумент", "Новый документ", ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода(), Истина);
КонецПроцедуры
#КонецОбласти
#КонецЕсли
6. В форму списка документа добавить процедуры:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// СтандартныеПодсистемы.Печать
УправлениеПечатью.ПриСозданииНаСервере(ЭтаФорма, Элементы.ПодменюПечать);
// Конец СтандартныеПодсистемы.Печать
КонецПроцедуры
#Область ОбработчикиКомандФормы
// СтандартныеПодсистемы.Печать
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Элементы.Список);
КонецПроцедуры
// Конец СтандартныеПодсистемы.Печать
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
КонецПроцедуры
#КонецОбласти
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
Добавить в командную панель ПодменюПечать:
ПоложениеКоманднойПанели поставить Верх
В списке обязательно должна присутствовать Ссылка
Тестировал на:
1С:Предприятие 8.3 (8.3.13.1644)
1С:Комплексная автоматизация 2 (2.4.6.207)