Как установить переключатель в заголовке группы на управляемой форме в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Ограничения платформы на управляемых формах

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

В управляемом интерфейсе компоновка элементов выполняется автоматически потоковым механизмом. Встроить интерактивный элемент управления (флажок, поле переключателя или кнопку) внутрь стандартной рамки заголовка группы штатными свойствами невозможно. Свойство группы ПутьКДаннымЗаголовка позволяет передавать в заголовок исключительно текстовые значения реквизитов формы, но не интерактивные элементы диалога.

Рассмотрим доступные варианты реализации подобного пользовательского интерфейса.

Способ 1. Имитация заголовка с помощью горизонтальной группы элементов

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

  1. Создадим элемент формы с типом Обычная группа и установим для свойства Группировка значение Горизонтальная всегда или Горизонтальная если возможно.
  2. Внутри созданной группы разместим декоративную надпись (элемент Декорация - надпись) с текстом нужного заголовка.
  3. Рядом с надписью добавим элемент Поле переключателя, связанный с нужным реквизитом формы. В свойствах переключателя установим ПоложениеЗаголовка в значение Нет.
  4. Для придания современному переключателю компактного вида установим свойство ВидПереключателя в значение Тумблер или Кнопки. Список значений переключателя зададим через свойство СписокВыбора.
  5. Ниже создадим основную группу с реквизитами и отключим у нее отображение заголовка (свойство ОтображениеЗаголовка = Ложь). В результате вся конструкция визуально воспринимается как единая панель с переключателем в верхней строке.

Способ 2. Управление отображением панелей через страницы

Если переключатель в заголовке предназначен для переключения наборов реквизитов или режимов работы группы, используем элемент формы Группа - Страницы. Разберем реализацию программного переключения:

  1. Создадим элемент Группа - Страницы и отключим стандартные закладки, установив свойство ОтображениеСтраниц в значение Нет.
  2. Внутри создадим страницы, соответствующие вариантам выбора переключателя.
  3. В обработчике события ПриИзменении нашего тумблера/переключателя переключим видимую страницу программно.

Посмотрим на пример кода в модуле формы:


&НаКлиенте
Процедура ПереключательРежимаПриИзменении(Элемент)
    Если РеквизитФормыРежим = 1 Тогда
        Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаРежим1;
    Иначе
        Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаРежим2;
    КонецЕсли;
КонецПроцедуры

Способ 3. Использование поля HTML-документа

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

Проанализируем процесс реализации:

  1. Добавим на управляемую форму реквизит с типом Строка и свяжем его с элементом формы вида Поле HTML документа.
  2. Сформируем HTML-разметку с использованием CSS-стилей (например, стилизация контейнера <fieldset> и тега <legend> со встроенными радиокнопками или тумблером).
  3. Для передачи событий клика из HTML в платформу 1С настроим навигацию по схемам или перехват событий в обработчике события ДокументСформирован / ПриНажатии.

Посмотрим на пример инициализации разметки при создании формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    HTMLТекст = 
        "<html>
        |<head>
        |<style>
        | fieldset { border: 1px solid #ccc; border-radius: 4px; padding: 10px; font-family: Arial; }
        | legend { font-size: 12px; font-weight: bold; }
        |</style>
        |</head>
        |<body>
        | <fieldset>
        |  <legend>Настройки: <input type='radio' name='mode' value='1' checked> Вариант А <input type='radio' name='mode' value='2'> Вариант Б</legend>
        |  <div>Содержимое группы</div>
        | </fieldset>
        |</body>
        |</html>";
    РеквизитHTML = HTMLТекст;
КонецПроцедуры

Таким образом, для типовых прикладных решений рекомендуется использовать Способ 1 и Способ 2 со стандартным тумблером и горизонтальными группами, а Способ 3 применять только при строгих требованиях к нестандартному графическому оформлению.

← На главную