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

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

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

Что такое предопределенный элемент в 1С: назначение, отличия от обычных элементов, настройка в конфигураторе, типичные ошибки и способы проверки.

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

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

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

Где встречаются предопределенные элементы и зачем они нужны

Предопределенные элементы поддерживают четыре типа объектов: справочники, планы видов характеристик, планы счетов и планы видов расчета. В документах, регистрах и перечислениях такого механизма нет — там логика ссылок устроена иначе.

Типовые примеры из практики: план счетов бухгалтерского учета состоит почти полностью из предопределенных счетов (01, 10, 41, 62 и так далее) — иначе проводки в коде было бы невозможно написать. В справочнике «Валюты» типовых конфигураций есть предопределенный рубль. В плане видов расчета зарплатных решений предопределены виды расчета для оклада, премий, удержаний.

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

Чем предопределенный элемент отличается от обычного

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

Из этого вытекают практические отличия в поведении:

  • предопределенный элемент нельзя создать в режиме «1С:Предприятие» — только в конфигураторе;
  • удаление предопределенного элемента обычно запрещено или приводит к ошибкам в коде, который на него ссылается;
  • переименование в пользовательском режиме меняет наименование, но не предопределенное имя — код продолжает работать;
  • при обновлении конфигурации новые предопределенные элементы автоматически появляются в базе.
ПараметрОбычный элементПредопределенный элемент
Где создаетсяВ режиме «Предприятие»В конфигураторе
Обращение из кодаПоиск по коду, наименованию, ссылкеПо предопределенному имени
Удаление пользователемДоступноОбычно запрещено или опасно
Перенос при обновленииНе применимоСоздается автоматически

Как создать предопределенный элемент в конфигураторе

Создание выполняется в дереве конфигурации и занимает несколько минут. Рассмотрим на примере справочника, для планов счетов и видов расчета порядок аналогичен.

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

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

Важно задавать предопределенное имя осмысленно и латиницей: именно оно используется в коде. Имя «ОсновнаяВалюта» читается лучше, чем «Валюта1», и снижает риск путаницы при доработках.

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

Обращение выполняется через менеджер объекта по предопределенному имени. Синтаксис короткий и не требует поиска:

bsl
ВалютаРубль = Справочники.Валюты.Рубль;
СчетТовары = ПланыСчетов.Хозрасчетный.Товары;
ВидРасчета = ПланыВидовРасчета.Начисления.Оклад;

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

bsl
СсылкаРубль = Справочники.Валюты.Рубль;
Если СсылкаРубль.Пустая() Тогда
    ВызватьИсключение "Предопределенный элемент 'Рубль' не найден";
КонецЕсли;

Есть и универсальный способ — метод НайтиПоИмениПредопределенныхДанных или получение списка предопределенных элементов через ПолучитьИменаПредопределенных. Это полезно, когда имя хранится в переменной или нужно проверить целостность данных пакетно.

Типичные проблемы и способы их решения

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

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

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

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

Для диагностики полезно сравнить список предопределенных элементов в конфигурации с фактическими данными базы. Несоответствие видно сразу: элемент есть в конфигураторе, но отсутствует в пользовательском режиме, или наоборот — в данных осталась «осиротевшая» запись после удаления элемента из конфигурации.

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

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

Наличие элемента в пользовательском режиме
Норма

Элемент отображается в списке с пиктограммой предопределенного

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

Элемент отсутствует или дублируется обычным

Обращение из кода
Норма

Справочники.Имя.ИмяЭлемента возвращает заполненную ссылку

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

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

Поиск ссылок на элемент
Норма

Ссылки ведут на предопределенный элемент

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

Документы ссылаются на дубль-непредопределенный

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

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

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

Не стоит делать предопределенными данные, которые по своей природе меняются: контрагенты, номенклатура, склады, сотрудники. Для таких случаев лучше использовать настройки, хранящие ссылки, — например, константы или регистры сведений, где администратор сам указывает нужный элемент.

Маршрут решения

Как выбрать действие

Код должен всегда обращаться к одному и тому же элементуСоздайте предопределенный элемент в конфигураторе
Элемент выбирает администратор конкретной базыИспользуйте константу или настройку со ссылкой вместо предопределенного элемента
В базе появились дубли предопределенных данныхНайдите ссылки на дубль, перенесите их на предопределенный элемент, затем пометьте дубль на удаление
Обращение по имени возвращает пустую ссылкуПроверьте наличие элемента в данных и выполните обновление конфигурации базы данных
При разработке собственных подсистем удобно завести общий модуль с функциями-геттерами для всех предопределенных элементов. Тогда при переименовании элемента правка понадобится в одном месте, а не по всему коду конфигурации.
ПЗ
Практическое замечание

Часто задаваемые вопросы

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

Наименование изменить можно, если конфигурация это позволяет, — код продолжит работать, так как он обращается по предопределенному имени, а не по наименованию. Само предопределенное имя меняется только в конфигураторе.

Что произойдет, если удалить предопределенный элемент?

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

Как отличить предопределенный элемент от обычного в списке?

У предопределенных элементов в списке отображается особая пиктограмма. Программно отличие проверяется через свойство Предопределенный у объекта элемента.

Почему после обмена данными появились дубли предопределенных элементов?

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

Можно ли создать предопределенный элемент программно из кода?

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

Хранятся ли предопределенные элементы в файле конфигурации или в базе?

И там, и там: описание и предопределенное имя хранятся в конфигурации, а сама запись с данными — в таблице базы. Платформа связывает их при обновлении конфигурации базы данных.

Итог

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

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