Имя: Пароль:
1C
1С v8
Два левых соединения в простом запросе
,
0 DJ Anthon
 
17.11.22
11:02
ВЫБРАТЬ
        СУММА(ОтчетОРозничныхПродажахТовары.Сумма) КАК Товары_Сумма
    ИЗ
        Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
        ПО ОтчетОРозничныхПродажахТовары.Ссылка = ОтчетОРозничныхПродажах.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах.ОплатаПлатежнымиКартами КАК ОтчетОРозничныхПродажахОплатаПлатежнымиКартами
        ПО ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка = ОтчетОРозничныхПродажахТовары.Ссылка
    СГРУППИРОВАТЬ ПО
    ОтчетОРозничныхПродажах.Ссылка

Если закомментить второе левое соединение, то сумма выдается верная. Если раскомментировать, то удваивается (потому что в документе две строки в табличной части ОплатаПлатежнымиКартами).
Надо итоги по двум табличным частям. Как правильно сделать? Через временные таблицы? Или здесь можно что-то исправить?
1 RomanYS
 
17.11.22
11:06
(0) Я бы объединением делал, если это конечная цель (Надо итоги по двум табличным частям). А если итоги только малая часть возможно проще подготовить ВТ с итогами
2 DJ Anthon
 
17.11.22
11:14
конечная цель - список документов с итогами по всем табличным частям
3 FIXXXL
 
17.11.22
11:19
(1) +1
5 mistеr
 
17.11.22
11:24
(0) Замени соединение на объединение
6 DJ Anthon
 
17.11.22
11:31
(1) (3) (5) как? через ОБЪЕДИНИТЬ ВСЕ, что ли? так там разные поля
7 DJ Anthon
 
17.11.22
11:37
через временные таблицы получилось, но это слишком громоздко

    ВЫБРАТЬ
        ОтчетОРозничныхПродажах.Ссылка КАК Ссылка
    ПОМЕСТИТЬ ОтчетОРозничныхПродажах
    ИЗ
        Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
    ГДЕ
        ОтчетОРозничныхПродажах.Проведен И ОтчетОРозничныхПродажах.Дата <= &Дата1
    СГРУППИРОВАТЬ ПО
        ОтчетОРозничныхПродажах.Ссылка;

    ВЫБРАТЬ
        ОтчетОРозничныхПродажахТовары.Ссылка,
        СУММА(ОтчетОРозничныхПродажахТовары.Сумма) КАК Товары_Сумма
    ПОМЕСТИТЬ ОтчетОРозничныхПродажахТовары
    ИЗ
        Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
    ГДЕ
        ОтчетОРозничныхПродажахТовары.Ссылка.Проведен И ОтчетОРозничныхПродажахТовары.Ссылка.Дата <= &Дата1
    СГРУППИРОВАТЬ ПО
        ОтчетОРозничныхПродажахТовары.Ссылка;
        
    ВЫБРАТЬ
        ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка КАК Ссылка,
        СУММА(ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Сумма) КАК ОплатаПлатежнымиКартами_Сумма
    ПОМЕСТИТЬ ОтчетОРозничныхПродажахОплатаПлатежнымиКартами
    ИЗ                      
        Документ.ОтчетОРозничныхПродажах.ОплатаПлатежнымиКартами КАК ОтчетОРозничныхПродажахОплатаПлатежнымиКартами
    ГДЕ
        ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка.Проведен И ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка.Дата <= &Дата1
        
    СГРУППИРОВАТЬ ПО
        ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка;
        
ВЫБРАТЬ * ИЗ
ОтчетОРозничныхПродажах
ЛЕВОЕ СОЕДИНЕНИЕ ОтчетОРозничныхПродажахТовары ПО ОтчетОРозничныхПродажахТовары.Ссылка = ОтчетОРозничныхПродажах.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ ОтчетОРозничныхПродажахОплатаПлатежнымиКартами ПО ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка = ОтчетОРозничныхПродажах.Ссылка
8 RomanYS
 
