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