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

Разработка и Конфигурация · 13 мин

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

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

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

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

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

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

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

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

Ключевое отличие — способ обращения из кода. К обычному элементу обращаются через поиск по наименованию, коду или реквизиту с помощью методов НайтиПоНаименованию() и НайтиПоКоду(). К предопределенному — напрямую по имени через точку, что дает короткий, читаемый и надежный код.

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

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

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

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

Не требует доработки конфигурации. Ограничение: ломается при переименовании элемента пользователем и при дублях.

Хранение ссылки в константе или параметре

Гибко, настраивается пользователем без разработчика. Ограничение: требует начального заполнения и контроля, что значение не очищено.

Где встречаются предопределенные элементы

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

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

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

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

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

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

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

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

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

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

bsl
// Прямое обращение по имени
ВалютаРубль = Справочники.Валюты.Рубль;
СчетКасса = ПланыСчетов.Хозрасчетный.КассаОрганизации;

// Универсальный способ — по строковому имени
Ссылка = Справочники.Валюты.ПредопределенныйЭлемент("Рубль");

// Получение всех предопределенных элементов
Описания = Справочники.Валюты.ПолучитьПредопределенныеИмена();

Метод ПредопределенныйЭлемент() полезен, когда имя хранится в переменной или приходит извне — например, из настроек обмена. Это также более безопасный вариант при работе с расширениями: если элемент отсутствует, метод вернет пустую ссылку вместо ошибки обращения к несуществующему свойству.

Проверка существования элемента

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

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

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

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

Типичные ошибки и их устранение

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

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

Типичные ошибки
01
Обращение по наименованию вместо имени: Справочники.Валюты.НайтиПоНаименованию("Рубль") — ломается при переименовании элемента пользователем.
02
Удаление предопределенного элемента пользователем: код, обращающийся к нему, начинает падать; защищайте такие элементы правами и проверками.
03
Дубли предопределенных элементов после обмена: платформа не может определить, какой элемент соответствует имени, и выдает ошибку уникальности.
04
Добавление предопределенного элемента в типовую конфигурацию без расширения: изменение теряется при следующем обновлении или блокирует автообновление.

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

Предопределенные элементы в расширениях конфигурации

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

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

Маршрут решения

Как выбрать подход

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

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

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

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

Элемент в списке в режиме «1С:Предприятие»
Норма

Элемент отображается с пиктограммой предопределенного, открывается и редактируется

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

Элемента нет в списке или он выглядит как обычный — связь с именем не установилась

Обращение из кода
Норма

Выражение Справочники.Имя.ИмяЭлемента возвращает непустую ссылку

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

Ошибка обращения к свойству или пустая ссылка

Обновление конфигурации базы данных
Норма

Реструктуризация проходит без сообщений о неуникальности

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

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

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

Итог

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

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

Частые вопросы

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

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

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

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

Чем предопределенный элемент отличается от значения перечисления?

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

Почему обращение Справочники.Валюты.Рубль возвращает пустую ссылку?

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

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

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

Для каких объектов недоступны предопределенные элементы?

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