Как добавить кнопку печати внешней печатной формы, если объекта нет в списке размещения БСП?

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

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

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

Выясняем причину: почему объект недоступен для размещения?

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

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

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

Шаг 1. Создание расширения и заимствование объектов

Для начала нам необходимо перенести целевые объекты в новое или существующее расширение конфигурации:

  1. Создадим новое расширение конфигурации (тип назначения — "Адаптация").
  2. Добавим (заимствуем) в созданное расширение справочник (или документ), для которого создается печатная форма. В нашем примере это справочник ДемоНоменклатура.
  3. Если у справочника есть формы элемента и списка, на которых должна выводиться кнопка, заимствуем и эти формы тоже.

Шаг 2. Регистрация объекта в подсистеме печати БСП

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

  1. Найдем и заимствуем в расширение общий модуль УправлениеПечатьюПереопределяемый.
  2. В модуле расширения переопределим процедуру ПриОпределенииОбъектовСКомандамиПечати с использованием аннотации &После.

Проанализируем пример кода регистрации нашего справочника:


&После("ПриОпределенииОбъектовСКомандамиПечати")
Процедура Расш_ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов)
    // Добавляем наш справочник в список разрешенных объектов печати БСП
    СписокОбъектов.Добавить(Справочники.ДемоНоменклатура);
КонецПроцедуры

Шаг 3. Доработка модуля менеджера объекта

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

Выполним следующие действия:

  1. Заимствуем в расширение модуль менеджера справочника ДемоНоменклатура.
  2. Добавим в него две процедуры со следующим кодом:

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

// Процедура вызывается при формировании печатных форм.
// Также может быть пустой, если встроенная печать не используется.
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    // Код формирования стандартных печатных форм
КонецПроцедуры

Шаг 4. Внедрение механизма подключаемых команд в формы

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

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


&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Подключаем форму к механизму подключаемых команд БСП
    ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтаФорма);
КонецПроцедуры

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


&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
    // Передаем управление подсистеме печати БСП
    // Для формы элемента передается параметр "Объект", для формы списка — "Элементы.Список"
    УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Объект);
КонецПроцедуры

Аналогичные действия по подключению команд на сервере и клиенте следует проделать и для формы списка справочника, изменив в клиентском вызове третий параметр на Элементы.Список (или иное имя основного реквизита списка вашей формы).

Шаг 5. Обновление вспомогательных данных информационной базы

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

Чтобы принудительно запустить этот процесс, выполним запуск сеанса в режиме отладки с ключом командной строки:

/C ЗапуститьОбновлениеИнформационнойБазы

Также для этой цели можно использовать поставляемую в составе БСП внешнюю обработку ИнструментыРазработчикаОбновлениеВспомогательныхДанных.epf.

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

Альтернативное и более современное решение (Рекомендация 1С)

Начиная с современных версий БСП (2.5 и выше), фирма "1С" рекомендует постепенно уходить от использования внешних печатных форм (через файлы .epf) для кастомных доработок конфигурации.

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

Давайте разберем основные преимущества этого подхода:

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

← На главную