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