Вот, немного не то, но я столкнувшись с похожей задачей соединения к нескольким таблицам документов решал задачу перевода чорного запроса из документа списание типовой ТиС.
оригинал:
// ТекстЗапроса = "//{{ЗАПРОС(ПредСписание)
// |Период с '01.01.1980' по ДатаДок;
// |Без итогов;
// |Основание = Документ.СписаниеТМЦ.ДокОснование, Документ.Реализация.ДокОснование, Документ.ОтчетККМ.ДокОснование, Документ.РеализацияРозница.ДокОснование;
// |Товар = Документ.СписаниеТМЦ.Номенклатура, Документ.Реализация.Номенклатура, Документ.ОтчетККМ.Номенклатура, Документ.РеализацияРозница.Номенклатура;
// |Колво = Документ.СписаниеТМЦ.Количество, Документ.Реализация.Количество, Документ.ОтчетККМ.Количество, Документ.РеализацияРозница.Количество;
// |Коэфф = Документ.СписаниеТМЦ.Коэффициент, Документ.Реализация.Коэффициент, Документ.ОтчетККМ.Коэффициент, Документ.РеализацияРозница.Коэффициент;
// |Функция ВсегоКолво = Сумма(Колво);
// |Группировка Товар без групп;
// |Группировка Коэфф;
// |Условие(Основание = ДокОснование);
// |"//}}ЗАПРОС
прямой:
--EXPLAIN QUERY PLAN
SELECT
-- Товары.Документ [Основание :Документ]
Товары.Товар [Товар :Справочник.Номенклатура]
,Товары.Коэфф
,SUM(Товары.Колво) ВсегоКолво
FROM (
SELECT
-- Документы.Документ_вид||Документы.Документ Документ
CASE
WHEN СписаниеТМЦ.Номенклатура NOTNULL THEN СписаниеТМЦ.Номенклатура
WHEN Реализация.Номенклатура NOTNULL THEN Реализация.Номенклатура
WHEN ОтчетККМ.Номенклатура NOTNULL THEN ОтчетККМ.Номенклатура
WHEN РеализацияРозница.Номенклатура NOTNULL THEN РеализацияРозница.Номенклатура
END Товар
,CASE
WHEN СписаниеТМЦ.Номенклатура NOTNULL THEN СписаниеТМЦ.Количество
WHEN Реализация.Номенклатура NOTNULL THEN Реализация.Количество
WHEN ОтчетККМ.Номенклатура NOTNULL THEN ОтчетККМ.Количество
WHEN РеализацияРозница.Номенклатура NOTNULL THEN РеализацияРозница.Количество
END Колво
,CASE
WHEN СписаниеТМЦ.Номенклатура NOTNULL THEN СписаниеТМЦ.Коэффициент
WHEN Реализация.Номенклатура NOTNULL THEN Реализация.Коэффициент
WHEN ОтчетККМ.Номенклатура NOTNULL THEN ОтчетККМ.Коэффициент
WHEN РеализацияРозница.Номенклатура NOTNULL THEN РеализацияРозница.Коэффициент
END Коэфф
FROM (
SELECT
Ссылки.CHILDID Документ
-- ,Журнал.IDDOCDEF Документ_вид
FROM [__1S_crdoc] Ссылки
INNER JOIN [Журнал] Журнал ON Ссылки.CHILDID = Журнал.IDDOC
WHERE TRUE
AND Ссылки.PARENTVAL = :ДокОснование*
AND Ссылки.MDID = ' 0'
AND Журнал.IDDOCDEF IN окумента.РеализацияРозница)
AND Журнал.CLOSED=1
AND Журнал.DATE <= :ДатаДок
) Документы
LEFT JOIN [ДокументСтроки.СписаниеТМЦ] СписаниеТМЦ ON Документы.Документ = СписаниеТМЦ.IDDOC
LEFT JOIN [ДокументСтроки.Реализация] Реализация ON Документы.Документ = Реализация.IDDOC
LEFT JOIN [ДокументСтроки.ОтчетККМ] ОтчетККМ ON Документы.Документ = ОтчетККМ.IDDOC
LEFT JOIN [ДокументСтроки.РеализацияРозница] РеализацияРозница ON Документы.Документ = РеализацияРозница.IDDOC
) Товары
GROUP BY Товар, Коэфф
В моём случае, правда, первый подзапрос максимально сужает выборку и дальнейшие манипуляции практически не сказываются на объёме и скорости.
Ускорение, кстати, получилось где-то в 8000 раз! Четыре, мать его, порядка.
ЗЫ: в IN там :ВидДокумента.СписаниеТМЦ,
:ВидДокумента.Реализация,
:ВидДокумента.ОтчетККМ,
:ВидДокумента.РеализацияРозница