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

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

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

Шаг 1. Анализ кода в модуле менеджера объекта

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

Рассмотрим правильный шаблон заполнения команд в модуле менеджера:


#Область ПрограммныйИнтерфейс

// Заполняет список команд печати.
// Параметры:
//   КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати.
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "ПФ_DOC_ПриказОбОтстраненииMicrosoftWord_ru";
    КомандаПечати.Представление = НСтр("ru = 'Приказ об отстранении (Microsoft Word)'");
    КомандаПечати.Обработчик    = "СЭ_УправлениеПечатьюКлиент.Г_ПечатьОтстранение";
    КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
    КомандаПечати.ТипФормы      = "ФормаДокумента"; // Можно уточнить, где показывать команду
    
КонецПроцедуры

#КонецОбласти

Важный момент: Обратите внимание на поле Обработчик. Если вы указываете внешний модуль, убедитесь, что он доступен на клиенте и процедура в нем также является экспортной. Если поле МенеджерПечати оставить пустым, система будет искать обработку печати в этом же модуле менеджера.

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

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

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


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

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

Шаг 3. Подготовка формы документа

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

Проанализируем структуру формы. Нам необходимо добавить группу, в которую БСП будет "отрисовывать" кнопки. Выполним следующие действия в редакторе формы:

  1. Выберите элемент Командная панель (обычно это верхняя панель формы).
  2. Добавьте в нее новый элемент типа Группа - Подменю.
  3. Установите имя группы: ПодменюПечать.
  4. Заголовок установите: Печать.
  5. В свойстве Картинка выберите стандартную картинку Печать.
  6. Важно: если вы планируете много команд, можно создать внутри подгруппы ПодменюПечатьВажное, ПодменюПечатьОбычное и т.д., но для начала достаточно основной группы.

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

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

После того как визуальный элемент создан, его нужно инициализировать при открытии формы. В модуле формы документа найдем (или создадим) процедуру ПриСозданииНаСервере. Вызовем соответствующие методы БСП:


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

Рассмотрим подробнее: метод УправлениеПечатью.ПриСозданииНаСервере подготавливает внутренние структуры данных, а ПодключаемыеКоманды.ПриСозданииНаСервере фактически размещает кнопки в созданной нами группе ПодменюПечать.

Также рекомендуется добавить вызов в процедуру ПриЧтенииНаСервере, чтобы команды обновлялись при переходе между элементами (например, если видимость печати зависит от статуса документа):


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

Шаг 5. Проверка прав и функциональных опций

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

Почему в типовых документах это работает "само"?

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

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

← На главную