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