Что делать, если после обновления 1С:Бухгалтерия 3.0 пропали кнопки печати и внешние печатные формы у собственных документов

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

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

Рассмотрим подробно причины возникновения этой проблемы и разберем по шагам порядок действий для полного восстановления работы печатных форм.

Причина возникновения проблемы

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

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

Шаг 1. Добавление процедур БСП в модуль формы документа

Выясним, какие изменения необходимо внести в модуль управляемой формы нетипового документа. Во-первых, при инициализации формы необходимо передавать управление подсистеме подключаемых команд. Во-вторых, в модуле формы должны присутствовать стандартные служебные процедуры-обработчики.

Проанализируем необходимый код. В обработчике события формы ПриСозданииНаСервере убедимся, что вызвана инициализация команд:


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

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


#Область СлужебныеПроцедурыИФункцииБСП
// СтандартныеПодсистемы.ПодключаемыеКоманды

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

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

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

// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
#КонецОбласти

Шаг 2. Регистрация документа в процедуре ПриОпределенииОбъектовСКомандамиПечати

Разберем следующий важный шаг. Чтобы БСП «знала» о существовании команд печати у нашего объекта и подключала к нему внешние обработки, документ должен быть включен в список объектов с печатными формами.

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


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

Шаг 3. Проверка модуля менеджера документа

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

  1. ДобавитьКомандыПечати(КомандыПечати) Экспорт — формирует состав встроенных команд печати.
  2. Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт — отвечает за непосредственное формирование табличных документов.

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

Альтернативное решение через расширение конфигурации

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

  1. Создадим новое расширение конфигурации.
  2. Добавим в расширение общий модуль УправлениеПечатьюПереопределяемый.
  3. Переопределим процедуру с помощью аннотации &После:

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

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

← На главную