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