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

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

При разработке конфигураций на базе Библиотеки стандартных подсистем (БСП) часто возникает задача заполнить справочник ВидыКонтактнойИнформации базовыми или предопределенными значениями. Нередко разработчик добавляет код в процедуру УправлениеКонтактнойИнформациейПереопределяемый.ПриНачальномЗаполненииЭлементов(), запускает базу с параметром обновления /c ЗапуститьОбновлениеИнформационнойБазы, однако точка останова не срабатывает, а справочник остается пустым. Разберем по шагам, почему возникает эта проблема и как корректно настроить механизм начального заполнения в БСП.

Выясним причину: архитектура начального заполнения БСП

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

  1. Логика первого старта: механизм начального наполнения справочников отрабатывает только при первом запуске абсолютно чистой базы, когда в регистре сведений ВерсииПодсистем еще отсутствуют записи или номер версии конфигурации равен значению «0.0.0.0». Если база уже была запущена хотя бы один раз, платформа переходит в режим миграции версий, пропуская первичное заполнение.
  2. Маршрутизация вызовов: вызовы специализированных переопределяемых процедур подсистем (таких как контактная информация) встроены в общий контур механизма начального заполнения. Если объект не зарегистрирован в качестве объекта с начальным заполнением через модуль ОбновлениеИнформационнойБазыПереопределяемый, БСП не передает управление в подсистему.

Решение 1. Подключение через общий модуль ОбновлениеИнформационнойБазыПереопределяемый

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

В процедуре ПриОпределенииНастроек() укажем наш справочник в массиве объектов с начальным заполнением:


Процедура ПриОпределенииНастроек(Настройки) Экспорт
    
    Настройки.ОбъектыСНачальнымЗаполнением.Добавить(Метаданные.Справочники.ВидыКонтактнойИнформации);
    
КонецПроцедуры

После регистрации объекта система начинает вызывать процедуру ПриНачальномЗаполненииЭлемента() (или обращаться к менеджеру соответствующего объекта). Обратите внимание на правильное имя процедуры в модуле ОбновлениеИнформационнойБазыПереопределяемый — именно через нее координируется первичное наполнение данных.

Решение 2. Принудительное обновление предопределенных данных для рабочей или тестовой базы

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


ОбновлениеИнформационнойБазы.ОбновитьПредопределенныеЭлементы(Метаданные.Справочники.ВидыКонтактнойИнформации);

Данная процедура принудительно синхронизирует предопределенные элементы конфигурации с базой данных, независимо от текущего статуса версий в регистре.

Решение 3. Отладка обработчика с помощью фиктивной версии

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


Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
    
    Обработчик = Обработчики.Добавить();
    Обработчик.Версия = "ОтладкаОбработчика";
    Обработчик.Процедура = "МойМодульОбновления.ЗаполнитьВидыКонтактнойИнформации";
    
КонецПроцедуры

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

Решение 4. Сброс состояния базы для имитации чистой установки

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

  1. Откроем регистр сведений ВерсииПодсистем.
  2. Удалим записи, относящиеся к основной конфигурации или подсистеме контактной информации.
  3. Перезапустим сеанс «1С:Предприятие» с ключом /c ЗапуститьОбновлениеИнформационнойБазы.

При таком запуске БСП воспримет базу как новую и корректно войдет в процедуры первичной инициализации данных.

Важные правила работы со справочником «Виды контактной информации»

Разберем специфические особенности подсистемы, несоблюдение которых может привести к тому, что созданные элементы не будут видны в пользовательском интерфейсе:

  1. Именование групп верхнего уровня: справочник имеет иерархическую структуру. Группы верхнего уровня строго привязаны к метаданным владельцев контактной информации. Имя предопределенной папки формируется по правилу: <ВидОбъекта><ИмяОбъекта> (например, СправочникКонтрагенты, СправочникОрганизации или СправочникПартнеры). Если группа названа иначе, формы объектов не смогут связать контактную информацию со своими полями.
  2. Свойство «Обновление предопределенных данных»: убедимся, что в конфигураторе для справочника установлено значение Авто, иначе платформа не будет создавать элементы автоматически при обновлении конфигурации базы данных.
  3. Признак активности: для корректного отображения созданных записей подсистема требует заполненного реквизита Используется. Для его программного обновления в коде заполнения вызывается служебная процедура УправлениеКонтактнойИнформациейСлужебный.УстановитьЗначениеПризнакаИспользуется().
  4. Защита от перезаписи: для сохранения настроек, внесенных пользователем (например, изменение маски телефона или признака обязательности), справочник рекомендуется включать в состав общего реквизита ОтредактированныеПредопределенныеРеквизиты.
← На главную