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