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

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

Для чего предназначен объект конфигурации «Константа» в 1С

Разбираем объект конфигурации «Константа» в 1С: назначение, типы данных, создание в конфигураторе, работа из кода, отличия от справочников и типичные ошибки.

Константа — один из базовых объектов конфигурации 1С, предназначенный для хранения единичных значений, которые не привязаны к конкретным документам, справочникам или периодам времени. Типичные примеры: наименование организации, ИНН, валюта учёта по умолчанию, префикс информационной базы, признак ведения того или иного учёта. Всё это — одиночные значения, которые нужны системе постоянно и меняются редко.

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

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

Какие данные хранят в константах

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

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

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

Типы данных и основные свойства константы

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

Среди важных свойств константы: «Использовать в итогах» (в современных версиях платформы — история данных), «Режим управления блокировкой данных», а также принадлежность к функциональным опциям. Если константа связана с функциональной опцией, её значение может управлять доступностью элементов интерфейса и целых подсистем.

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

Как создать константу в конфигураторе

Добавление константы выполняется в дереве конфигурации: ветка «Константы» → контекстное меню «Добавить». После этого задаётся имя (без пробелов, по правилам идентификаторов), синоним, тип данных и длина для строк. Имя важно выбирать осмысленно, потому что именно оно будет использоваться в программном коде.

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

Порядок создания константы
  1. 1
    Откройте конфигуратор и найдите в дереве конфигурации ветку «Константы»
  2. 2
    Через контекстное меню выберите «Добавить» и задайте имя и синоним
  3. 3
    Укажите тип данных: примитивный, ссылочный или составной
  4. 4
    При необходимости привяжите константу к функциональной опции
  5. 5
    Добавьте константу на форму настроек или в командный интерфейс подсистемы
  6. 6
    Обновите конфигурацию базы данных и проверьте запись и чтение значения

Работа с константами из встроенного языка

Чтение и запись значений констант выполняется через менеджер констант. Основные конструкции — методы Получить() и Установить(). Для работы с несколькими константами одновременно используется набор констант, который читает и записывает значения пакетом, что удобно на формах настроек.

bsl
// Чтение значения
ВалютаУчета = Константы.ОсновнаяВалюта.Получить();

// Запись значения
Константы.ОсновнаяВалюта.Установить(НоваяВалюта);

// Работа с набором констант
Набор = Константы.СоздатьНабор("ОсновнаяВалюта, ИспользоватьСерии");
Набор.Прочитать();
Набор.ОсновнаяВалюта = Справочники.Валюты.НайтиПоКоду("643");
Набор.Записать();

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

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

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

Выбор объекта для хранения настройки

Константа

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

Регистр сведений с измерениями

Значение зависит от организации, пользователя или другого объекта. Требует больше кода для чтения и записи.

Периодический регистр сведений

Нужна история изменений значения во времени, например учётная политика или курсы валют.

Справочник

Значений несколько, они образуют список с дополнительными реквизитами и иерархией.

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

Права доступа, обмены и подводные камни

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

В планах обмена константы могут регистрироваться к выгрузке, если входят в состав плана обмена. Это важно для распределённых баз: префикс узла и другие настройки синхронизации нередко хранятся именно в константах, и их некорректная миграция приводит к конфликтам нумерации.

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

Типичные ошибки при работе с константами
01
Хранение истории в константе: старое значение затирается новым, восстановить его невозможно — нужен периодический регистр сведений
02
Составной тип «на всякий случай»: затрудняет контроль ввода и приводит к непредсказуемым значениям
03
Чтение константы в цикле вместо кэширования в переменную — лишние обращения и потеря производительности
04
Отсутствие прав на константу в ролях: у пользователей перестают работать настройки без явной ошибки
05
Хранение паролей и ключей открытым текстом — компрометация при выгрузке базы

Как проверить, что константа работает правильно

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

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

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

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

Константа доступна на форме настроек, сохраняется и восстанавливается после перезапуска

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

Поле недоступно или значение сбрасывается — проверьте права и привязку к форме

Чтение из кода
Норма

Константы.Имя.Получить() возвращает актуальное значение нужного типа

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

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

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

Код явно обрабатывает незаполненную константу

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

Ошибки и непредсказуемое поведение в алгоритмах

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

Частые вопросы о константах 1С

Чем константа отличается от параметра сеанса?

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

Можно ли хранить в константе список значений?

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

Сохраняется ли история изменений константы?

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

Как вывести константу на форму настроек?

Создайте общую форму, добавьте реквизит через набор констант (КонстантыНабор) или отдельный реквизит, связанный с константой, и разместите элемент управления. Затем включите форму в панель настроек подсистемы через командный интерфейс.

Почему обращение к константе вызывает ошибку прав?

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

Что произойдёт со значением при изменении типа константы?

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

Итог

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

Константа хранит одно глобальное значение без истории: настройки, реквизиты организации, переключатели функциональности. Для истории — периодический регистр сведений, для значений по измерениям — регистр сведений, для списков — справочник. Чтение и запись выполняются через Константы.Имя.Получить() и Установить(), а доступ контролируется правами в ролях.