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

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

Имя предопределённых данных в 1С: что это и как с ним работать

Что такое имя предопределённых данных в 1С, где его задать, как обращаться из кода и обновлять элементы. Разбор ошибок и типичных проблем.

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

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

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

Что такое предопределённые элементы и зачем им имя

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

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

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

Где задаётся имя предопределённых данных

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

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

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

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

Как обратиться к предопределённому элементу из кода

Основной способ — методы менеджера объекта. Для справочника это выглядит так:

ВалютаРубль = Справочники.Валюты.НайтиПоИмениПредопределенныхДанных("Рубль");

Если ВалютаРубль.Пустая() Тогда

// элемент не найден — обработать ситуацию

КонецЕсли;

Для планов счетов, планов видов характеристик и планов видов расчёта синтаксис аналогичен: ПланыСчетов.Хозрасчетный.НайтиПоИмениПредопределенныхДанных("КассаОрганизации"). Метод возвращает ссылку, и её можно использовать в запросах, присваивать реквизитам документов, сравнивать.

Альтернативный универсальный способ — функция ПредопределенноеЗначение("Справочник.Валюты.Рубль"). Она принимает строку вида «ВидОбъекта.ИмяОбъекта.ИмяПредопределенныхДанных» и работает в том числе на клиенте, где прямой вызов серверных методов недоступен. В запросах предопределённые значения удобно указывать через параметр-функцию ЗНАЧЕНИЕ(Справочник.Валюты.Рубль).

bsl
Оклад = ПланыВидовРасчета.ОсновныеНачисления.НайтиПоИмениПредопределенныхДанных("Оклад");
СтавкаНДС = ПредопределенноеЗначение("Справочник.СтавкиНДС.НДС20");

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

Как платформа связывает имена с данными при обновлении

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

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

Ситуация усложняется в распределённых базах и при обменах: предопределённые элементы создаются в каждом узле независимо, и их ссылки различаются. Типовые планы обмена умеют сопоставлять такие элементы по имени предопределённых данных, но в самописных обменах это нужно предусматривать отдельно — иначе появятся дубли.

Типичные ошибки и их признаки

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

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

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

Как проверить и восстановить предопределённые данные

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

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

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

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

Вызов НайтиПоИмениПредопределенныхДанных в коде
Норма

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

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

Пустая ссылка или сообщение об отсутствии предопределённого элемента

Список элементов в режиме предприятия
Норма

Элемент присутствует в одном экземпляре, без пометки удаления

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

Элемент отсутствует, помечен на удаление или есть дубли с похожими наименованиями

Свойство ИмяПредопределенныхДанных у объекта
Норма

Имя совпадает с именем в конфигураторе

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

Имя пустое — элемент создан пользователем и не связан с конфигурацией

Когда использовать предопределённые данные, а когда нет

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

Сравнение подходов

Предопределённый элемент

Подходит, когда код обращается к элементу по имени. Гарантирует наличие элемента, защищает от удаления. Ограничение: создаётся во всех базах и узлах обмена.

Поиск по наименованию или коду

Подходит для разовых миграций. Ненадёжен в постоянной логике: пользователь может переименовать элемент.

Хранение ссылки в константе или настройке

Гибкий вариант: администратор сам выбирает элемент. Требует интерфейса настройки и контроля заполненности.

Практическое правило: чем больше кода зависит от элемента, тем сильнее аргумент сделать его предопределённым. Если зависимость одна-две и она допускает гибкость, лучше вынести выбор элемента в настройки.

Итог

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

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

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

Чем имя предопределённых данных отличается от наименования элемента?

Наименование видит и может менять пользователь, оно может дублироваться и переводиться. Имя предопределённых данных задаёт разработчик, оно уникально, не зависит от языка и служит для обращения из кода. Менять его из режима предприятия нельзя.

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

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

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

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

Может ли пользователь переименовать предопределённый элемент?

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

Как найти в конфигурации все обращения к конкретному имени предопределённых данных?

Используйте глобальный поиск по конфигурации (Ctrl+Shift+F) по строке имени, например "Рубль". Проверяйте и модули, и запросы, и макеты. Перед переименованием предопределённого элемента такой поиск обязателен — иначе часть кода перестанет находить элемент.

Работают ли предопределённые данные в расширениях конфигурации?

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