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