17.11.22
11:44
(6)
выбрать
ТЧ1.Ссылка,
Сумма(ТЧ1.Сумма) как Итог1
0 как Итог2
...

ОБЪЕДИНИТЬ ВСЕ
выбрать
ТЧ2,
0 как Итог1,
Сумма(ТЧ2.Сумма) как Итог2,
...
...
9 DJ Anthon
 
17.11.22
12:01
че-то мне это совсем не нравится, запрос я составляю программно. выбирается произвольное число реквизитов из шапки документа, из табличных частей (по которым могут быть итоги) по произвольным видам документов. получается, выборку реквизитов мне надо будет дублировать в каждом подзапросе, чтобы поля совпадали. то есть число реквизитов умножится на число табличных частей. плюс пустые поля от чужих табличных частей. а я хотел, чтобы число строк запроса не умножалось, а складывалось. то есть если для одного документа реквизитов 20, табличных частей 5 по два итога в каждом, я бы хотел примерно 20+5*2=30 строк запроса плюс отборы и группировки, а не (20+5*2)*5=150 строк. ладно, сделаю через временные таблицы, как в (7).
10 Said_We
 
17.11.22
12:09
(9) У тебя задача дословно "Надо итоги по двум табличным частям".
Если перефразировать, то необходима сумму по одной табличной части прибавить к сумме другой табличной части и т.д.
Если ещё перефразировать, то одну табличную часть сложить с другой табличной частью....
Если ещё перефразировать, то одно множество сложить с другим множеством.

Сложение множеств это объединение, а не соединение. А соединение это умножение множеств.

Умножение множеств это задачи вида: найти или сопоставить для каждого элемента первого множества элементы из второго множества; сопоставить каждому элементу первого множества элементы и из второго множества и каждому элементу из второго множества сопоставить элементы из первого множества. и т.д.
11 tesei
 
17.11.22
12:13
(7) В приведённом примере нет ВТ
12 Said_We
 
17.11.22
12:15
(11) Есть, но они не нужны.
Примерный алгоритм в (8). Только ещё надо в подзапрос завернуть, сгруппировать и сложить. Но информации в (8) более чем достаточно.
13 Mihasya
 
17.11.22
12:35
(0) А есть так? (сам не проверял)

"ВЫБРАТЬ
|    ЕСТЬNULL(ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка, ОтчетОРозничныхПродажахТовары.Ссылка) КАК Ссылка,
|    СУММА(ЕСТЬNULL(ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Сумма, 0)) КАК СуммаОплаты,
|    СУММА(ЕСТЬNULL(ОтчетОРозничныхПродажахТовары.Сумма, 0)) КАК СуммаТоваров
|ИЗ
|    Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
|        ПОЛНОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах.ОплатаПлатежнымиКартами КАК ОтчетОРозничныхПродажахОплатаПлатежнымиКартами
|        ПО ОтчетОРозничныхПродажахТовары.Ссылка = ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка
|            И ОтчетОРозничныхПродажахТовары.НомерСтроки = ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.НомерСтроки
|ГДЕ
|    ЕСТЬNULL(ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка, ОтчетОРозничныхПродажахТовары.Ссылка) = &Ссылка
|
|СГРУППИРОВАТЬ ПО
|    ЕСТЬNULL(ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка, ОтчетОРозничныхПродажахТовары.Ссылка)"
14 Kassern
 
17.11.22
12:36
(0) " Если раскомментировать, то удваивается" -> значит для 1 строчки в левой таблице есть 2 подходящие по связи строчки в правой
15 Mihasya
 
17.11.22
12:43
(14) это значит что в в таблице "ОплатаПлатежнымиКартами " две строки, было бы три, утраивалось бы... и т.д. ))
16 Kassern
 
17.11.22
12:46
(15) Вот так нужно торговать! Легким движением руки утроили выручку за день)
17 DJ Anthon
 
