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