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

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

Как присвоить значение константе в 1С

Как присвоить значение константе в 1С: создание константы в конфигураторе, установка через интерфейс и кодом, типы данных, типичные ошибки и проверка результата.

Константа в 1С — это объект конфигурации, предназначенный для хранения значения, которое меняется редко или не меняется вовсе: наименование организации, ИНН, параметры обмена, адреса сервисов, числовые настройки алгоритмов. Значение константы едино для всей информационной базы и доступно из любого места кода.

Присвоить значение константе можно тремя способами: задать значение по умолчанию в конфигураторе, установить его в режиме 1С:Предприятие через форму констант или присвоить программно через встроенный язык. Выбор способа зависит от того, кто должен управлять значением — разработчик или пользователь.

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

Что такое константа и когда её использовать

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

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

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

Создание константы в конфигураторе

Откройте конфигуратор, в дереве конфигурации найдите ветку «Общие» → «Константы». Через контекстное меню выберите «Добавить». В палитре свойств задайте имя (без пробелов, по правилам идентификаторов), синоним для отображения пользователю и тип данных.

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

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

После создания обновите конфигурацию базы данных (F7 или меню «Конфигурация» → «Обновить конфигурацию базы данных»). Без этого шага константа не появится в базе, и обращение к ней вызовет ошибку.

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

Присвоение значения в режиме 1С:Предприятие

В типовых конфигурациях константы обычно собраны в общей форме «Константы» или разнесены по разделам настроек (например, «Администрирование» → «Общие настройки»). Пользователь открывает форму, вводит значение в поле и записывает — платформа сама присваивает значение константе.

В собственной конфигурации форма констант может отсутствовать. Тогда её нужно создать: в ветке «Общие формы» добавьте форму типа «Форма констант» и укажите, какие константы в неё входят. Альтернатива — стандартная обработка или вызов формы через «Все функции» (в тонком клиенте: меню → «Все функции» → «Константы»), если режим «Все функции» включён в параметрах.

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

Присвоение значения программно

Основной способ — метод Установить менеджера константы:

Константы.ВалютаУчета.Установить(НоваяВалюта);

Константы.АдресСервиса.Установить("https://api.example.ru");

Константы.ИспользоватьОбмен.Установить(Истина);

Чтение выполняется методом Получить:

ТекущийАдрес = Константы.АдресСервиса.Получить();

Если Не ЗначениеЗаполнено(ТекущийАдрес) Тогда

Сообщить("Адрес сервиса не задан");

КонецЕсли;

Для массовой записи нескольких констант используйте набор констант — он записывает значения одной транзакцией:

Набор = Константы.СоздатьНабор("АдресСервиса, ТаймаутСервиса");

Набор.АдресСервиса = "https://api.example.ru";

Набор.ТаймаутСервиса = 30;

Набор.Записать();

bsl
Константы.ИмяКонстанты.Установить(Значение);
Значение = Константы.ИмяКонстанты.Получить();

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

Особенности и ограничения

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

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

В разделённых базах (SaaS) константы могут быть разделёнными — тогда у каждой области данных своё значение. При разработке для сервиса проверяйте свойство «Разделение данных», иначе значение, записанное в одной области, окажется недоступно в другой.

Проверка результата и типичные ошибки

После присвоения проверьте значение: выполните Константы.ИмяКонстанты.Получить() в консоли кода или откройте форму констант. Если запись выполнялась в транзакции, убедитесь, что транзакция зафиксирована — при откате значение вернётся к прежнему.

Частые ошибки: обращение к константе до обновления конфигурации базы данных (ошибка «Поле объекта не обнаружено»), запись значения несовместимого типа, отсутствие у пользователя права изменения, попытка записать константу в фоновом задании без установки привилегированного режима при ограниченных правах.

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

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

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

Если значение должно различаться по пользователям — используйте ХранилищеОбщихНастроек. Если нужна история по датам — периодический регистр сведений. Если значений несколько и они образуют список — справочник или непериодический регистр сведений с измерением.

Сравнение вариантов хранения

Константа

Одно значение на всю базу, редкие изменения. Не подходит для истории и разных значений по пользователям.

Регистр сведений

Несколько значений по измерениям или периодам. Требует больше кода для чтения и записи.

Хранилище общих настроек

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

Итог

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

Константа создаётся в конфигураторе, значение присваивается через форму в режиме Предприятия или кодом Константы.Имя.Установить(Значение). Проверяйте тип значения, права доступа и обновление конфигурации базы данных.

Частые вопросы

Можно ли присвоить значение константе из внешней обработки?

Да. Внешняя обработка выполняется в контексте базы, поэтому код Константы.ИмяКонстанты.Установить(Значение) работает так же, как в модуле конфигурации. Учтите, что у пользователя, запускающего обработку, должно быть право изменения константы, либо код должен выполняться в привилегированном режиме.

Как задать константе составной тип данных?

В палитре свойств константы в поле «Тип» отметьте несколько типов, например строку и число. Однако составной тип усложняет проверки в коде — перед использованием значения придётся определять его фактический тип через ТипЗнч. По возможности ограничивайте константу одним типом.

Почему Константы.Имя.Получить() возвращает пустое значение?

Чаще всего константа просто не заполнена: значение по умолчанию в конфигураторе не задано, а в базе никто не записывал данные. Заполните константу через форму или код. Реже причина в разделении данных — в другой области сервиса значение своё.

Как записать несколько констант одной транзакцией?

Используйте набор констант: Константы.СоздатьНабор("Имя1, Имя2"), заполните поля набора и вызовите Записать(). Все значения зафиксируются атомарно — либо все, либо ни одного при ошибке.

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

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

Можно ли удалить константу, которая уже используется?

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