Как настроить подсистему печати и подключаемые команды в БСП 2.4?

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

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

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

Причины возникновения ошибок и неработающих кнопок

Проанализируем основные причины неполадок:

  1. Отсутствие интеграции с подсистемой «Подключаемые команды» в модуле формы. Начиная с версии БСП 2.4, подменю «Печать» формируется через механизм подключаемых команд. Если на форме не вызваны соответствующие сервисные обработчики, кнопки не будут выполнять назначенные действия.
  2. Ошибки объявления процедуры добавления команд. Процедура ДобавитьКомандыПечати в модуле менеджера объекта обязательно должна быть объявлена с директивой Экспорт и быть доступной на сервере.
  3. Неверная регистрация объекта метаданных. В процедуре ПриОпределенииОбъектовСКомандамиПечати общего модуля УправлениеПечатьюПереопределяемый должны передаваться менеджеры объектов метаданных (например, Документы.маПоступлениеТоваровУслуг), у которых реализован требуемый экспортный интерфейс.
  4. Несоответствие сигнатуры процедуры формирования печатной формы. Для стандартной серверной печати сигнатура экспортной процедуры Печать в модуле менеджера строго пятипараметрическая.

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

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


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

Шаг 2. Описание команд в модуле менеджера объекта

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


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

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


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

Шаг 3. Внедрение подсистемы «Подключаемые команды» в форму документа

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

Посмотрим на пример необходимого программного кода формы:


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

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

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

#Область ОбработчикиПодключаемыхКоманд

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

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

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

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

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

Если требуется выводить команды печати в форме списка документов или журнала, выполним аналогичную процедуру подключения. В событии формы списка ПриСозданииНаСервере вызываем метод ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект), а в событии таблицы динамического списка СписокПриАктивизацииСтроки добавляем вызов:


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

Шаг 5. Обновление служебных данных метаданных

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

Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеИнформационнойБазы();

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

← На главную