Почему в 1С:Предприятие не отображаются новые предопределенные элементы справочника и как это исправить

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

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

Проанализируем причины такого поведения платформы и подробно разберем все способы решения этой задачи — от штатных платформенных механизмов до программной привязки элементов.

Почему возникает проблема

Начиная с версии платформы 8.3 концепция предопределенных элементов изменилась. Они больше не хранятся отдельно от пользовательских данных: теперь это обычные строки в таблице базы данных, у которых заполнено системное поле ИмяПредопределенныхДанных.

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

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

Способ 1. Вызов штатного метода обновления предопределенных данных

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

Рассмотрим пример кода для принудительного создания предопределенных элементов конкретного справочника:


ИмяСправочника = "МойСправочник";
Справочники[ИмяСправочника].ОбновитьПредопределенныеДанные();

Данный метод сопоставляет состав предопределенных элементов в метаданных со строками таблицы в базе данных и автоматически создает недостающие записи с корректно заполненными системными реквизитами.

Способ 2. Программная привязка существующего элемента к предопределенному

Если элемент уже был случайно создан пользователем вручную или необходимо быстро связать конкретную запись с метаданными без перезапуска процедур обновления, можно напрямую заполнить реквизит ИмяПредопределенныхДанных.

Разберем по шагам, как это работает:

  1. Создаем обычный элемент в режиме «1С:Предприятие» (или берем уже существующий).
  2. Открываем обработку для произвольного выполнения кода или специализированную обработку изменения реквизитов.
  3. Заполняем системное свойство объекта строковым идентификатором, точно совпадающим с именем предопределенного элемента в конфигураторе.

Посмотрим на пример программного кода для привязки:


СсылкаНаЭлемент = Справочники.МойСправочник.НайтиПоНаименованию("Основной элемент");

Если ЗначениеЗаполнено(СсылкаНаЭлемент) Тогда
    ОбъектСправочника = СсылкаНаЭлемент.ПолучитьОбъект();
    // Имя должно строго совпадать с именем в конфигураторе (с учетом регистра)
    ОбъектСправочника.ИмяПредопределенныхДанных = "ОсновнойЭлемент";
    ОбъектСправочника.Записать();
КонецЕсли;

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

Способ 3. Изменение свойств объекта в конфигураторе

Если мы хотим, чтобы для разрабатываемого справочника платформа всегда создавала предопределенные элементы при обновлении базы, выполним следующие шаги:

  1. Откроем свойства нужного справочника в дереве метаданных конфигуратора.
  2. Перейдем на вкладку Прочее.
  3. Найдем свойство Обновление предопределенных данных и изменим его значение с Авто на Обновлять автоматически.
  4. Сохраним конфигурацию и применим изменения к базе данных (клавиша F7).

Если после этого элементы не появились, выполним кратковременное изменение структуры (например, временно добавим и удалим реквизит или переименуем предопределенный элемент туда и обратно), чтобы инициировать реструктуризацию таблицы при сохранении.

Способ 4. Инициализация через механизмы БСП

В конфигурациях, работающих на базе БСП (таких как «1С:Управление торговлей 11»), первичное заполнение данных привязано к процедурам обновления версии.

Разберем два варианта запуска процедур БСП:

  1. Увеличить номер версии конфигурации в свойствах корневого объекта метаданных (например, изменить младший номер релиза) и выполнить обновление базы данных. При старте предприятия система выполнит регламентные процедуры инициализации.
  2. Запустить «1С:Предприятие» с ключом командной строки: /C ЗапуститьОбновлениеИнформационнойБазы. Это принудительно запустит полный цикл процедур обновления метаданных и синхронизации предопределенных данных.
← На главную