К статье
Практический материал

Справочники и Данные · 12 мин

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

Предопределенные элементы справочника 1С: что это, чем отличаются от обычных, как создать, найти в коде и обновить. Ошибки, ограничения и FAQ.

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

Типовые конфигурации активно используют этот механизм: например, валюта «Российский рубль», вид номенклатуры «Товар», группа доступа «Администраторы», ставки НДС — всё это предопределённые элементы соответствующих справочников. Код конфигурации ссылается на них при проведении документов, расчёте налогов и формировании отчётов, поэтому их удаление или переименование может нарушить работу учёта.

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

Чем предопределенные элементы отличаются от обычных

Обычный элемент справочника пользователь создаёт вручную в режиме 1С:Предприятие. У него есть код и наименование, но нет гарантированного способа найти его из кода: пользователь может переименовать элемент, изменить код или удалить его. Предопределённый элемент создаётся разработчиком в конфигураторе, и платформа хранит связь между записью в базе данных и именем в метаданных.

В списке справочника предопределённые элементы часто отмечаются специальной пиктограммой (зависит от конфигурации и настроек списка). Удалить такой элемент интерактивно обычно нельзя — платформа выдаёт предупреждение или запрет, если у справочника включён соответствующий контроль. Однако защита не абсолютна: при определённых настройках и правах удаление возможно, поэтому осторожность остаётся на пользователе.

КритерийОбычный элементПредопределенный элемент
Кто создаётПользователь в режиме ПредприятиеРазработчик в конфигураторе
Обращение из кодаПоиск по коду, наименованию или запросомЧерез точку: Справочники.Имя.ИмяЭлемента
Удаление пользователемСвободноОграничено или нежелательно
ПереименованиеБез последствий для кодаНаименование менять можно, предопределённое имя — нет
Появление в базеПри ручном вводе или обменеАвтоматически при создании/обновлении ИБ

Где посмотреть и как создать предопределенный элемент

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

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

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

Как обратиться к предопределенному элементу из кода

Основной способ — через менеджер справочника: Справочники.Валюты.Рубль вернёт ссылку на элемент с предопределённым именем «Рубль». Это работает без запроса к базе в момент компиляции модуля и устойчиво к переименованию элемента пользователем — наименование может быть любым, связь держится на предопределённом имени.

Если предопределённое имя хранится в переменной или требуется проверка существования, используйте метод НайтиПоИмениПредопределенного (в новых версиях платформы — ПолучитьСсылку с указанием имени предопределённых данных). Для проверки, является ли конкретная ссылка предопределённой, у объекта есть свойство Предопределенный и метод ИмяПредопределенныхДанных у ссылки.

bsl
// Прямое обращение по предопределённому имени
ВалютаРуб = Справочники.Валюты.Рубль;

// Проверка, является ли элемент предопределённым
Если Ссылка.Предопределенный Тогда
    ИмяПредопр = Ссылка.ИмяПредопределенныхДанных;
КонецЕсли;

// Безопасное получение с проверкой
СсылкаПоИмени = Справочники.Валюты.НайтиПоИмениПредопределенного("Рубль");
Если СсылкаПоИмени.Пустая() Тогда
    // Элемент отсутствует в базе — обработать ситуацию
КонецЕсли;

Обновление предопределённых данных и режимы обновления

У справочника в конфигураторе есть свойство «Обновление предопределённых данных» с вариантами «Авто» и «Не обновлять автоматически». В режиме «Авто» платформа при каждом обновлении конфигурации базы данных синхронизирует предопределённые элементы: создаёт недостающие, обновляет наименования, помечает удалённые из метаданных. Режим «Не обновлять автоматически» применяют, когда состав предопределённых данных должен контролироваться вручную или через обработчики обновления.

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

Типичные ошибки и ограничения

