При разработке конфигураций на базе Библиотеки Стандартных Подсистем (БСП) программисты часто сталкиваются с ситуацией, когда код для формирования печатной формы написан корректно, процедуры в модуле менеджера и формы добавлены, но заветная кнопка Печать в интерфейсе управляемого приложения так и не появляется. Особенно часто это случается с самописными документами, которые еще не «знакомы» системе печати. Рассмотрим подробно, почему это происходит и как заставить кнопку отображаться.
Разберем первый и самый важный этап. Наличия процедуры ДобавитьКомандыПечати в модуле менеджера вашего документа недостаточно. Подсистема печати БСП должна знать, что ваш новый документ в принципе поддерживает этот механизм. Для этого используется общий модуль УправлениеПечатьюПереопределяемый.
Проанализируем ситуацию: если документ создан «с нуля», он автоматически не попадает в список объектов, у которых система ищет команды печати. Нам необходимо найти в этом модуле процедуру ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) и вручную добавить туда ссылку на наш документ.
Посмотрим на пример того, как это должно выглядеть:
Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт
СписокОбъектов.Добавить(Документы.ВашНовыйСамописныйДокумент);
КонецПроцедуры
Без этой регистрации БСП просто проигнорирует модуль менеджера вашего документа при инициализации формы, и кнопка не будет создана.
Выясним вторую распространенную причину. БСП хранит структуру метаданных в специальном справочнике ИдентификаторыОбъектовМетаданных. Если вы добавили новый документ или изменили состав команд печати, система может продолжать использовать кэшированные данные из этого справочника.
Чтобы «подтолкнуть» систему и заставить её перечитать модули менеджеров, выполните следующие действия:
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника()./С ЗапуститьОбновлениеИнформационнойБазы.После этого система обновит внутренние реестры, и вероятность появления кнопки значительно возрастет.
Проанализируем код в модуле менеджера. Вы указали обработчик СЭ_УправлениеПечатьюКлиент.Г_ПечатьОтстранение. Очень важно убедиться, что этот общий модуль существует и имеет правильные флаги компиляции. Для команд печати Word, которые должны работать на клиенте, модуль должен иметь установленные галочки Клиент (управляемое приложение) и Вызов сервера.
Также проверьте структуру команды в ДобавитьКомандыПечати. Для печатных форм Microsoft Word часто используются специфические идентификаторы. Пример правильного заполнения команды:
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ПФ_DOC_ПриказОбОтстранении";
КомандаПечати.Представление = НСтр("ru = 'Приказ об отстранении (Word)'");
КомандаПечати.Обработчик = "ВашОбщийМодульКлиент.ВыполнитьПечать";
КомандаПечати.ТипКоманды = "ПечатьMSWord"; // Если БСП требует явного указания типа
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
Рассмотрим, как кнопка попадает на форму. В процедуре ПриСозданииНаСервере вы используете УправлениеПечатью.ПриСозданииНаСервере(ЭтаФорма). Это стандартный вызов, но он работает корректно только при определенных условиях:
Попробуйте изменить вызов на более развернутый, указав конкретный элемент формы (группу), где вы хотите видеть печать:
УправлениеПечатью.ПриСозданииНаСервере(ЭтаФорма, Элементы.ГруппаКоманднаяПанель);
Также убедитесь, что в свойствах самой формы, в разделе Состав команд, не сняты флаги видимости для команд печати. Иногда при копировании форм из других объектов эти настройки переносятся некорректно.
Выясним, не скрывает ли систему кнопку по причине отсутствия прав. Даже если вы работаете под полными правами, для самописного документа могут быть не настроены роли в части использования общих команд печати. Проверьте, включен ли ваш документ в состав определяемых типов, связанных с печатью (обычно это ОбъектСКомандамиПечати).
Если в вашей конфигурации используются Функциональные опции, проверьте, не привязана ли видимость печати к какой-то настройке, которая в данный момент выключена. Если документ самописный, убедитесь, что он не попал под действие какой-либо ограничивающей опции «по наследству».
Разберем важный нюанс. Кнопка для печати в Word технически ничем не отличается от кнопки для MXL с точки зрения БСП. Она создается тем же механизмом. Разница заключается только в Обработчике. Если система «видит» команду, она создаст кнопку. Если кнопка не появляется вообще — проблема кроется именно в регистрации документа в подсистеме или в обновлении метаданных, а не в том, что форма использует формат Microsoft Word.
Для решения проблемы рекомендуем придерживаться следующего алгоритма:
УправлениеПечатьюПереопределяемый.ПриОпределенииОбъектовСКомандамиПечати.Экспорт у процедуры в модуле менеджера.Печать.Выполнив эти шаги, мы добьемся того, что подсистема печати распознает наш объект и выведет команду в интерфейс.