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

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

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

Разбор механизма работы предопределенных данных в версии 8.3

Начиная с версии платформы 8.3, механизм работы с предопределенными данными существенно изменился по сравнению с версией 8.2. Раньше предопределенные элементы создавались автоматически и безусловно. Теперь же за этот процесс отвечает свойство объекта метаданных Обновление предопределенных данных. Проанализируем, какие значения оно может принимать:

  1. Авто — система сама решает, нужно ли создавать элементы. Это поведение зависит от того, является ли база основной или периферийной в распределенной информационной базе (РИБ).
  2. Обновлять — платформа принудительно создает недостающие элементы при обновлении конфигурации или первом запуске.
  3. Не обновлять — автоматическое создание отключено. В этом случае программист должен сам управлять процессом через встроенный язык.

Если у вас установлено значение Авто, система может не создать элемент, если посчитает, что управление данными должно происходить в другом узле (например, в главном узле РИБ), или если произошел программный сбой кэша метаданных. Рассмотрим пошагово, как решить эту проблему.

Способ 1: Использование программного метода обновления

Если элемент создан в Конфигураторе, но не появился в базе, мы можем инициировать процесс обновления программно. Для этого не обязательно перегружать конфигурацию. Достаточно выполнить одну строку кода во внешней обработке или в консоли кода. Выясним, какой метод за это отвечает.

Для принудительной инициализации создания предопределенных записей используется метод менеджера справочника ОбновитьПредопределенныеДанные(). Рассмотрим пример для справочника Склады:


// Принудительное обновление предопределенных элементов
Справочники.Склады.ОбновитьПредопределенныеДанные();
Сообщить("Обновление предопределенных данных справочника 'Склады' завершено");

После выполнения этого кода платформа перечитает структуру метаданных и, обнаружив расхождение с реальными записями в таблице базы данных, создаст недостающие строки. Это самый быстрый и эффективный способ исправления «невидимых» элементов. Для быстрого выполнения таких служебных скриптов в режиме «Предприятие» подойдёт консоль кода с ИИ-помощником и учётом метаданных.

Способ 2: Ручная привязка элемента в режиме «Предприятие»

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

В платформе 8.3 реализовано разделение между объектом в базе данных и именем в метаданных. Мы можем программно «связать» обычный элемент с его описанием в Конфигураторе через свойство ИмяПредопределенныхДанных. Разберем по шагам, как это сделать:

  1. Найдем существующий элемент в справочнике (например, по наименованию или коду).
  2. Установим ему свойство, соответствующее имени, указанному в Конфигураторе в колонке «Имя».
  3. Запишем объект.

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


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

После этого у элемента в списке появится характерная пиктограмма с маленькой точкой, указывающая на его предопределенность.

Способ 3: Проверка влияния распределенных информационных баз (РИБ)

Проанализируем ситуацию, если вы работаете в конфигурации БП 3.0 КОРП, которая часто используется в многофилиальных структурах. В РИБ создание предопределенных данных имеет свои жесткие правила:

Если вы добавили элемент в Конфигураторе и обновили конфигурацию в подчиненном узле, он не появится до тех пор, пока не придет пакет данных из центральной базы. Решение: Убедитесь, что изменения внесены в центральную базу, данные там обновлены (возможно, с применением Способа 1), и после этого выполните синхронизацию. Для ускорения администрирования РИБ и своевременной накатки конфигураций на периферийные базы можно использовать инструмент для автоматического пакетного обновления баз 1С в фоновом режиме.

Дополнительные факторы и «подводные камни»

Рассмотрим еще несколько причин, которые могут блокировать отображение данных:

1. Права доступа (RLS). Выясним, не ограничивают ли правила доступа на уровне записей (RLS) видимость нового элемента. Если вы зашли под администратором, это маловероятно, но в некоторых сложных конфигурациях даже полные права могут иметь ограничения в специфических профилях. Попробуйте выполнить запрос к справочнику в консоли с отключенной проверкой прав. Для такой проверки подойдёт инженерная консоль запросов для 1С.

2. Кэш метаданных. Иногда платформа «забывает» обновить локальный кэш пользователя. Если программный вызов ОбновитьПредопределенныеДанные() не помог, попробуйте очистить кэш конфигурации (удалить базу из списка и добавить заново или очистить папки в %AppData%\1C\1Cv8).

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

Использование стандартных инструментов разработчика

Для диагностики мы рекомендуем использовать типовую обработку от фирмы 1С, которая называется «Установка предопределенных элементов» (она входит в состав инструментов разработчика или может быть найдена на ИТС). Эта обработка позволяет визуально увидеть:

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

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

← На главную