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