Константы 1С:Предприятия 8.3 от Конфигуратора до запроса
Содержание
Константу в 1С 8.3 создают в Конфигураторе в ветке Общие → Константы, задают ей тип и обновляют конфигурацию базы данных. Значение пользователь вводит в форме констант или в панели настроек, а в коде его читают через Константы.Имя.Получить() и записывают через Константы.Имя.Установить(Значение).
Константа хранит одно значение на всю информационную базу: основную валюту, признак «Использовать склады», путь к папке обмена, адрес сервиса. Истории изменений и разреза по организациям у неё нет. Нужно значение по каждой организации или на дату — это уже регистр сведений , а не константа.
Механизм общий для платформы 8.3, от конфигурации он не зависит. Различается только то, где разработчик вывел константу для пользователя.
Что проверить перед созданием константы
Константу часто заводят там, где нужен другой объект. Перед добавлением ответьте на три вопроса:
- 📌 Значение одно на всю базу? Если оно разное у организаций, подразделений или пользователей — нужен регистр сведений с измерениями.
- 📅 Нужна история? Если важно, какое значение действовало на прошлую дату, — периодический регистр сведений.
- 🔁 Значение будет меняться часто, из разных сеансов? Константу как счётчик номеров использовать нельзя: каждая запись блокирует её таблицу, и параллельные сеансы встают в очередь.
В платформе 8.3 каждая константа хранится в отдельной таблице базы. Запись одной константы не блокирует остальные, но два сеанса, пишущие в одну и ту же константу, будут ждать друг друга.
1. Создание объекта «Константа» в Конфигураторе
Работа идёт в Конфигураторе. Если конфигурация на поддержке, сначала включите возможность изменения либо создайте константу в расширении — так типовая конфигурация останется без правок.
- Откройте дерево конфигурации:
Конфигурация → Открыть конфигурацию. - Разверните ветку
Общиеи найдите в нейКонстанты. - Правой кнопкой по ветке —
Добавить. Откроется палитра свойств новой константы. - Заполните Имя латиницей или кириллицей без пробелов, например
ОсновнаяПапкаОбмена. Синоним — то, что увидит пользователь: «Основная папка обмена». - Задайте Тип (подробно — в следующем разделе).
- На закладке
Подсистемыотметьте раздел, в котором константа должна появиться в командном интерфейсе, если она нужна пользователю напрямую. - Сохраните и выполните
Конфигурация → Обновить конфигурацию базы данных(клавишаF7).
Обновление структуры базы требует монопольного доступа или динамического обновления — пользователи на время операции должны выйти, иначе Конфигуратор предложит обновить динамически или откажет.
Константа в расширении
Если менять основную конфигурацию нельзя, добавьте константу в расширение: Конфигурация → Расширения конфигурации → Добавить, затем в дереве расширения тот же путь Общие → Константы → Добавить. Расширения появились в платформе 8.3.6, а собственные объекты с хранимыми данными (включая константы) в них можно добавлять с более поздних версий платформы — на актуальной 8.3.2x это работает. Расширение должно иметь право изменять структуру базы, иначе при подключении появится предупреждение.
Имя константы в расширении лучше начинать с префикса расширения, например мр_ОсновнаяПапкаОбмена. Тогда при обновлении типовой конфигурации не возникнет конфликта, если поставщик добавит константу с тем же именем.
После записи расширения в базу структура тоже обновляется — это отдельный шаг от загрузки самого .cfe.
2. Тип значения и ограничения константы
Тип выбирают в палитре свойств, поле Тип. Доступны примитивные типы, ссылки на справочники, документы и перечисления, а также ХранилищеЗначения. Составной тип тоже разрешён, но без нужды его лучше не использовать: усложняются запросы и проверки.
| Задача | Тип | Что настроить |
|---|---|---|
| Флажок «использовать механизм» | Булево | Связать с функциональной опцией |
| Основная валюта, организация по умолчанию | СправочникСсылка.Валюты и т. п. | Параметры выбора, если нужен отбор |
| Ставка, лимит, процент | Число | Длина и точность, неотрицательное |
| Путь, адрес, префикс | Строка | Длина строки, обычно 50–500 |
| Вариант учёта из списка | ПеречислениеСсылка | Значение заполнения |
| Файл, настройки, картинка | ХранилищеЗначения | Чтение и запись только кодом |
Полезные свойства в палитре:
- 🔢 Длина и точность числа. Значение, не влезающее в разрядность, записать не получится.
- ✅ Проверка заполнения —
Выдавать ошибку. Пустую константу тогда нельзя записать из формы. - 🔍 Параметры выбора и Связи параметров выбора — отбор в поле ввода, например только рублёвые счета.
- 🧩 Форма — собственная форма константы, если стандартной мало.
Смена типа существующей константы ведёт к реструктуризации таблицы. Платформа попытается преобразовать старое значение, но ссылка на справочник не превратится в число, и значение обнулится. Перед сменой типа выгрузите информационную базу в .dt.
Связь с функциональной опцией
Самый частый сценарий — включать и выключать механизм программы. Создайте в Общие → Функциональные опции новую опцию, в её свойстве Хранение укажите константу типа Булево и перечислите в Составе объекты, которые надо прятать. Когда флажок снят, связанные команды и реквизиты исчезают из интерфейса без единой строчки кода.
3. Как пользователь вводит значение константы
Есть три пути, и какой сработает, зависит от того, как разработчик оформил константу.
Через «Все функции». Работает в любой конфигурации, если у пользователя есть права:
- Нажмите шестерёнку в заголовке окна —
Сервис и настройки → Параметры. - Включите флажок «Отображать команду “Все функции”» и нажмите
Применить. - Откройте
Главное меню → Все функции → Константы. - Дважды щёлкните нужную константу, задайте значение и нажмите
Записать и закрыть.
Через общую форму констант. Разработчик создаёт общую форму, добавляет ей реквизит с типом КонстантыНабор, перетаскивает нужные константы на форму. Все значения записываются одной кнопкой. В конфигурациях на БСП так устроены панели раздела Администрирование: например, Администрирование → Общие настройки и Администрирование → Параметры учета в Бухгалтерии 3.0 — по сути наборы констант с удобными подписями.
Через раздел командного интерфейса. Если на закладке Подсистемы константа включена в раздел и стандартные команды разрешены, в панели навигации раздела появится ссылка на её форму.
Начальное значение при обновлении. Новая константа после F7 пустая: у Булево это Ложь, у числа 0, у ссылки — пустая ссылка. Если пустое значение ломает логику, заполните его кодом при первом запуске. В конфигурациях на БСП для этого пишут обработчик обновления информационной базы, в своей — проверяют значение при старте сеанса на сервере и записывают нужное.
В типовых конфигурациях правьте значения через панели «Администрирования», а не через «Все функции». Панель при записи выполняет зависимые действия: включает связанные опции, пересчитывает кэш, проверяет допустимые комбинации. Прямая запись в константу всё это обходит.
4. Как установить значение константы программно
Обращение к константам из кода выполняется на сервере. В клиентском модуле управляемой формы глобального свойства Константы нет — нужен серверный метод или серверный общий модуль.
Чтение и запись одной константы
&НаСервереБезКонтекста
Функция ПапкаОбмена()
Возврат Константы.ОсновнаяПапкаОбмена.Получить();
КонецФункции
&НаСервереБезКонтекста
Процедура ЗадатьПапкуОбмена(Путь)
Константы.ОсновнаяПапкаОбмена.Установить(Путь);
КонецПроцедуры
Метод Установить() сразу пишет значение в базу и вызывает обработчики модуля менеджера значения.
Менеджер значения: проверка и обработчики
Если перед записью нужно что-то проверить или выставить флаг загрузки при обмене, используйте менеджер значения:
Менеджер = Константы.ОсновнаяПапкаОбмена.СоздатьМенеджерЗначения();
Менеджер.Прочитать();
Менеджер.Значение = "D:\Exchange\";
Менеджер.ОбменДанными.Загрузка = Истина; // флаг читают обработчики, чтобы пропустить проверки
Менеджер.Записать();
У константы есть Модуль менеджера значения (контекстное меню константы — Открыть модуль менеджера значения). Там пишут обработчики ПередЗаписью(Отказ) и ПриЗаписи(Отказ). Текущее значение внутри модуля — ЭтотОбъект.Значение.
Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Не ПустаяСтрока(Значение) И Не СтрЗаканчиваетсяНа(Значение, "\") Тогда
Значение = Значение + "\";
КонецЕсли;
КонецПроцедуры
Набор констант: несколько значений одной транзакцией
Набор = Константы.СоздатьНабор("ОсновнаяПапкаОбмена, ИспользоватьОбменЧерезПапку");
Набор.Прочитать();
Набор.ОсновнаяПапкаОбмена = "D:\Exchange\";
Набор.ИспользоватьОбменЧерезПапку = Истина;
Набор.Записать();
Набор удобен, когда значения связаны и не должны оказаться в базе по отдельности.
| Способ | Когда применять | Обработчики модуля |
|---|---|---|
Получить() / Установить() | Одно значение, простая запись | Вызываются |
| Менеджер значения | Нужен флаг загрузки или предварительное чтение | Вызываются, можно отключить проверки через ОбменДанными.Загрузка |
| Набор констант | Несколько связанных значений сразу | Вызываются у каждой константы набора |
Где брать значение на клиенте
Частые обращения к серверу за одной константой тормозят формы. Варианты:
- 🧠 Общий модуль с повторным использованием возвращаемых значений «На время сеанса» — функция вызывается один раз, дальше результат берётся из кэша.
- 📦 Параметры клиента при запуске, если значение нужно сразу после входа.
- 🔎 Для булевых констант, связанных с функциональной опцией, —
ПолучитьФункциональнуюОпцию("ИмяОпции"), она доступна и на клиенте.
Кэш на время сеанса не узнает об изменении константы. Пользователь увидит новое значение после перезапуска сеанса — учитывайте это при тестировании.
5. Константы в запросах и отчётах
В языке запросов есть таблица Константы, где каждая константа — отдельное поле:
ВЫБРАТЬ
Константы.ОсновнаяВалюта КАК Валюта,
Константы.ОсновнаяПапкаОбмена КАК Папка
ИЗ
Константы КАК Константы
Таблица всегда возвращает одну строку, поэтому её удобно соединять с другими без условия связи или подставлять во вложенный запрос:
ВЫБРАТЬ
Товары.Ссылка,
Товары.Цена
ИЗ
Справочник.Номенклатура КАК Товары
ГДЕ
Товары.Цена > (ВЫБРАТЬ Константы.МинимальнаяЦена ИЗ Константы КАК Константы)
В системе компоновки данных константу проще передать параметром: прочитать её в модуле отчёта и установить через КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра(). Так запрос остаётся чистым, а пользователь при желании может переопределить параметр в настройках отчёта.
6. Права на константы и защита значений
Для каждой константы в роли задают четыре права:
- 👁 Чтение — получение значения кодом и в запросах.
- ✏️ Изменение — запись значения кодом.
- 📄 Просмотр — открытие формы константы в интерфейсе.
- 🖊 Редактирование — изменение значения в форме.
Права настраивают в Конфигураторе: Общие → Роли, откройте роль, найдите константу в дереве объектов и отметьте нужные флажки. Обычной бухгалтерской роли достаточно чтения: программа должна знать основную валюту, но менять её незачем.
Если пользователю нельзя выдавать право на изменение, а записать значение нужно (например, при первом запуске), вызывайте запись из серверного общего модуля в привилегированном режиме:
УстановитьПривилегированныйРежим(Истина);
Константы.ДатаПервогоЗапуска.Установить(ТекущаяДатаСеанса());
УстановитьПривилегированныйРежим(Ложь);
Альтернатива — отметить у общего модуля свойство «Привилегированный». Тогда весь его код выполняется без проверки прав, поэтому туда не кладут ничего, что принимает произвольные данные от клиента.
Пароли и токены в обычной строковой константе видит любой, у кого есть право чтения, а также всякий, кто выгрузит базу. Для секретов в конфигурациях на БСП есть безопасное хранилище, а в своей конфигурации — константа с правом чтения только у администратора.
7. Ошибки при работе с константами и их причины
Отдельно про смену типа. Если после обновления конфигурации константа оказалась пустой, а раньше в ней было значение, — платформа не смогла преобразовать старый тип в новый. Восстановить значение можно из выгрузки .dt, сделанной до изменения: разверните её в отдельную базу, прочитайте значение и перенесите вручную.