Как свернуть строки в одну и настроить группировку в таблице СКД?

Программист 1С v8.3 (Управляемые формы) Промышленность, строительство и АПК
← На главную

При построении отчетов в системе компоновки данных (СКД) разработчики часто сталкиваются с ситуацией, когда данные по одному и тому же объекту вместо компактной строки дублируются на несколько строк. В особенности это проявляется при использовании структуры Таблица, когда в строках выводятся характеристики объекта, а в колонках — периодические данные (например, движения оборудования по месяцам). Разберем, почему возникает такое дублирование, как правильно настроить группировки и поля-ресурсы, чтобы получить аккуратный отчет без лишних строк.

Проанализируем типовую ситуацию: в отчете необходимо вывести список скважин с их сопутствующими характеристиками (координаты, номер и прочие показатели), а в колонках по месяцам отобразить перемещения оборудования. При неверной настройке структуры вместо одной строки на каждую скважину отчет формирует несколько строк подряд.

Причины дублирования строк в отчете

Рассмотрим основные причины, по которым отчет на СКД выводит несколько строк вместо одной:

  1. Вывод через детальные записи: если в строках таблицы вместо группировки по объекту используются Детальные записи, платформа выводит каждую строку выборки независимо. Если за период было несколько движений или записей в регистрах, объект повторится ровно столько раз, сколько записей вернул запрос.
  2. Ошибка «Поле не входит в группу»: при попытке заменить детальные записи на группировку разработчики часто добавляют реквизиты объекта прямо на вкладку Выбранные поля строки таблицы, не добавив их в состав самой группировки или не сделав их ресурсами. СКД выдает ошибку компоновки, вынуждая возвращаться к детальным записям.
  3. Некорректная связь наборов данных: если отчет собран из двух независимых наборов данных, а связь между ними настроена не по полному ключу, строки родительского набора данных могут бесконтрольно размножаться.
  4. Разные значения вспомогательных полей: если показатели объекта со временем менялись и попадают в запрос с разными значениями, добавление их в группировку приведет к разделению одной строки на несколько уникальных комбинаций.

Пошаговое решение: сворачивание строк с помощью группировки

Разберем по шагам правильный алгоритм настройки структуры отчета.

  1. Перейдем на вкладку Настройки в схеме компоновки данных.
  2. В окне Структура найдем строки нашей таблицы. Если там установлены Детальные записи, удалим их.
  3. Добавим группировку по ключевому объекту — полю Скважина.
  4. Откроем саму группировку и перейдем на вкладку Поля группировки. Чтобы платформа не выдавала ошибку о том, что поле не входит в группу, добавим сюда все сопутствующие постоянные показатели: НомерСкважины, Координаты и другие аналитические реквизиты. Либо оставим в группировке только поле Скважина, а сопутствующие поля выберем в Выбранные поля через точку: Скважина.Номер, Скважина.Координаты.
  5. В колонки таблицы поместим периодическое поле, например ПериодМесяц.

В результате СКД объединит все записи с одинаковым набором полей группировки в одну компактную строку, а все движения распределит по колонкам периодов.

Настройка нечисловых ресурсов на пересечении строк и колонок

Посмотрим на следующую сложность: на пересечении строк и колонок в таблице СКД могут отображаться только поля, объявленные на вкладке Ресурсы. Если нам требуется вывести строковое наименование агрегата или дату его установки, просто добавить их в выбранные поля недостаточно.

Рассмотрим, как правильно настроить строковые ресурсы:

  1. Перейдем на вкладку Ресурсы схемы компоновки данных.
  2. Добавим поле Агрегат. Если мы уверены, что перемещение происходит не чаще одного раза в месяц, можно применить агрегатную функцию Максимум(Агрегат).
  3. Однако, если в течение одного месяца возможно несколько событий, функция Максимум() скроет часть информации. Более надежным решением является стандартная функция СКД СоединитьСтроки():

СоединитьСтроки(Агрегат, ", ")

Аналогичным образом настроим ресурс для даты перемещения:

Максимум(ДатаПеремещения)

Отключение лишних итогов по нечисловым полям

Когда строковые поля и даты становятся ресурсами, СКД по умолчанию начинает рассчитывать по ним общие итоги по вертикали и горизонтали, что в отчете выглядит некорректно. Выясним причину и отключим ненужные итоги.

Для отключения расчетов на уровне схемы перейдем на вкладку Ресурсы. В колонке Рассчитывать по... снимем флаг с пункта Общий итог, оставив расчет только для нужных группировок таблицы.

Чтобы убрать сами итоговые строки и столбцы из макета отчета, выполним следующие действия:

  1. На вкладке Настройки выделим корневой элемент Отчет или элемент структуры Таблица.
  2. В нижней панели перейдем на вкладку Другие настройки.
  3. Найдем параметры Расположение общих итогов по горизонтали и Расположение общих итогов по вертикали.
  4. Установим для обоих параметров значение Нет.

Оптимизация наборов данных и группировки колонок

Проанализируем архитектуру запросов отчета. Использование нескольких отдельных наборов данных в СКД приводит к тому, что соединение выборок происходит в оперативной памяти сервера приложений 1С. Если есть возможность, объединим данные в один набор данных с помощью операторов ЛЕВОЕ СОЕДИНЕНИЕ или ОБЪЕДИНИТЬ ВСЕ.

Кроме того, чтобы колонки таблицы строго соответствовали месяцам и не дублировались из-за разного времени суток, в тексте запроса обязательно приведем дату к началу периода:

НАЧАЛОПЕРИОДА(ДвиженияАгрегатов.Период, МЕСЯЦ) КАК ПериодМесяц

Для поля ПериодМесяц на вкладке Наборы данных настроим формат отображения (например, ДФ='ММММ гггг'). В результате таблица СКД будет выводить аккуратные колонки по месяцам, а по строкам — единственную запись скважины со всеми показателями.

← На главную