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

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

Как сделать константу в 1С: создание, настройка и работа в коде

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

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

Создать константу можно только в конфигураторе — пользователь в режиме «1С:Предприятие» лишь меняет её значение (если у него есть права). В типовых конфигурациях значения констант обычно выведены в формы настроек: «Администрирование», «Настройки программы», карточку организации. Поэтому задача разработчика — правильно создать объект, а задача пользователя — найти, где это значение редактируется.

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

Когда нужна константа, а когда другой объект

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

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

Маршрут решения

Как выбрать объект для хранения значения

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

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

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

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

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

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

Выбор типа данных и основных свойств

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

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

Обратите внимание на свойство «Использование» в разделе «Функциональные опции»: если константа типа «Булево» управляет доступностью части интерфейса, её можно связать с функциональной опцией — тогда при выключенном значении связанные объекты будут скрыты у пользователя. Также проверьте вкладку «Права» у ролей: у пользователей должны быть права на просмотр и изменение константы, иначе они не смогут задать её значение.

Работа с константой в коде

Для чтения и записи значения используется менеджер констант. Чтение выполняется методом Получить(), запись — методом Установить(). Пример:

// Чтение значения

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

// Запись значения

Константы.ВестиУчетПоСкладам.Установить(Истина);

Если нужно прочитать или записать несколько констант одним обращением к базе, используйте набор констант через Константы.СоздатьНабор("ОсновнаяОрганизация, ВестиУчетПоСкладам") — это сокращает количество обращений к серверу. Набор записывается методом Записать() после заполнения свойств.

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

bsl
// Безопасное чтение с проверкой заполненности
ОсновнаяОрганизация = Константы.ОсновнаяОрганизация.Получить();
Если НЕ ЗначениеЗаполнено(ОсновнаяОрганизация) Тогда
    ВызватьИсключение "Не заполнена константа 'Основная организация'. Задайте значение в настройках программы.";
КонецЕсли;

Вывод константы пользователю: формы и настройки

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

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

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

Частый приём для констант-признаков: назовите константу глаголом или утверждением («ИспользоватьРезервирование», «ВестиУчетПоСкладам») и сделайте её функциональной опцией. Тогда при выключенном признаке связанные документы, справочники и отчёты автоматически скроются из интерфейса, и пользователь не увидит лишнего функционала.
ПЗ
Практическое замечание

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

После создания константы проверьте полный цикл: откройте «1С:Предприятие», задайте значение через форму или список констант, закройте и снова откройте базу — значение должно сохраниться. Затем выполните чтение из кода (например, через консоль кода или временную обработку) и убедитесь, что Получить() возвращает именно то, что вы ввели.

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

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

Константа видна в дереве конфигурации и в «1С:Предприятии»
Норма

Объект есть в обеих средах, значение сохраняется после перезапуска

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

В предприятии константы нет — не обновлена конфигурация базы данных

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

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

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

Ошибка «Поле объекта не обнаружено» — опечатка в имени или база не обновлена

Права пользователя
Норма

Пользователь с типовой ролью может просматривать и менять значение

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

Кнопка записи недоступна или ошибка доступа — не настроены роли

Значение по умолчанию
Норма

До ввода возвращается пустое значение выбранного типа (0, пустая строка, Ложь)

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

Код падает на незаполненной константе — нет проверки ЗначениеЗаполнено()

Типичные ошибки
01
Не обновили конфигурацию базы данных после добавления константы — код падает с ошибкой «Поле объекта не обнаружено»
02
Хранят в константе периодические данные (курсы, ставки) — история теряется, старые значения перезаписываются
03
Обращаются к Константы из клиентской процедуры управляемой формы — ошибка компиляции или недоступность контекста
04
Не настроили права и подсистемы — пользователь не видит константу и не может задать значение
05
Читают константу в цикле при обработке большого объёма данных — лишние обращения к базе; значение нужно получить один раз до цикла
06
Используют составной тип без необходимости — усложняется ввод и проверка значения

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

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

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

Итог

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

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

Частые вопросы о константах в 1С

Можно ли создать константу в режиме «1С:Предприятие», не открывая конфигуратор?

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

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

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

Как задать значение константы по умолчанию при создании базы?

У константы нет свойства «значение по умолчанию» в палитре свойств. Значение устанавливается либо вручную после развёртывания, либо программно — например, в обработчике первоначального заполнения при первом запуске (в типовых конфигурациях — через механизм обновления версии ИБ).

Почему код выдаёт ошибку «Поле объекта не обнаружено (ИмяКонстанты)»?

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

Можно ли хранить в константе ссылку на элемент справочника?

Да. В свойстве «Тип» выберите нужный ссылочный тип, например «СправочникСсылка.Организации». Это стандартный способ хранить «основную» организацию, склад или валюту. Учтите: при удалении элемента справочника ссылка в константе станет битой, поэтому в коде проверяйте заполненность значения.

Сколько констант можно создать в конфигурации?

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