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

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

Как создать форму констант в 1С

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

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

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

Что такое форма констант и когда она нужна

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

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

Если констант мало и они независимы, часто достаточно автоматически генерируемой формы. Если требуется управление видимостью, проверки при записи или нестандартный состав элементов — создают собственную форму.

Автоматическая генерация формы констант

Самый быстрый способ получить рабочую форму — поручить это платформе. В режиме управляемого приложения «Такси» платформа умеет сама строить форму констант по их составу, если разработчик не назначил собственную форму.

Порядок действий следующий. Откройте конфигуратор, найдите в дереве ветку «Константы» и откройте её свойства (правый клик → «Свойства» или палитра свойств). Убедитесь, что свойство «Основная форма» не заполнено. Затем проверьте состав констант: по умолчанию в состав включаются все константы конфигурации, но его можно ограничить через свойство «Состав», выбрав только нужные.

После этого форма становится доступна в режиме предприятия. В тонком клиенте её можно открыть через главное меню: «Все функции → Константы → <имя формы констант>», либо программно методом ОткрытьФорму("ОбщаяФорма.ФормаКонстант") — если форма создана как общая, или через автоматически сгенерированную форму, доступную из стандартного интерфейса. Платформа разместит поля в одну колонку в порядке следования констант в составе.

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

Создание собственной формы констант в конфигураторе

Когда автогенерации недостаточно, форму создают вручную. В дереве конфигурации выделите ветку «Константы», вызовите контекстное меню и выберите «Добавить форму» либо откройте ветку «Общие → Формы констант» и добавьте форму там. В конструкторе форм выберите тип «Форма констант» — платформа автоматически создаст реквизит формы с набором констант.

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

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

Программная работа с формой констант

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

Типовой пример — блокировка зависимых полей. Если константа «ИспользоватьСкладскойУчет» выключена, поле «СкладПоУмолчанию» должно быть недоступно. Это делается в обработчике ПриИзменении поля флажка с установкой свойства Доступность у зависимого элемента.

bsl
&НаКлиенте
Процедура ИспользоватьСкладскойУчетПриИзменении(Элемент)
    Элементы.СкладПоУмолчанию.Доступность = НаборКонстант.ИспользоватьСкладскойУчет;
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Элементы.СкладПоУмолчанию.Доступность = НаборКонстант.ИспользоватьСкладскойУчет;
КонецПроцедуры

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

Открытие формы констант программно и из интерфейса

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

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

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

Типичные ошибки и ограничения

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

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

Третья ошибка — попытка добавить на форму констант произвольные реквизиты и ожидать, что они сохранятся. Форма констант хранит только константы; дополнительные реквизиты формы живут, пока форма открыта, и при закрытии теряются. Если нужно хранить дополнительные настройки, используйте константы, регистры сведений или хранилище общих настроек.

Типичные ошибки
01
Создали форму, но не назначили её основной — пользователи видят автогенерированную форму
02
Удалили или переименовали реквизит «НаборКонстант» — команда «Записать» перестала работать
03
Забыли добавить константу в состав формы — поле не отображается на автоматической форме
04
Разместили проверки только на клиенте — при программной записи констант они не срабатывают; дублируйте критичные проверки на сервере
05
Не настроили права на константы — пользователь видит форму, но получает ошибку при записи

Проверка результата

После настройки проверьте форму в режиме предприятия под пользователем с реальными правами, а не только под администратором. Откройте форму через интерфейс подсистемы, измените значение константы, нажмите «Записать» и закройте форму. Затем откройте её снова — значение должно сохраниться.

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

Контрольные точки

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

Открытие формы
Норма

Форма открывается из командного интерфейса подсистемы

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

Форма доступна только через «Все функции» — не настроен командный интерфейс

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

После записи и повторного открытия значения сохранились

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

Значения сбрасываются — нарушен реквизит «НаборКонстант» или нет прав на изменение

Права доступа
Норма

Пользователь с ограниченной ролью либо редактирует, либо получает понятный отказ

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

Ошибка доступа возникает уже при открытии формы — проверьте права на просмотр констант

Логика видимости
Норма

Зависимые поля блокируются при отключении опции

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

Поля остаются доступными — обработчик изменения не назначен элементу формы

FAQ

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

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

Почему константа не отображается на автоматической форме?

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

Как добавить на форму констант поясняющий текст или картинку?

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

Чем форма констант отличается от обработки с настройками?

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

Как запретить пользователям менять константы, но оставить просмотр?

Настройте роли: для константы уберите право «Изменение», оставив «Чтение» и «Просмотр». Пользователь откроет форму и увидит значения, но не сможет их записать. Для полного скрытия уберите и право просмотра — тогда поле не отобразится на форме, а программное чтение константы вызовет ошибку доступа.

Итог

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

Форма констант либо генерируется платформой по составу констант, либо создаётся вручную в ветке «Общие → Формы констант» и назначается основной. Для собственной формы не трогайте реквизит «НаборКонстант», логику размещайте в обработчиках формы, доступ открывайте через командный интерфейс подсистем и права ролей. Результат проверяйте под пользователем с рабочими правами: форма должна открываться, записывать значения и сохранять их при повторном открытии.