При разработке сложных аналитических отчетов в системе компоновки данных (СКД) часто возникает необходимость вывести данные в виде таблицы, где колонки имеют разную структуру. Например, сначала идут периоды (недели) с вложенными показателями «Количество» и «Сумма», а следом — колонки с остатками по разным счетам, где требуется только один показатель «Сумма». В этой статье мы подробно разберем, как реализовать такую задачу стандартными средствами СКД без написания кода в модуле формы.
Первым шагом проанализируем структуру запроса. Чтобы вывести и обороты по неделям, и остатки в одной горизонтальной развертке, нам необходимо объединить эти данные. Рассмотрим пример структуры запроса с использованием ОБЪЕДИНИТЬ ВСЕ. Для корректной работы СКД важно, чтобы у записей оборотов и записей остатков были заполнены соответствующие поля периодов или специальные маркеры.
ВЫБРАТЬ
Обороты.Номенклатура КАК Номенклатура,
Обороты.ПериодНеделя КАК Период,
Обороты.КоличествоОборот КАК Количество,
Обороты.СуммаОборот КАК Сумма,
0 КАК ОстатокЧ,
0 КАК ОстатокР,
"Обороты" КАК ТипСтроки
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Неделя, ) КАК Обороты
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Остатки.Номенклатура,
ДАТАВРЕМЯ(1, 1, 1),
0,
0,
Остатки.СуммаОстаток,
0,
"ОстатокЧ"
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&КонецПериода, Счет = &СчетЧ, , ) КАК Остатки
Обратите внимание: для остатков мы можем использовать пустую дату или специальное поле-идентификатор ТипСтроки. Это поможет нам в дальнейшем разделить логику вывода в настройках компоновки.
Рассмотрим ситуацию, когда стандартная таблица СКД выводит все ресурсы во всех колонках. Наша задача — разделить их. Проанализируем настройки вкладки «Настройки» в схеме компоновки данных:
Номенклатура.Первая группировка колонок будет отвечать за периоды (недели). Мы выбираем поле Период. Вторая группировка будет отвечать за дополнительные колонки остатков. Чтобы они выводились корректно, можно сгруппировать их по детальным записям или по фиктивному полю.
Это ключевой момент решения. Выясним, как заставить СКД выводить в неделях «Количество» и «Сумму», а в остатках только «Остаток»:
Период).Количество и Сумма.ОстатокЧ (или другие нужные поля остатков).Таким образом, СКД сформирует разные наборы колонок для разных частей таблицы, хотя они и находятся в одной строке номенклатуры.
Рассмотрим, как заменить стандартный вывод даты (например, «01.01.2024») на дружелюбное название «Неделя 1», не прибегая к обработке табличного документа после вывода. Для этого воспользуемся механизмом вычисляемых полей.
Перейдем на вкладку «Вычисляемые поля» и добавим новое поле ПредставлениеНедели. В поле «Выражение» впишем следующую формулу:
"Неделя " + Строка(РазностьДат(&НачалоПериода, НачалоПериода(Период, "Неделя"), "Неделя") + 1)
Важный нюанс: чтобы недели сортировались правильно (чтобы «Неделя 10» не оказалась перед «Неделя 2»), необходимо настроить упорядочивание. В настройках этого вычисляемого поля укажите «Выражение упорядочивания» — само поле Период (дата начала недели). Тогда визуально пользователь увидит текст, а система будет сортировать колонки по дате.
Если нам нужно более сложное оформление (например, объединение ячеек заголовка или специфический цвет), проанализируем возможности вкладки «Макеты». Мы можем создать «Макет группировки» для колонки Период.
ЗаголовокНедели, и свяжем его с нашим вычисляемым полем ПредставлениеНедели.Это позволит системе динамически генерировать заголовки для каждой колонки периода, используя заданный нами шаблон оформления.
Посмотрим на ситуацию, когда из-за объединения данных в колонках недель появляются пустые ячейки для остатков, и наоборот. Чтобы отчет выглядел профессионально, настроим Условное оформление:
Количество равно 0 (или NULL), то применять оформление.Также не забудьте настроить Роли полей на вкладке «Наборы данных». Для поля Период должна быть установлена роль «Период» с соответствующим типом (Неделя), чтобы механизмы дополнения периодов СКД работали корректно. Если нам нужно, чтобы остатки выводились даже при отсутствии оборотов, убедитесь, что в настройках группировки периода включено «Дополнение периодов».
Подведем итог: использование раздельных группировок колонок с собственным составом выбранных полей и вычисляемых полей для заголовков позволяет создавать гибкие и сложные отчеты в СКД полностью в рамках декларативного подхода, сохраняя возможность работы отчета в фоновом режиме и на мобильной платформе.