Как правильно расположить переключатели и поля ввода на управляемой форме 1С

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

При разработке интерфейсов на управляемых формах 1С программисты часто сталкиваются с задачей создания компактных и понятных фильтров. Типичный пример: выбор критерия поиска (Поставщик, Договор или Заявка) с помощью переключателя, рядом с которым должно располагаться соответствующее поле ввода. Рассмотрим детально, как реализовать такую задачу профессионально, чтобы интерфейс выглядел аккуратно и корректно работал при изменении размеров окна.

Использование вложенных групп и сквозного выравнивания

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

  1. Создадим основную группу ГруппаОбщая. В свойствах этой группы установим параметр Группировка в значение Вертикальная. Это будет контейнер для всех наших строк.
  2. Внутри основной группы создадим несколько вложенных групп (по одной на каждую строку: Поставщик, Договор, Заявка). Для каждой такой вложенной группы установим параметр Группировка в значение Горизонтальная.
  3. В каждую горизонтальную группу добавим соответствующий элемент переключателя и поле ввода.

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

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

Современный подход: Вид «Тумблер»

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

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

Программное управление доступностью полей

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


&НаКлиенте
Процедура ПереключательВыборПриИзменении(Элемент)
    
    // 0 - Поставщик, 1 - Договор, 2 - Заявка
    ВыбранныйВариант = Объект.ВариантФильтра;
    
    Элементы.ПолеПоставщик.Доступность = (ВыбранныйВариант = 0);
    Элементы.ПолеДоговор.Доступность  = (ВыбранныйВариант = 1);
    Элементы.ПолеЗаявка.Доступность   = (ВыбранныйВариант = 2);
    
    // Установим фокус на активное поле для удобства пользователя
    Если ВыбранныйВариант = 0 Тогда
        ЭтаФорма.ТекущийЭлемент = Элементы.ПолеПоставщик;
    ИначеЕсли ВыбранныйВариант = 1 Тогда
        ЭтаФорма.ТекущийЭлемент = Элементы.ПолеДоговор;
    КонецЕсли;
    
КонецПроцедуры

Реализация через Систему Компоновки Данных (СКД)

Если задача стоит в рамках создания отчета, наиболее "православным" и гибким методом будет использование СКД. Вместо того чтобы рисовать фильтры вручную, мы можем вывести стандартные настройки отбора на форму. Однако, если нам нужно получить данные сложным запросом и вывести их в свою таблицу, мы можем использовать внешний набор данных.

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


Процедура СформироватьОтчет(ДокументРезультат, ДанныеРасшифровки) Экспорт
    
    СтандартнаяОбработка = Ложь;
    
    // Получаем данные своим запросом, учитывая значения из наших полей на форме
    ТаблицаДанных = ПолучитьДанныеДляЗаполнения(); 
    
    ВнешниеНаборыДанных = Новый Структура;
    ВнешниеНаборыДанных.Вставить("ТЗ", ТаблицаДанных);
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;    
    НастройкиКомпоновкиДанных = КомпоновщикНастроек.ПолучитьНастройки();
    
    СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновкиДанных, ДанныеРасшифровки);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
        
    ПроцессорВывода.НачатьВывод();
    ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
    ПроцессорВывода.ЗакончитьВывод();
    
КонецПроцедуры

Этот подход позволяет совместить красивый интерфейс "ручной работы" с мощными механизмами вывода и расшифровки 1С.

Дополнительные советы по оформлению

Рассмотрим еще несколько приемов, которые помогут довести форму до идеала:

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

← На главную