Самая частая ошибка разработчика — обращение к элементу по наименованию (НайтиПоНаименованию("Рубль")) там, где нужен предопределённый элемент. Пользователь переименует валюту в «руб.» — и код перестанет находить элемент. Вторая ошибка — создание предопределённого элемента вручную в базе через групповую обработку: такой элемент не получит связи с метаданными, и обращение Справочники.Валюты.Рубль вернёт ошибку или пустую ссылку.

Ещё одна проблема — дубли предопределённых элементов после обновления или обмена. Платформа в таких случаях может выдавать ошибку о неоднозначности. Лечится поиском дублей и переназначением ссылок через обработку поиска и замены значений, с обязательной резервной копией перед операцией.

Типичные ошибки
01
Поиск по наименованию вместо предопределённого имени — код ломается после переименования элемента пользователем
02
Переименование предопределённого имени в конфигураторе без анализа кода — при обновлении возникает ошибка отсутствия элемента
03
Ручное создание элемента с таким же наименованием вместо предопределённого — связь с метаданными не устанавливается
04
Удаление предопределённого элемента через внешние обработки — документы и отчёты, ссылающиеся на него, перестают работать
05
Игнорирование дублей после обмена данными — неоднозначные ссылки и ошибки при обращении из кода

Когда использовать предопределённые элементы, а когда — нет

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

Альтернатива — хранение настроек в константах или регистрах сведений со ссылками на обычные элементы. Это гибче: администратор может переназначить значение без изменения конфигурации. Минус — код должен проверять, заполнена ли настройка, и корректно обрабатывать пустые значения.

Сравнение подходов

Предопределенный элемент

Код гарантированно находит значение. Подходит для обязательных системных данных. Минус: изменение состава требует обновления конфигурации

Настройка в константе или регистре

Администратор меняет значение без доработки. Подходит для параметров, различающихся между базами. Минус: нужна проверка заполненности

Поиск по коду или наименованию

Просто, но ненадёжно: пользователь может изменить эти реквизиты. Допустимо только как одноразовая миграция данных

Как проверить корректность после изменений

После обновления конфигурации с новыми предопределёнными элементами откройте справочник в режиме Предприятие и убедитесь, что элементы появились с ожидаемыми наименованиями. Затем выполните типовую операцию, которая использует эти элементы: например, проведите документ, где подставляется валюта или ставка НДС.

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

Контрольные точки

Как проверить результат

Элемент в списке справочника
Норма

Элемент присутствует, наименование соответствует заданному в конфигураторе

Тревожный признак

Элемент отсутствует или появился дубль

Обращение из кода Справочники.Имя.ИмяЭлемента
Норма

Возвращается заполненная ссылка

Тревожный признак

Ошибка «Предопределенный элемент отсутствует в данных»

Проведение документа, использующего элемент
Норма

Документ проводится без сообщений об ошибках

Тревожный признак

Ошибка обращения к предопределённым данным

Свойство Предопределенный у элемента
Норма

Истина, имя предопределённых данных заполнено

Тревожный признак

Ложь — связь с метаданными потеряна

Часто задаваемые вопросы

Можно ли удалить предопределённый элемент в режиме Предприятие?

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

Что произойдёт, если переименовать наименование предопределённого элемента?

Ничего критичного: код обращается к элементу по предопределённому имени из метаданных, а не по наименованию. Пользовательское наименование можно менять свободно. Опасно менять именно предопределённое имя в конфигураторе — это разрывает связь между метаданными и данными базы.

Как найти все предопределённые элементы конфигурации?

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

Почему после обновления появились дубли предопределённых элементов?

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

Работают ли предопределённые элементы для планов счетов и планов видов характеристик?

Да, механизм единый: предопределённые данные поддерживаются справочниками, планами счетов, планами видов характеристик и планами видов расчёта. Обращение из кода аналогично — например, ПланыСчетов.Хозрасчетный.Касса или ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ИмяЭлемента.

Что делать, если код выдаёт ошибку «Предопределенный элемент отсутствует в данных»?

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

Итог

Что важно запомнить

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