При обновлении конфигурации 1С:Бухгалтерия предприятия 3.0 (начиная с релизов 3.0.81 и выше) многие технические специалисты сталкиваются с неприятной ситуацией: в созданных ранее нетиповых документах внезапно исчезает кнопка Печать, а также пропадает возможность прикрепить к этим документам внешние печатные формы (ВПФ) через справочник Дополнительные отчеты и обработки. В этой статье мы подробно разберем, почему это происходит и как адаптировать конфигурацию под новые требования Библиотеки стандартных подсистем (БСП).
Основная причина кроется в обновлении версии БСП, которая интегрирована в «Бухгалтерию предприятия». В новых редакциях (начиная с ветки 3.1) разработчики 1С изменили архитектуру работы подсистемы печати и дополнительных обработок. Теперь система не просто ищет команды печати, она требует явного указания объектов в метаданных и наличия определенных экспортных методов в модулях менеджеров документов. Если ваш документ не «зарегистрирован» в системе по новым правилам, механизмы БСП его игнорируют.
Рассмотрим пошагово процесс восстановления функционала печати для нетиповых объектов.
Первым делом проанализируем дерево метаданных. В новых версиях конфигурации управление доступом к механизмам печати жестко завязано на Определяемые типы. Если документа нет в этих списках, программный код БСП просто не будет вызывать обработчики для этого объекта.
ОпределяемыйТип.ОбъектПечати. Нам необходимо добавить наш нетиповой документ в состав этого типа. Это позволит системе «увидеть» документ как потенциальный источник печатных форм.ОпределяемыйТип.ВладелецДополнительныхОтчетовИОбработок. Добавим наш документ и сюда. Это действие вернет документ в список выбора «Размещение» при настройке дополнительных печатных форм в пользовательском режиме.ОпределяемыйТип.ОбъектСНастраиваемымиКомандамиПечати, если вы планируете использовать расширенную настройку команд.Разберем одну из самых частых ошибок, на которую жалуются программисты: Метод объекта не обнаружен (ДобавитьКомандыПечати). В новых версиях БСП инициализация кнопок в форме документа происходит через вызов процедуры из модуля менеджера самого объекта. Если этой процедуры нет, форма выдает ошибку или просто не отображает стандартное меню.
Нам необходимо открыть Модуль менеджера вашего нетипового документа и добавить туда обязательную экспортную процедуру:
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
// Если у документа есть встроенные печатные формы, они описываются здесь.
// Если нужны только внешние печатные формы, тело процедуры можно оставить пустым,
// но сама процедура ОБЯЗАТЕЛЬНО должна присутствовать.
КонецПроцедуры
Без этого метода система управления печатью не сможет инициализировать коллекцию команд для вашего документа.
После того как мы подготовили метаданные и модуль менеджера, нам нужно программно зарегистрировать объект в подсистемах БСП. Для этого используются переопределяемые модули. Проанализируем ситуацию в коде.
1. Подсистема печати. Откроем общий модуль УправлениеПечатьюПереопределяемый и найдем процедуру ПриОпределенииОбъектовСКомандамиПечати. Добавим в нее наш документ:
Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт
СписокОбъектов.Добавить(Документы.ВашНетиповойДокумент);
КонецПроцедуры
2. Дополнительные отчеты и обработки. Чтобы внешние обработки могли подключаться к документу, перейдем в модуль ДополнительныеОтчетыИОбработкиПереопределяемый, процедура ОпределитьОбъектыСДополнительнымиКомандами:
Процедура ОпределитьОбъектыСДополнительнымиКомандами(Объекты) Экспорт
Объекты.Добавить(Документы.ВашНетиповойДокумент);
КонецПроцедуры
3. Варианты отчетов. Если вы хотите, чтобы для документа были доступны и команды отчетов (меню «Отчеты»), необходимо зайти в ВариантыОтчетовПереопределяемый и добавить объект в процедуру ОпределитьОбъектыСКомандамиОтчетов.
Даже после внесения всех правок в конфигураторе, кнопки могут не появиться сразу. Это связано с тем, что информация о доступных командах кэшируется в регистре сведений. Посмотрим, как обновить эти данные.
В некоторых случаях (если документ был сильно кастомизирован), может потребоваться проверить, вызывается ли в процедуре ПриСозданииНаСервере формы документа инициализация команд печати. Обычно это выглядит так:
// В форме документа
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УправлениеПечатью.ПриСозданииНаСервере(ЭтаФорма);
КонецПроцедуры
Если этот вызов отсутствует, БСП не сможет динамически отрисовать кнопки в командной панели формы, даже если все предыдущие шаги выполнены верно.
Резюмируем: восстановление печати в нетиповых документах требует комплексного подхода — от добавления объекта в ОпределяемыеТипы до создания экспортного метода в Модуле менеджера и регистрации в Переопределяемых модулях. После выполнения этих шагов ваш нетиповой документ снова станет полноценным участником экосистемы 1С:Предприятие.