Как вам такая идея:
Реализовать в провайдере дополнительные поля и подзапросы.
На словах пока сложно объяснить, покажу как примерно вижу использование
ИсточникЗапроса.ОсновнойЗапрос("
|select
| idx_date_time_iddoc [Ключ],
| iddoc [Док :Документ],
| iddocdef [Док_вид :ВидДокументаПредставление],
| date [ДатаДок :Дата],
| docno [НомерДок],
| closed [Флаг]
|from Журнал
|where iddocdef in (:ВидДокумента.ПКО, :ВидДокумента.Реализация, :ВидДокумента.ПоступлениеТМЦ)
|", "Ключ", "Док");
ИсточникЗапроса.ДобавитьПоля("Контрагент, Договор, Сумма,
|СуммаУпрПоКассе, СуммаРубПоКассе, СуммаВалПоКассе");
ИсточникЗапроса.ДобавитьПодзапрос("
|select
| Контрагент [Контрагент :Справочник.Контрагенты],
| Договор [Договор :Справочник.Договоры],
| Сумма [Сумма :Число.15.2]
|from Документ_ПКО
|where iddoc = @Док -- Подставиться значение из поля Док строки основного запроса
|limit 1", "ПоПКО");
ИсточникЗапроса.ДобавитьПодзапрос("
|select
| Контрагент [Контрагент :Справочник.Контрагенты],
| Договор [Договор :Справочник.Договоры],
| СуммаВзаиморасчетов [Сумма :Число.15.2]
|from Документ_Реализация
|where iddoc = @Док
|limit 1", "ПоРеализация");
ИсточникЗапроса.ДобавитьПодзапрос("
|select
| Контрагент [Контрагент :Справочник.Контрагенты],
| Договор [Договор :Справочник.Договоры],
| СуммаВзаиморасчетов [Сумма :Число.15.2]
|from Документ_ПоступлениеТМЦ
|where iddoc = @Док
|limit 1", "ПоПоступлениеТМЦ");
ИсточникЗапроса.ДобавитьПодзапрос("
|select
| sum(СуммаВал) [СуммаВалПоКассе :Число.15.2],
| sum(СуммаРуб) [СуммаРубПоКассе :Число.15.2],
| sum(СуммаУпр) [СуммаУпрПоКассе :Число.15.2]
|from Регистр_Касса
|where iddoc = @Док
|");
ИсточникЗапроса.ДобавитьВыбирательПодЗапроса("
|case @Док_вид
|when :ВидДокумента.ПКО then 'ПоПКО'
|when :ВидДокумента.Реализация then 'ПоРеализация'
|when :ВидДокумента.ПоступлениеТМЦ then 'ПоПоступлениеТМЦ'
|end
|");
Поставщик.УстановитьИсточникЗапроса(ИсточникЗапроса);
Суть в том, что для каждой записи, полученной из основного запроса, вычисляются выражения - "выбиратели подзапросов", которые должны вернуть идентификатор подзапроса, который необходимо выполнить для этой записи.
Подзапросы без идентификаторов выполняются всегда.
Подзапросы должны быть либо "горизонтальные" - возвращают 1 строку, имена полей подзапроса определяют для каких доп.полей они предназначены, либо "вертикальные" - возвращают несколько строк, две колонки: Значение, ИмяДопПоля (ну например выводить остатки по складам в отдельные колонки).
Обсудим?