При построении отчетов в системе компоновки данных (СКД) разработчики часто сталкиваются с ситуацией, когда данные по одному и тому же объекту вместо компактной строки дублируются на несколько строк. В особенности это проявляется при использовании структуры Таблица, когда в строках выводятся характеристики объекта, а в колонках — периодические данные (например, движения оборудования по месяцам). Разберем, почему возникает такое дублирование, как правильно настроить группировки и поля-ресурсы, чтобы получить аккуратный отчет без лишних строк.
Проанализируем типовую ситуацию: в отчете необходимо вывести список скважин с их сопутствующими характеристиками (координаты, номер и прочие показатели), а в колонках по месяцам отобразить перемещения оборудования. При неверной настройке структуры вместо одной строки на каждую скважину отчет формирует несколько строк подряд.
Рассмотрим основные причины, по которым отчет на СКД выводит несколько строк вместо одной:
Детальные записи, платформа выводит каждую строку выборки независимо. Если за период было несколько движений или записей в регистрах, объект повторится ровно столько раз, сколько записей вернул запрос.Разберем по шагам правильный алгоритм настройки структуры отчета.
Детальные записи, удалим их.Скважина.НомерСкважины, Координаты и другие аналитические реквизиты. Либо оставим в группировке только поле Скважина, а сопутствующие поля выберем в Выбранные поля через точку: Скважина.Номер, Скважина.Координаты.ПериодМесяц.В результате СКД объединит все записи с одинаковым набором полей группировки в одну компактную строку, а все движения распределит по колонкам периодов.
Посмотрим на следующую сложность: на пересечении строк и колонок в таблице СКД могут отображаться только поля, объявленные на вкладке Ресурсы. Если нам требуется вывести строковое наименование агрегата или дату его установки, просто добавить их в выбранные поля недостаточно.
Рассмотрим, как правильно настроить строковые ресурсы:
Агрегат. Если мы уверены, что перемещение происходит не чаще одного раза в месяц, можно применить агрегатную функцию Максимум(Агрегат).Максимум() скроет часть информации. Более надежным решением является стандартная функция СКД СоединитьСтроки():
СоединитьСтроки(Агрегат, ", ")
Аналогичным образом настроим ресурс для даты перемещения:
Максимум(ДатаПеремещения)
Когда строковые поля и даты становятся ресурсами, СКД по умолчанию начинает рассчитывать по ним общие итоги по вертикали и горизонтали, что в отчете выглядит некорректно. Выясним причину и отключим ненужные итоги.
Для отключения расчетов на уровне схемы перейдем на вкладку Ресурсы. В колонке Рассчитывать по... снимем флаг с пункта Общий итог, оставив расчет только для нужных группировок таблицы.
Чтобы убрать сами итоговые строки и столбцы из макета отчета, выполним следующие действия:
Отчет или элемент структуры Таблица.Проанализируем архитектуру запросов отчета. Использование нескольких отдельных наборов данных в СКД приводит к тому, что соединение выборок происходит в оперативной памяти сервера приложений 1С. Если есть возможность, объединим данные в один набор данных с помощью операторов ЛЕВОЕ СОЕДИНЕНИЕ или ОБЪЕДИНИТЬ ВСЕ.
Кроме того, чтобы колонки таблицы строго соответствовали месяцам и не дублировались из-за разного времени суток, в тексте запроса обязательно приведем дату к началу периода:
НАЧАЛОПЕРИОДА(ДвиженияАгрегатов.Период, МЕСЯЦ) КАК ПериодМесяц
Для поля ПериодМесяц на вкладке Наборы данных настроим формат отображения (например, ДФ='ММММ гггг'). В результате таблица СКД будет выводить аккуратные колонки по месяцам, а по строкам — единственную запись скважины со всеми показателями.