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

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

Как установить значение константы в 1С

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

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

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

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

Где константы хранятся и как их найти

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

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

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

Установка значения через интерфейс пользователя

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

Если константа хранит ссылочное значение (например, «Основная организация» или «Основной склад»), поле предложит выбрать элемент из соответствующего справочника. Убедитесь, что нужный элемент справочника уже создан — иначе сначала создайте его, а потом возвращайтесь к настройке.

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

Порядок действий в интерфейсе
  1. 1
    Откройте раздел «Администрирование» или панель настроек конфигурации
  2. 2
    Найдите нужный параметр (воспользуйтесь поиском по настройкам, если он есть)
  3. 3
    Зафиксируйте текущее значение — запишите его или сделайте скриншот
  4. 4
    Введите новое значение нужного типа или выберите элемент справочника
  5. 5
    Нажмите «Записать»/«ОК» и убедитесь, что форма не сообщила об ошибке
  6. 6
    Проверьте поведение механизма, который зависит от этой константы

Программная установка значения константы

Разработчик устанавливает значение константы через менеджер констант. Базовая конструкция выглядит так: обращение к коллекции «Константы» по имени константы и вызов метода «Установить». Также можно присвоить значение свойству «Значение» и затем вызвать метод записи — оба подхода равнозначны по результату.

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

Константы.ПрефиксНумерации.Установить("АБ");

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

Метод «Установить» выполняет запись в базу данных сразу. Если нужно прочитать текущее значение, используйте «Константы.ИмяКонстанты.Получить()». Чтение не требует транзакции, а вот запись при отсутствии прав завершится ошибкой «Нарушение прав доступа».

Для установки сразу нескольких констант удобен объект «КонстантыНабор» (менеджер набора констант): создайте набор, заполните значения и запишите одним действием. Это удобно при первоначальном заполнении базы или в процедурах обновления, когда группа связанных настроек должна измениться атомарно.

Набор = Константы.СоздатьНабор("ВалютаУчета, ПрефиксНумерации");

Набор.ВалютаУчета = НайденнаяВалюта;

Набор.ПрефиксНумерации = "АБ";

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

bsl
Константы.ИмяКонстанты.Установить(НовоеЗначение); // запись значения
Текущее = Константы.ИмяКонстанты.Получить(); // чтение значения

Особенности типов данных и типичные значения

Тип значения при установке должен соответствовать типу константы, заданному в конфигураторе. Строковая константа примет строку, булева — «Истина» или «Ложь», ссылочная — только ссылку на объект указанного типа. Если константа имеет составной тип (например, «строка или ссылка на справочник»), подойдёт значение любого из перечисленных типов.

Частный случай — константа типа «ХранилищеЗначения». В такую константу нельзя записать значение напрямую: сначала создаётся объект «ХранилищеЗначения» с помощью конструктора «Новый ХранилищеЗначения(Значение)», и уже он передаётся методу «Установить». При чтении значение извлекается методом «Получить» у хранилища.

Числовые константы с ограничением длины и точности (например, длина 15, точность 2) при записи значения с большим числом знаков могут округлить его или вызвать ошибку — зависит от настроек. Строковые константы фиксированной длины обрезают лишние символы. Проверяйте определение константы в конфигураторе, если значение «не сохраняется так, как вводили».

Права доступа и работа в транзакции

На запись константы действуют стандартные права: у роли пользователя должно быть право «Изменение» (и «Интерактивное изменение» — для работы через формы) на конкретную константу. Если прав нет, при попытке записи возникнет ошибка нарушения прав доступа. В типовых конфигурациях часть констант доступна только администраторам.

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

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

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

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

Наиболее распространённые ошибки при программной установке: обращение к константе по несуществующему имени (опечатка вызовет ошибку компиляции или выполнения), передача значения несоответствующего типа, попытка записи без прав и изменение константы в привилегированном режиме без понимания последствий для разграничения доступа.

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

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

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

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

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

Что использовать вместо константы

Константа

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

Периодический регистр сведений

Значение меняется во времени и нужна история: курсы, ставки, учётная политика по датам

Справочник

Нужен список значений с дополнительными реквизитами: организации, склады, валюты

Перед введением новой константы в собственной доработке задайте себе три вопроса: значение одно на всю базу? Нужна ли история изменений? Как часто оно будет меняться? Ответы сразу покажут, константа это, регистр сведений или справочник.

Итог

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

Константу можно установить через форму настроек в режиме «Предприятие» или программно — Константы.Имя.Установить(Значение). Следите за типом данных, правами доступа и последствиями для зависимых механизмов; перед изменением ответственных настроек фиксируйте старое значение и делайте резервную копию.

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

Как узнать текущее значение константы программно?

Используйте метод Получить: Значение = Константы.ИмяКонстанты.Получить(). Для констант типа «ХранилищеЗначения» результат нужно дополнительно извлечь: Константы.Имя.Получить().Получить(). Чтение не требует прав на изменение, достаточно права на чтение.

Можно ли установить значение константы через обработку «Групповое изменение реквизитов»?

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

Почему после записи константы в коде значение в форме не изменилось?

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

Как установить константу при обновлении конфигурации автоматически?

Добавьте код установки в обработчик обновления информационной базы (процедуры подсистемы обновления в БСП или в собственный модуль первого запуска). Такой код выполняется монопольно при обновлении и гарантированно заполнит нужные настройки до начала работы пользователей.

Что делать, если при записи константы возникает ошибка «Нарушение прав доступа»?

Проверьте роли пользователя: на константу нужны права «Изменение», а для интерактивной работы — «Интерактивное изменение». Обратитесь к администратору для назначения роли либо выполняйте запись из кода в привилегированном режиме, если это оправдано логикой задачи.

Можно ли хранить в константе пароль или ключ API?

Технически можно (в том числе через тип «ХранилищеЗначения»), но константа хранится в базе в открытом виде и доступна всем, у кого есть права на чтение. Для секретов безопаснее использовать защищённые механизмы хранения, предусмотренные в вашей конфигурации, и ограничивать доступ ролями.