В процессе разработки конфигураций на платформе 1С:Предприятие 8 программисты постоянно сталкиваются с необходимостью жестко фиксировать определенные сущности в коде. Одним из мощнейших инструментов для этого являются предопределенные значения. Это специальные объекты метаданных, которые существуют в системе «по умолчанию» и не требуют ручного создания пользователем при запуске базы данных.
Понимание механизма работы этих элементов критически важно для построения стабильной архитектуры приложения. Предопределенное значение позволяет ссылаться на конкретный элемент справочника, план видов характеристик или перечисления напрямую из кода, не зная его уникального идентификатора (UUID), который может меняться при переносе базы между серверами.
В отличие от обычных записей, которые создаются в режиме предприятия, предопределенные элементы закладываются еще на этапе проектирования конфигурации. Это гарантирует их наличие в любой информационной базе, созданной на основе этой конфигурации, что устраняет массу ошибок типа «Элемент не найден» при первом запуске или обновлении типовой конфигурации.
Сущность и назначение предопределенных элементов
Предопределенные значения служат своеобразными «якорями» в море данных вашей системы. Когда вы пишете программный код, вам часто нужно обратиться к конкретной статье затрат, определенному виду операции или статусу документа. Если использовать обычный поиск по наименованию, программа станет уязвимой: пользователь может переименовать элемент, и логика работы сломается.
Использование предопределенных элементов решает эту проблему кардинально. Ссылка на них в коде привязана не к имени, которое можно изменить, и не к GUID, который меняется при выгрузке/загрузке, а к системному имени метаданных. Системное имя остается неизменным на протяжении всего жизненного цикла конфигурации, обеспечивая надежность ссылок.
Чаще всего такой подход применяется для справочников с небольшим количеством записей, которые редко меняются, но активно используются в алгоритмах. Например, справочник «Валюты», где есть предопределенный элемент «Рубли», или справочник «Статьи затрат» с элементом «Основная деятельность».
Используйте предопределенные значения для элементов, которые участвуют в регламентных операциях, расчетах или являются обязательными для проведения документов.
Важно отличать предопределенные значения от констант. Константы хранят простые типы данных (число, строка, дата) и имеют всего одно значение для всей базы. Предопределенный же элемент — это полноценная запись в таблице базы данных, у которой могут быть заполнены реквизиты, иерархия и другие свойства, характерные для данного объекта метаданных.
Технология создания в Конфигураторе
Процесс настройки предопределенного значения начинается в окне конфигурации среды 1С:Предприятие. Разработчик должен выбрать нужный объект метаданных (например, Справочник) и перейти на вкладку «Предопределенные данные». Именно здесь формируется список элементов, которые будут созданы автоматически.
При добавлении нового элемента необходимо указать два ключевых параметра: Имя и Синоним. Имя используется исключительно для программирования и не отображается пользователю в интерфейсе. Оно должно быть уникальным в пределах объекта и соответствовать правилам именования идентификаторов 1С (латиница, без пробелов).
Синоним — это то название, которое увидит конечный пользователь в списке справочника. Его можно менять без последствий для работающего кода, так как в модулях используется именно системное имя. Также на этом этапе можно сразу заполнить основные реквизиты элемента, чтобы он был полностью готов к работе.
☑️ Настройка предопределенного элемента
⚠️ Внимание: После добавления предопределенного значения необходимо выполнить обновление конфигурации базы данных. Без этого шага новый элемент не появится в информационной базе, и попытки обращения к нему в коде вызовут ошибку выполнения.
Для сложных структур данных, таких как планы счетов или планы видов характеристик, механизм создания аналогичен, но имеет свои нюансы. Например, для плана счетов предопределенный счет может иметь установленные правила корреспонденции, которые также сохраняются в метаданных.
Обращение к значениям в программном коде
Работа с предопределенными данными в коде 1С отличается элегантностью и простотой. Для доступа к такому элементу используется специальный синтаксис, начинающийся с символа подчеркивания. Это позволяет среде разработки сразу понять, что речь идет о метаданных, а не о переменной.
Рассмотрим пример получения ссылки на предопределенный элемент справочника «Валюты». В коде это будет выглядеть как обращение к свойству объекта метаданных. Такой подход гарантирует, что вы получите именно ту ссылку, которая была задумана архитектором системы.
СсылкаНаРубли = Справочники.Валюты.Рубль;
Здесь Справочники.Валюты указывает на объект метаданных, а Рубль — это системное имя предопределенного элемента. Если попытаться обратиться к элементу, который не был помечен как предопределенный, используя такой синтаксис, компилятор выдаст ошибку еще на этапе проверки модуля.
Синтаксис обращения: ИмяОбъектаМетаданных.ИмяПредопределенногоЭлемента. Всегда начинается с префикса объекта (Справочники, Перечисления, Документы).
Помимо получения ссылки, можно сразу читать реквизиты предопределенного элемента. Это часто используется при инициализации переменных или установке значений по умолчанию в новых документах. Например, можно сразу получить курс валюты или код налоговой инспекции.
| Тип объекта | Пример обращения в коде | Возвращаемый тип |
|---|---|---|
| Справочник | Справочники.Контрагенты.ОсновнойПоставщик |
СправочникСсылка |
| Перечисление | Перечисления.СтатусыЗаказа.ВРаботе |
ПеречислениеСсылка |
| ПланВидовХарактеристик | ПланыВидовХарактеристик.ДополнительныеРеквизиты.Вес |
ПланВидовХарактеристикСсылка |
| ПланСчетов | ПланыСчетов.Хозрасчетный.Касса |
ПланСчетовСсылка |
Использование в запросах и отчетах
Одной из самых частых задач является фильтрация данных по предопределенному элементу в запросах. В языке запросов 1С также поддерживается прямой синтаксис обращения к таким значениям. Это делает текст запроса читаемым и независимым от конкретных идентификаторов базы.
При формировании отчета, например, оборотно-сальдовой ведомости, программисту часто нужно отобрать движения только по определенному счету. Использование предопределенного значения позволяет жестко зафиксировать этот счет в тексте запроса, независимо от того, под каким номером он идет в плане счетов у конкретного клиента.
ВЫБРАТЬ
РегистрБухгалтерии.Хозрасчетный.АктивныйСчет КАК Счет,
СУММА(РегистрБухгалтерии.Хозрасчетный.Сумма) КАК Сумма
ИЗ
РегистрБухгалтерии.Хозрасчетный КАК РегистрБухгалтерии
ГДЕ
РегистрБухгалтерии.Счет = ПланыСчетов.Хозрасчетный.РасчетыСПоставщиками
В данном примере условие РегистрБухгалтерии.Счет = ПланыСчетов.Хозрасчетный.РасчетыСПоставщиками гарантирует, что будут отобраны данные именно по этому счету. Если бы мы использовали строковое сравнение или подставляли GUID, поддержка такого кода превратилась бы в кошмар при обновлении конфигурации.
В СКД (Системе Компоновки Данных) предопределенные значения также играют важную роль. Они могут использоваться в параметрах отчета, позволяя пользователю выбирать из списка только те элементы, которые важны для анализа, при этом один из вариантов может быть установлен как значение по умолчанию программно.
Ограничения и особенности работы
Несмотря на удобство, у предопределенных значений есть ряд технических ограничений, о которых должен знать разработчик. Главное из них — количество. В одной конфигурации не может быть бесконечное число предопределенных элементов для одного объекта. Лимит зависит от версии платформы, но обычно он составляет несколько тысяч, чего более чем достаточно для справочников-классификаторов.
Еще одна важная особенность касается удаления. Если предопределенный элемент уже используется в коде или в данных базы, его удаление из конфигурации может привести к серьезным ошибкам при обновлении. Система не позволит просто так удалить элемент, на который есть ссылки, без специальной обработки конвертации данных.
⚠️ Внимание: Изменение системного имени предопределенного элемента приравнивается к его удалению и созданию нового. Все существующие ссылки в коде перестанут работать, потребуется ручное исправление модулей.
Также стоит помнить, что предопределенные элементы занимают место в метаданных конфигурации. Чрезмерное увлечение ими для справочников с динамически меняющимся составом (например, «Номенклатура») является архитектурной ошибкой. Для таких случаев лучше использовать механизмы поиска по коду или специальным реквизитам-флагам.
Что происходит при обновлении типовой конфигурации?
При обновлении типовой конфигурации предопределенные элементы могут быть добавлены или изменены разработчиком фирмы 1С. Если вы создавали свои элементы с такими же именами, может возникнуть конфликт, который решается через сравнение и объединение конфигураций.
Сравнение с другими методами идентификации
Почему не использовать просто поиск по коду элемента? Действительно, у многих справочников есть реквизит «Код». Однако код — это данные, которые пользователь теоретически может изменить (если это не запрещено настройками прав доступа). Предопределенное значение — это часть структуры метаданных, защищенная от случайного изменения пользователем.
Использование уникальных идентификаторов (UUID) — еще один вариант, но он крайне неудобен для разработчика. UUID представляет собой длинную строку вида e5f2a1b0-..., которую невозможно запомнить или прочитать. Ошибка в одной цифре приведет к тому, что программа будет ссылаться на несуществующий объект или, что хуже, на другой объект.
Предопределенные значения сочетают в себе надежность UUID (поскольку привязка идет к системному имени, которое транслируется во внутренний ID) и читаемость кода. Вы видите в коде слово НДС20, а не набор символов, что значительно упрощает поддержку и рефакторинг проекта.
⚠️ Внимание: Интерфейс и возможности работы с метаданными могут незначительно отличаться в разных версиях платформы 1С:Предприятие 8.3. Всегда сверяйтесь с синтаксис-помощником вашей конкретной версии платформы при использовании новых функций.
Часто задаваемые вопросы
Можно ли создать предопределенный элемент программно?
Нет, предопределенные элементы создаются только в режиме Конфигуратора при проектировании метаданных. В режиме Предприятия или через код можно создавать только обычные элементы справочников. Однако можно программно проверять, является ли элемент предопределенным, используя свойство ЭтоПредопределенныйЭлемент().
Что будет, если переименовать предопределенный элемент в базе данных?
Пользователь может изменить Синоним (видимое имя) элемента в режиме предприятия, и это не повлияет на работу кода. Однако изменить Системное имя через интерфейс невозможно. Если системное имя изменено в Конфигураторе, код потребует исправления.
Как найти все использования предопределенного значения в коде?
В среде 1С:Предприятие используйте глобальный поиск по конфигурации. Введите системное имя элемента (например, Рубль) в строку поиска. Система найдет все места в модулях, где встречается обращение к этому предопределенному значению.
Можно ли сделать предопределенным элементом группу справочника?
Да, для иерархических справочников можно пометить как предопределенную не только конечную запись, но и целую группу. Это удобно для организации структуры данных, когда определенные ветки дерева должны существовать всегда (например, «Товары» -> «Услуги»). Обращение в коде будет аналогичным.
Влияют ли предопределенные элементы на производительность базы?
Сами по себе они не влияют на производительность отрицательно. Напротив, использование предопределенных значений в запросах часто работает быстрее, чем соединения для поиска элемента по строковому наименованию, так как оптимизатор запросов сразу знает конкретный ссылочный тип данных.