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

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

Как создать предопределенный элемент в 1С

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

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

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

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

Что такое предопределенный элемент и когда он нужен

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

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

Создание предопределенного элемента в конфигураторе

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

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

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

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

Создание предопределенных элементов в режиме 1С:Предприятие

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

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

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

Сравнение способов создания

В конфигураторе

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

В режиме предприятия

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

Программное создание обычного элемента

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

Программное обращение к предопределенным элементам

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

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

// или короткая форма обращения по имени:

ВалютаРубль = Справочники.Валюты.Рубль;

Для планов видов характеристик и планов счетов синтаксис аналогичен: ПланыВидовХарактеристик.ДополнительныеРеквизиты.ИмяЭлемента. Если элемента с таким именем нет или он удален из базы, обращение вернет пустую ссылку — поэтому в критичных местах кода стоит проверять результат перед использованием.

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

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

Особенности и ограничения предопределенных элементов

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

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

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

Типичные ошибки при работе с предопределенными элементами

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

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

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

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

Проверка результата и диагностика

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

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

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

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

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

Элемент отображается после обновления конфигурации БД

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

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

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

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

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

Пустая ссылка — элемент удален или имя не совпадает

Заполнение документов
Норма

Документы используют предопределенный элемент

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

В документах дубли с тем же наименованием

Частые вопросы о предопределенных элементах

Можно ли создать предопределенный элемент без конфигуратора?

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

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

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

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

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

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

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

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

Через менеджер объекта по имени: ПланыСчетов.Хозрасчетный.ИмяСчета. Синтаксис полностью аналогичен справочникам, результат — ссылка на счет, которую можно использовать в проводках и запросах.

Переносятся ли предопределенные элементы при выгрузке базы?

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

Итог

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

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