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

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

Константы в 1С: для чего нужны и как их использовать

Что такое константа в 1С, зачем она нужна и когда её применять. Примеры использования, создание в конфигураторе, типичные ошибки и отличия от других объектов.

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

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

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

Что такое константа и как она устроена

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

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

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

Для чего константы используются на практике

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

Второй сценарий — функциональные опции и переключатели режимов работы. Константа типа «Булево» с именем вроде «ВестиУчетПоСкладам» или «ИспользоватьСерииНоменклатуры» включает или отключает целые блоки функциональности: видимость полей на формах, проведение документов по дополнительным регистрам, проверки при записи.

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

Одно значение на базуПодходит

Данные не привязаны к организации, пользователю или периоду

Меняется редкоПодходит

Настройка устанавливается один раз и пересматривается в исключительных случаях

Нужна история измененийНе подходит

Используйте периодический регистр сведений

Значений несколькоНе подходит

Используйте справочник или регистр сведений

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

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

Если константа должна хранить, например, ссылку на организацию, выберите тип «СправочникСсылка.Организации». Если нужен переключатель — «Булево». Для строки задайте достаточную длину: слишком короткая строка обрежет данные, а неограниченная длина имеет ограничения при использовании в запросах и индексах.

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

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

Работа с константами в коде и запросах

Во встроенном языке доступ к константе выполняется через менеджер Константы. Чтение значения: Константы.НазваниеОрганизации.Получить(). Запись: Константы.НазваниеОрганизации.Установить("ООО Ромашка"). Также работает обращение через свойство: Константы.НазваниеОрганизации = "ООО Ромашка".

Если нужно прочитать или записать сразу несколько констант одним обращением к базе, используется объект КонстантыМенеджер.СоздатьНаборКонстант() или метод Константы.СоздатьНабор(). Это снижает количество обращений к серверу при пакетном сохранении настроек.

В запросах константы доступны через виртуальную таблицу Константы: ВЫБРАТЬ Константы.НазваниеОрганизации ИЗ Константы КАК Константы. Это удобно, когда значение константы нужно прямо в тексте запроса — например, для подстановки в отчёт на СКД без предварительного чтения в коде.

bsl
// Чтение и запись константы
ТекущееНазвание = Константы.НазваниеОрганизации.Получить();
Константы.НазваниеОрганизации.Установить("ООО Ромашка");

// Набор констант — одна транзакция на несколько значений
Набор = Константы.СоздатьНабор("НазваниеОрганизации, ИННОрганизации");
Набор.НазваниеОрганизации = "ООО Ромашка";
Набор.ИННОрганизации = "7712345678";
Набор.Записать();

Константа или другой объект: как выбрать правильно

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

Типичная ошибка проектирования — хранить в константе то, что со временем станет множественным. Например, константа «ОсновнойСклад» перестаёт работать, когда компания открывает второй филиал, и приходится срочно переносить данные в регистр сведений с измерением «Организация». Если есть хоть малейшая вероятность, что значений станет несколько, сразу закладывайте регистр сведений.

Обратная ошибка — заводить справочник из одного элемента ради единственной настройки. Это усложняет интерфейс, код и отчёты без всякой выгоды.

Где хранить значение

Константа

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

Справочник

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

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

Значение с историей по датам: курсы валют, цены, ответственные лица на дату.

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

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

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

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

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

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

Типичные ошибки
01
Хранение в константе данных, которым позже понадобится история, — приходится срочно мигрировать в регистр сведений
02
Использование константы как счётчика или флага оперативного состояния — конфликты блокировок при параллельной работе
03
Неограниченная длина строки без необходимости — ограничения в запросах и сортировках
04
Забытое включение константы в план обмена — настройки расходятся между узлами РИБ
05
Запись константы по одной вместо набора — лишние транзакции при пакетном сохранении настроек

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

После создания и заполнения константы проверьте три вещи: значение читается из кода, значение сохраняется после перезапуска сеанса, значение корректно используется там, где планировалось (печатная форма, условие в коде, отчёт). Быстрая проверка — вывести значение через Сообщить() в обработке или консоли кода.

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

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

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

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

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

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

Возвращается пустое значение или значение другого типа

Сохранность после перезапуска
Норма

Значение на месте после закрытия и открытия сеанса

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

Значение сбрасывается — запись не была выполнена или откачена транзакция

Права пользователя
Норма

Пользователь видит и меняет значение согласно роли

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

Поле недоступно или изменения не сохраняются без сообщения об ошибке

Работа функциональной опции
Норма

Интерфейс меняется после смены значения константы

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

Элементы форм не реагируют — опция не связана с константой

FAQ: частые вопросы о константах в 1С

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

Константа хранится в базе постоянно и одинакова для всех пользователей. Параметр сеанса существует только в рамках сеанса конкретного пользователя, инициализируется при его старте и не сохраняется между сеансами. Для глобальных настроек — константа, для данных текущего пользователя (например, «ТекущийПользователь») — параметр сеанса.

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

Напрямую — нет, константа хранит одно значение. Обходные пути: составной тип (значение одного из нескольких типов, но всё равно одно) или хранение сериализованных данных в строке, что считается плохой практикой. Если значений несколько, правильное решение — справочник или регистр сведений.

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

Штатно история изменений констант не ведётся. В типовых конфигурациях на базе БСП можно подключить версионирование объектов, но для констант оно применяется ограниченно. Если история значения критична (например, кто и когда сменил ставку), храните данные в периодическом регистре сведений.

Почему в запросе константа возвращает NULL?

Чаще всего потому, что значение константы не заполнено — платформа возвращает NULL для незаполненных ссылочных констант в запросах. Обработайте это через ЕСТЬNULL() или проверку в коде. Вторая причина — неверное имя константы в тексте запроса, тогда возникнет ошибка ещё на этапе выполнения.

Можно ли изменить тип константы после того, как она заполнена?

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

Итог

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

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