Как из встроенной печатной формы 1С сделать внешнюю

Рассмотрим создание внешней печатной формы из встроенной на примере Торг 12 из типовой конфигурации 1С 8.2 Бухгалтерия 2.0.

Создадим новую внешнюю обработку, назовем ее Торг12Внешняя. Добавим реквизит СсылкаНаОбъект и присвоим ему тип ДокументСсылка.РеализацияТовароУслуг (Торг 12 печатается из реализации).

Создание внешней обработки для Торг12

В модуле обработки создадим обязательную для печатных форм функцию Печать(), пока оставим ее пустой.

Функция Печать() Экспорт

конецфункции;

Также, для отладки печатной формы можно создать форму обработки. Если вы не знаете как это сделать, прочитайте эту статью. Теперь в конфигураторе открываем модуль объекта документа РеализацияТоваровУслуг, и ищем там функцию Печать. Она выглядит так:

Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, НепосредственнаяПечать = Ложь) Экспорт

   // Получить экземпляр документа на печать
   Если ИмяМакета = "Накладная" Тогда
      ТабДокумент = ПечатьДокумента();

   ИначеЕсли ИмяМакета = "ТОРГ12" тогда
      ТабДокумент = ПечатьТОРГ12();

   ИначеЕсли ИмяМакета = "ТОРГ12_БезУслуг" тогда
      ТабДокумент = ПечатьТОРГ12(Истина);

   ИначеЕсли ИмяМакета = "Акт" Тогда
      ТабДокумент = ПечатьАктаОбОказанииУслуг();

   ИначеЕсли ИмяМакета = "1Т" или ИмяМакета = "_1Т" Тогда
      ТабДокумент = ПечатьТТН();

   ИначеЕсли ИмяМакета = "М15" Тогда
      ТабДокумент = ПечатьМ15();

   ИначеЕсли ИмяМакета = "СправкаРасчетВал" Тогда

      // Справка-расчет формирования рублевой суммы документа в валюте
      БухгалтерскийУчетРасчетовСКонтрагентами.НапечататьСправкуРасчетРублеваяСуммаДокументаВВалюте(Ссылка);
      Возврат;

   КонецЕсли;

   УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект), НепосредственнаяПечать);

КонецПроцедуры // Печать

Так как нас интересует только Торг12, копируем строчку

ТабДокумент = ПечатьТОРГ12();

к себе в модуль печатной формы(также сразу сделаем возврат Табличного документа).

Функция Печать() Экспорт
    ТабДокумент = ПечатьТОРГ12();

    возврат ТабДокумент;
конецфункции

Теперь найдем в модуле документа процедуру ПечатьТОРГ12() и скопируем ее в модуль печатной формы. Нажимаем Сохранить и видим, что не определена переменная мВалютаРегламентированногоУчета. Опишем ее в начале модуля:

Перем мВалютаРегламентированногоУчета Экспорт;

и инициализируем в конце:

мВалютаРегламентированногоУчета   = Константы.ВалютаРегламентированногоУчета.Получить();

Далее нужно исправить все ошибки возникшие в модуле печатной формы, они могут быть нескольких типов:

  • Отсутствуют процедуры или функции(В этом случае их нужно добавить из модуля документа).
  • Отсутствуют реквизиты определенные в документе, их нужно получать через ссылку на объект.

Например, было:

Запрос.УстановитьПараметр("СчетУчетаРасчетовСКонтрагентом", СчетУчетаРасчетовСКонтрагентом);

надо сделать:

Запрос.УстановитьПараметр("СчетУчетаРасчетовСКонтрагентом", СсылкаНаОбъект.СчетУчетаРасчетовСКонтрагентом);

Также нужно заменить обращения к текущему документу через конструкции Ссылка и ЭтотОбъект на СсылкаНаОбъект и СсылкаНаОбъект.ПолучитьОбъект() соответственно(стоит заметить, что конструкцию ЭтотОбъект.Ссылка следует заменять на СсылкаНаОбъект).

Например, было:

Запрос.УстановитьПараметр("Ссылка", Ссылка);

надо сделать:

Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);

было:

Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);

надо сделать:

Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);

было:

ЗаполнениеДокументов.КурсДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета));

надо сделать:

ЗаполнениеДокументов.КурсДокумента(СсылкаНаОбъект.ПолучитьОбъект(), мВалютаРегламентированногоУчета));

После исправления всех ошибок нужно посмотреть какой макет используется в печатной форме: общий либо внутренний макет документа(это можно сделать поискав в модуле своей печатной формы функцию ПолучитьМакет, либо ПолучитьОбщийМакет). Если макет внутренний, то его нужно скопировать из документа в печатную форму. Если общий то, тут может быть два варианта:

  • Он вас устраивает, и вы оставляете все как есть.
  • Вы хотите его изменить, и тогда копируете из общих макетов(дерево конфигурации->Общие->ОбщиеМакеты) в печатную форму. И меняете функцию ПолучитьОбщийМакет на ПолучитьМакет.

На этом создание внешней печатной формы из встроенной для 1с 8 завершено, вносим в нее нужные изменения и подключаем к документу.

Скачать что у нас получилось можно по ссылке.