Как добавить пиктограмму для команды внешней печатной формы в 1С?

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

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

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

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

Способ 1. Полный перенос печатной формы в расширение конфигурации

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

Разберем реализацию по шагам:

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

&После("ДобавитьКомандыПечати")
Процедура Расш_ДобавитьКомандыПечати(КомандыПечати)
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "МояПечатнаяФорма";
    КомандаПечати.Представление = "Печатная форма с иконкой";
    КомандаПечати.Картинка = БиблиотекаКартинок.Печать; // Можно использовать картинку из расширения
    КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КонецПроцедуры

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

Способ 2. Доопределение пиктограммы через общий модуль печати при сохранении файла внешней обработки

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

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

  1. Добавим в расширение общий модуль УправлениеПечатьюПереопределяемый.
  2. Перехватим процедуру ПередДобавлениемКомандПечати с директивой &После.
  3. Найдем в таблице команд идентификатор нашей внешней печатной формы и установим свойство Картинка:

&После("ПередДобавлениемКомандПечати")
Процедура Расш_ПередДобавлениемКомандПечати(ИмяФормы, КомандыПечати, СтандартнаяОбработка)
    СтрокаКоманды = КомандыПечати.Найти("ИдентификаторВнешнейКоманды", "Идентификатор");
    Если СтрокаКоманды <> Неопределено Тогда
        СтрокаКоманды.Картинка = БиблиотекаКартинок.ИмяКартинки;
    КонецЕсли;
КонецПроцедуры

В параметре ИдентификаторВнешнейКоманды указываем то же имя, которое было зарегистрировано в функции СведенияОВнешнейОбработке() в поле таблицы команд Идентификатор.

Способ 3. Программное назначение пиктограммы элементу формы

Еще один вариант взаимодействия с уже зарегистрированной внешней обработкой — прямое управление созданными элементами интерфейса на управляемой форме документа.

Посмотрим на пример перехвата события создания формы на сервере. В этот момент типовые механизмы БСП уже создали кнопки командной панели на основе списка команд печати:


&После("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Кнопка = Элементы.Найти("ПодменюПечать_ИдентификаторКоманды");
    Если Кнопка <> Неопределено Тогда
        Кнопка.Картинка = БиблиотекаКартинок.ИмяКартинки;
        Кнопка.Отображение = ОтображениеКнопки.КартинкаИТекст;
    КонецЕсли;
КонецПроцедуры

Важные нюансы настройки отображения

Обратим внимание на поведение элементов в выпадающих подменю платформы 1С:Предприятие 8.3:

  1. Для кнопок подменю свойство Отображение по умолчанию часто установлено в значение Авто или Текст. Если платформа решает не отображать иконку в контексте выпадающего списка, картинка может не появиться, даже если само свойство Картинка заполнено.
  2. Чтобы пиктограмма гарантированно отображалась рядом с наименованием команды в меню, всегда явно устанавливаем для кнопки свойство Отображение = ОтображениеКнопки.КартинкаИТекст.
← На главную