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