К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как вывести константу в 1С

Как создать и вывести константу в 1С: добавление в конфигураторе, обращение из кода, вывод на форму и в отчёты. Примеры кода, типичные ошибки и ответы на вопросы.

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

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

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

Что такое константа и когда её использовать

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

Типичные примеры констант в типовых конфигурациях: «Основная организация», «Валюта регламентированного учёта», «Префикс информационной базы», функциональные опции-переключатели («Вести учёт по нескольким складам»). Если значение должно меняться во времени с историей (например, курс валюты на дату), константа не подходит — используйте периодический регистр сведений.

Как создать константу в конфигураторе

Откройте конфигурацию в конфигураторе (меню «Конфигурация → Открыть конфигурацию»). В дереве конфигурации найдите ветку «Константы», щёлкните по ней правой кнопкой и выберите «Добавить». Откроется палитра свойств нового объекта.

Задайте имя константы латиницей без пробелов (например, ОсновнойСклад) и синоним, который увидит пользователь («Основной склад»). Затем укажите тип значения: для строки задайте длину, для числа — точность, для ссылки — объект ссылочного типа. Если константа должна быть пустой по умолчанию, дополнительных настроек не требуется.

Чтобы пользователь мог видеть и менять константу, добавьте её в командный интерфейс подсистемы: откройте свойства нужной подсистемы, перейдите на закладку «Командный интерфейс» и включите видимость команды установки константы. Также константу можно включить в функциональную опцию или общую форму настроек.

Создание константы за 5 шагов
  1. 1
    Откройте конфигуратор и разверните ветку «Константы» в дереве конфигурации
  2. 2
    Добавьте новую константу, задайте имя и синоним
  3. 3
    Выберите тип значения и при необходимости длину или точность
  4. 4
    Добавьте константу в командный интерфейс подсистемы или на форму настроек
  5. 5
    Обновите конфигурацию базы данных (F7) и проверьте доступность в режиме предприятия

Как получить и вывести значение константы в коде

Обращение к константе из встроенного языка выполняется через менеджер констант. Два базовых метода — Получить() и Установить(). Следующий пример читает константу и выводит её пользователю сообщением:

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

Если ЗначениеПустое(ЗначениеКонстанты) Тогда

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

Иначе

Сообщить("Основной склад: " + ЗначениеКонстанты);

КонецЕсли;

Запись значения выполняется симметрично: Константы.ОсновнойСклад.Установить(НовоеЗначение);. Учтите, что метод Установить выполняет запись в базу — при вызове внутри транзакции ошибка приведёт к откату вместе с остальными изменениями.

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

Как вывести константу на форму

Вывод на форму настроек

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

Вывод на произвольную форму

На управляемой форме документа или обработки константу выводят через реквизит формы. Создайте реквизит нужного типа (например, строку), перетащите его в дерево элементов формы, а в обработчике ПриСозданииНаСервере заполните его значением константы:

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

НаименованиеОрганизации = Константы.ОсновнаяОрганизация.Получить();

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

Если значение нужно только показать, а не редактировать, установите элементу формы свойство «Только просмотр». Это защитит от случайного изменения глобальной настройки неподготовленным пользователем.

Как вывести константу в отчёт и печатную форму

В отчёте на СКД (система компоновки данных) константу подключают через запрос набора данных. В тексте запроса обратитесь к таблице констант: ВЫБРАТЬ Константы.ОсновнаяОрганизация КАК Организация ИЗ Константы КАК Константы. Такое поле можно вывести в шапку отчёта как детальную запись без группировок.

Альтернатива — вычисляемое поле с выражением на языке выражений СКД, если значение нужно получить функцией общего модуля. Но прямой запрос к таблице «Константы» проще и быстрее.

В печатных формах (макетах табличного документа) константу выводят как обычный параметр: в коде формирования печатной формы получите значение через Константы.Имя.Получить() и присвойте параметру области макета: Область.Параметры.НашаОрганизация = ОсновнаяОрганизация;.

