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