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