17.11.22
13:03
(10) да не понимаю я смысла все равно. табличная часть - это множество. но мне нужна только одна цифра из множества - итог. итог привязывается к ссылке. вот этот итог я и хочу приклеить к основной таблице с реквизитами по ссылке
18 DJ Anthon
 
17.11.22
13:07
(15) да, я понял, как это происходит, но не понимаю, как исправить, не переделывая весь запрос. наверное, надо сделать вложенный запрос, чтобы сначала одна табличная часть свои итоги присоединила, затем вторая.
19 DJ Anthon
 
17.11.22
13:09
(13) кажется, номер строки там совсем не нужен
20 DJ Anthon
 
17.11.22
13:10
(11) а разве ПОМЕСТИТЬ, это не ВТ? зато запрос работает, как надо. Правда, есть лишние Ссылка1, Ссылка2... но они не мешают
21 Kassern
 
17.11.22
13:34
(18) "но не понимаю, как исправить" -> сделать для 1 строчки левой таблицы одну строчку в правой. Это можно добиться путем дополнительных связей, либо предварительной группировки таблицы.
22 DJ Anthon
 
17.11.22
13:41
(21) вот, я и хочу понять, как сделать предварительную группировку. судя по всему, это либо вложенный запрос (что не рекомендуется), либо временная таблица. я надеялся, что это можно как-то проще сделать.

спасибо всем
23 Said_We
 
17.11.22
14:09
(22) Проще и правильнее ответ в (8).
24 1Сергей
 
17.11.22
14:17
Объединитьфобия лечится?
25 Said_We
 
17.11.22
14:17
(22) "вот, я и хочу понять" - неа не хочешь.
26 Mihasya
 
17.11.22
14:25
(19) Перекрестись )))
27 DJ Anthon
 
17.11.22
14:42
(24) у меня нет ее, я постоянно ее использую. просто не вижу тут смысла. если будет время, вечером сделаю вариант с объединить и сравню, что будет лучше. может, просто вы меня не так поняли..
28 RomanYS
 
17.11.22
14:46
(27) конечно не так. "Итоги по нескольким ТЧ" это же такая многосмысленная фраза....)))
29 DJ Anthon
 
17.11.22
15:49
Всё, реализовал. Тем не менее у меня в запросе используется ОБЪЕДИНИТЬ ВСЕ, но для видов документов, а не для табличных частей.
Поэтому доказать вам будет проблематично, ведь я же все-таки использовал объединение )
Думаю, что если я буду еще объединять табличные части, то запрос станет намного больше, а его отладка и читабельность ухудшатся.

Вот пример сгенерированного запроса, 1 вид документа, 2 табличные части по одному итогу в каждой

//ОтчетОРозничныхПродажах
ВЫБРАТЬ
    ОтчетОРозничныхПродажах.Проведен КАК Проведен,
    ОтчетОРозничныхПродажах.ПометкаУдаления КАК ПометкаУдаления,
    ОтчетОРозничныхПродажах.Дата КАК Дата,
    ОтчетОРозничныхПродажах.Дата КАК Дата_,
    ОтчетОРозничныхПродажах.Номер КАК Номер,
    "Отчет о розничных продажах" КАК __,
    ОтчетОРозничныхПродажах.СуммаДокумента КАК СуммаДокумента,
    ОтчетОРозничныхПродажах.СуммаВозвратов КАК СуммаВозвратов,
    ОтчетОРозничныхПродажах.Магазин КАК Магазин,
    ОтчетОРозничныхПродажах.СуммаОплатыНаличных КАК СуммаОплатыНаличных,
    "" КАК _,
    ОтчетОРозничныхПродажах.Ссылка КАК Ссылка
ПОМЕСТИТЬ ОтчетОРозничныхПродажах
    ИЗ Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
ГДЕ
    ОтчетОРозничныхПродажах.Ссылка.Проведен
    И ОтчетОРозничныхПродажах.Ссылка.Дата >= &Дата1
СГРУППИРОВАТЬ ПО
    ОтчетОРозничныхПродажах.Ссылка;

