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

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

Как задать константу в 1С

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

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

Задать константу можно двумя принципиально разными способами: интерактивно в режиме «1С:Предприятие» через интерфейс программы и программно — из кода на встроенном языке. Для разработчика добавляется третья задача: создать сам объект константы в конфигураторе, определить его тип и длину. Каждый из сценариев имеет свои требования к правам доступа и свои ограничения.

Ниже разобраны все три сценария с конкретными шагами, примерами кода и проверками результата. Материал подходит и для пользователя типовой конфигурации, которому нужно заполнить константу «Организация» или «Руководитель», и для разработчика, добавляющего собственные константы в конфигурацию.

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

Константа хранит значение, которое едино для всей базы и меняется редко: раз в месяц, раз в год или при смене реквизитов организации. Типичные примеры из типовых конфигураций: «Валюта регламентированного учета», «Основная организация», «Ответственный за ведение учета», функциональные опции вида «Использовать несколько складов».

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

Как задать константу в режиме «1С:Предприятие»

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

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

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

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

Как создать константу в конфигураторе

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

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

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

Как задать и прочитать константу программно

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

// Запись значения константы

Константы.ОсновнаяОрганизация.Установить(СсылкаНаОрганизацию);

// Чтение значения константы

ТекущаяОрганизация = Константы.ОсновнаяОрганизация.Получить();

// Проверка на пустое значение

Если Не ЗначениеЗаполнено(ТекущаяОрганизация) Тогда

Сообщить("Константа не заполнена");

КонецЕсли;

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

Набор = Константы.СоздатьНабор("ОсновнаяОрганизация, ИспользоватьСклады");

Набор.ОсновнаяОрганизация = СсылкаНаОрганизацию;

Набор.ИспользоватьСклады = Истина;

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

Метод Установить() записывает значение сразу, без явного вызова Записать(). Это частая причина ошибок: разработчик присваивает значение в цикле, не подозревая, что каждая итерация выполняет отдельную запись в базу.
ПЗ
Практическое замечание

Права доступа и ограничения

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

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

Типичные ошибки при работе с константами

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

Ещё одна группа ошибок связана с ожиданием «истории» значений. Константа хранит только последнее значение: предыдущее безвозвратно перезаписывается. Если нужно отслеживать, когда и кем менялась настройка, используйте регистр сведений или журнал регистрации.

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

Как проверить результат

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

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

Контрольные точки

Как проверить результат

Значение в форме настройки
Норма

Отображается введённое значение после повторного открытия

Тревожный признак

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

Чтение через код
Норма

Получить() возвращает записанное значение

Тревожный признак

Возвращается Неопределено или пустая ссылка

Поведение документов
Норма

Константа подставляется при создании новых документов

Тревожный признак

Поля не заполняются, значение игнорируется

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

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

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

Чем константа отличается от параметра сеанса?

Константа хранится в базе постоянно и одинакова для всех сеансов. Параметр сеанса существует только в памяти текущего сеанса пользователя и сбрасывается при выходе из программы. Для персональных настроек пользователя чаще подходят параметры сеанса или хранилище общих настроек, а не константы.

Почему константа недоступна в списке «Все функции»?

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

Можно ли хранить в константе картинку или файл?

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

Что произойдёт при удалении константы из конфигурации?

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

Как задать константу сразу во всех узлах распределённой базы?

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

Итог

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

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