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