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

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

Константа в 1С: что это и как с ней работать

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

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

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

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

Где находятся константы и как их найти в конфигураторе

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

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

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

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

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

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

Как читать и изменять константу программно

Работа с константами из встроенного языка выполняется через менеджер констант. Два основных метода — Получить() и Установить():

// Чтение значения

ТекущаяВалюта = Константы.ОсновнаяВалюта.Получить();

// Запись значения

Константы.ОсновнаяВалюта.Установить(НоваяВалюта);

// Проверка флага функциональности

Если Константы.ВестиУчетПоСкладам.Получить() Тогда

// показать складские поля

КонецЕсли;

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

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

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

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

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

Константа

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

Справочник

Список однотипных значений, на которые нужно ссылаться из документов: валюты, склады, единицы измерения

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

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

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

Функциональные опции и константы: как связаны

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

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

Типичные ошибки при работе с константами

Типичные ошибки
01
Хранение периодических данных в константе: курс валюты в константе перезаписывается без истории, старые документы пересчитать невозможно — нужен регистр сведений
02
Чтение константы в цикле: обращение к Константы.Имя.Получить() на каждой итерации большого цикла лишний раз дёргает менеджер — прочитайте значение один раз в переменную
03
Запись константы без проверки прав: у пользователя без прав на изменение вызов Установить() вызовет исключение — обрабатывайте ошибку или проверяйте права
04
Смена типа константы в обновлении без конвертации: при сужении типа данные могут быть потеряны — предусмотрите обработчик обновления
05
Использование константы как счётчика номеров: конкурентная запись из разных сеансов приводит к дублям — для нумерации используйте механизмы нумерации объектов

Как проверить результат и найти нужную константу в типовой базе

Если вы не знаете, какая константа отвечает за нужную настройку, есть несколько практических приёмов. Первый — открыть форму настройки в режиме предприятия, изменить параметр и в конфигураторе поиском по метаданным найти, какая константа связана с этой формой. Второй — использовать глобальный поиск по конфигурации (Ctrl+Shift+F) по слову из названия настройки.

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

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

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

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

Повторный вызов Получить() возвращает установленное значение

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

Возвращается старое или пустое значение — запись не выполнилась, проверьте права и исключения

Отображение в интерфейсе
Норма

После смены флага функциональности нужные элементы появились или скрылись у пользователей после перезапуска сеанса

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

Интерфейс не изменился — проверьте привязку функциональной опции и обновление кэша

Целостность данных
Норма

Смена настройки не затронула уже проведённые документы

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

Старые документы стали некорректными — откатите изменение на копии и проанализируйте зависимости

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

Итог

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

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

Частые вопросы

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

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

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

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

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

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

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

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

Кто имеет право изменять константы?

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

Удалится ли значение константы при обновлении конфигурации?

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