ВЫБРАТЬ
    ЕСТЬNULL(СУММА(ОтчетОРозничныхПродажахТовары.Сумма), 0) КАК Товары_Сумма,
    ОтчетОРозничныхПродажахТовары.Ссылка КАК Ссылка
ПОМЕСТИТЬ ОтчетОРозничныхПродажахТовары
    ИЗ Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
ГДЕ
    ОтчетОРозничныхПродажахТовары.Ссылка.Проведен
    И ОтчетОРозничныхПродажахТовары.Ссылка.Дата >= &Дата1
СГРУППИРОВАТЬ ПО
    ОтчетОРозничныхПродажахТовары.Ссылка;

ВЫБРАТЬ
    ЕСТЬNULL(СУММА(ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Сумма), 0) КАК ОплатаПлатежнымиКартами_Сумма,
    ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка КАК Ссылка
ПОМЕСТИТЬ ОтчетОРозничныхПродажахОплатаПлатежнымиКартами
    ИЗ Документ.ОтчетОРозничныхПродажах.ОплатаПлатежнымиКартами КАК ОтчетОРозничныхПродажахОплатаПлатежнымиКартами
ГДЕ
    ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка.Проведен
    И ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка.Дата >= &Дата1
СГРУППИРОВАТЬ ПО
    ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка;

//РеализацияТоваров
ВЫБРАТЬ
    РеализацияТоваров.Проведен КАК Проведен,
    РеализацияТоваров.ПометкаУдаления КАК ПометкаУдаления,
    РеализацияТоваров.Дата КАК Дата,
    РеализацияТоваров.Дата КАК Дата_,
    РеализацияТоваров.Номер КАК Номер,
    "Реализация товаров" КАК __,
    РеализацияТоваров.СуммаДокумента КАК СуммаДокумента,
    "" КАК СуммаВозвратов,
    РеализацияТоваров.Магазин КАК Магазин,
    "" КАК СуммаОплатыНаличных,
    "" КАК _,
    РеализацияТоваров.Ссылка КАК Ссылка
ПОМЕСТИТЬ РеализацияТоваров
    ИЗ Документ.РеализацияТоваров КАК РеализацияТоваров
ГДЕ
    РеализацияТоваров.Ссылка.Проведен
    И РеализацияТоваров.Ссылка.Дата >= &Дата1
СГРУППИРОВАТЬ ПО
    РеализацияТоваров.Ссылка;

ВЫБРАТЬ
    ЕСТЬNULL(СУММА(РеализацияТоваровТовары.Сумма), 0) КАК Товары_Сумма,
    РеализацияТоваровТовары.Ссылка КАК Ссылка
ПОМЕСТИТЬ РеализацияТоваровТовары
    ИЗ Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
ГДЕ
    РеализацияТоваровТовары.Ссылка.Проведен
    И РеализацияТоваровТовары.Ссылка.Дата >= &Дата1
СГРУППИРОВАТЬ ПО
    РеализацияТоваровТовары.Ссылка;

ВЫБРАТЬ
    0 КАК ОплатаПлатежнымиКартами_Сумма,
    РеализацияТоваровОплатаПлатежнымиКартами.Ссылка КАК Ссылка
ПОМЕСТИТЬ РеализацияТоваровОплатаПлатежнымиКартами
    ИЗ Документ.РеализацияТоваров КАК РеализацияТоваровОплатаПлатежнымиКартами
ГДЕ
    РеализацияТоваровОплатаПлатежнымиКартами.Ссылка.Проведен
    И РеализацияТоваровОплатаПлатежнымиКартами.Ссылка.Дата >= &Дата1
СГРУППИРОВАТЬ ПО
    РеализацияТоваровОплатаПлатежнымиКартами.Ссылка;


