Как создать и подключить внешнюю печатную форму для справочника в 1С:Розница 2.2?

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

При разработке внешних печатных форм (ВПФ) для конфигураций на базе БСП (Библиотека стандартных подсистем), таких как 1С:Розница 2.2, программисты часто сталкиваются с проблемой: при загрузке обработки в справочник "Дополнительные отчеты и обработки" в поле "Размещение" доступны только документы, а нужный справочник (например, "Номенклатура") отсутствует. В этой статье мы подробно разберем, почему это происходит и как заставить систему "увидеть" ваш справочник.

Анализируем функцию регистрации внешней обработки

Первым делом рассмотрим структуру функции СведенияОВнешнейОбработке. Ошибки на этом этапе — самая частая причина проблем. Разберем типичный пример кода и укажем на критические неточности.


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    
    // Внимание: указываем правильное имя метаданных
    МассивНазначений.Добавить("Справочник.Номенклатура"); 
    
    ПараметрыРегистрации.Вставить("Вид", ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма());
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "Печать ценника (внешняя)");
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма для справочника Номенклатура");
    
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, "Печать ценника", "ПечатьЦенника", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    Возврат ПараметрыРегистрации;
КонецФункции

Проанализируем важный нюанс: в коде часто ошибочно пишут МассивНазначений.Добавить("Справочники.Номенклатура"). Платформа 1С требует использования имени в единственном числе, как оно задано в метаданных — Справочник.Имя. Использование множественного числа приведет к тому, что система проигнорирует эту строку.

Проблема определяемых типов в БСП

Даже если код регистрации написан идеально, справочник может не появиться в списке "Размещение". Выясним причину этого поведения. В БСП существует механизм фильтрации объектов, для которых разрешена печать. Этот фильтр реализован через Определяемые типы.

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

Важно: Изменение состава определяемого типа требует внесения правок в конфигурацию. Если ваша база находится на поддержке и менять ее нельзя, этот путь нам не подходит. Однако, если конфигурация "снята с замка", добавление справочника в этот тип — самый правильный способ решения проблемы.

Решение через модуль менеджера справочника

Для того чтобы внешняя печатная форма корректно интегрировалась в меню "Печать" объекта, БСП ожидает наличия определенной процедуры в модуле менеджера этого объекта. Посмотрим, что именно нужно добавить.

Перейдем в модуль менеджера справочника (например, Справочник.Номенклатура) и добавим следующую экспортную процедуру:


Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    // Здесь может быть пусто, если вы не добавляете встроенные команды, 
    // но само наличие процедуры критично для механизмов БСП.
КонецПроцедуры

Если эта процедура отсутствует, система может блокировать вывод кнопки печати в форме справочника или в списке, даже если ВПФ успешно зарегистрирована в справочнике "Дополнительные отчеты и обработки".

Альтернативный вариант: Вид обработки "Заполнение объекта"

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

Вместо ВидОбработкиПечатнаяФорма попробуем использовать ВидОбработкиЗаполнениеОбъекта. Рассмотрим изменения в коде регистрации:


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

В чем разница?

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

Использование подписки на события

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

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

Типичные ошибки при отладке

Проанализируем ситуацию, когда вы внесли правки в код обработки, но в программе ничего не изменилось. Это происходит из-за кэширования параметров регистрации.

Выполните следующие шаги для гарантированного обновления:

  1. Зайдите в раздел Администрирование — Печатные формы, отчеты и обработки.
  2. Откройте карточку вашей внешней печатной формы.
  3. Нажмите кнопку Обновить из файла и выберите ваш обновленный файл .epf.
  4. Только после этого система перечитает структуру ПараметрыРегистрации и обновит записи в своих внутренних таблицах.

Особенности Розницы 2.2: печать ценников

Стоит помнить, что в "1С:Розница" справочник "Номенклатура" имеет встроенный мощный механизм печати ценников через специализированную обработку. Часто вместо создания классической ВПФ гораздо проще:

Этот путь предпочтительнее, если ваша задача заключается именно в оформлении ценника, так как он не требует программирования и легко обновляется пользователем.

Заключение

Мы выяснили, что отсутствие справочника в "Размещении" ВПФ — это не ошибка программы, а следствие работы механизмов БСП. Для решения задачи мы можем либо привести метаданные в соответствие требованиям БСП (через Определяемые типы и модуль менеджера), либо использовать обходной путь через "Заполнение объекта". Выбор метода зависит от того, насколько критично для вас нахождение кнопки именно в меню "Печать" и есть ли возможность вносить изменения в конфигурацию.

← На главную