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

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

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

Разберем причину изменений: Подключаемые команды БСП

В современных версиях 1С:Предприятие 8.3 механизм формирования командной панели перестал быть статичным. Если раньше мы могли просто добавить кнопку на форму, то теперь за отрисовку групп «Печать», «Создать на основании» и «Отчеты» отвечает программный интерфейс БСП. Это позволяет системе динамически управлять составом кнопок в зависимости от прав пользователя, функциональных опций и состояния документа.

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

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

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

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

Пример кода для расширения (используем аннотацию &После):


&После("ПриОпределенииОбъектовСКомандамиПечати")
Процедура Расш_ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов)
    // Добавляем наш документ в список тех, кто использует механизм печати БСП
    СписокОбъектов.Добавить(Документы.МойСамописныйДокумент);
КонецПроцедуры

Шаг 2. Настройка модуля менеджера документа

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


Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    
    // Пример добавления команды печати
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Менеджер          = "Документ.МойСамописныйДокумент";
    КомандаПечати.Идентификатор     = "МакетПечатнойФормы";
    КомандаПечати.Представление     = НСтр("ru = 'Моя печатная форма'");
    КомандаПечати.ПроверкаПроведенности = Истина;
    // Важно: укажите, в каких формах должна отображаться кнопка
    КомандаПечати.СписокФорм        = "ФормаДокумента,ФормаСписка";
    
КонецПроцедуры

Если вы заметили, что кнопка отображается в форме документа, но отсутствует в списке, проверьте параметр КомандаПечати.СписокФорм. По умолчанию система может выводить её не везде.

Шаг 3. Обновление кода в формах документа и списка

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

В модуле формы (документа или списка) необходимо заменить старый код Подключаемый_ВыполнитьКомандуПечати на стандартный блок для подключаемых команд:


#Область КомандыФормы

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

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

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

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

Важное примечание: Если вы настраиваете форму списка, вместо третьего параметра Объект в методах ВыполнитьКоманду следует передавать Элементы.Список (где Список — имя вашего динамического списка).

Шаг 4. Проверка привязки событий и инициализации

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

Убедимся, что в процедуре ПриСозданииНаСервере есть вызов БСП:


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

Также проверьте на клиенте в ПриОткрытии:


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

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

Шаг 5. Нюансы для Формы Списка: Поле «Ссылка»

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

  1. Зайдите в свойства динамического списка на форме.
  2. Откройте настройку списка (Путь к данным).
  3. В списке полей найдите поле Ссылка.
  4. Установите флажок Использовать всегда.

Итоги и рекомендации

Мы рассмотрели комплекс мер по восстановлению функционала печати. Подведем итог: работа с современными конфигурациями требует строгого соблюдения стандартов разработки 1С (БСП). Основные точки контроля — это регистрация в УправлениеПечатьюПереопределяемый, наличие экспортного метода в менеджере, корректные универсальные обработчики в форме и обязательная инициализация команд при создании формы на сервере.

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

← На главную