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