Подключаемые команды БСП — это подсистема, которая сама добавляет на формы объектов команды печати, отчётов и создания на основании. Чтобы команды появились на форме своего (нетипового) документа или справочника, нужны четыре вещи: вызов ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект) в форме, обработчики Подключаемый_... в модуле формы, процедуры ДобавитьКомандыПечати, ДобавитьКомандыОтчетов, ДобавитьКомандыСозданияНаОсновании в модуле менеджера и регистрация объекта в переопределяемых модулях подсистем печати, вариантов отчётов и создания на основании.

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

Что изменилось с версии БСП 2.4

До 2.4С 2.4
УправлениеПечатью.ПриСозданииНаСервере(Форма, Элементы.ПодменюПечать)ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект)
ВводНаОсновании.ПриСозданииНаСервере(...)тот же единый вызов
МенюОтчеты.ПриСозданииНаСервере(...)тот же единый вызов
Отдельные обработчики Подключаемый_ВыполнитьКомандуПечати, ..._СоздатьНаОсновании, ..._ОтчетОдин Подключаемый_ВыполнитьКоманду

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

Шаг 1. Форма объекта

Подключаемые команды БСП: единый механизм выводит на форму команды печати, отчётов и создания на основании
Подключаемые команды БСП: единый механизм выводит на форму команды печати, отчётов и создания на основании

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

1С
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

КонецПроцедуры

Обработчики в модуле формы для схемы, принятой в БСП 2.4:

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

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

КонецПроцедуры

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

	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);

КонецПроцедуры

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

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

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

В версиях БСП 3.x набор обработчиков расширился: клиентский запуск идёт через асинхронный вызов, появились обработчики продолжения выполнения на сервере и обновления команд в ПриОткрытии, ПослеЗаписи, ПриЧтенииНаСервере, а в формах списков — при активизации строки. Имена и сигнатуры зависят от версии, поэтому самый надёжный путь — скопировать блок «СтандартныеПодсистемы.ПодключаемыеКоманды» из формы любого типового документа той же конфигурации.

Подменю в командной панели

В командной панели формы объекта и формы списка должны быть подменю, куда подсистема положит команды: ПодменюПечать, ПодменюСоздатьНаОсновании, ПодменюОтчеты. Если подменю нет, команды могут оказаться в «Ещё» или не появиться вовсе. Это требование не изменилось с прежних версий.

Шаг 2. Модуль менеджера объекта

Подсистема опрашивает менеджер каждого зарегистрированного объекта и собирает таблицы команд.

Команды печати

1С
// Заполняет список команд печати.
//
// Параметры:
//  КомандыПечати - ТаблицаЗначений - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "АктСверки";
	КомандаПечати.Представление = НСтр("ru = 'Акт сверки'");
	КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;

КонецПроцедуры

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

Команды создания на основании

1С
// Определяет список команд создания на основании.
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт

	Если ПравоДоступа("Добавление", Метаданные.Документы.АктСверкиВзаиморасчетов) Тогда
		Команда = КомандыСозданияНаОсновании.Добавить();
		Команда.Менеджер = Метаданные.Документы.АктСверкиВзаиморасчетов.ПолноеИмя();
		Команда.Представление = ОбщегоНазначения.ПредставлениеОбъекта(Метаданные.Документы.АктСверкиВзаиморасчетов);
		Команда.РежимЗаписи = "Записывать";
	КонецЕсли;

КонецПроцедуры

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

Для ограничения по функциональным опциям у строки команды есть колонка ФункциональныеОпции — строка с именами опций через запятую.

Команды отчётов

1С
// Определяет список команд отчётов.
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт

	// Типовые команды, например «Движения документа», добавляются функциями
	// модулей подсистемы вариантов отчётов вашей конфигурации.

КонецПроцедуры

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

Без этого шага подсистема просто не знает, что объект надо опрашивать. Нужно добавить метаданные объекта в списки трёх процедур:

МодульПроцедураЗа что отвечает
УправлениеПечатьюПереопределяемыйПриОпределенииОбъектовСКомандамиПечатиПечать
СозданиеНаОснованииПереопределяемыйПриОпределенииОбъектовСКомандамиСозданияНаОснованииСоздание на основании
ВариантыОтчетовПереопределяемыйОпределитьОбъектыСКомандамиОтчетовОтчёты
1С
Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт

	// ... типовые объекты
	СписокОбъектов.Добавить(Метаданные.Документы.АктСверкиВзаиморасчетов);

КонецПроцедуры

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

Чек-лист, если команды не появились

  1. Объект добавлен в соответствующую процедуру переопределяемого модуля.
  2. В модуле менеджера есть экспортная процедура с правильным именем и параметрами для вашей версии БСП.
  3. В ПриСозданииНаСервере формы есть вызов ПодключаемыеКоманды.ПриСозданииНаСервере.
  4. В модуле формы есть все обработчики Подключаемый_....
  5. В командной панели есть подменю ПодменюПечать, ПодменюСоздатьНаОсновании, ПодменюОтчеты.
  6. У пользователя есть права на создаваемый объект и включены нужные функциональные опции.
  7. После изменений перезапущен сеанс: подсистема кэширует состав команд на время сеанса, и без перезапуска изменения могут не отобразиться.

Типичные ошибки

  • Остались старые вызовы. После обновления в форме одновременно живут УправлениеПечатью.ПриСозданииНаСервере и ПодключаемыеКоманды.ПриСозданииНаСервере — команды дублируются или форма падает при открытии.
  • Скопирован обработчик из другой версии БСП. Сигнатуры клиентских процедур разные в 2.4 и 3.x — копируйте из формы типового объекта своей конфигурации.
  • Нет регистрации в переопределяемом модуле. Менеджер написан, но подсистема его не опрашивает.
  • Правка типовых переопределяемых модулей в конфигурации на поддержке. Работает, но усложняет обновления — используйте расширение.
Подключаемые команды — это контракт между формой, менеджером и подсистемой. Если команды нет на форме, ищите разрыв в одном из трёх звеньев.

Нестандартные печатные формы и перенос доработок при обновлении БСП — частые задачи на проектах по печатным формам 1С и обновлению 1С.

Итог

  • С БСП 2.4 печать, отчёты и создание на основании подключаются одним вызовом ПодключаемыеКоманды.ПриСозданииНаСервере.
  • Свой объект нужно зарегистрировать в трёх переопределяемых модулях — без этого команд не будет.
  • Команды описываются в модуле менеджера процедурами ДобавитьКомандыПечати, ДобавитьКомандыСозданияНаОсновании, ДобавитьКомандыОтчетов.
  • Обработчики формы копируйте из типового объекта своей конфигурации: в БСП 3.x они отличаются от 2.4.
  • Регистрацию нетиповых объектов держите в расширении.