ВЫБРАТЬ * ИЗ
ОтчетОРозничныхПродажах
ЛЕВОЕ СОЕДИНЕНИЕ ОтчетОРозничныхПродажахТовары ПО ОтчетОРозничныхПродажахТовары.Ссылка = ОтчетОРозничныхПродажах.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ ОтчетОРозничныхПродажахОплатаПлатежнымиКартами ПО ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка = ОтчетОРозничныхПродажах.Ссылка
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ * ИЗ
РеализацияТоваров
ЛЕВОЕ СОЕДИНЕНИЕ РеализацияТоваровТовары ПО РеализацияТоваровТовары.Ссылка = РеализацияТоваров.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ РеализацияТоваровОплатаПлатежнымиКартами ПО РеализацияТоваровОплатаПлатежнымиКартами.Ссылка = РеализацияТоваров.Ссылка
УПОРЯДОЧИТЬ ПО Дата, Номер

итого 100 строк

вот пример запроса, 2 документа, 4 табличные части по 2 итога в каждой

//ОтчетОРозничныхПродажах
ВЫБРАТЬ
    ОтчетОРозничныхПродажах.Проведен КАК Проведен,
    ОтчетОРозничныхПродажах.ПометкаУдаления КАК ПометкаУдаления,
    ОтчетОРозничныхПродажах.Дата КАК Дата,
    ОтчетОРозничныхПродажах.Дата КАК Дата_,
    ОтчетОРозничныхПродажах.Номер КАК Номер,
    "Отчет о розничных продажах" КАК __,
    ОтчетОРозничныхПродажах.СуммаДокумента КАК СуммаДокумента,
    ОтчетОРозничныхПродажах.СуммаВозвратов КАК СуммаВозвратов,
    ОтчетОРозничныхПродажах.Магазин КАК Магазин,
    ОтчетОРозничныхПродажах.СуммаОплатыНаличных КАК СуммаОплатыНаличных,
    "" КАК _,
    ОтчетОРозничныхПродажах.Ссылка КАК Ссылка
ПОМЕСТИТЬ ОтчетОРозничныхПродажах
    ИЗ Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
ГДЕ
    ОтчетОРозничныхПродажах.Ссылка.Проведен
    И ОтчетОРозничныхПродажах.Ссылка.Дата >= &Дата1
СГРУППИРОВАТЬ ПО
    ОтчетОРозничныхПродажах.Ссылка;

ВЫБРАТЬ
    ЕСТЬNULL(СУММА(ОтчетОРозничныхПродажахТовары.Сумма), 0) КАК Товары_Сумма,
    ОтчетОРозничныхПродажахТовары.Ссылка КАК Ссылка
ПОМЕСТИТЬ ОтчетОРозничныхПродажахТовары
    ИЗ Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
ГДЕ
    ОтчетОРозничныхПродажахТовары.Ссылка.Проведен
    И ОтчетОРозничныхПродажахТовары.Ссылка.Дата >= &Дата1
СГРУППИРОВАТЬ ПО
    ОтчетОРозничныхПродажахТовары.Ссылка;

ВЫБРАТЬ
    ЕСТЬNULL(СУММА(ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Сумма), 0) КАК ОплатаПлатежнымиКартами_Сумма,
    ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка КАК Ссылка
ПОМЕСТИТЬ ОтчетОРозничныхПродажахОплатаПлатежнымиКартами
    ИЗ Документ.ОтчетОРозничныхПродажах.ОплатаПлатежнымиКартами КАК ОтчетОРозничныхПродажахОплатаПлатежнымиКартами
ГДЕ
    ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка.Проведен
    И ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка.Дата >= &Дата1
СГРУППИРОВАТЬ ПО
    ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка;

ВЫБРАТЬ
    ЕСТЬNULL(СУММА(ОтчетОРозничныхПродажахПродажиПоДисконтнымКартам.Сумма), 0) КАК ПродажиПоДисконтнымКартам_Сумма,
    ОтчетОРозничныхПродажахПродажиПоДисконтнымКартам.Ссылка КАК Ссылка
ПОМЕСТИТЬ ОтчетОРозничныхПродажахПродажиПоДисконтнымКартам
    ИЗ Документ.ОтчетОРозничныхПродажах.ПродажиПоДисконтнымКартам КАК ОтчетОРозничныхПродажахПродажиПоДисконтнымКартам
