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