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

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

1. Создание внешней обработки.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   КонецЕсли;

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

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

Так как нас интересует только Торг12, копируем строчку ТабДокумент = ПечатьТОРГ12(); к себе в модуль печатной формы(также сразу сделаем возврат Табличного документа).

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

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

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

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

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

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

Далее нужно исправить все ошибки возникшие в модуле печатной формы, они могут быть нескольких типов:
1. Отсутствуют процедуры или функции(В этом случае их нужно добавить из модуля документа).
2. Отсутствуют реквизиты определенные в документе, их нужно получать через ссылку на объект. Например,
было:

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

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

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

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

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

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

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

было:

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

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

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

было:

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

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

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

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

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

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

Скачать внешнюю печатную форму(DepositFiles): Торг12 внешняя

Все про 1C и автоматизацию бизнеса

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

  1. Привет, Виталий.
    Почему-то вставки с кодом в google chrome отражаются в некорректной кодировке… в опере и мозиле — нормально.

  2. Описанная процедура для 1С 8.1 аналогична? При попытке сохранить модуль объекта выдает
    err {ВнешняяОбработка.ТОРГ12Тест(8,2)}: Определения процедур и функций должны размещаться перед операторами тела модуля
    <>Функция ПечатьТОРГ12(БезУслуг = Ложь)
    Подскажите, как победить эту ошибку?

Добавить комментарий

Ваш e-mail не будет опубликован.

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>