Разработка и Конфигурация · 11 мин
Предопределенные элементы в 1С: что это и как их использовать
Предопределенные элементы в 1С: что это, как создать в конфигураторе и обратиться из кода. Отличия от обычных элементов, ошибки и практические советы.
Предопределенные элементы в 1С — это элементы справочников, планов видов характеристик, планов счетов и планов видов расчета, которые создаются разработчиком на этапе конфигурирования, а не пользователем в режиме предприятия. Они хранятся в базе данных вместе с обычными элементами, но их состав и часть свойств жестко заданы в конфигурации. Типичный пример — счет «Товары» (41.01) в плане счетов или вид расчета «Оклад» в плане видов расчета.
Главная ценность предопределенных элементов в том, что на них можно надежно ссылаться из программного кода и из других объектов конфигурации. Разработчик знает: элемент с именем «ОсновнаяОрганизация» существует в базе всегда, поэтому к нему можно обращаться по имени через менеджер объекта без поиска по коду или наименованию. Это делает алгоритмы устойчивыми к действиям пользователей.
Механизм работает одинаково во всех типовых конфигурациях и в самописных решениях, но есть важные нюансы: режимы обновления предопределенных данных, поведение при автоматическом создании элементов, отличия в платформенных версиях. Ниже разобраны устройство механизма, способы создания и обращения из кода, типичные ошибки и границы безопасной работы.
Что такое предопределенный элемент и где он встречается
Предопределенный элемент — это запись объекта-списка, описание которой задано в метаданных конфигурации. В конфигураторе у справочника есть закладка «Прочее» → «Предопределенные», где разработчик заводит список таких элементов с именами, кодами и наименованиями. При обновлении конфигурации базы данных платформа автоматически создает или синхронизирует соответствующие записи в таблицах базы.
Механизм поддерживается четырьмя видами объектов: справочники, планы видов характеристик, планы счетов и планы видов расчета. Документы, регистры и перечисления предопределенных элементов не имеют — у перечислений все значения по своей природе заданы в конфигурации, поэтому отдельный механизм там не нужен.
В пользовательском режиме предопределенные элементы обычно выглядят как обычные записи списка, но в типовых конфигурациях они часто помечены пиктограммой — например, значком с жёлтым кружком или специальным выделением. Пользователь может изменять их реквизиты, если разработчик не запретил это настройками, но удалить или переименовать такой элемент в конфигураторе может только разработчик.
Чем предопределенные элементы отличаются от обычных
Ключевое отличие — способ идентификации. Обычный элемент пользователь ищет по коду, наименованию или реквизитам, и результат поиска не гарантирован: запись могли удалить, переименовать или пометить на удаление. Предопределенный элемент имеет имя, заданное в метаданных, и платформа следит за его существованием: при обновлении конфигурации недостающие записи создаются автоматически.
Второе отличие — поведение при удалении из конфигурации. Если разработчик удаляет предопределенный элемент из метаданных, соответствующая запись в базе не исчезает физически: она теряет признак предопределенности и становится обычным элементом. Это безопасное поведение — ссылки на запись из документов и регистров не разрушаются.
| Критерий | Предопределенный элемент | Обычный элемент |
|---|---|---|
| Кто создает | Разработчик в конфигураторе | Пользователь или код в режиме предприятия |
| Идентификация | По имени из метаданных | По коду, наименованию, GUID |
| Гарантия существования | Создается платформой при обновлении | Не гарантируется |
| Удаление из конфигурации | Становится обычным элементом | Не применимо |
| Обращение из кода | Менеджер.ИмяЭлемента | Поиск по коду или наименованию |
Как создать предопределенный элемент в конфигураторе
Создание выполняется в конфигураторе и не требует программирования. Откройте дерево конфигурации, найдите нужный справочник, план счетов или план видов расчета, откройте его свойства и перейдите на закладку «Прочее» — там находится кнопка «Предопределенные». В открывшемся списке добавьте новый элемент и заполните поля.
Для каждого элемента обязательно задается имя — оно должно быть корректным идентификатором встроенного языка (без пробелов, начинаться с буквы). Дополнительно заполняются код, наименование и, при необходимости, значения реквизитов — для этого в форме списка предопределенных элементов есть кнопка перехода к редактированию реквизитов выбранного элемента.
- 1Откройте конфигуратор и найдите нужный справочник или план в дереве конфигурации
- 2Откройте палитру свойств объекта, закладка «Прочее», команда «Предопределенные»
- 3Добавьте элемент, задайте имя (идентификатор без пробелов), код и наименование
- 4При необходимости заполните значения реквизитов элемента
- 5Обновите конфигурацию базы данных (F7) и согласитесь на реструктуризацию
- 6Проверьте в режиме предприятия, что элемент появился в списке
После обновления конфигурации базы данных платформа выполняет синхронизацию: новые предопределенные элементы создаются в таблицах, измененные в конфигураторе — обновляются. Этот процесс происходит автоматически и не требует обработок. Если конфигурация обновляется на рабочей базе с пользователями, обновление выполняйте в монопольном режиме.
Как обратиться к предопределенному элементу из кода
Основной способ — через менеджер объекта по имени. Для справочника «Валюты» с предопределенным элементом «Рубль» обращение выглядит так: Справочники.Валюты.Рубль. Аналогично работают менеджеры планов счетов, видов характеристик и видов расчета. Результат — ссылка на элемент, которую можно присваивать реквизитам, использовать в запросах и сравнениях.
В универсальном коде, где имя элемента хранится в переменной, используется метод НайтиПоИмени либо обращение через квадратные скобки: Справочники.Валюты[ИмяЭлемента]. Такой прием применяют в обработках, которые должны работать с разными конфигурациями, где имена предопределенных элементов могут отличаться.
// Прямое обращение по имени
ВалютаРубль = Справочники.Валюты.Рубль;
// Универсальное обращение через переменную
ИмяЭлемента = "Рубль";
СсылкаНаВалюту = Справочники.Валюты[ИмяЭлемента];
// Проверка существования перед использованием
Если Не ЗначениеЗаполнено(СсылкаНаВалюту) Тогда
ВызватьИсключение "Предопределенный элемент не найден";
КонецЕсли;Обращение по имени выполняется быстро и не требует запроса к базе с поиском по наименованию. Это главная причина, по которой типовые конфигурации активно используют предопределенные элементы вместо поиска: например, обращение к предопределенному виду расчета «Оклад» надежнее, чем запрос с условием на наименование, которое пользователь мог изменить.
Режимы создания предопределенных элементов
В свойствах объекта-списка есть настройка «Обновление предопределенных данных» с вариантами «Автоматически» и «Не обновлять автоматически». В автоматическом режиме платформа синхронизирует элементы при каждом обновлении конфигурации базы данных. В ручном режиме синхронизация выполняется только через специальные методы или при явном вызове обновления.
Отдельный сценарий — автоматическое создание предопределенных элементов при первом обращении. Если элемент описан в конфигурации, но по какой-то причине отсутствует в базе (например, база создана выгрузкой без данных), платформа может создать его при первом обращении по имени. Это поведение зависит от настроек и версии платформы, поэтому полагаться на него в распределенных базах и при обменах следует осторожно.
Как выбрать действие
Типичные проблемы и их диагностика
Самая распространенная проблема — дубли предопределенных элементов. Они возникают при обменах данными между базами, когда один и тот же предопределенный элемент приходит из другого узла с другим внутренним идентификатором. В списке появляются две записи с одинаковым наименованием, одна из которых «настоящая» (связана с метаданными), а вторая — дубль. Диагностируется это через отчет «Поиск и удаление дублей» или запросом по реквизиту «ИмяПредопределенныхДанных».
Вторая частая ситуация — ошибка «Предопределенный элемент отсутствует в данных» при обращении из кода. Причины: конфигурация обновлена, а база данных — нет; элемент удален из метаданных, но код на него ссылается; нарушена синхронизация после восстановления из копии. Проверка начинается с сопоставления списка предопределенных элементов в конфигураторе и фактических записей в базе.
Как проверить результат
Запись присутствует, открывается без ошибок
Записи нет или дублируется несколько раз
Возвращается заполненная ссылка
Исключение или пустая ссылка
Совпадает с именем в конфигураторе
Пустой или не соответствует метаданным
FAQ
Может ли пользователь удалить предопределенный элемент?
Пометить на удаление в типовых конфигурациях обычно можно, если разработчик не запретил это ролями и подписками на события. Однако при следующем обновлении конфигурации или обращении по имени платформа может восстановить элемент. Удалять предопределенные элементы, на которые ссылаются алгоритмы, небезопасно.
Что произойдет, если переименовать предопределенный элемент в конфигураторе?
Платформа при обновлении свяжет существующую запись базы с новым именем по внутреннему идентификатору, но весь код, обращавшийся по старому имени, перестанет компилироваться или вызовет ошибку. Перед переименованием выполните поиск старого имени по всем модулям конфигурации.
Чем предопределенный элемент отличается от значения перечисления?
Значение перечисления существует только в метаданных и не является записью в таблице данных — на него нельзя добавить реквизиты. Предопределенный элемент — полноценная запись в базе с реквизитами, табличными частями и возможностью редактирования пользователем.
Как найти все предопределенные элементы объекта в базе?
Выполните запрос к таблице объекта с условием по служебному реквизиту «ИмяПредопределенныхДанных» — он заполнен только у предопределенных записей. В консоли запросов это позволяет быстро сопоставить состав записей со списком в конфигураторе.
Почему после обмена появились дубли предопределенных элементов?
Узлы обмена сопоставляют объекты по уникальному идентификатору. Если в одной из баз предопределенный элемент был создан заново (а не получен обменом или обновлением), идентификаторы различаются, и при синхронизации создается вторая запись. Лечится переназначением ссылок на основной элемент и удалением дубля.
Что важно запомнить
Предопределенные элементы задаются в конфигураторе, гарантированно существуют в базе и доступны из кода по имени через менеджер объекта. Используйте их вместо поиска по наименованию, обновляйте конфигурацию базы данных после изменений и контролируйте дубли после обменов.