Как в отчете на СКД отобразить три и более отбора горизонтально в одну строку?

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

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

Анализ стандартного механизма размещения элементов

Разберем, как работает автоматическое размещение в управляемом приложении. Платформа использует алгоритм "компактного размещения" для панели пользовательских настроек. Этот алгоритм учитывает несколько факторов:

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

Способ 1. Оптимизация свойств элементов без создания формы

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

Рассмотрим последовательность действий в схеме компоновки данных:

  1. Перейдем на вкладку Настройки, выберем нужный отбор.
  2. Нажмем на кнопку Свойства пользовательской настройки (иконка с шестеренкой).
  3. Попробуем максимально сократить Представление. Вместо "Организация предприятия" напишем просто "Организация". Чем короче текст, тем больше шансов, что платформа уместит три элемента в ряд.

Если это не помогло, можно программно изменить ширину полей в модуле формы (если форма создана). Выполним следующие настройки в процедуре ПриСозданииНаСервере:


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

Способ 2. Создание собственной формы отчета (рекомендуемый метод)

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

Шаг 1. Создание формы

В объекте конфигурации "Отчет" перейдем на вкладку "Формы" и создадим новую форму отчета. Платформа предложит назначить ее основной — соглашаемся.

Шаг 2. Добавление контейнера для отборов

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

  1. Нажмем "Добавить" -> Группа - Группа элементов.
  2. В свойствах созданной группы установим параметр Группировка в значение Горизонтальная всегда.
  3. Установим свойство Отображение управления гиперссылкой в значение Нет (по желанию).

Шаг 3. Размещение отборов

Теперь самое важное: нам нужно вынести конкретные отборы из состава пользовательских настроек компоновщика в эту группу. В правой части редактора формы (в разделе "Реквизиты") найдем Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.

Если мы просто перетащим все пользовательские настройки на форму, они снова будут выводиться списком. Чтобы управлять каждым отбором отдельно, их нужно добавлять как отдельные элементы формы, связанные с конкретными индексами в коллекции настроек, либо использовать программное заполнение группы при создании формы.

Способ 3. Программное управление группами (Platform 8.3.15+)

В современных версиях платформы (8.3.15 и выше) появились расширенные возможности управления компоновкой. Мы можем использовать свойство НаправлениеПотокаСодержания. Рассмотрим пример того, как можно программно сгруппировать элементы, чтобы они "тесно" прилегали друг к другу.

В модуле формы проанализируем ситуацию и добавим код:


&НаСервере
Процедура НастроитьОтображениеОтборов()
    // Создаем группу для горизонтального размещения
    НоваяГруппа = Элементы.Добавить("ГруппаГоризонтальныхОтборов", Тип("ГруппаФормы"), Элементы.СоставПользовательскихНастроек);
    НоваяГруппа.Вид = ВидГруппыФормы.БезОтображения;
    НоваяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
    
    // Перемещаем элементы отборов в созданную группу
    // Внимание: имена элементов зависят от состава настроек СКД
    Элементы.Переместить(Элементы.ОтборОрганизация, НоваяГруппа);
    Элементы.Переместить(Элементы.ОтборСклад, НоваяГруппа);
    Элементы.Переместить(Элементы.ОтборНоменклатура, НоваяГруппа);
КонецПроцедуры

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

Нюансы использования пользовательских групп в СКД

Выясним еще один момент: в самой схеме СКД на вкладке "Настройки" есть возможность объединять настройки в группы. Рассмотрим этот вариант:

  1. Откройте вкладку Настройки в СКД.
  2. В нижней части (Пользовательские настройки) выделите три отбора.
  3. Нажмите правую кнопку мыши и выберите Сгруппировать пользовательские настройки.
  4. Для созданной группы можно выбрать тип (Группа, Страницы, Свертываемая).

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

Итоги и рекомендации

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

Рекомендуемый алгоритм действий:

  1. Попробуйте максимально сократить заголовки и уменьшить ширину полей в свойствах настроек.
  2. Если это не помогает, создайте свою форму отчета.
  3. На форме используйте Группу элементов с видом Горизонтальная всегда.
  4. Принудительно задайте элементам внутри группы свойство РастягиватьПоГоризонтали = Ложь.

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

← На главную