ГДЕ
    ОтчетОРозничныхПродажахПродажиПоДисконтнымКартам.Ссылка.Проведен
    И ОтчетОРозничныхПродажахПродажиПоДисконтнымКартам.Ссылка.Дата >= &Дата1
СГРУППИРОВАТЬ ПО
    ОтчетОРозничныхПродажахПродажиПоДисконтнымКартам.Ссылка;

ВЫБРАТЬ
    КОЛИЧЕСТВО(ОтчетОРозничныхПродажахВозвращенныеТовары.НомерСтроки) КАК ВозвращенныеТовары_,
    ЕСТЬNULL(СУММА(ОтчетОРозничныхПродажахВозвращенныеТовары.Количество), 0) КАК ВозвращенныеТовары_Количество,
    ЕСТЬNULL(СУММА(ОтчетОРозничныхПродажахВозвращенныеТовары.Сумма), 0) КАК ВозвращенныеТовары_Сумма,
    ОтчетОРозничныхПродажахВозвращенныеТовары.Ссылка КАК Ссылка
ПОМЕСТИТЬ ОтчетОРозничныхПродажахВозвращенныеТовары
    ИЗ Документ.ОтчетОРозничныхПродажах.ВозвращенныеТовары КАК ОтчетОРозничныхПродажахВозвращенныеТовары
ГДЕ
    ОтчетОРозничныхПродажахВозвращенныеТовары.Ссылка.Проведен
    И ОтчетОРозничныхПродажахВозвращенныеТовары.Ссылка.Дата >= &Дата1
СГРУППИРОВАТЬ ПО
    ОтчетОРозничныхПродажахВозвращенныеТовары.Ссылка;

//РеализацияТоваров
ВЫБРАТЬ
    РеализацияТоваров.Проведен КАК Проведен,
    РеализацияТоваров.ПометкаУдаления КАК ПометкаУдаления,
    РеализацияТоваров.Дата КАК Дата,
    РеализацияТоваров.Дата КАК Дата_,
    РеализацияТоваров.Номер КАК Номер,
    "Реализация товаров" КАК __,
    РеализацияТоваров.СуммаДокумента КАК СуммаДокумента,
    "" КАК СуммаВозвратов,
    РеализацияТоваров.Магазин КАК Магазин,
    "" КАК СуммаОплатыНаличных,
    "" КАК _,
    РеализацияТоваров.Ссылка КАК Ссылка
ПОМЕСТИТЬ РеализацияТоваров
    ИЗ Документ.РеализацияТоваров КАК РеализацияТоваров
ГДЕ
    РеализацияТоваров.Ссылка.Проведен
    И РеализацияТоваров.Ссылка.Дата >= &Дата1
СГРУППИРОВАТЬ ПО
    РеализацияТоваров.Ссылка;

ВЫБРАТЬ
    ЕСТЬNULL(СУММА(РеализацияТоваровТовары.Сумма), 0) КАК Товары_Сумма,
    РеализацияТоваровТовары.Ссылка КАК Ссылка
ПОМЕСТИТЬ РеализацияТоваровТовары
    ИЗ Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
ГДЕ
    РеализацияТоваровТовары.Ссылка.Проведен
    И РеализацияТоваровТовары.Ссылка.Дата >= &Дата1
СГРУППИРОВАТЬ ПО
    РеализацияТоваровТовары.Ссылка;

ВЫБРАТЬ
    0 КАК ОплатаПлатежнымиКартами_Сумма,
    РеализацияТоваровОплатаПлатежнымиКартами.Ссылка КАК Ссылка
ПОМЕСТИТЬ РеализацияТоваровОплатаПлатежнымиКартами
    ИЗ Документ.РеализацияТоваров КАК РеализацияТоваровОплатаПлатежнымиКартами
ГДЕ
    РеализацияТоваровОплатаПлатежнымиКартами.Ссылка.Проведен
    И РеализацияТоваровОплатаПлатежнымиКартами.Ссылка.Дата >= &Дата1
