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

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

Для чего нужны константы в 1С и как с ними работать

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

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

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

В этой статье разберём, какие задачи решают константы, чем они отличаются от справочников и параметров сеанса, как их создавать, изменять и читать из кода, а также какие ошибки встречаются чаще всего.

Какие задачи решают константы

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

На практике константы применяются в нескольких типовых сценариях:

  • Реквизиты собственной организации — наименование, префикс нумерации, данные для печатных форм, если учёт ведётся от одного лица.
  • Функциональные переключатели — булевы константы, включающие или отключающие целые подсистемы: «Вести складской учёт», «Использовать обмен с сайтом», «Вести учёт по нескольким организациям».
  • Параметры интеграций — адреса сервисов, каталоги обмена, токены доступа (последние лучше хранить в защищённом хранилище, но на практике часто встречаются и в константах).
  • Настройки по умолчанию — основная валюта, основной склад, ставка НДС, подставляемая в новые документы.

Где константы хранятся и как устроены

Физически все константы конфигурации хранятся в одной служебной таблице базы данных: каждой константе соответствует колонка, а строка в таблице всего одна. Из этого следуют два важных практических вывода. Во-первых, чтение константы — дешёвая операция, не требующая сложных запросов. Во-вторых, добавление новой константы — это реструктуризация таблицы, что на больших базах требует планового обновления конфигурации.

Тип значения константы задаётся в конфигураторе и может быть почти любым: примитивные типы (число, строка, дата, булево), ссылки на справочники и документы, перечисления, а также хранилище значения — для картинок, файлов и настроек сложной структуры. Допускается составной тип, но злоупотреблять им не стоит: проверка и обработка значений усложняются.

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

Чем константы отличаются от справочников, регистров и параметров сеанса

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

ОбъектСколько значенийКогда выбиратьОграничение
КонстантаОдно на всю базуГлобальная настройка, редко меняетсяНет истории изменений
СправочникМного элементовСписок значений с реквизитамиИзбыточен для одного значения
Регистр сведенийМного, с отборамиНастройки в разрезе организаций, периодов, пользователейСложнее чтение и настройка
Параметр сеансаОдно на сеансДанные текущего пользователя, не хранятся в базеСбрасывается при завершении сеанса

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

Константа или регистр сведений

Константа

Подходит, когда значение одно на всю базу и история не нужна. Не подходит для настроек в разрезе организаций или периодов.

Периодический регистр сведений

Подходит, когда нужно хранить историю изменений значения по датам. Требует более сложного чтения через срез последних.

Регистр сведений с измерениями

Подходит для настроек в разрезе организаций, складов, пользователей. Избыточен для единственного глобального значения.

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

Создание константы занимает несколько минут и не требует написания кода. Порядок действий стандартный для любой конфигурации.

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

После обновления конфигурации проверьте права доступа: роли, которые должны менять настройку, получают право «Изменение» на константу, остальным достаточно «Чтение». Если константа управляет критичным режимом — например, отключает проведение документов, — право изменения стоит оставить только администраторам.

Как читать и изменять константы в коде

Работа с константами из встроенного языка выполняется через менеджер констант. Чтение и запись выглядят так:

// Чтение значения константы

Префикс = Константы.ПрефиксИнформационнойБазы.Получить();

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

Константы.ПрефиксИнформационнойБазы.Установить("УТ-");

// Работа через менеджер конкретной константы

МенеджерКонстанты = Константы.ИспользоватьОбменССайтом.СоздатьМенеджерЗначения();

МенеджерКонстанты.Прочитать();

Если Не МенеджерКонстанты.Значение Тогда

МенеджерКонстанты.Значение = Истина;

МенеджерКонстанты.Записать();

КонецЕсли;

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

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

Константы как функциональные опции

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

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

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

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

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

Типичные ошибки
01
Хранение списка значений в константе через строку с разделителями — при росте списка становится невозможным поиск и отборы; нужен справочник или регистр
02
Запись константы внутри цикла обработки документов — приводит к конфликтам блокировок и падению производительности
03
Использование константы там, где нужна история, — старые значения теряются безвозвратно, восстановить их можно только из резервной копии
04
Отсутствие прав на чтение константы у рядовых ролей — код, обращающийся к константе, падает с ошибкой доступа у обычных пользователей
05
Хранение паролей и ключей API в открытом виде — значение доступно любому, кто может прочитать константу или выгрузить базу

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

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

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

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

Повторное чтение возвращает новое значение во всех сеансах после их перезапуска или обновления

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

Разные сеансы видят разные значения — проверьте, не кэшируется ли значение в коде

Доступность настройки пользователю
Норма

Пользователь с нужной ролью видит и меняет значение, остальные — только читают

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

Ошибка «Нарушение прав доступа» при открытии формы настроек

Работа функциональной опции
Норма

При снятии флажка связанные команды и поля исчезают из интерфейса

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

Объекты остаются видимыми — проверьте привязку объектов к опции

Когда константы не нужны: альтернативы

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

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

Маршрут решения

Как выбрать хранилище для значения

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

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

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

Частые вопросы о константах в 1С

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

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

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

Чаще всего значение кэшируется в коде: его прочитали один раз в переменную модуля и используют дальше без повторного обращения. Помогает перезапуск сеанса или переработка кода так, чтобы константа читалась непосредственно перед использованием. Также проверьте, не записано ли значение в другую базу при распределённой работе.

Сколько констант можно создать в конфигурации?

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

Чем константа отличается от функциональной опции?

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

Можно ли хранить в константе картинку или файл?

Да, для этого константе назначается тип «Хранилище значения», внутрь которого помещаются двоичные данные или картинка. Так часто хранят логотип организации для печатных форм. Учитывайте, что большие файлы увеличивают размер таблицы констант и время её чтения, поэтому для коллекций файлов лучше подходят присоединённые файлы справочников.

Опасно ли обновление конфигурации с новой константой на рабочей базе?

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