При разработке отчетов на базе Системы компоновки данных (СКД) программисты часто сталкиваются с тем, что стандартная панель быстрых настроек ведет себя непредсказуемо в плане визуального расположения элементов. Пользователи часто просят разместить все ключевые фильтры (например, Период, Организация, Склад) в одну линию для экономии экранного пространства. Однако по умолчанию платформа 1С часто переносит третий отбор на новую строку, даже если на мониторе достаточно свободного места. Рассмотрим, почему это происходит и какими способами можно добиться желаемого результата.
Разберем, как работает автоматическое размещение в управляемом приложении. Платформа использует алгоритм "компактного размещения" для панели пользовательских настроек. Этот алгоритм учитывает несколько факторов:
СтандартныйПериод или длинные ссылки занимают больше места по умолчанию.Проанализируем ситуацию: если мы просто добавляем отборы в "Пользовательские настройки" со свойством "Включать в быстрые настройки", мы отдаем управление визуализацией на откуп платформе. Чтобы изменить это поведение, нам придется вмешаться в структуру формы или свойства элементов.
Прежде чем приступать к сложному программированию, попробуем "ужать" существующие элементы. Выясним причину, по которой третий элемент не помещается. Часто это происходит из-за избыточной ширины, зарезервированной платформой.
Рассмотрим последовательность действий в схеме компоновки данных:
Если это не помогло, можно программно изменить ширину полей в модуле формы (если форма создана). Выполним следующие настройки в процедуре ПриСозданииНаСервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Находим элементы пользовательских настроек
Для Каждого ЭлементФормы Из Элементы Цикл
Если ТипЗнч(ЭлементФормы) = Тип("ПолеФормы") И Найти(ЭлементФормы.Имя, "Отбор") > 0 Тогда
ЭлементФормы.РастягиватьПоГоризонтали = Ложь;
ЭлементФормы.Ширина = 15; // Устанавливаем фиксированную ширину
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Как отмечают опытные разработчики, самый надежный способ — это создание собственной формы отчета. Это позволяет жестко задать структуру интерфейса, которая не будет зависеть от автоматических алгоритмов платформы. Разберем этот процесс по шагам.
Шаг 1. Создание формы
В объекте конфигурации "Отчет" перейдем на вкладку "Формы" и создадим новую форму отчета. Платформа предложит назначить ее основной — соглашаемся.
Шаг 2. Добавление контейнера для отборов
В дереве элементов формы нам нужно создать специальную группу, которая будет принудительно выстраивать элементы в ряд. Выполним следующие действия:
Горизонтальная всегда.Нет (по желанию).Шаг 3. Размещение отборов
Теперь самое важное: нам нужно вынести конкретные отборы из состава пользовательских настроек компоновщика в эту группу. В правой части редактора формы (в разделе "Реквизиты") найдем Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.
Если мы просто перетащим все пользовательские настройки на форму, они снова будут выводиться списком. Чтобы управлять каждым отбором отдельно, их нужно добавлять как отдельные элементы формы, связанные с конкретными индексами в коллекции настроек, либо использовать программное заполнение группы при создании формы.
В современных версиях платформы (8.3.15 и выше) появились расширенные возможности управления компоновкой. Мы можем использовать свойство НаправлениеПотокаСодержания. Рассмотрим пример того, как можно программно сгруппировать элементы, чтобы они "тесно" прилегали друг к другу.
В модуле формы проанализируем ситуацию и добавим код:
&НаСервере
Процедура НастроитьОтображениеОтборов()
// Создаем группу для горизонтального размещения
НоваяГруппа = Элементы.Добавить("ГруппаГоризонтальныхОтборов", Тип("ГруппаФормы"), Элементы.СоставПользовательскихНастроек);
НоваяГруппа.Вид = ВидГруппыФормы.БезОтображения;
НоваяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
// Перемещаем элементы отборов в созданную группу
// Внимание: имена элементов зависят от состава настроек СКД
Элементы.Переместить(Элементы.ОтборОрганизация, НоваяГруппа);
Элементы.Переместить(Элементы.ОтборСклад, НоваяГруппа);
Элементы.Переместить(Элементы.ОтборНоменклатура, НоваяГруппа);
КонецПроцедуры
Важно помнить, что при использовании стандартной панели пользовательских настроек (СоставПользовательскихНастроек), элементы создаются динамически. Чтобы ими управлять, нужно обращаться к ним после того, как платформа их сгенерировала.
Выясним еще один момент: в самой схеме СКД на вкладке "Настройки" есть возможность объединять настройки в группы. Рассмотрим этот вариант:
К сожалению, этот метод часто не дает желаемого горизонтального эффекта "в одну строку", так как группа в пользовательских настройках обычно визуализируется как вертикальный блок или отдельная ветка дерева. Поэтому для достижения строго горизонтального вида создание кастомной формы остается приоритетным решением.
Подводя итог, можно сказать, что штатного переключателя "расположить в ряд" в самом конструкторе СКД не существует. Это вопрос дизайна интерфейса, а не логики компоновки данных.
Рекомендуемый алгоритм действий:
Горизонтальная всегда.РастягиватьПоГоризонтали = Ложь.Такой подход гарантирует, что даже при изменении размера окна или на мониторах с низким разрешением, ваши три отбора останутся в одной строке, обеспечивая пользователю удобство и привычный вид интерфейса.