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