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