Как использовать обработчик обновления информационной базы для настройки наборов свойств в БСП?

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

При разработке конфигураций на базе Библиотеки стандартных подсистем (БСП) часто возникает необходимость программно подготовить базу к работе с дополнительными реквизитами. В большинстве случаев для объекта метаданных достаточно одного набора свойств (например, для справочника товаров — вес, размер, цвет). Однако, чтобы эти свойства появились в интерфейсе и были правильно привязаны к объекту, необходимо выполнить ряд действий через механизмы обновления информационной базы. Рассмотрим подробно, как это реализовать.

Шаг 1. Подготовка предопределенных данных в конфигураторе

Прежде всего, проанализируем структуру справочника НаборыДополнительныхРеквизитовИСведений. БСП опирается на строгое именование элементов в этом справочнике для автоматической связи с метаданными. Нам необходимо создать предопределенный элемент, имя которого будет соответствовать типу объекта.

Для этого в дереве метаданных находим справочник НаборыДополнительныхРеквизитовИСведений, открываем список его предопределенных элементов и добавляем новый. Соблюдаем следующий формат имени:

  1. Если объект — справочник: Справочник_ИмяОбъекта (например, Справочник_Сотрудники).
  2. Если объект — документ: Документ_ИмяОбъекта (например, Документ_АвансовыйОтчет).
  3. Если объект — бизнес-процесс: БизнесПроцесс_ИмяОбъекта.

Наименование элемента заполнять не обязательно, так как при первом запуске БСП автоматически заполнит его на основании представления объекта из метаданных.

Шаг 2. Регистрация модуля обновления

Выясним, где именно должен располагаться программный код, который настроит параметры нашего набора. В БСП для этого используются специальные общие модули. Обычно они называются ОбновлениеИнформационнойБазыИмяВашегоПрефикса.

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

Шаг 3. Создание процедуры-обертки для обработчика

Рассмотрим важную техническую проблему, с которой сталкиваются многие разработчики (как описано в сообщениях форума). Попытка напрямую вызвать стандартную процедуру УправлениеСвойствами.УстановитьПараметрыНабораСвойств в качестве обработчика обновления приводит к ошибке. Это происходит потому, что механизмы обновления БСП ожидают процедуру с определенной сигнатурой (либо без параметров, либо с одним параметром структуры состояния), в то время как УстановитьПараметрыНабораСвойств требует два специфических аргумента.

Решим эту задачу с помощью процедуры-«прокладки». В своем общем модуле (например, ОбновлениеИнформационнойБазыБП) создадим экспортную процедуру:


Процедура НастроитьНаборыСвойствОбъектов() Экспорт
    
    // Указываем имя предопределенного элемента, созданного на Шаге 1
    ИмяНабора = "Документ_ПриемкаТоваров";
    
    // Вызываем стандартный метод БСП для инициализации параметров
    УправлениеСвойствами.УстановитьПараметрыНабораСвойств(ИмяНабора);
    
    // Можно вызвать для нескольких объектов сразу
    ИмяНабора2 = "Справочник_Номенклатура";
    УправлениеСвойствами.УстановитьПараметрыНабораСвойств(ИмяНабора2);
    
КонецПроцедуры

Шаг 4. Добавление обработчика в общую очередь

Теперь проанализируем, как сообщить системе, что нашу процедуру нужно запустить при обновлении версии. В том же модуле обновления найдем (или создадим) процедуру ПриДобавленииОбработчиковОбновления. Добавим в нее следующий код:


Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт

    Обработчик = Обработчики.Добавить();
    // Используем "*" для запуска при первоначальном заполнении пустой базы
    // Или укажите конкретную версию конфигурации, например, "1.0.2.5"
    Обработчик.Версия = "*"; 
    Обработчик.Процедура = "ОбновлениеИнформационнойБазыБП.НастроитьНаборыСвойствОбъектов";
    Обработчик.РежимВыполнения = "Оперативно";
    Обработчик.Описание = НСтр("ru = 'Настройка наборов дополнительных реквизитов для новых документов'");

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

Важный нюанс: если вы устанавливаете Обработчик.Версия = "*", этот код выполнится только один раз — при самом первом запуске базы. Если база уже находится в эксплуатации, и вы добавили новый набор, вам обязательно нужно указать версию конфигурации, которая выше текущей версии ИБ.

Шаг 5. Настройка определяемых типов (Метаданные)

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

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

Шаг 6. Запуск обновления

Для того чтобы система применила изменения, необходимо запустить базу в режиме «Предприятие». Если вы используете версию "*" и база уже не пустая, или если вы хотите принудительно инициировать процесс, используйте параметр запуска в конфигураторе:

/С ЗапуститьОбновлениеИнформационнойБазы

Проанализируем результат: после запуска перейдите в раздел Администрирование — Дополнительные реквизиты. Ваш набор должен появиться в списке, а при открытии формы соответствующего справочника или документа вы увидите возможность добавления новых свойств.

Резюме

Мы выяснили, что ключ к успеху кроется в трех составляющих: правильном именовании предопределенных элементов, использовании процедуры-обертки для обхода ограничений по параметрам и корректной регистрации обработчика в механизмах БСП. Такой подход гарантирует, что настройки свойств будут перенесены между базами (например, из разработки в продуктив) автоматически и без ошибок.

← На главную