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

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

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

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

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

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

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

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

Главные свойства предопределенных элементов:

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

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

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

Основной способ — описать элемент в дереве конфигурации. Порядок действий:

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

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

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

Как привязать существующий элемент к предопределенному имени

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

Для привязки используется метод установки имени предопределенных данных. Пример кода для внешней обработки:

ЭлементСсылка = Справочники.Валюты.НайтиПоКоду("643");

Если Не ЭлементСсылка.Пустая() Тогда

ЭлементОбъект = ЭлементСсылка.ПолучитьОбъект();

ЭлементОбъект.ИмяПредопределенныхДанных = "Рубль";

ЭлементОбъект.Записать();

КонецЕсли;

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

Особенности в типовых конфигурациях и режиме обновления

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

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

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

Типичные ошибки и как их избежать

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

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

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

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

Проверка результата

После создания или привязки предопределенного элемента убедитесь, что все работает корректно:

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

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

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

Запись одна, без дублей с таким же наименованием

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

Появились два похожих элемента — пользовательский и предопределенный

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

В коде ЭлементСсылка.Предопределенный возвращает Истина

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

Возвращает Ложь — привязка имени не выполнена

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

Поиск по имени предопределенных данных возвращает ссылку без ошибок

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

Возвращается пустая ссылка — имя в коде не совпадает с именем в конфигурации

Повторное обновление конфигурации
Норма

После F7 дубликаты не создаются

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

Каждое обновление добавляет новый элемент

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

FAQ

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

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

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

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

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

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

Как удалить предопределенный элемент, если он больше не нужен?

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

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

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

Можно ли сделать предопределенным элемент иерархического справочника или группу?

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

Итог

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

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