← Назад к вопросам

Как хранятся константы?

2.3 Middle🔥 131 комментариев
#СУБД и хранение#Объекты метаданных

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как хранятся константы

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

Определение константы

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

Основные характеристики:

  • Одно значение на всю базу данных
  • Находится в разделе "Константы" конфигурации
  • Имеет определённый тип данных
  • Хранится в специальной таблице БД
  • Быстро доступна из памяти

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

Таблица РегистрСведений.КонстантыПриложения

Все константы приложения хранятся в одной системной таблице:

-- В PostgreSQL (если конфигурация на postgres)
SELECT * FROM "_InfoRg" WHERE "Name" LIKE '%Constant%';

-- В SQL Server
SELECT * FROM [_InfoRg] WHERE [Name] LIKE '%Constant%';

Структура таблицы констант:

Таблица: _Const (или похожее название в зависимости от версии БД)
├── УникальныйИдентификатор (ID)
├── Наименование константы
├── Значение (может быть разного типа)
├── ДатаМодификации
├── ПользовательМодификации
└── НомерСессии

Пример создания и использования константы

В конфигураторе:

Константа: СтавкаНДС
├── Тип: Число
├── Точность: 5
├── Масштаб: 2
├── Значение по умолчанию: 18.00
└── Комментарий: Стандартная ставка НДС

Использование в коде:

// Получение значения константы
Ставка = Константы.СтавкаНДС.Получить();
Сообщение("Текущая ставка НДС: " + Строка(Ставка));

// Изменение значения константы
Процедура УстановитьНовуюСтавку(НоваяСтавка)
    Константы.СтавкаНДС.Установить(НоваяСтавка);
КонецПроцедуры

// Использование в запросе
Выбрать
    Номенклатура,
    Цена,
    Цена * (1 + Константы.СтавкаНДС) КАК ЦенаСНДС
Из
    Справочник.Номенклатура

Типы констант

1. Константы данных

Хранят конкретные значения параметров системы:

// Пример констант в типичной системе
Константы:
├── СтавкаНДС (Число) = 18
├── ОрганизацияПоУмолчанию (Справочник.Организации)
├── ОсновнойСклад (Справочник.Склады)
├── СтандартнаяВалята (Справочник.Валюты)
├── МаксимальныйРазмерПокупки (Число) = 1000000
└── ФорматОтправкиДанных (Строка) = "JSON"

2. Системные константы (как правило, не редактируются)

Процедура ПолучитьВерсию()
    Версия = Константы.ВерсияПриложения.Получить();
КонецПроцедуры

Как работает кеширование констант

Кеширование в оперативной памяти:

  1. При первом обращении к константе, значение загружается из БД
  2. Значение кешируется в памяти сеанса
  3. Последующие обращения берут значение из памяти (быстро)
  4. При изменении константы кеш обновляется
Процедура ПримерКеширования()
    // Первый вызов - обращение к БД (медленно)
    Ставка1 = Константы.СтавкаНДС.Получить();
    
    // Второй вызов - из кеша (быстро)
    Ставка2 = Константы.СтавкаНДС.Получить();
    
    // После установки - кеш обновляется
    Константы.СтавкаНДС.Установить(20);
    
    // Третий вызов - новое значение из БД
    Ставка3 = Константы.СтавкаНДС.Получить();
КонецПроцедуры

Отличие констант от других способов хранения данных

СпособПрименениеГде хранитсяСкорость доступа
КонстантаГлобальные параметры системыРегистрСведенийОчень быстро (кеш)
СправочникСправочные данные (много элементов)Собственная таблицаБыстро
Регистр сведенийСвойства объектовНакопительная таблицаСредняя
Глобальная переменнаяВременные данные в сеансеПамятьОчень быстро, но временно
Хранилище конфигурацииПользовательские данныеСпециальная таблицаМедленно

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

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

// Константа для генерации номеров документов
Константа: ПоследнийНомерСчёта (Число)

Процедура ПолучитьНовыйНомер()
    ТекущийНомер = Константы.ПоследнийНомерСчёта.Получить();
    НовыйНомер = ТекущийНомер + 1;
    
    Константы.ПоследнийНомерСчёта.Установить(НовыйНомер);
    
    Возврат НовыйНомер;
КонецПроцедуры

Пример 2: Параметры интеграции

// Константы для подключения к внешним системам
Константы:
├── URLБанковскойСистемы (Строка)
├── КодБанка (Строка)
├── СекретныйКлюч (Строка)
├── Тайм-аутСоединения (Число) = 30
└── МаксимумПопыток (Число) = 3

Процедура ПолучитьПараметрыПодключения()
    Параметры = Новый Структура();
    Параметры.Вставить("URL", Константы.URLБанковскойСистемы.Получить());
    Параметры.Вставить("Код", Константы.КодБанка.Получить());
    Параметры.Вставить("Ключ", Константы.СекретныйКлюч.Получить());
    
    Возврат Параметры;
КонецПроцедуры

Пример 3: Флаги настроек

Константы:
├── ИспользоватьРасширенныйУчёт (Булево) = Истина
├── АвтоматическиПроводитьДокументы (Булево) = Ложь
├── МодельУчёта (Строка) = "УПД"
└── СценарийИспользования (Строка) = "Основной"

Процедура ПроверитьНастройки()
    Если Константы.ИспользоватьРасширенныйУчёт.Получить() Тогда
        // Применить расширенный учёт
    КонецЕсли;
КонецПроцедуры

Рекомендации по использованию констант

Когда использовать:

  • Глобальные параметры конфигурации
  • Значения, которые редко меняются
  • Данные, нужные во многих местах системы
  • Флаги функциональности
  • Настройки интеграции

Когда НЕ использовать:

  • Для часто меняющихся значений (используй Регистр сведений)
  • Для большого количества похожих данных (используй Справочник)
  • Для исторических данных (используй Регистр накопления)
  • Для временных данных сеанса (используй переменные)

Производительность

Преимущества констант:

  • Быстрое кеширование
  • Минимум операций с БД
  • Подходят для параметров, доступных всем пользователям одновременно

Ограничения:

  • Одно значение на всю систему
  • Не подходят для многопользовательских различных настроек
  • Требуют перезагрузки конфигурации при изменении структуры

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