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