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

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

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

Что такое константа в 1С и зачем она нужна

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

  • 📌 Ставка НДС (20%, 10%, 0%)
  • 📌 Адрес электронной почты для отправки отчётов
  • 📌 Флаг включения дополнительного функционала (например, ИспользоватьСкладскойУчет = Истина)
  • 📌 Путь к сетевому каталогу для обмена данными

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

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

📊 Как часто вы используете константы в своих конфигурациях 1С?
Постоянно, это основа моих настроек
Иногда, для глобальных параметров
Рядко, предпочитаю справочники
Никогда не использовал

Типы данных констант в 1С: что можно хранить

Платформа 1С:Предприятие 8 позволяет создавать константы с разными типами данных. Выбор типа зависит от того, какую информацию вы планируете хранить. Вот основные варианты:

Тип данных Пример использования Ограничения
Число Ставка налога (20), лимит скидки (1000) Не подходит для хранения текстовых данных
Строка Адрес сервера ("https://api.example.com"), email ("report@company.ru") Ограничение по длине (до 255 символов в некоторых версиях)
Дата Дата начала действия нового тарифа ('2026-01-01') Нельзя хранить время без даты
Булево Флаг включения модуля (Истина/Ложь) Только два возможных значения
Ссылка Ссылка на элемент справочника (например, основной склад) Требует проверки на существование объекта

Особого внимания заслуживает тип "Ссылка". Он позволяет хранить в константе ссылку на другой объект базы данных, например, на элемент справочника "Склады" или "Организации". Это удобно, когда нужно централизованно управлять часто используемыми объектами. Например, можно создать константу ОсновнойСклад и в любом месте программы обращаться к ней вместо того, чтобы жёстко прописывать код склада.

При выборе типа данных учитывайте, что некоторые операции могут быть недоступны для определённых типов. Например, нельзя сложить строку с числом или сравнить дату с булевым значением. Также помните, что константы типа "Строка" в старых версиях платформы (до 8.3.10) имели ограничение в 255 символов, что могло вызывать ошибки при работе с длинными URL или JSON-строками.

💡

Если вам нужно хранить сложную структуру данных (например, настройки интеграции с несколькими параметрами), рассмотрите возможность использования константы типа "Строка" с сериализацией в JSON или XML. Это позволит гибко управлять настройками без изменения конфигурации.

Пошаговая инструкция: как создать константу в конфигураторе

