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

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

Для чего нужны константы в 1С:Предприятие

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

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

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

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

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

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

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

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

Какие задачи решают константы на практике

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

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

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

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

Параметры, влияющие на проведение документов и расчёты

Реквизиты по умолчаниюОрганизация, склад, валюта

Значения для автоподстановки в новые документы

ПереключателиБулевы константы

Включение и отключение механизмов и элементов интерфейса

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

Данные для интеграций и распределённых баз

Как работать с константами в коде

Чтение и запись константы выполняются через менеджер констант. Базовый синтаксис прост: получение значения — Константы.ОсновнаяОрганизация.Получить(), установка — Константы.ОсновнаяОрганизация.Установить(НовоеЗначение). Метод Установить сразу записывает значение в базу, отдельный вызов записи не требуется.

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

bsl
// Чтение значения
Ставка = Константы.ОсновнаяСтавкаНДС.Получить();

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

// Запись нескольких констант одним набором
Набор = Константы.СоздатьНабор("ПрефиксБазы, АдресСервиса");
Набор.ПрефиксБазы = "ЦБ";
Набор.АдресСервиса = "https://api.example.local";
Набор.Записать();

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

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

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

Сравнение вариантов хранения

Константа

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

Справочник

Множество элементов с реквизитами: склады, валюты, контрагенты. Избыточен для одиночного флага.

Параметр сеанса

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

Регистр сведений

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

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

Как добавить константу в конфигурацию

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

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

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

Типичные ошибки и ограничения

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

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

В клиент-серверном режиме массовое чтение констант в цикле без необходимости тоже считается плохой практикой: хотя чтение кэшируется, лишние серверные вызовы в клиентском коде замедляют работу. Значения, нужные многократно, читают один раз и передают параметром.

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

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

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

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

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

Константа возвращает установленное значение во всех сеансах после записи

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

Код получает пустое значение или ошибку доступа

Форма настройки
Норма

Пользователь с нужной ролью видит поле и может его изменить

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

Поле недоступно или изменение не сохраняется

Переключатель функциональности
Норма

При включении появляются связанные поля и проверки, при отключении скрываются

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

Интерфейс не реагирует, документы проводятся по старой логике

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

Есть обработка случая, когда константа не заполнена: значение по умолчанию или понятное сообщение

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

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

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

Итог

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

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

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

Можно ли хранить в константе пароль или токен доступа?

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

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

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

Сколько констант можно создать в конфигурации?

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

Чем константа отличается от функциональной опции?

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

Можно ли изменить константу из внешней обработки?

Да, если у пользователя есть права на изменение константы: внешняя обработка выполняет тот же код Константы.Имя.Установить(Значение). Это удобно для первоначального заполнения настроек при внедрении, но обработку с такой возможностью не следует давать пользователям без контроля.

Почему после изменения константы другой пользователь видит старое значение?

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