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