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