Как создать внешнюю печатную форму для УТ 10.3 и зачем нужен реквизит СсылкаНаОбъект?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При разработке внешних печатных форм (ВПФ) для конфигурации «1С:Управление торговлей 10.3» (УТ 10.3) многие разработчики, привыкшие к управляемым формам (например, УТ 11), сталкиваются с определенными архитектурными отличиями. Главный вопрос, который возникает: нужен ли в обработке реквизит СсылкаНаОбъект и как правильно обращаться к данным документа? Давайте подробно разберем этот механизм, выясним причину возникновения синтаксических ошибок и проанализируем лучшие практики создания ВПФ для конфигураций на обычных формах.

Для чего нужен реквизит СсылкаНаОбъект?

В отличие от управляемых форм (УФ), где при печати передается массив ссылок на объекты, в УТ 10.3 архитектура внешних печатных форм строится вокруг самой обработки. Внешняя печатная форма живет в обработке, у которой может даже не быть пользовательского интерфейса.

Реквизит СсылкаНаОбъект является обязательным для ВПФ в УТ 10.3. Это тот самый документ, который пользователь собирается распечатать. Платформа при вызове внешней печатной формы инициализирует этот реквизит, записывая туда ссылку на документ. Именно поэтому функция печати в модуле объекта внешней обработки вызывается без параметров — она берет нужный документ непосредственно из этого реквизита.

Рассмотрим частую ошибку при переносе кода из модуля документа в обработку. Разработчик может скопировать процедуру сбора данных:


Корректировочный = ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.Корректировочный;

При проверке синтаксиса платформа выдаст ошибку: Переменная не определена (ВидСчетаФактуры). Это происходит потому, что в модуле документа переменная ВидСчетаФактуры доступна напрямую как реквизит объекта. В модуле же внешней обработки мы работаем вне контекста документа. Чтобы исправить ошибку, заменим прямое обращение на обращение через реквизит:


Корректировочный = СсылкаНаОбъект.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.Корректировочный;

Поскольку СсылкаНаОбъект — это полноценная ссылка, мы можем через точку обращаться ко всем реквизитам документа. Однако правильнее и оптимальнее с точки зрения производительности получать эти данные запросом.

Различия механизмов печати: УТ 10.3 против УТ 11

Проанализируем фундаментальные различия в подходах к печати между обычными и управляемыми формами. Это поможет избежать путаницы при переходе между проектами.

  1. Передача параметров: В управляемых формах (УТ 11, ERP и т.д.) в процедуры печати передается массив объектов, поэтому реквизит со ссылкой внутри обработки не нужен. В УТ 10.3 передача идет через реквизит обработки СсылкаНаОбъект.
  2. Пакетная печать: Посмотрим на пример печати сразу 100 документов. В УФ формируется один общий запрос, в который передается массив из 100 ссылок. Платформа выполняет запрос один раз и затем обходит результат выборки. В УТ 10.3 на каждую печатную форму инициализируется обработка со своей ссылкой на объект, следовательно, для 100 документов будет выполнено 100 отдельных запросов к базе данных.

Правила адаптации типового кода для внешней обработки

Если вы переносите готовые процедуры печати из типового модуля документа в модуль объекта вашей ВПФ, обязательно выполните следующие действия:

  1. Замените все обращения ЭтотОбъект на СсылкаНаОбъект. В противном случае платформа будет искать реквизиты документа в самой обработке.
  2. В модуле объекта внешней обработки должна располагаться экспортная функция Печать(). Обратите внимание — это именно функция, а не процедура, и она должна быть экспортной.
  3. Функция Печать() всегда должна возвращать готовый ТабличныйДокумент. Если в результате каких-то проверок печать невозможна, функция может вернуть Неопределено, тогда печать не состоится.

Дополнительные настройки: Авторегистрация и отладка

Разберем по шагам, как сделать работу с ВПФ в УТ 10.3 более комфортной как для пользователя, так и для программиста.

1. Настройка авторегистрации

Чтобы при добавлении вашей обработки в информационную базу система сама поняла, к какому документу её привязать, используйте механизм авторегистрации. Для этого создайте в обработке табличную часть с именем Принадлежность. Добавьте в нее два строковых реквизита:

При загрузке файла программа автоматически предложит прикрепить форму к указанному типу документов.

2. Удобная отладка без загрузки в базу

Постоянно загружать файл epf в справочник «Внешние обработки, печатные формы...» для проверки каждой строчки кода очень утомительно. Мы можем существенно ускорить этот процесс. Создайте у обработки обычную форму. Разместите на ней поле ввода, связанное с реквизитом СсылкаНаОбъект, и кнопку «Сформировать». В обработчике нажатия этой кнопки напишите простой код:


Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    // Получаем готовый табличный документ из нашей экспортной функции
    ТабДокумент = Печать();
    
    Если ТабДокумент <> Неопределено Тогда
        // Выводим результат на экран
        ТабДокумент.Показать();
    КонецЕсли;

КонецПроцедуры

Теперь вы можете открыть вашу обработку через меню «Файл - Открыть» прямо в режиме 1С:Предприятие, выбрать любой тестовый документ и моментально проверить, как формируется табличный документ и корректно ли отрабатывают запросы. Это экономит массу времени.

Безопасность обновлений базы

Использование внешних печатных форм в УТ 10.3 — это грамотный подход к сохранению конфигурации на поддержке. Несмотря на возраст конфигурации, для нее до сих пор могут выходить обновления (например, из-за изменения форматов счетов-фактур или УПД). Вынося логику печати специфичных для клиента документов во внешнюю обработку, вы гарантируете, что при обновлении релиза типовые макеты обновятся штатно, а ваша доработанная печатная форма останется нетронутой и продолжит стабильно функционировать.

← На главную