СГРУППИРОВАТЬ ПО
    РеализацияТоваровОплатаПлатежнымиКартами.Ссылка;

ВЫБРАТЬ
    0 КАК ПродажиПоДисконтнымКартам_Сумма,
    РеализацияТоваровПродажиПоДисконтнымКартам.Ссылка КАК Ссылка
ПОМЕСТИТЬ РеализацияТоваровПродажиПоДисконтнымКартам
    ИЗ Документ.РеализацияТоваров КАК РеализацияТоваровПродажиПоДисконтнымКартам
ГДЕ
    РеализацияТоваровПродажиПоДисконтнымКартам.Ссылка.Проведен
    И РеализацияТоваровПродажиПоДисконтнымКартам.Ссылка.Дата >= &Дата1
СГРУППИРОВАТЬ ПО
    РеализацияТоваровПродажиПоДисконтнымКартам.Ссылка;

ВЫБРАТЬ
    0 КАК ВозвращенныеТовары_,
    0 КАК ВозвращенныеТовары_Количество,
    0 КАК ВозвращенныеТовары_Сумма,
    РеализацияТоваровВозвращенныеТовары.Ссылка КАК Ссылка
ПОМЕСТИТЬ РеализацияТоваровВозвращенныеТовары
    ИЗ Документ.РеализацияТоваров КАК РеализацияТоваровВозвращенныеТовары
ГДЕ
    РеализацияТоваровВозвращенныеТовары.Ссылка.Проведен
    И РеализацияТоваровВозвращенныеТовары.Ссылка.Дата >= &Дата1
СГРУППИРОВАТЬ ПО
    РеализацияТоваровВозвращенныеТовары.Ссылка;


ВЫБРАТЬ * ИЗ
ОтчетОРозничныхПродажах
ЛЕВОЕ СОЕДИНЕНИЕ ОтчетОРозничныхПродажахТовары ПО ОтчетОРозничныхПродажахТовары.Ссылка = ОтчетОРозничныхПродажах.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ ОтчетОРозничныхПродажахОплатаПлатежнымиКартами ПО ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка = ОтчетОРозничныхПродажах.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ ОтчетОРозничныхПродажахПродажиПоДисконтнымКартам ПО ОтчетОРозничныхПродажахПродажиПоДисконтнымКартам.Ссылка = ОтчетОРозничныхПродажах.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ ОтчетОРозничныхПродажахВозвращенныеТовары ПО ОтчетОРозничныхПродажахВозвращенныеТовары.Ссылка = ОтчетОРозничныхПродажах.Ссылка
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ * ИЗ
РеализацияТоваров
ЛЕВОЕ СОЕДИНЕНИЕ РеализацияТоваровТовары ПО РеализацияТоваровТовары.Ссылка = РеализацияТоваров.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ РеализацияТоваровОплатаПлатежнымиКартами ПО РеализацияТоваровОплатаПлатежнымиКартами.Ссылка = РеализацияТоваров.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ РеализацияТоваровПродажиПоДисконтнымКартам ПО РеализацияТоваровПродажиПоДисконтнымКартам.Ссылка = РеализацияТоваров.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ РеализацияТоваровВозвращенныеТовары ПО РеализацияТоваровВозвращенныеТовары.Ссылка = РеализацияТоваров.Ссылка
УПОРЯДОЧИТЬ ПО Дата, Номер

150 строк

если бы я использовал объединить между табличными частями, то запрос был бы строк 500
а нужно все это для универсального реестра документов, которого очень не хватает в таких недоконфигах, как Розница.
я сделал реестр, который подключается ко всем спискам документов, подтягивает из них отборы и автоматически настраивается,
но у юзера есть возможность дополнительно настроить внешний вид - выбрать несколько видов документов и отметить выводимые колонки, изменить их порядок и ширину.
если кому не лень затестить, могу выложить сюда, есть только одно вмешательство в один общий модуль.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший