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