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

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

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

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

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

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

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

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

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

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

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

Подготовка: включение предопределённых данных у справочника

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

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

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

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

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

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

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

Если справочник иерархический, предопределённый элемент можно поместить в конкретную группу, указав родителя. Учтите: предопределённым может быть как элемент, так и группа — группы создаются в том же окне с установленным признаком «Это группа».

Обращение к предопределённому элементу из кода

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

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

СтавкаНДС = Справочники.СтавкиНДС.НДС20;

// Получение ссылки с проверкой существования

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

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

ВызватьИсключение "Предопределённый элемент не найден";

КонецЕсли;

Если нужно получить предопределённое имя элемента, имея на руках ссылку (например, при обмене данными), используется метод ИмяПредопределенныхДанных:

ИмяПредопределённого = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(

СсылкаНаЭлемент, "ИмяПредопределенныхДанных");

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

Режимы обновления предопределённых данных

У справочника в палитре свойств есть параметр «Обновление предопределённых данных» с двум значениями: «Автоматически» и «Не обновлять автоматически». От него зависит поведение платформы при обновлении конфигурации базы данных.

Сравнение режимов обновления

Автоматически

Платформа сама создаёт новые предопределённые элементы и синхронизирует изменения имён при обновлении. Подходит для большинства случаев.

Не обновлять автоматически

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

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

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

Типичные ошибки и как их исправить

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

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

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

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

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

Элемент в режиме предприятия
Норма

Элемент виден в списке справочника, открывается, реквизиты заполнены как в конфигураторе

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

Элемента нет в списке или реквизиты пустые

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

Справочники.Имя.ИмяЭлемента возвращает непустую ссылку

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

Возвращается пустая ссылка или ошибка компиляции

Предопределённое имя
Норма

У элемента заполнено поле ИмяПредопределенныхДанных

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

Поле пустое — платформа считает элемент обычным

Повторное обновление
Норма

При следующих обновлениях конфигурации дубликаты не создаются

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

Появляются элементы-двойники

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

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

Итог

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

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

Частые вопросы

Можно ли сделать предопределённым уже существующий элемент справочника?

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

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

Чаще всего не выполнено обновление конфигурации базы данных (F7), либо для справочника установлен режим «Не обновлять автоматически», а программное создание не предусмотрено. Также проверьте, не переопределён ли механизм обновления в библиотеке стандартных подсистем.

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

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

Можно ли переименовать предопределённое имя без последствий?

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

Чем предопределённый элемент отличается от элемента, найденного по коду или наименованию?

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

Работают ли предопределённые элементы при обмене данными между базами?

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