Почему не появляется кнопка печати в формате Microsoft Word в самописном документе?

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

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

1. Проверка регистрации документа в подсистеме печати

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

Проанализируем ситуацию: если документ создан «с нуля», он автоматически не попадает в список объектов, у которых система ищет команды печати. Нам необходимо найти в этом модуле процедуру ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) и вручную добавить туда ссылку на наш документ.

Посмотрим на пример того, как это должно выглядеть:


Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт
    СписокОбъектов.Добавить(Документы.ВашНовыйСамописныйДокумент);
КонецПроцедуры

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

2. Обновление справочника идентификаторов объектов метаданных

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

Чтобы «подтолкнуть» систему и заставить её перечитать модули менеджеров, выполните следующие действия:

  1. Запустите информационную базу в режиме 1С:Предприятие.
  2. Если у вас есть консоль разработчика, вызовите метод: Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника().
  3. Если консоли нет, попробуйте запустить базу с параметром командной строки: /С ЗапуститьОбновлениеИнформационнойБазы.

После этого система обновит внутренние реестры, и вероятность появления кнопки значительно возрастет.

3. Настройка обработчика команды печати

Проанализируем код в модуле менеджера. Вы указали обработчик СЭ_УправлениеПечатьюКлиент.Г_ПечатьОтстранение. Очень важно убедиться, что этот общий модуль существует и имеет правильные флаги компиляции. Для команд печати Word, которые должны работать на клиенте, модуль должен иметь установленные галочки Клиент (управляемое приложение) и Вызов сервера.

Также проверьте структуру команды в ДобавитьКомандыПечати. Для печатных форм Microsoft Word часто используются специфические идентификаторы. Пример правильного заполнения команды:


КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ПФ_DOC_ПриказОбОтстранении";
КомандаПечати.Представление = НСтр("ru = 'Приказ об отстранении (Word)'");
КомандаПечати.Обработчик = "ВашОбщийМодульКлиент.ВыполнитьПечать";
КомандаПечати.ТипКоманды = "ПечатьMSWord"; // Если БСП требует явного указания типа
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;

4. Особенности вызова в форме документа

Рассмотрим, как кнопка попадает на форму. В процедуре ПриСозданииНаСервере вы используете УправлениеПечатью.ПриСозданииНаСервере(ЭтаФорма). Это стандартный вызов, но он работает корректно только при определенных условиях:

Попробуйте изменить вызов на более развернутый, указав конкретный элемент формы (группу), где вы хотите видеть печать:


УправлениеПечатью.ПриСозданииНаСервере(ЭтаФорма, Элементы.ГруппаКоманднаяПанель);

Также убедитесь, что в свойствах самой формы, в разделе Состав команд, не сняты флаги видимости для команд печати. Иногда при копировании форм из других объектов эти настройки переносятся некорректно.

5. Права доступа и функциональные опции

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

Если в вашей конфигурации используются Функциональные опции, проверьте, не привязана ли видимость печати к какой-то настройке, которая в данный момент выключена. Если документ самописный, убедитесь, что он не попал под действие какой-либо ограничивающей опции «по наследству».

6. Отличие Word от стандартных табличных документов (MXL)

Разберем важный нюанс. Кнопка для печати в Word технически ничем не отличается от кнопки для MXL с точки зрения БСП. Она создается тем же механизмом. Разница заключается только в Обработчике. Если система «видит» команду, она создаст кнопку. Если кнопка не появляется вообще — проблема кроется именно в регистрации документа в подсистеме или в обновлении метаданных, а не в том, что форма использует формат Microsoft Word.

Итог совместной работы

Для решения проблемы рекомендуем придерживаться следующего алгоритма:

  1. Добавить документ в УправлениеПечатьюПереопределяемый.ПриОпределенииОбъектовСКомандамиПечати.
  2. Проверить наличие ключевого слова Экспорт у процедуры в модуле менеджера.
  3. Обновить идентификаторы объектов метаданных через запуск с параметром или обработку.
  4. Убедиться, что на форме есть автозаполняемая командная панель.
  5. Проверить права доступа на документ и на общую команду Печать.

Выполнив эти шаги, мы добьемся того, что подсистема печати распознает наш объект и выведет команду в интерфейс.

← На главную