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