Есть задание на отчёт из более чем 100 колонок.
Суть отчёта показать что оператор делал по контрагенту т.е. набор колонок:
Оператор
Контрагент
ВведеноДокументовИзменений
ВведеноДокументовОтгрузки
...
...
СозданоЧегоНибудь
Причём Операторов 10-20, контрагентов 10 000 - 80 000
Информацию я получаю пакетами в запросе (в Временые таблицы), всего получается 14 пакетов, соответственно 14 ВременныхТаблиц в каждой таблице есть Колонки "Оператор","Контрагент" ну и набор колонок для вывода в отчёт.
Первая проблема которая возникает как это всё объединить. Т.е. к какой таблице подключить каждую из 14 ВременыхТаблиц полученных в пакетах.
Понятно что не одна из 14 таблиц не может быть опорной таблицей.
Я решил эту проблему так: Сделал 15ю таблицу в которой через объединить собрал все 14 таблиц выбрав из них колонки Оператор, Контрагент и исключив из результата повторяющиеся записи.
Затем я присоединил к этой таблице остальные 14. И всё было бы хорошо если бы не вполне ожидаемое желание выводить не сразу 100 колонок а иметь возможность выбрать выводимые колонки.
Казалось бы ничего сложного объявляем таблицы как необязательные если поля не выбраны, таблицы не подключаются, конечно 14 пакетов не куда не денутся и время на формирование ВТ будет потрачено но это не является проблемой.
Собственно проблема:
Но тут всплывает та самая 15я опорная таблица если мы например оставили 5 полей из 100 то в отчёте будет огромное количество пустых строк т.к. в 15й таблице комбинация оператор/контрагент со всех 14 ВТ а данные по сути нам нужны только из 1 ВТ.
Как я понял компоновка данных не умеет убирать из объединения источники данных поля которых не используются.
Пока в голову приходит только в результирующем запросе в секции ГДЕ указать проверку 100 полей на NULL в виде:
Не Поле1 ЕСТЬ NUll или
Не Поле2 ЕСТЬ NUll или
Не Поле3 ЕСТЬ NUll
Может быть тут появятся какие то идеи как это лучше сделать в СКД?