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