Почему не отображается внешняя печатная форма при авторегистрации в 1С на обычных формах?

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

При работе с конфигурациями на обычных формах (такими как 1С:Управление производственным предприятием 1.3, 1С:Управление торговлей 10.3 или 1С:Комплексная автоматизация 1.1) программисты часто сталкиваются с ситуацией, когда скачанная или созданная внешняя печатная форма после добавления в базу не появляется в меню «Печать» нужного документа или справочника. В этой статье мы подробно разберем, как устроен механизм регистрации внешних печатных форм, какие требования предъявляются к коду обработки и что делать, если форма «не видится» системой.

Разберем основные требования к внешней печатной форме

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

  1. Реквизит СсылкаНаОбъект: В составе реквизитов внешней обработки обязательно должен присутствовать реквизит с именем СсылкаНаОбъект. Тип этого реквизита должен соответствовать (или включать в себя) тип объекта метаданных, для которого предназначена форма. Например, если форма для справочника СпецификацииНоменклатуры, тип реквизита должен быть СправочникСсылка.СпецификацииНоменклатуры. Если форма универсальная — можно использовать тип Произвольный или составной тип.
  2. Экспортная функция Печать: В модуле объекта обработки (не в модуле формы!) должна быть объявлена функция Печать() с ключевым словом Экспорт. Именно эту функцию вызывает системный механизм при нажатии кнопки в интерфейсе. Она должна возвращать объект типа ТабличныйДокумент.
  3. Макет параметров авторегистрации: Для того чтобы при загрузке обработки в справочник «Внешние обработки» таблица назначений заполнилась автоматически, внутри обработки должен быть создан макет с именем Параметры_Авторегистрации.

Рассмотрим структуру макета Параметры_Авторегистрации

Выясним причину, по которой автоматическое назначение может не срабатывать. Механизм обычного приложения ищет в обработке текстовый макет. Важно: макет должен иметь тип «Текстовый документ», а не «Табличный документ».

В этом макете в каждой новой строке указывается полное имя объекта метаданных, к которому привязывается форма. Например:

Документ.РеализацияТоваровУслуг
Справочник.СпецификацииНоменклатуры

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

Проанализируем программный код функции Печать

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


Функция Печать() Экспорт
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Спецификация";
    Макет = ПолучитьМакет("Спецификация");
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийЭлемент", СсылкаНаОбъект);
    Запрос.Текст = "
    |ВЫБРАТЬ
    | СпецификацииНоменклатуры.Код КАК Код,
    | СпецификацииНоменклатуры.Наименование КАК Наименование,
    | СпецификацииНоменклатуры.Ответственный.Наименование КАК ОтветственныйНаименование
    |ИЗ
    | Справочник.СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
    |ГДЕ
    | СпецификацииНоменклатуры.Ссылка = &ТекущийЭлемент";
    
    Шапка = Запрос.Выполнить.Выбрать();
    Если Не Шапка.Следующий() Тогда
        Возврат ТабДокумент;
    КонецЕсли;

    // Выводим заголовок из макета
    ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
    ОбластьМакета.Параметры.ТекстЗаголовка = "Спецификация номенклатуры: " + Шапка.Наименование;
    ТабДокумент.Вывести(ОбластьМакета);

    // Пример работы с комплектующими через временные таблицы
    Отбор = Новый Структура("СписаниеКомплектующей", Перечисления.ВариантыСписанияКомплектующих.Всегда);
    ТаблицаКомплектующих = УправлениеПроизводством.ПолучитьМатериалыПоСпецификации(СсылкаНаОбъект, 1, Отбор, ТекущаяДата(), Ложь);
    
    МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    ЗапросКТаблице = Новый Запрос;
    ЗапросКТаблице.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    ЗапросКТаблице.УстановитьПараметр("ТаблицаКомплектующих", ТаблицаКомплектующих);
    
    ЗапросКТаблице.Текст = "ВЫБРАТЬ * ПОМЕСТИТЬ ТаблицаКомплектующих ИЗ &ТаблицаКомплектующих КАК ТаблицаКомплектующих";
    ЗапросКТаблице.Выполнить();
    
    // ... дальнейшее формирование документа и вывод областей ...

    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    Возврат ТабДокумент;
КонецФункции

В этом примере мы видим, как СсылкаНаОбъект выступает связующим звеном между формой документа в базе и программным кодом обработки. Без этого реквизита запрос не получит параметр &ТекущийЭлемент, и печать завершится ошибкой.

Выясним причины, по которым форма не появляется в списке

Если код написан верно, но в справочнике или документе по-прежнему отображается только встроенная форма, проанализируем следующие моменты:

  1. Неправильный вид обработки в справочнике: При добавлении файла в справочник «Дополнительные внешние отчеты и обработки» критически важно выбрать правильный вид элемента. Если вы зарегистрировали её как «Заполнение табличных частей» или просто «Внешняя обработка», она не появится в меню «Печать». Убедитесь, что выбран вид Печатная форма.
  2. Кэширование форм: 1С кэширует список доступных печатных форм. Если вы добавили обработку в справочник, когда форма документа была уже открыта, кнопка «Печать» не обновится автоматически. Необходимо закрыть форму объекта (документа или справочника) и открыть её заново.
  3. Назначение (Размещение): Проверьте карточку регистрации внешней обработки. Перейдите на закладку «Назначение» (или гиперссылка в обычном интерфейсе). Если там не указан ваш документ, кнопка не появится. Если авторегистрация не сработала, добавьте нужный тип объекта вручную через подбор.
  4. Права доступа: Проверьте, есть ли у пользователя права на использование внешних обработок и доступ к справочнику, где они хранятся. В некоторых конфигурациях существуют дополнительные настройки прав («Дополнительные права пользователя»), где может быть запрещено использование внешних печатных форм.

Различие между обычными и управляемыми формами (БСП)

Часто путаница возникает из-за смешивания технологий. Рассмотрим подробнее: в современных конфигурациях на базе БСП (Библиотека Стандартных Подсистем) используется функция СведенияОВнешнейОбработке(). Однако в старых обычных формах этот механизм не работает. Если вы добавите функцию СведенияОВнешнейОбработке в обработку для УПП 1.3, система её просто проигнорирует. Для обычных форм актуальны именно макет Параметры_Авторегистрации и реквизит СсылкаНаОбъект.

Подведем итог: пошаговый алгоритм проверки

Если форма не работает, выполним следующие шаги:

Соблюдение этих правил гарантирует корректную работу внешних печатных форм в любом типовом решении 1С на обычных формах. В качестве практической основы для реализации собственных бланков подойдёт шаблон внешней печатной формы для обычных конфигураций.

← На главную