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

Эта статья не просто объяснит, что константы в 1С — это не «глобальные переменные», а механизм хранения статических данных с гарантированной сохранностью между запусками системы. Мы разберём реальные кейсы их применения — от хранения настроек интеграции до управления бизнес-логикой, а также покажем, как избежать типичных ошибок при работе с ними. Особое внимание уделим отличиям констант от других объектов (например, перечислений или регистров сведений), чтобы вы могли выбрать оптимальный инструмент для своей задачи.

Что такое константа в 1С и чем она отличается от переменной

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

  • 📌 Хранятся в базе данных — их значения сохраняются между сеансами работы пользователей.
  • 🔒 Имеют права доступа — можно ограничить, кто может их изменять (например, только администраторы).
  • 🔄 Участвуют в обмене данными — могут синхронизироваться между узлами распределённой информационной базы.
  • 📝 Имеют историю изменений — в некоторых конфигурациях (например, 1С:ERP) ведётся журнал.

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

📊 Как часто вы используете константы в 1С?
Постоянно, в каждой конфигурации
Только для глобальных настроек
Редее, предпочитаю регистры сведений
Никогда не использовал

Где и как хранятся константы в базе 1С

Физически значения констант хранятся в системных таблицах базы данных 1С:Предприятие. В зависимости от режима работы (файловый или клиент-серверный) это могут быть:

  • 🗃️ Файл 1Cv8.1CD — для файловых баз (все константы хранятся в одном бинарном файле).
  • 🖥️ Таблицы SQL-сервера — для клиент-серверных баз (например, Microsoft SQL Server или PostgreSQL). Константы обычно хранятся в таблице с префиксом _Const.

Доступ к константам осуществляется через встроенный язык. Например, чтобы получить значение константы НаименованиеОрганизации, используется конструкция:

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

При этом изменение константы требует явного сохранения:

Константы.НаименованиеОрганизации.Установить("Новое название ООО");

Константы.НаименованиеОрганизации.Записать;

💡

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

Основные сценарии использования констант

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

Сценарий Пример константы Альтернатива
Настройки интеграции АдресСервераОбмена, ЛогинДляAPI Регистр сведений (если настроек много)
Глобальные параметры МинимальнаяСуммаЗаказа, КоличествоДнейДляОплаты Перечисление (если значения фиксированные)
Управление бизнес-логикой ИспользоватьСкидкиДляОптовиков (булево значение) Функциональные опции
Технические флаги ВерсияКонфигурации, ДатаПоследнегоОбновления Регистр сведений с периодичностью

Важно понимать, что константы не подходят для хранения:

  • 📊 Динамических данных (например, остатков на складе — для этого есть регистры).
  • 📋 Списков значений (лучше использовать справочники или перечисления).
  • 🔄 Данных с историей изменений (тут уместнее регистры сведений с периодичностью).
Когда константы вредят производительности

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

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

Добавить константу в конфигурацию можно через дерево объектов конфигурации. Пошаговая инструкция:

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

После создания константу можно настроить:

  • 🔐 Права доступа — в разделе Администрирование → Права ограничьте, кто может её изменять.
  • 📎 Подписки на события — например, можно отслеживать изменение константы через событие ПриЗаписи.
  • 🔄 Участие в обмене — включите флаг Участвует в обмене данными, если константа должна синхронизироваться между базами.

☑️ Проверка перед созданием константы

Выполнено: 0 / 4

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

Неправильное использование констант может привести к потере данных, ошибкам в бизнес-логике или проблемам с производительностью. Рассмотрим самые распространённые ошибки:

⚠️ Внимание: Если константа используется в расчётах (например, СтавкаНДС), её изменение не приведёт к автоматическому перерасчёту старых документов. Это может вызвать несоответствия в отчётности!

Ошибка 1: Хранение динамических данных

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

Ошибка 2: Отсутствие контроля прав

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

// Пример ограничения в модуле прав

Если Не ЗначениеЗаполнено(Константы.РазрешитьУдалениеДокументов) Тогда

ОтказатьВДоступе;

КонецЕсли;

Ошибка 3: Прямое изменение без проверок

Всегда проверяйте новое значение константы перед записью. Например, если константа МинимальнаяСуммаЗаказа не может быть отрицательной:

Если НоваяСумма < 0 Тогда

ВызватьИсключение"Сумма не может быть отрицательной!";

КонецЕсли;

💡

Перед изменением константы, влияющей на бизнес-логику, всегда делайте резервную копию базы или тестируйте изменения на копии.

Константы vs. регистры сведений vs. перечисления: что выбрать

Новички часто путают константы с другими объектами конфигурации. Разберём ключевые различия:

