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