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