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