В разработке конфигураций платформы 1С:Предприятие часто возникает необходимость ссылаться на конкретные объекты данных, такие как счета, виды расчетов или подразделения, еще до того, как база будет заполнена реальными данными. Именно для этих целей существуют предопределенные элементы. Это специальные записи, которые создаются автоматически при обновлении конфигурации базы данных и всегда имеют фиксированный уникальный идентификатор.

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

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

Сущность и назначение предопределенных элементов

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

Например, в типовой конфигурации всегда есть счет «001» или вид расчета «Оклад». Пользователь может переименовать их, добавить комментарий или изменить реквизиты, но система должна всегда понимать, что речь идет именно об этом конкретном элементе, а не о другом с похожим названием. Для этого платформа использует внутренний уникальный идентификатор (UUID), который присваивается элементу на этапе разработки.

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

💡

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

⚠️ Внимание: Если вы удалите предопределенный элемент в режиме конфигуратора, а в базе данных уже есть ссылки на него (в документах или регистрах), при обновлении конфигурации возникнет ошибка несоответствия типов или потери данных.

Настройка в конфигураторе и свойства объектов

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

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

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

  • 📝 Наименование — видимое имя элемента, которое будет отображаться в интерфейсе.
  • 🆔 Имя предопределенных данных — программное имя, по которому элемент вызывается в коде (например, Справочники.Валюты.Рубль).
  • 🔢 Код — уникальное значение кода, которое присваивается элементу при создании базы.
  • Использование — флаг, определяющий, будет ли элемент создан в базе данных при обновлении конфигурации.
📊 Как часто вы используете предопределенные элементы в коде?
Только в типовых конфигурациях
Постоянно в своих разработках
Редко, предпочитаю поиск по коду
Не использую вообще

Особое внимание следует уделить полю «Имя предопределенных данных». Оно должно быть уникальным в пределах объекта метаданных и соответствовать правилам именования идентификаторов 1С. Именно это имя используется для генерации глобального контекста.

Обращение к элементам из программного кода

Работа с предопределенными элементами в коде 1С максимально упрощена благодаря системе глобального контекста. Вам не нужно выполнять запросы к базе данных или использовать методы поиска НайтиПоНаименованию. Доступ осуществляется напрямую через имя объекта.

Синтаксис обращения выглядит следующим образом: ИмяОбъектаМетаданных.ИмяПредопределенногоЭлемента. Результатом такого выражения является ссылка на соответствующий объект базы данных. Если элемент помечен как неиспользуемый, обращение к нему вернет значение Неопределено.


// Пример получения ссылки на валюту Рубль

ВалютаРубль = Справочники.Валюты.Рубль;

// Пример использования в условии

Если Документ.Валюта = Справочники.Валюты.Рубль Тогда

СуммаВНДС = Документ.Сумма * 0.20;

КонецЕсли;

Такой подход не только ускоряет выполнение кода, но и делает его более читаемым. Разработчику сразу понятно, с каким именно объектом происходит работа, без необходимости изучать содержимое справочников.

💡

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

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

Проверка существования и обработка ошибок

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

Для безопасной работы рекомендуется всегда проверять, существует ли элемент в базе. Это делается с помощью оператора ЗначениеЗаполнено или явного сравнения с Неопределено.

Ситуация Результат обращения Рекомендуемое действие
Элемент существует Ссылка на объект Использовать в логике
Элемент не используется (снят флаг) Неопределено Обработать как отсутствие функционала
Ошибка имени в коде Ошибка компиляции Исправить имя в модуле

Корректная проверка выглядит так:


ТекущаяВалюта = Справочники.Валюты.Рубль;

Если ЗначениеЗаполнено(ТекущаяВалюта) Тогда

// Логика работы с рублем

Иначе

// Альтернативная логика или сообщение об ошибке

Сообщить("Необходимо включить предопределенный элемент 'Рубль'");

КонецЕсли;

Почему возникает Неопределено?

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

Отличия от обычных записей справочников

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

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

  • 🔒 Удаление: Обычный элемент удаляется кнопкой «Delete» в списке, предопределенный — только снятием флага в конфигураторе.
  • 🔄 Обновление: При обновлении типовой конфигурации предопределенные элементы сохраняются и обновляются, обычные могут быть перезаписаны или потеряны при конфликтах.
  • Производительность: Доступ к предопределенным данным происходит без запроса к СУБД, что дает выигрыш в скорости при частых вызовах.

⚠️ Внимание: Не пытайтесь эмулировать предопределенные элементы, создавая обычные записи с кодом «00001». Это не даст преимуществ производительности и усложнит поддержку конфигурации при переходах между версиями платформы.

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

Особенности использования в разных объектах метаданных

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

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

☑️ Проверка настройки предопределенного элемента

Выполнено: 0 / 6

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

ℹ️ Примечание: Интерфейс и доступные настройки предопределенных данных могут незначительно отличаться в зависимости от версии платформы 1С:Предприятие (8.2, 8.3, 8.4). Всегда сверяйтесь с официальной документацией к конкретной версии, если работаете в устаревших релизах.

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

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

Нет, это невозможно. Предопределенные элементы создаются и настраиваются только в режиме Конфигуратор. В режиме предприятия можно только читать их или изменять их реквизиты (если это разрешено правами), но нельзя создать новый элемент с флагом предопределенности.

Что будет, если изменить имя предопределенного элемента в конфигураторе?

Изменение имени приведет к ошибке компиляции во всех модулях, где использовалось старое имя. Вам придется найти все места использования (контекстный поиск) и заменить имя на новое. Сами данные в базе при этом не потеряются, изменится только программный идентификатор.

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

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

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

При выгрузке и загрузке конфигурации (файлы .cf и .cfu) предопределенные элементы переносятся автоматически вместе с объектами метаданных. При сравнении и объединении конфигураций система автоматически отслеживает изменения в их свойствах и предлагает варианты решения конфликтов.