Создание константы в 1С:Предприятие происходит в режиме конфигуратора. Вот подробная инструкция:

  1. Откройте конфигуратор вашей базы данных. Для этого запустите 1С:Предприятие в режиме конфигуратора (обычно через ярлык "1С:Предприятие (Конфигуратор)" или с ключом /Config).
  2. Перейдите в дерево объектов конфигурации. В левой части окна найдите ветку Общие → Константы.
  3. Добавьте новую константу. Кликните правой кнопкой мыши по ветке "Константы" и выберите Добавить.
  4. Задайте свойства константы:
    • 🔹 Имя — уникальный идентификатор (например, СтавкаНДС)
    • 🔹 Синоним — отображаемое имя (например, "Ставка НДС")
    • 🔹 Тип — выберите из списка (число, строка, булево и т.д.)
    • 🔹 Значение — установите начальное значение
  • Сохраните конфигурацию (Ctrl+S или через меню Файл → Сохранить).
  • Обновите конфигурацию базы данных (Конфигурация → Обновить конфигурацию базы данных).
  • После создания константы её можно использовать в коде. Например, чтобы получить значение константы СтавкаНДС, используйте следующий синтаксис:

    Ставка = Константы.СтавкаНДС.Получить();

    Если константа имеет тип "Булево", её можно использовать в условных операторах:

    Если Константы.ИспользоватьСкладскойУчет.Получить() Тогда
    

    // Код для включённого складского учёта

    КонецЕсли;

    Имя константы не содержит пробелов и специальных символов|

    Тип данных соответствует хранимым значениям|

    Установлено начальное значение по умолчанию|

    Константа не дублирует уже существующие объекты (справочники, регистры)-->

    Работа с константами в коде: методы и примеры

    В 1С:Предприятие для работы с константами предусмотрены специальные методы. Основные из них:

    • 📘 Получить() — возвращает текущее значение константы.
    • 📘 Установить(Значение) — изменяет значение константы.
    • 📘 ЭтоЗначениеЗаполнено() — проверяет, установлено ли значение.

    Пример использования:

    // Получение значения константы
    

    ТекущаяСтавкаНДС = Константы.СтавкаНДС.Получить();

    // Изменение значения константы (требуются права!)

    Константы.СтавкаНДС.Установить(20);

    // Проверка заполненности

    Если НЕ Константы.АдресСервера.ЭтоЗначениеЗаполнено() Тогда

    Сообщить("Адрес сервера не задан!");

    КонецЕсли;

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

    Для работы с константами типа "Ссылка" есть нюансы. Например, если константа хранит ссылку на элемент справочника, перед использованием лучше проверять её существование:

    СсылкаНаСклад = Константы.ОсновнойСклад.Получить();
    

    Если НЕ СсылкаНаСклад.Пустая() Тогда

    НаименованиеСклада = СсылкаНаСклад.Наименование;

    Иначе

    Сообщить("Основной склад не задан!");

    КонецЕсли;

    Что будет если удалить объект, на который ссылается константа?

    Если вы удалите элемент справочника, на который ссылается константа, то при попытке получить значение константы возникнет ошибка "Объект не найден". Чтобы избежать этого, всегда проверяйте ссылки на пустоту или реализуйте обработку исключений с помощью конструкции Попытка..Исключение.

    Типичные ошибки при работе с константами и как их избежать

    Даже опытные разработчики иногда допускают ошибки при работе с константами. Вот наиболее распространённые из них:

    1. Попытка изменить константу без прав. Если в коде используется метод Установить() без проверки прав, пользователь получит ошибку. Решение: всегда проверяйте права или используйте серверные процедуры с повышенными правами.
    2. Использование неинициализированных констант. Если константа не имеет значения по умолчанию и не была установлена, попытка получить её значение может привести к ошибке. Решение: всегда задавайте начальное значение при создании константы.
    3. Жёсткая привязка к имени константы в коде. Если выlater измените имя константы в конфигураторе, весь код, где оно использовалось, перестанет работать. Решение: используйте псевдонимы или центральное управление именами.
    4. Хранение в константах данных, которые часто меняются. Например, курсы валют или остатки на складах. Решение: для динамических данных используйте справочники или регистры сведений.

    Ещё одна распространённая проблема — конфликты при обновлении конфигурации. Если вы добавили константу в новой версии конфигурации, а затем обновили базу пользователя, значение константы может не перенестись автоматически. Чтобы избежать этого, используйте обработчики событий ПриНачалеРаботыСистемы для инициализации новых констант:

    Процедура ПриНачалеРаботыСистемы()
    

    Если НЕ Константы.ЭтоЗначениеЗаполнено("НоваяКонстанта") Тогда

    Константы.НоваяКонстанта.Установить(ЗначениеПоУмолчанию);

    КонецЕсли;

    КонецПроцедуры

    💡

    Всегда документируйте назначение констант в комментариях к коду или в описании объекта. Это поможет другим разработчикам (и вам в будущем) быстро разобраться в логике работы системы.

    Константы в распределённых информационных базах

    Если вы работаете с распределённой информационной базой (РИБ), то работа с константами имеет свои особенности. В РИБ константы могут иметь разные значения в разных узлах, что иногда вызывает путаницу. Например, в головном офисе и в филиале может быть разная ставка НДС или адрес сервера для обмена данными.

    Чтобы управлять константами в РИБ, используйте:

    • 🔄 Планы обмена — для синхронизации значений констант между узлами.
    • 🔄 Управляемые блокировки — чтобы избежать конфликтов при одновременном изменении.
    • 🔄 Правила конвертации — если структура констант отличается в разных версиях конфигурации.

    Пример кода для получения значения константы в РИБ с учётом текущего узла:

    ТекущийУзел = ПланыОбмена.ОсновнойПланОбмена.ТекущийУзел();
    

    ЗначениеКонстанты = Константы.СтавкаНДС.Получить(ТекущийУзел);

    Если вам нужно, чтобы константа имела одинаковое значение во всех узлах РИБ, настройте автоматическую синхронизацию через план обмена. Для этого:

    1. Откройте план обмена в конфигураторе.
    2. Добавьте константу в список обмениваемых объектов.
    3. Настройте правила обмена (например, "Всегда переписывать значение").
    💡

    В РИБ избегайте использования констант для хранения данных, которые должны быть уникальными для каждого узла (например, локальные настройки принтера или пути к файлам). Для таких случаев лучше использовать регистры сведений с измерением "УзелРИБ".

    Альтернативы константам: когда лучше использовать другие объекты

    Хотя константы удобны для хранения глобальных настроек, в некоторых случаях лучше использовать другие объекты 1С:Предприятие:

    Задача Рекомендуемый объект Почему не константа
    Хранение списка значений (например, курсы валют) Справочник или Регистр сведений Константа хранит только одно значение
    Динамические настройки пользователей Хранилище значений или Регистр сведений Константы глобальны для всей базы
    Хранение больших текстовых данных (HTML, JSON) Документ или Файл Ограничение на длину строки в константах
    Настройки, зависящие от организации или склада Регистр сведений с измерениями Константы не поддерживают измерения

    Например, если вам нужно хранить настройки печати для каждого пользователя, константа не подойдёт, так как её значение будет одинаковым для всех. Вместо этого создайте регистр сведений с измерением "Пользователь" и ресурсом "НастройкиПечати". Это позволит каждому пользователю иметь свои уникальные параметры.

    Ещё один пример — хранение истории изменений. Константы не ведут журнал изменений, поэтому если вам нужно отслеживать, кто и когда изменил ставку НДС, лучше использовать документ с реквизитом "ЗначениеСтавкиНДС" и датой изменения.

    💡

    Если вы сомневаетесь, какой объект использовать — константу, справочник или регистр сведений — задайте себе вопрос: "Будет ли это значение меняться часто или зависеть от каких-то условий (например, от организации, склада, пользователя)?" Если ответ "да", то константа, скорее всего, не подходит.

    FAQ: Частые вопросы о константах в 1С

    Можно ли создать константу динамически в runtime без конфигуратора?

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

    Как сделать константу доступной только для чтения?

    В 1С:Предприятие нет встроенного механизма "только для чтения" для констант. Однако вы можете:

    1. Ограничить права на изменение константы через роли.
    2. Использовать серверные функции для получения значения, скрывая прямой доступ к константе.
    3. Добавить проверку в модуле константы перед изменением:
    Процедура ПриИзменении()
    

    Если НЕ Пользователи.ТекущийПользователь().ЭтоАдминистратор() Тогда

    Отказ = Истина;

    Сообщить("Изменение константы разрешено только администраторам!");

    КонецЕсли;

    КонецПроцедуры

    Что будет, если два пользователя одновременно изменят одну константу?

    В обычной (не распределённой) базе последний, кто сохранит изменение, перепишет значение. В РИБ это может привести к конфликту, который потребует ручного разрешения. Чтобы избежать проблем:

    • Используйте блокировки при изменении констант.
    • Настройте планы обмена с правильной политикой разрешения конфликтов.
    • Реализуйте журнал изменений для отслеживания, кто и когда внёс изменения.
    Как перенести константы при обновлении конфигурации?

    При обновлении конфигурации значения констант сохраняются автоматически, если:

    • Имя константы не изменилось.
    • Тип данных остался прежним.
    • Константа не была удалена и создана заново.

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

    Можно ли использовать константы в мобильном приложении 1С?

    Да, константы доступны и в мобильных приложениях на платформе 1С:Предприятие. Однако учитывайте, что:

    • Изменение констант на мобильном устройстве может потребовать синхронизации с сервером.
    • Некоторые типы данных (например, большие строки) могут занимать много места в локальной базе мобильного приложения.
    • Для часто изменяемых данных лучше использовать регистры сведений с периодичностью.