Почему после обновления конфигурации не появляется кнопка печати в самописных документах?

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

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

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

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

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

Рассмотрим порядок действий в конфигураторе:

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

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

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

2. Проверка элементов интерфейса на форме

Посмотрим на структуру элементов формы документа. Для автоматического размещения кнопок командная панель формы должна содержать специально поименованные группы:

  1. В командной панели формы (или группе команд) должна присутствовать группа с видом Подменю и именем ПодменюПечать.
  2. Командная панель может содержать служебную группу ГруппаВажныеКоманды, куда БСП размещает первостепенные действия.
  3. Убедимся, что у элементов нет жестко установленного свойства видимости в значение Ложь, которое может перекрывать динамически создаваемые кнопки.

3. Обновление серверных обработчиков формы

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

В обработчике ПриСозданииНаСервере модуля формы обязательно должен быть добавлен вызов подсистемы:


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

Если документ открывается для просмотра или редактирования существующего объекта, необходимо также подключить обработчик ПриЧтенииНаСервере:


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

4. Настройка клиентских процедур модуля формы

Разберем клиентскую часть механизма. При открытии формы запускается процесс динамического обновления состава и доступности команд.

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


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

Также в служебной области модуля формы должны быть определены стандартные обработчики нажатия подключаемых команд:


#Область СлужебныеПроцедурыИФункции

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

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

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

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

5. Проверка описания команд в модуле менеджера

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


Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "АктВыполненныхРабот";
    КомандаПечати.Представление = НСтр("ru = 'Акт выполненных работ'");
    КомандаПечати.Обработчик = "УправлениеПечатьюКлиент.ВыполнитьКомандуПечати";
    КомандаПечати.СписокФорм = "ФормаДокумента,ФормаСписка";
    КомандаПечати.Порядок = 10;
    
КонецПроцедуры

Посмотрим на частые нюансы:

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

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

← На главную