Используя новые возможности платформы 8.3.9 в плане работы с расширениями, а именно возможность изменять модули типовой конфигурации, достаточно просто сделать новую печатную форму для документа.
Допустим стоит задача создать новую печатную форму для документа "РеализацияТоваровУслуг" на основе уже имеющейся "ТОРГ-12". Мы будем использовать конфигурацию "Бухгалтерия предприятия, ред. 3.0".
Итак, создаем новое расширение:
Для вывода новой печатной формы нам понадобятся две процедуры модуля менеджера документа "РеализацияТоваровУслуг". Это процедуры ДобавитьКомандыПечати() и Печать().
Для этих процедур мы будем использовать аннотацию &Вместо. Т.е. типовые процедуры выполняться не будут, а вместо них будут выполнены наши, которые мы сделаем на основе типовых.
Итак, добавляем модуль менеджера документа "РеализацияТоваровУслуг" в наше расширение, текст модуля будет следующий:
&Вместо("ДобавитьКомандыПечати")
Процедура РасшНПФ_ДобавитьКомандыПечати(КомандыПечати) Экспорт
// Наша новая печатная форма на основе (ТОРГ-12)
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "НашаФорма";
КомандаПечати.Представление = НСтр("ru = 'Наша форма'");
КомандаПечати.Обработчик = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечати";
КомандаПечати.СписокФорм = "ФормаСписка,ФормаВыбора,ФормаДокументаОбщая,ФормаДокументаТовары";
КомандаПечати.Порядок = 10;
//
// Здесь идет код типовой процедуры ДобавитьКомандыПечати(КомандыПечати)
//
КонецПроцедуры
&Вместо("Печать")
Процедура РасшНПФ_Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "НашаФорма") Тогда
ВключатьУслуги = Ложь;
ТаблицаСведенийТОРГ12 = ПолучитьТаблицуСведенийТОРГ12(МассивОбъектов, ВключатьУслуги);
ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_НашаФорма";
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "НашаФорма", "НашаФорма",
ПечатьТорговыхДокументов.ПечатьТОРГ12(ТаблицаСведенийТОРГ12, ОбъектыПечати, ИмяПараметровПечати),,"ОбщийМакет.РасшНПФ_Макет");
ПараметрыВывода.Вставить("ФормироватьЭД", Истина);
КонецЕсли;
//
// Здесь идет код типовой процедуры Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода)
//
КонецПроцедуры
Итак, мы добавили вывод нашей формы в меню "Печать" документа "РеализацияТоваровУслуг" и поменяли параметры процедуры "ВывестиТабличныйДокументВКоллекцию" из общего модуля "УправлениеПечатью". В частности, мы заменили общий макет из типовой конфигурации на наш "ОбщийМакет.РасшНПФ_Макет", который мы предварительно добавили в наше расширение.
Казалось бы все, но нет. Из процедуры "РасшНПФ_Печать" вызов идет в функцию ПечатьТорговыхДокументов.ПечатьТорг12(), в которой жестко используется типовой общий макет, а нам хотелось бы использовать свой собственный. Поэтому данную функцию мы тоже заменяем своей:
&Вместо("ПечатьТОРГ12")
Функция РасшНПФ_ПечатьТОРГ12(СведенияТОРГ12, ОбъектыПечати, ИмяПараметровПечати) Экспорт
УстановитьПривилегированныйРежим(Истина);
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.АвтоМасштаб = Истина;
ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабличныйДокумент.ИмяПараметровПечати = ИмяПараметровПечати;
УстановитьМинимальныеПоляПечати(ТабличныйДокумент);
Если ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_НашаФорма" Тогда
Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.Расш2_Макет");
Иначе
Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.ПФ_MXL_ТОРГ12");
КонецЕсли;
ПервыйДокумент = Истина;
СведенияОКонтрагентах = Новый Соответствие;
КонтрагентыДляПечати = Новый Структура("Поставщик, Грузоотправитель, Покупатель, Грузополучатель");
//
// Оставшаяся часть кода типовой функции
//
Возврат ТабличныйДокумент;
КонецФункции
В принципе все готово. Осталось обратить внимание еще на пару моментов.
При добавлении расширения необходимо снять галочку "Безопасный режим, имя профиля безопасности" иначе при запуске 1с мы получим следующее уведомление:
Ошибка расширения модуля 'Документ.РеализацияТоваровУслуг.МодульМенеджера': расширение модуля запрещено из-за того, что расширение 'РасширениеНоваяПечатнаяФорма' подключено в безопасном режиме
Второй момент это то, что в разработке расширения мы использовали новые возможности платформы 8.3.9 поэтому режим совместимости мы использовать не можем. Для Бухгалтерии 8, ред. 3.0 на момент написания статьи итспользуется режим совместимости 8.3.8, поэтому, чтобы его поменять нам придется снять конфигурацию с замка.
Подводя итог, можно сказать следующее. Я рассматривал возможности работы с расширением в плане используя его в качестве альтернативы использования внешним печатным формам в типовых конфигурациях. Так как плюсы работы с расширениями очевидны. Это в первую очередь и простота разработки и легкость отладки кода. Любой начинающий программист или консультант 1с сможет легко сделать небольшие доработки. Это будет намного проще, чем делать внешнюю печатную форму.
Из минусов, это то, что пока необходимо снимать конфигурацию с замка. Но для Бухгалтерии 8, ред. 3.0 эта проблема скорее всего решится в ближайшее время. На днях, должна уже выйти 8.3.10 и думаю уже скоро режим совместимости в последующих релизах будет повышен. И тогда выбор в пользу расширения перед внешней печатной формой будет очивиден. Разумеется если у Вас не базовая версия, в которой механизм расширений, как мы знаем, не работает.
Всем спасибо за внимание, и всего хорошего)