Почему не отображается кнопка печати у документа в 1С и как это исправить?

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

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

Разберем причину: почему одного модуля менеджера недостаточно?

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

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

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

Найдите эту процедуру в конфигураторе и добавьте туда ваш документ следующим образом:


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

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

Шаг 2. Интеграция подсистемы в модуль формы документа

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

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // СтандартныеПодсистемы.ПодключаемыеКоманды
    ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
    // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры

Во-вторых, если ваш документ уже записан, нужно вызвать обработчик ПриЧтенииНаСервере. Это гарантирует актуализацию состояния команд в зависимости от данных объекта (например, если кнопка должна скрываться для непроведенных документов).


&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    // СтандартныеПодсистемы.ПодключаемыеКоманды
    ПодключаемыеКоманды.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
    // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры

Шаг 3. Обработка нажатия кнопки на клиенте

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


&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
    ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

Обратите внимание, что имя процедуры Подключаемый_ВыполнитьКоманду является стандартным для БСП. Если вы используете другое имя, оно должно быть явно указано при инициализации команд, но мы рекомендуем придерживаться стандартов библиотеки.

Шаг 4. Настройка визуальных элементов формы

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

Шаг 5. Обновление идентификаторов объектов метаданных

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

Для решения этой проблемы выполните следующие действия:

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

Итоги и контрольный список для проверки

Проанализируем всё вышесказанное и составим краткий чек-лист для разработчика, у которого не отображается печать:

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

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

← На главную