Разработка и Конфигурация · 11 мин
Что такое константа в 1С и как с ней работать
Константы в 1С: что это, где находятся, как создать и использовать в коде. Различия констант, параметров сеанса и функциональных опций, типичные ошибки.
Константа в 1С — это объект конфигурации, предназначенный для хранения значения, которое меняется редко или не меняется вовсе. Типичные примеры: наименование организации, валюта регламентированного учёта, префикс информационной базы, дата запрета редактирования данных. В отличие от реквизитов справочников и документов, константа существует в единственном экземпляре на всю информационную базу — у неё нет «списка» или «карточек».
С точки зрения хранения константа — это запись в служебной таблице базы данных: одна строка на константу. С точки зрения разработчика — это объект метаданных с типом, длиной, правами доступа и возможностью включения в функциональные опции и подсистемы. С точки зрения пользователя — это поле на форме настроек, которое заполняется один раз при внедрении и затем почти не трогается.
Понимание того, когда нужна константа, а когда — справочник, регистр сведений или параметр сеанса, избавляет от типовых ошибок проектирования: дублирования данных, лишних запросов и рассинхронизации настроек между пользователями. Ниже разобраны назначение констант, способы их создания и чтения, а также границы применимости.
Для чего нужны константы и где они находятся
Основное назначение констант — централизованное хранение глобальных настроек прикладного решения. Если значение должно быть единым для всех пользователей, всех документов и всех отчётов, константа — правильный инструмент. Классические сценарии: учётная политика в простых конфигурациях, признак ведения учёта по нескольким организациям, параметры обмена данными, номер версии настроек.
В конфигураторе константы расположены в дереве конфигурации: ветка «Общие» → «Константы». В типовых конфигурациях их количество измеряется десятками и сотнями — большинство настроек, которые администратор видит в разделе «НСИ и администрирование», физически хранятся именно в константах.
В пользовательском режиме отдельного пункта меню «Константы» нет: значения выводятся на формы настроек, которые разработчик конфигурации размещает там, где это удобно пользователю. Найти конкретную константу в типовой базе можно через поиск по синтакс-помощнику или через универсальные обработки редактирования.
Как создать константу в конфигураторе
Создание константы выполняется в конфигураторе и требует права на изменение конфигурации. Последовательность действий стандартная для любого объекта метаданных.
Ключевое решение при создании — выбор типа. Ссылочный тип (например, СправочникСсылка.Валюты) предпочтительнее строки: он гарантирует целостность данных и позволяет получать реквизиты связанного объекта. Строка и число подходят для технических настроек, Булево — для флагов включения механизмов.
Отдельно проверьте права: если у роли нет права «Чтение» на константу, обращение к ней из кода под этим пользователем вызовет исключение. Это частая причина ошибок «у администратора работает, у менеджера — нет».
Как прочитать и записать константу в коде
Работа с константами во встроенном языке выполняется через менеджер Константы. Доступ максимально простой — по имени константы, как к свойству:
// Чтение значения
ВалютаУчета = Константы.ВалютаРегламентированногоУчета.Получить();
// Запись значения
Константы.ПрефиксИнформационнойБазы.Установить("ЦО");
// Проверка булевой константы-флага
Если Константы.ВестиУчетПоОрганизациям.Получить() Тогда
// логика мультиорганизационного учета
КонецЕсли;Метод Получить() возвращает текущее значение, Установить() — записывает новое. Запись выполняется вне транзакции документа: константа изменяется сразу, и откат проведения документа её не вернёт. Поэтому не храните в константах данные, которые логически принадлежат документу.
Для работы с несколькими константами одновременно есть объект КонстантыНабор — он позволяет прочитать и записать группу констант одним действием, что удобно на формах настроек. В типовых конфигурациях формы настроек часто построены именно на наборе констант.
Константа, параметр сеанса и функциональная опция: что выбрать
Три механизма часто путают, потому что все они «хранят настройки». Разница принципиальна, и неправильный выбор создаёт проблемы в эксплуатации.
Сравнение механизмов хранения настроек
Одно значение на всю базу, хранится постоянно. Подходит для глобальных настроек, общих для всех пользователей.
Значение живёт только в рамках сеанса пользователя и не сохраняется в базе. Подходит для текущего пользователя, отбора по подразделению сеанса, служебных флагов.
Механизм включения/отключения функциональности, который может храниться в константе, реквизите справочника или регистре. Управляет видимостью элементов интерфейса.
Нужен, когда настройка периодическая (меняется во времени) или различается по измерениям — например, учётная политика по организациям на дату.
Простое правило выбора: настройка одна на базу и не зависит от даты — константа; зависит от даты или организации — регистр сведений; нужна только внутри сеанса — параметр сеанса; должна скрывать и показывать интерфейс — функциональная опция поверх константы.
Типичные ошибки при работе с константами
Большинство проблем с константами возникает не из-за самого механизма, а из-за неверного выбора места хранения данных или небрежного кода.
Отдельная группа ошибок — производительность. Одно чтение константы дёшево, но в массовых обработках (проведение тысяч документов, загрузка данных) следует получить значение один раз до цикла. В клиент-серверном варианте каждое обращение к менеджеру констант из клиентского кода — это серверный вызов.
Ограничения и безопасные границы самостоятельной работы
Константа не хранит историю изменений. Если вам нужно знать, какое значение действовало на прошлую дату, константа не подойдёт — используйте периодический регистр сведений. Это ограничение нельзя обойти настройкой, оно заложено в архитектуру объекта.
Второе ограничение — одно значение на базу. В базах с несколькими организациями или обособленными подразделениями глобальная константа может оказаться слишком грубым инструментом. Перед созданием константы ответьте на вопрос: «А не должна ли эта настройка различаться по организациям?» Если ответ «возможно» — сразу проектируйте регистр сведений.
Изменение состава констант (добавление, удаление, смена типа) требует обновления конфигурации базы данных и в клиент-серверном варианте — монопольного доступа или динамического обновления. Удаление константы, на которую ссылается код или функциональная опция, приведёт к ошибкам при обновлении — сначала уберите все использования.
Как проверить результат и найти нужную константу
После создания или изменения константы проверьте три вещи: значение читается из кода, права настроены для рабочих ролей, форма настроек отображает актуальное значение. Быстрая проверка — через консоль кода или функционал «Выполнить код»:
Сообщить(Константы.ПрефиксИнформационнойБазы.Получить());Как проверить результат
Значение возвращается без исключений под рабочей ролью
Ошибка «Нарушение прав доступа» или пустое значение там, где оно заполнено
После сохранения и повторного открытия значение сохранилось
Значение сбрасывается — вероятно, форма не связана с константой
При смене флага скрываются/появляются связанные элементы интерфейса
Интерфейс не реагирует — константа не включена в состав опции
Найти, какая константа отвечает за конкретную настройку в типовой конфигурации, можно так: откройте форму настройки, через «Ещё → Изменить форму» или конфигуратор посмотрите, с каким реквизитом связано поле. Поиск по дереву конфигурации (Ctrl+F) по смысловому слову тоже часто срабатывает, потому что имена констант в типовых решениях говорящие.
При переносе данных между базами константы часто забывают включить в план обмена или обработку выгрузки. Если после переноса «всё работает, но настройки пустые» — проверьте, переносились ли константы вообще.
Частые вопросы
Чем константа отличается от реквизита справочника?
Реквизит принадлежит конкретному элементу справочника, и элементов может быть много. Константа одна на всю базу и не привязана ни к какому объекту. Если значение общее для всех — константа; если у каждого элемента своё — реквизит.
Можно ли хранить в константе дату или список значений?
Дату можно — тип Дата поддерживается. Список значений, таблицу или массив в константе хранить нельзя: допустимы только примитивные типы и ссылки. Для множественных значений используйте регистр сведений или хранилище значения в реквизите объекта.
Как узнать, кто и когда изменил константу?
Штатной истории изменений у констант нет. Если аудит важен, включите версионирование через подсистему «Свойства» (в типовых, где поддерживается) или храните настройку в периодическом регистре сведений, где видна дата и ответственный.
Почему константа пустая, хотя в настройках значение заполнено?
Чаще всего поле на форме связано не с самой константой, а с реквизитом формы, и значение не сохраняется, либо вы смотрите другую константу с похожим именем. Проверьте чтение напрямую через Константы.Имя.Получить() и связь поля в редакторе формы.
Нужно ли монопольное доступ для добавления константы?
Для обновления конфигурации базы данных после добавления константы в файловом варианте требуется монопольный доступ. В клиент-серверном варианте возможно динамическое обновление, но добавление объектов метаданных безопаснее выполнять без активных пользователей.
Что выбрать для учётной политики: константу или регистр сведений?
Если организация одна и политика не меняется задним числом — допустима константа. Если организаций несколько или политика действует с определённой даты и нужна история — только периодический регистр сведений с измерением «Организация». В типовых конфигурациях учётная политика хранится именно в регистрах.
Что важно запомнить
Константа — одно значение на всю базу без истории и привязки к объектам. Читается и пишется через Константы.Имя.Получить()/Установить(). Для периодических и различающихся по организациям настроек используйте регистр сведений, для сеансовых данных — параметры сеанса.