Критерий Константа Регистр сведений Перечисление
Хранение одного значения ✅ Да ❌ Нет (хранит множество записей) ❌ Нет (хранит фиксированный список)
Поддержка истории изменений ❌ Нет (только текущее значение) ✅ Да (если настроена периодичность) ❌ Нет
Использование в запросах ❌ Нет (только через встроенный язык) ✅ Да ✅ Да
Изменяемость в runtime ✅ Да (через код или интерфейс) ✅ Да ❌ Нет (только в конфигураторе)

Когда выбирать константу:

  • 🎯 Нужно хранить одно значение, общее для всех пользователей.
  • 🔧 Значение изменяется редко (например, раз в месяц).
  • 🔒 Требуется контроль прав на изменение.

Когда лучше использовать регистр сведений:

  • 📅 Нужна история изменений (например, курсы валют по датам).
  • 📊 Данные привязаны к другим объектам (например, настройки для каждого склада).

Когда подойдёт перечисление:

  • 📋 Значения фиксированные и известны на этапе разработки (например, ВидыОплаты: Наличные, Безналичные, Карта).

Практические примеры работы с константами в коде

Рассмотрим реальные фрагменты кода, где константы решают конкретные задачи.

Пример 1: Управление функциональностью

Допустим, в конфигурации есть флаг ИспользоватьУпрощённуюФормуОтчёта. В модуле отчёта можно написать:

Если Константы.ИспользоватьУпрощённуюФормуОтчёта.Получить Тогда

ВывестиУпрощённуюФорму;

Иначе

ВывестиПолнуюФорму;

КонецЕсли;

Пример 2: Хранение технических параметров

Константа АдресСервераОбмена может использоваться в модуле интеграции:

АдресСервера = Константы.АдресСервераОбмена.Получить;

Попытка

Соединение = Новый HTTPСоединение(АдресСервера,,,,, 30);

Исключение

ЗаписатьЖурналРегистрации("Ошибка подключения к" + АдресСервера, УровеньЖурнала.Ошибка);

КонецПопытки;

Пример 3: Контроль версий

Константа ВерсияКонфигурации поможет отслеживать обновления:

ТекущаяВерсия = Константы.ВерсияКонфигурации.Получить;

Если ТекущаяВерсия <"2.0.10" Тогда

ВыполнитьОбновлениеБазы;

Константы.ВерсияКонфигурации.Установить("2.0.10");

Константы.ВерсияКонфигурации.Записать;

КонецЕсли;

⚠️ Внимание: При работе с константами в распределённых базах (например, 1С:Управление холдингом) их изменение должно синхронизироваться через механизм обмена. В противном случае значения могут расходиться между узлами!

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

Можно ли сделать константу «только для чтения»?

Да, но не через свойства константы, а через настройку прав. В роли пользователя отключите право на изменение для этой константы. Также можно перехватить событие ПередЗаписью и отменить запись:

Процедура Константы_ПередЗаписью(Отказ)

Если ИмяКонстанты ="КритическаяКонстанта" Тогда

Отказ = Истина;

Сообщить("Изменение этой константы запрещено!");

КонецЕсли;

КонецПроцедуры

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

Непосредственно в тексте запроса обратиться к константе нельзя. Но можно использовать параметр запроса:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Товары.Наименование,

| Товары.Цена * &Множитель КАК ЦенаСоСкидкой

|ИЗ

| Справочник.Товары КАК Товары";

Запрос.УстановитьПараметр("Множитель", Константы.КоэффициентСкидки.Получить);

Что будет, если удалить константу из конфигурации?

При удалении константы из конфигуратора её значение остаётся в базе данных до выполнения операции Обновление конфигурации базы данных. После обновления данные будут утеряны. Чтобы избежать ошибок:

  1. Проверьте, нет ли ссылок на константу в коде (используйте Поиск по текстам модулей).
  2. Создайте резервную копию базы.
  3. Если константа использовалась в расчётах, перенесите её значение в другой объект (например, регистр сведений).
Как перенести константы при переходе на новую конфигурацию?

При переносе данных между базами константы можно экспортировать/импортировать через:

  • Выгрузку/загрузку данных (формат XML или DT).
  • Обработку «Перенос данных» (входит в поставку 1С:Предприятие).
  • Ручной перенос — если констант мало, можно скопировать значения через интерфейс.

Важно: перед переносом сверьте имена и типы констант в старой и новой конфигурациях!

Можно ли сделать константу периодической?

Нет, константы в 1С:Предприятие всегда хранят одно текущее значение. Если нужна история изменений, используйте регистр сведений с периодичностью. Например, вместо константы КурсДоллара создайте регистр сведений КурсыВалют с измерением Валюта и ресурсом Курс, а также установите периодичность День.