Способы вывода константы

Форма констант

Подходит для настроек, которые администратор меняет вручную. Минимум кода, но доступна только пользователям с правами на изменение.

Реквизит произвольной формы

Когда значение нужно показать внутри документа или обработки. Требует заполнения в ПриСозданииНаСервере.

Запрос СКД к таблице Константы

Для отчётов: значение выводится в шапку или используется в отборах. Не подходит для редактирования.

Параметр макета печатной формы

Для печатных документов: реквизиты организации, адреса, подписи. Значение фиксируется на момент печати.

Проверка результата и типичные ошибки

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

Типичные ошибки
01
Константа создана, но не добавлена в подсистему — пользователь не видит её в интерфейсе и считает, что настройки нет
02
Использование константы там, где нужна история изменений: для курсов валют и цен нужен периодический регистр сведений
03
Чтение константы в цикле через Получить() вместо набора констант — лишние обращения к базе и падение производительности
04
Отсутствие проверки на пустое значение — в отчётах и печатных формах выводятся пустые строки или ошибки преобразования типов
05
Попытка редактировать константу пользователем без права изменения — ошибка при записи формы настроек
Контрольные точки

Как проверить результат

Видимость в интерфейсе
Норма

Команда открытия константы есть в разделе подсистемы, форма открывается без ошибок

Тревожный признак

Команды нет — константа не добавлена в командный интерфейс подсистемы

Сохранение значения
Норма

После записи и перезапуска сеанса значение на месте

Тревожный признак

Значение сбрасывается — проверьте права и обновление конфигурации базы данных

Работа кода
Норма

Константы.Имя.Получить() возвращает ожидаемое значение нужного типа

Тревожный признак

Ошибка «Поле объекта не обнаружено» — опечатка в имени константы или константа не создана

Отдельно проверьте поведение в файловой и клиент-серверной базах: код одинаков, но в клиент-серверном варианте чтение константы на клиенте может потребовать серверного вызова — выносите обращение к константам в серверные процедуры общих модулей с признаком «Вызов сервера».

Часто задаваемые вопросы

Чем константа отличается от функциональной опции?

Функциональная опция — это механизм включения и выключения частей функциональности (обычно булево значение), влияющий на видимость элементов интерфейса и команд. Константа — просто хранилище значения. Часто функциональная опция хранит своё значение именно в константе, поэтому в дереве конфигурации они связаны, но решают разные задачи.

Можно ли хранить в константе список значений?

Нет, константа хранит одно значение одного типа. Если нужен список (например, несколько складов или видов цен), используйте табличную часть справочника, регистр сведений или хранилище общих настроек. Составной тип (например, ссылка на разные справочники) допустим, но список — нет.

Почему Константы.Имя.Получить() возвращает пустое значение?

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

Как вывести константу в обычном (неуправляемом) приложении?

Логика та же: в модуле формы получите значение через Константы.Имя.Получить() и присвойте реквизиту формы или полю ввода. Разница только в обработчиках — в обычном приложении используется ПриОткрытии() вместо ПриСозданииНаСервере, и нет разделения на клиентские и серверные контексты.

Бывает ли константа с историей изменений?

Нет, константа хранит только текущее значение, предыдущие значения при записи теряются. Если нужна история изменений настройки по датам, создайте периодический регистр сведений и получайте значение срезом последних на нужную дату.

Можно ли изменить константу программно без формы?

Да, методом Константы.Имя.Установить(Значение) из любого серверного кода — обработки, регламентного задания, подписки на событие. Убедитесь, что тип присваиваемого значения соответствует типу константы, иначе получите ошибку несоответствия типов.

Итог

Что важно запомнить

Константа создаётся в конфигураторе, выводится пользователю через форму констант или реквизит произвольной формы, а в коде читается через Константы.Имя.Получить(). Для отчётов используйте запрос к таблице Константы, для печатных форм — параметр макета. Всегда проверяйте заполненность значения и права пользователя на изменение.