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