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