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

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

Для чего предназначены константы в системе 1С

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

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

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

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

Что такое константа и как она хранится в базе

Константа — это объект метаданных, который создаётся в конфигураторе в ветке «Общие» → «Константы». Для каждой константы задаётся тип значения: строка, число, дата, булево, ссылка на справочник или документ, хранилище значения. При записи в базу константа сохраняет ровно одно значение — при новом присваивании старое стирается без сохранения истории.

Физически значения констант хранятся в служебной таблице базы данных. Это значит, что значение доступно всем пользователям и сеансам одинаково: если один пользователь изменил константу, остальные при следующем обращении получат новое значение. Именно поэтому константы не подходят для персональных настроек пользователей.

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

Для каких задач используют константы

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

  • Реквизиты организации-владельца базы: наименование, ИНН, адрес для подстановки в печатные формы.
  • Функциональные переключатели: булевы константы вида «Использовать серийный учет», «Вести расчеты с комитентами», которые включают или отключают блоки функциональности.
  • Параметры интеграций: адрес веб-сервиса, токен доступа (лучше через безопасное хранилище), каталог обмена файлами.
  • Технические настройки: префикс базы для обмена, срок хранения журналов, значения по умолчанию для новых документов.

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

Количество значенийОдно на всю базу

Если значений несколько (по организациям, складам, пользователям) — константа не подходит

Частота измененийРедко, вручную

Если значение меняется документами или каждый день — нужен регистр сведений

Нужна ли историяИстория не нужна

Если важно знать значение на прошлую дату — используйте периодический регистр сведений

Как создать константу и обратиться к ней из кода

Создание константы выполняется в конфигураторе: откройте ветку «Константы», добавьте новый объект, задайте имя, синоним и тип значения. Для строковых констант укажите длину; если планируется хранить произвольные данные (например, картинку или структуру), выберите тип «ХранилищеЗначения».

Обращение к константе из встроенного языка выполняется через менеджер констант. Чтение и запись выглядят так:

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

Префикс = Константы.ПрефиксИнформационнойБазы.Получить();

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

Константы.ПрефиксИнформационнойБазы.Установить("ЦО");

// Работа через набор констант (одна транзакция на несколько констант)

Набор = Константы.СоздатьНабор("ПрефиксИнформационнойБазы, ИспользоватьОбмен");

Набор.Прочитать();

Набор.ПрефиксИнформационнойБазы = "ЦО";

Набор.ИспользоватьОбмен = Истина;

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

Метод СоздатьНабор() полезен, когда нужно атомарно записать несколько связанных констант: либо запишутся все, либо ни одна. Это защищает от рассогласованных настроек при ошибке в середине операции.

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

Чем константа отличается от справочника, регистра сведений и параметра сеанса

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

МеханизмКоличество значенийИстория измененийТипичное применение
КонстантаОдно на базуНетГлобальные настройки, флаги, реквизиты организации
СправочникПроизвольный списокНет (только через версионирование)Классификаторы, перечни объектов
Регистр сведенийНабор по измерениямДа, если периодическийКурсы валют, цены, настройки по организациям
Параметр сеансаСвоё для каждого сеансаНет, живёт только в сеансеТекущий пользователь, отборы по правам

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

Сравнение вариантов хранения настройки

Константа

Подходит для единственного значения на базу без истории; ограничение — нельзя хранить несколько значений

Регистр сведений

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

Справочник

Подходит, если настройка — это элемент списка со своими реквизитами; избыточен для одиночных флагов

Параметр сеанса

Подходит для данных текущего сеанса; значение теряется при завершении сеанса и не хранится в базе

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

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

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

Третий момент — безопасность. Пароли, ключи API и другие секреты нельзя хранить в константах открытым текстом: значение доступно любому, кто может прочитать константу, и видно в выгрузке конфигурации и базы. Для секретов используйте безопасное хранилище (ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище() в типовых) или внешние механизмы защиты.

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

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

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

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

При проектировании новой настройки задайте себе три вопроса: значение одно на базу или несколько? нужна ли история? кто должен его видеть? Если ответы «одно», «нет», «все» — смело делайте константу. Любой другой ответ — повод рассмотреть регистр сведений или параметр сеанса.
ПЗ
Практическое замечание

Как проверить корректность работы с константами

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

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

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

Поведение при пустом значении
Норма

Программа использует значение по умолчанию или выдаёт понятное сообщение о необходимости заполнить настройку

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

Ошибка выполнения кода или молча неверный расчёт

Доступность для пользователей
Норма

Пользователь с правами на настройку видит и может изменить константу, остальные — только читают

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

Настройку может менять любой пользователь или, наоборот, никто

Поведение в обмене данными
Норма

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

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

При обмене настройки одного узла затирают настройки другого

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

Итог

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

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

Часто задаваемые вопросы

Можно ли хранить в константе список значений или таблицу?

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

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

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

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

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

Можно ли разграничить права на отдельные константы?

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

Что лучше для настройки «по умолчанию» для новых документов — константа или регистр?

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

Участвуют ли константы в резервном копировании и выгрузке базы?

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