|
v7: Все ВошедшиеВЗапрос и 1С++ | ☑ | ||
---|---|---|---|---|
0
woha
28.03.13
✎
16:46
|
Доброго времени суток! Кто-нибудь пробовал реализовать конструкцию "Все ВошедшиеВЗапрос" с промощью 1с++?
Нашел пример: ТекстЗапроса = " |SELECT | РегТовар.Товар Товар, | РегСклад.Склад Склад, | РегКолво.Количество Количество |FROM |( |SELECT DISTINCT | РегТовар.Товар Товар |FROM | $РегистрОстатки.ОстаткиТоваров(:ВыбДата~,, | Фирма = :ВыбФирма, | (Товар), (Количество)) as РегТовар |) as РегТовар, |( |SELECT DISTINCT | РегСклад.Склад Склад |FROM | $РегистрОстатки.ОстаткиТоваров(:ВыбДата~,, | Фирма = :ВыбФирма, | (Склад), (Количество)) as РегСклад |) as РегСклад |LEFT JOIN |( |SELECT | РегКолво.КоличествоОстаток Количество, | РегКолво.Товар Товар, | РегКолво.Склад Склад |FROM | $РегистрОстатки.ОстаткиТоваров(:ВыбДата~,, | Фирма = :ВыбФирма, | (Склад, Товар), (Количество)) as РегКолво |) as РегКолво ON РегКолво.Склад = РегСклад.Склад AND | РегКолво.Товар = РегТовар.Товар |"; и по нему постоил свой запрос, но он не работает. Спасибо. |
|||
1
Ёпрст
28.03.13
✎
16:47
|
весьма забавный запрос
|
|||
2
woha
28.03.13
✎
16:50
|
(1) Писатель примера взял за основу ToySQL:
На основе статьи с сайта 1csql.ru http://1csql.ru/materials/articles/sql/001.html |
|||
3
Дык ё
28.03.13
✎
16:53
|
(0) а если cross join вместо запятой?
а еще можно забить на эти мутные джойны и написать group by with cube |
|||
4
woha
28.03.13
✎
16:53
|
Даже ссылка неверно указана
http://www.1csql.ru/materials/articles/sql.html~7843caf1-47bf-ea4b-fe5e-454caadb17bc |
|||
5
Ёпрст
28.03.13
✎
17:02
|
я бы вот это пользовал и привет, а получал бы обычную плоскую таблицу
http://www.1cpp.ru/forum/YaBB.pl?num=1202201945 |
|||
6
woha
28.03.13
✎
17:05
|
(3) with cube не помогло
|
|||
7
woha
28.03.13
✎
17:07
|
(5) суть не в итогах по группировкам, а в выводе всех измерений регистра даже если значение ресура 0
|
|||
8
Mikeware
28.03.13
✎
17:08
|
(7) ну и соединяй со справочниками-измерениями..
|
|||
9
woha
28.03.13
✎
17:08
|
для этого в 1с и есть Все ВошедшиеВЗапрос
|
|||
10
Ёпрст
28.03.13
✎
17:08
|
(7) ну, не используй ВТ - напиши запрос руктями + having выкинь оттуда - будут тебе 0
|
|||
11
woha
28.03.13
✎
17:13
|
Это оригинал 1с:
|Тип = Документ.РасходнаяНакладная.ПризнакНакладной; |Тип2 = Документ.ПриходнаяНакладная.ПризнакНакладной; |Експедитор= Документ.РасходнаяНакладная.Експедитор; |Тов = Документ.РасходнаяНакладная.Товар,Документ.ПриходнаяНакладная.Товар; |ГрТов = Документ.РасходнаяНакладная.Товар.ГрупаТМЦ,Документ.ПриходнаяНакладная.Товар.ГрупаТМЦ; |Скл = Документ.РасходнаяНакладная.Склад,Документ.ПриходнаяНакладная.Склад; |ГрКлиент = Документ.РасходнаяНакладная.Клиент.ГрупаКлн,Документ.ПриходнаяНакладная.Клиент.ГрупаКлн; |Клиент = Документ.РасходнаяНакладная.Клиент,Документ.ПриходнаяНакладная.Клиент; |Колво = Документ.РасходнаяНакладная.Количество,Документ.ПриходнаяНакладная.Количество; |Сум = Документ.РасходнаяНакладная.Сумма,Документ.ПриходнаяНакладная.Сумма; |Функция Кво = Сумма(Колво) когда (Тип=Перечисление.ПризнРасхНакл.Продажа); |Функция Сума = Сумма(Сум) когда (Тип=Перечисление.ПризнРасхНакл.Продажа); |Функция КвоВ = Сумма(Колво) когда (Тип2=Перечисление.ПризнПрихНакл.ВозвратОтПокупателя); |Функция СумаВ = Сумма(Сум) когда (Тип2=Перечисление.ПризнПрихНакл.ВозвратОтПокупателя); |Группировка ГрТов без групп; |Группировка Тов без групп; |Группировка Клиент без групп Все ВошедшиеВЗапрос;"; |
|||
12
woha
28.03.13
✎
17:14
|
Это 1С++
ТекстЗапроса = " |SELECT | | Все.ГрупаТМЦ as ГрупаТМЦ |, Все.Тов as Тов |, Все.Клиент as Клиент |, GROUPING(Все.ГрупаТМЦ) as ИтогПоГрупаТМЦ |, GROUPING(Все.Тов) as ИтогПоТовар |, GROUPING(Все.Клиент) as ИтогПоКлиент |, SUM(Все.Кво) as Кво |, SUM(Все.Сума) as Сума |, SUM(Все.КвоВ) as КвоВ |, SUM(Все.СумаВ) as СумаВ | |FROM | |( |SELECT | $ТМЦ.ГрупаТМЦ as ГрупаТМЦ |, $ТчДокР.Товар as Тов |, $ДокР.Клиент as Клиент |, (SUM(CASE | WHEN $ДокР.ПризнакНакладной = :Продажа THEN $ТчДокР.Количество ELSE 0 END)) as Кво |, (SUM(CASE | WHEN $ДокР.ПризнакНакладной = :Продажа THEN $ТчДокР.Сумма ELSE 0 END)) as Сума |, 0 as КвоВ |, 0 as СумаВ | |FROM | $Документ.РасходнаяНакладная as ДокР |INNER JOIN | $ДокументСтроки.РасходнаяНакладная as ТчДокР |ON | ДокР.IDDOC = ТчДокР.IDDOC |INNER JOIN | " + Журн + " as Жур |ON | ДокР.IDDOC = Жур.IDDOC |INNER JOIN | $Справочник.Товары as ТМЦ |ON | ТМЦ.ID = $ТчДокР.Товар |INNER JOIN | $Справочник.Контрагент as Контр |ON | Контр.ID = $ДокР.Клиент |WHERE | Жур." + ДатаДок + " |AND | Жур." + Закрыт + " = 1 | " + Условие1 + " |GROUP BY | $ТМЦ.ГрупаТМЦ |, $ТчДокР.Товар |, $ДокР.Клиент | |UNION ALL | |SELECT | $ТМЦ.ГрупаТМЦ as ГрупаТМЦ |, $ТчДокП.Товар as Тов |, $ДокП.Клиент as Клиент |, 0 as КвоР |, 0 as СумаР |, (SUM(CASE | WHEN $ДокП.ПризнакНакладной = :Возврат THEN $ТчДокП.Количество ELSE 0 END)) as КвоВ |, (SUM(CASE | WHEN $ДокП.ПризнакНакладной = :Возврат THEN $ТчДокП.Сумма ELSE 0 END)) as СумаВ | |FROM | $Документ.ПриходнаяНакладная as ДокП |INNER JOIN | $ДокументСтроки.ПриходнаяНакладная as ТчДокП |ON | ДокП.IDDOC = ТчДокП.IDDOC |INNER JOIN | " + Журн + " as Жур |ON | ДокП.IDDOC = Жур.IDDOC |INNER JOIN | $Справочник.Товары as ТМЦ |ON | ТМЦ.ID = $ТчДокП.Товар |INNER JOIN | $Справочник.Контрагент as Контр |ON | Контр.ID = $ДокП.Клиент |WHERE | Жур." + ДатаДок + " |AND | Жур." + Закрыт + " = 1 | " + Условие2 + " |GROUP BY | $ТМЦ.ГрупаТМЦ |, $ТчДокП.Товар |, $ДокП.Клиент ) Все |GROUP BY | Все.ГрупаТМЦ |, Все.Тов |, Все.Клиент WITH ROLLUP |"; |
|||
13
Ёпрст
28.03.13
✎
17:14
|
(11) зачет, ага.
Какое отношение ЭТО имеет к запросу в (0) ? |
|||
14
woha
28.03.13
✎
17:15
|
это был пример реализации
|
|||
15
Ёпрст
28.03.13
✎
17:19
|
WITH ROLLUP лучше не писать..это устаревший синтаксис
|
|||
16
woha
28.03.13
✎
17:26
|
(15) Что с ним, что без него (разве что строку группировки дает)
|
|||
17
Ёпрст
28.03.13
✎
17:26
|
Ачего не устраивает в запросе ?
|
|||
18
Ёпрст
28.03.13
✎
17:28
|
ну окромя того, что он не оптимальный..
|
|||
19
woha
28.03.13
✎
17:30
|
Все ВошедшиеВЗапрос в запросе 1С++ не реализован
|
|||
20
Ёпрст
28.03.13
✎
17:34
|
(19) :))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
|
|||
21
Ёпрст
28.03.13
✎
17:34
|
Кто тебе сказал такую дурость ?
|
|||
22
woha
28.03.13
✎
17:35
|
(21)в моем запросе не реализован а не вообще
|
|||
23
Ёпрст
28.03.13
✎
17:36
|
1cpp тебе всего лишь предоставляет удобный инструмент доступа к данным и..даже ВТ для твоего удобства слепили.
Нужно большее - пиши руктями запрос, получай, всё что угодно |
|||
24
Ёпрст
28.03.13
✎
17:36
|
(22) что именно в твоём запросе не реализовано ?
Тебе может нужно Группировка Клиентос ВСЕ ? |
|||
25
Ёпрст
28.03.13
✎
17:37
|
Если че, Все ВошедшиеВЗапрос - это только то, что функция считала, т.е только те клиентосы, которые реально есть в выборке, а не все, что в справочнике.
|
|||
26
Ёпрст
28.03.13
✎
17:39
|
Нужны все , что есть в справочнике - велком соединение с табличкой справочника
|
|||
27
woha
28.03.13
✎
17:39
|
(25) не только не все что в справочнике а все которые вошли в запрос
|
|||
28
woha
28.03.13
✎
17:39
|
(26) это разные вещи
|
|||
29
Ёпрст
28.03.13
✎
17:40
|
(28) я как бэ в курсе.
Еще раз, чем тебя твой запрос не угодил ? Он сейчас аналогичен Все Вошедшие в запрос |
|||
30
woha
28.03.13
✎
17:40
|
очтет строится не только добавляя строки, но и колонки.
|
|||
31
woha
28.03.13
✎
17:40
|
(29) совсем не аналогичен.
|
|||
32
woha
28.03.13
✎
17:42
|
(29) по одному товару выдет 20 клиентов а по другому только 2, а надо и там и там по 20
|
|||
33
woha
28.03.13
✎
17:43
|
(29) Это как раз и делает Все ВошедшиеВЗапрос
|
|||
34
Ёпрст
28.03.13
✎
17:45
|
(32) выкини union, используй left join + coalesce
либо делай cross join + group by самим с собой |
|||
35
Ёпрст
28.03.13
✎
17:58
|
в твоём случае, примерно так:
select coalesce($Расх.Товар,$Прих.Товар,$Возвр.Товар) as [Товар $Справочник.Товарчики] ,coalesce($РасхШ.Клиентос,$ПрихШ.Клиентос,$ВозврШ.Клиентос) as [Товар $Справочник.Клиентосы] from _1sjourn as Жур (nolock) left join $Документ.Расходная as РасхШ (nolock) on РасхШ.iddoc = Жур.iddoc left join $ДокументСтроки.Расходная as Расх (nolock) on Расх.iddoc = Жур.iddoc left join $Документ.Приходная as ПрихШ (nolock) on ПрихШ .iddoc = Жур.iddoc ..... where Жур.iddocdef in ($ВидДокумента.Приходная,$ВидДокумента.Расходная,$ВидДокумента.Возвратик) and Жур.Date_Time_IDDoc between :НачДата AND :КонДата~ |
|||
36
Ёпрст
28.03.13
✎
17:59
|
ну и воткнуть туды sum и uhjeg,fq
|
|||
37
Ёпрст
28.03.13
✎
17:59
|
group by
|
|||
38
woha
28.03.13
✎
17:59
|
(34) Из описания: Это очень опасно для таблиц, содержащих большое количество данных. То есть получаются ВСЕ возможные
комбинации, включая все Null-null строчки. сейчас в запросе около 15000 строк а с cross join скольбо будет? 15000 в квадрате. мне не нужны строки типа null-null. достаточно значение - null |
|||
39
woha
28.03.13
✎
18:08
|
(35) Спасибо, это попробую.
|
|||
40
toypaul
гуру
28.03.13
✎
19:36
|
чтобы сделать правильный запрос, надо подучить теорию множеств. одним из видов языков работы с множествами является SQL.
|
|||
41
toypaul
гуру
28.03.13
✎
19:47
|
для начала надо сделать временную таблицу фактов через UNION. а потом по ссылке указанном на моем сайте, сделать уже основной запрос - там в конце статьи полностью аналогичный запрос.
|
|||
42
woha
28.03.13
✎
19:52
|
(41) Да, ToySQL это делает намного лучше. :)
|
|||
43
ADirks
29.03.13
✎
09:32
|
Вот я в очередной раз поражаюсь...
Далось вам это ВсеВошедшие. 1С смешало в кучу получение данных и отображение их, и у всех моск набок. Если надо показать что данных нет - сделай это при выводе в отчёт, не парь моск серверу. |
|||
44
woha
02.04.13
✎
17:58
|
(43) мне как раз для вывода отчета и нужно "Все ВошедшиеВЗапрос".
|
|||
45
ADirks
03.04.13
✎
07:02
|
(44) ну так получи этих всех на клиенте, какие проблемы?
|
|||
46
woha
03.04.13
✎
09:24
|
(45) На клиенте долго это получать. Запрос написанный под ToySQL это делает намного быстрее.
|
|||
47
ADirks
03.04.13
✎
09:40
|
Долго? Каков же размер набора строк результата?
И потом, не нужно забывать, что SQL-сервер конечно эффективнее в работе с табличными данными, но ему потребуются дополнительные ресурсы для такой операции. 1С-клиенту _дополнительных_ ресурсов потребуется меньше. |
|||
48
woha
03.04.13
✎
10:29
|
15000
|
|||
49
woha
03.04.13
✎
10:30
|
Клиент вообще все делает без ресуров, в цикле тупо перебирая строки.
|
|||
50
ADirks
03.04.13
✎
10:31
|
Даже тупо загрузить в другую ТЗ и свернуть по нужной колонке - фигня, по сравнению с формированием собственно печатной формы.
|
|||
51
woha
03.04.13
✎
10:37
|
Печатная форма меня вообще не интересует, что в отчете с запросом 1С что в 1С++ она формируется одинаковое время. А вот запрос 1С формирует результат несколько десятков минут.
|
|||
52
ADirks
03.04.13
✎
10:54
|
ну конечно, когда запрос 10мин, а печать 30 сек - не интересует. А вот когда запрос 1сек - то задумаешься и про печать.
А вообще я говорил про сравнительные затраты на разные операции. Оптимизировать надо в первую очередь наиболее затратные. А если затраты различаются в порядки - глупо вообще ими (мелкозатратными) заниматься. |
|||
53
woha
03.04.13
✎
14:49
|
(41) Таки получилось. Не остаточный вариант, но Все ВошедшиеВЗапрос делает. Не знаю, правда, где лучше применить фильтры, в каждом подзапросе или уже в самом верхнем обрезать лишнее.
ТекстЗапроса = " |SELECT | ВсеТК.Тов as [Тов $Справочник.Товары] |, ВсеТК.Клиент as [Клиент $Справочник.Контрагент] |, Факт.Кво as Кво |, Факт.Сума as Сума |, Факт.КвоВ as КвоВ |, Факт.СумаВ as СумаВ |FROM | ( |SELECT | Товары.Тов as Тов |, Клиенты.Клиент as Клиент |FROM | ( |SELECT | Запр.Тов |FROM | ( |SELECT | $ТчДокР.Товар as Тов |FROM | $Документ.РасходнаяНакладная as ДокР |INNER JOIN | $ДокументСтроки.РасходнаяНакладная as ТчДокР |ON | ДокР.IDDOC = ТчДокР.IDDOC |INNER JOIN | " + Журн + " as Жур |ON | ДокР.IDDOC = Жур.IDDOC |INNER JOIN | $Справочник.Товары as ТМЦ |ON | ТМЦ.ID = $ТчДокР.Товар |INNER JOIN | $Справочник.Контрагент as Контр |ON | Контр.ID = $ДокР.Клиент |WHERE | Жур." + ДатаДок + " |AND | Жур." + Закрыт + " = 1 | " + Условие1 + " |GROUP BY | $ТчДокР.Товар |UNION ALL | |SELECT | $ТчДокП.Товар as Тов |FROM | $Документ.ПриходнаяНакладная as ДокП |INNER JOIN | $ДокументСтроки.ПриходнаяНакладная as ТчДокП |ON | ДокП.IDDOC = ТчДокП.IDDOC |INNER JOIN | " + Журн + " as Жур |ON | ДокП.IDDOC = Жур.IDDOC |INNER JOIN | $Справочник.Товары as ТМЦ |ON | ТМЦ.ID = $ТчДокП.Товар |INNER JOIN | $Справочник.Контрагент as Контр |ON | Контр.ID = $ДокП.Клиент |WHERE | Жур." + ДатаДок + " |AND | Жур." + Закрыт + " = 1 | " + Условие2 + " |GROUP BY | $ТчДокП.Товар |)Запр |GROUP BY | Запр.Тов) Товары, | ( |SELECT | Запр.Клиент |FROM | ( |SELECT | $ДокР.Клиент as Клиент |FROM | $Документ.РасходнаяНакладная as ДокР |INNER JOIN | $ДокументСтроки.РасходнаяНакладная as ТчДокР |ON | ДокР.IDDOC = ТчДокР.IDDOC |INNER JOIN | " + Журн + " as Жур |ON | ДокР.IDDOC = Жур.IDDOC |INNER JOIN | $Справочник.Товары as ТМЦ |ON | ТМЦ.ID = $ТчДокР.Товар |INNER JOIN | $Справочник.Контрагент as Контр |ON | Контр.ID = $ДокР.Клиент |WHERE | Жур." + ДатаДок + " |AND | Жур." + Закрыт + " = 1 | " + Условие1 + " |GROUP BY | $ДокР.Клиент |UNION ALL | |SELECT | $ДокП.Клиент as Клиент |FROM | $Документ.ПриходнаяНакладная as ДокП |INNER JOIN | $ДокументСтроки.ПриходнаяНакладная as ТчДокП |ON | ДокП.IDDOC = ТчДокП.IDDOC |INNER JOIN | " + Журн + " as Жур |ON | ДокП.IDDOC = Жур.IDDOC |INNER JOIN | $Справочник.Товары as ТМЦ |ON | ТМЦ.ID = $ТчДокП.Товар |INNER JOIN | $Справочник.Контрагент as Контр |ON | Контр.ID = $ДокП.Клиент |WHERE | Жур." + ДатаДок + " |AND | Жур." + Закрыт + " = 1 | " + Условие2 + " |GROUP BY | $ДокП.Клиент |)Запр |GROUP BY | Запр.Клиент) Клиенты) ВсеТК | |LEFT JOIN | ( |SELECT | Зап.Тов as Тов |, Зап.Клиент as Клиент |, SUM(Зап.Кво) as Кво |, SUM(Зап.Сума) as Сума |, SUM(Зап.КвоВ) as КвоВ |, SUM(Зап.СумаВ) as СумаВ |FROM | ( |SELECT | $ТчДокР.Товар as Тов |, $ДокР.Клиент as Клиент |, (SUM(CASE | WHEN $ДокР.ПризнакНакладной = :Продажа THEN $ТчДокР.Количество ELSE 0 END)) as Кво |, (SUM(CASE | WHEN $ДокР.ПризнакНакладной = :Продажа THEN $ТчДокР.Сумма ELSE 0 END)) as Сума |, 0 as КвоВ |, 0 as СумаВ | |FROM | $Документ.РасходнаяНакладная as ДокР |INNER JOIN | $ДокументСтроки.РасходнаяНакладная as ТчДокР |ON | ДокР.IDDOC = ТчДокР.IDDOC |INNER JOIN | " + Журн + " as Жур |ON | ДокР.IDDOC = Жур.IDDOC |INNER JOIN | $Справочник.Товары as ТМЦ |ON | ТМЦ.ID = $ТчДокР.Товар |INNER JOIN | $Справочник.Контрагент as Контр |ON | Контр.ID = $ДокР.Клиент |WHERE | Жур." + ДатаДок + " |AND | Жур." + Закрыт + " = 1 | " + Условие1 + " |GROUP BY | $ТчДокР.Товар |, $ДокР.Клиент | |UNION ALL | |SELECT | $ТчДокП.Товар as Тов |, $ДокП.Клиент as Клиент |, 0 as КвоР |, 0 as СумаР |, (SUM(CASE | WHEN $ДокП.ПризнакНакладной = :Возврат THEN $ТчДокП.Количество ELSE 0 END)) as КвоВ |, (SUM(CASE | WHEN $ДокП.ПризнакНакладной = :Возврат THEN $ТчДокП.Сумма ELSE 0 END)) as СумаВ | |FROM | $Документ.ПриходнаяНакладная as ДокП |INNER JOIN | $ДокументСтроки.ПриходнаяНакладная as ТчДокП |ON | ДокП.IDDOC = ТчДокП.IDDOC |INNER JOIN | " + Журн + " as Жур |ON | ДокП.IDDOC = Жур.IDDOC |INNER JOIN | $Справочник.Товары as ТМЦ |ON | ТМЦ.ID = $ТчДокП.Товар |INNER JOIN | $Справочник.Контрагент as Контр |ON | Контр.ID = $ДокП.Клиент |WHERE | Жур." + ДатаДок + " |AND | Жур." + Закрыт + " = 1 | " + Условие2 + " |GROUP BY | $ТчДокП.Товар |, $ДокП.Клиент |)Зап | |GROUP BY | Зап.Тов |, Зап.Клиент) Факт |ON | Факт.Тов = ВсеТК.Тов |AND | Факт.Клиент = ВсеТК.Клиент |"; Спасибо toypaul |
|||
54
woha
03.04.13
✎
18:03
|
Это окончательный вариант:
ТекстЗапроса = " |SELECT | $спТов.ГрупаТМЦ as [ГрупаТМЦ $Справочник.ГрупаТМЦ] |, ВсеТК.Тов as [Тов $Справочник.Товары] |, ВсеТК.Клиент as [Клиент $Справочник.Контрагент] |, GROUPING($спТов.ГрупаТМЦ) as ИтогПоГрупаТМЦ |, GROUPING(ВсеТК.Тов) as ИтогПоТовар |, GROUPING(ВсеТК.Клиент) as ИтогПоКлиент |, SUM(Факт.Кво) as Кво |, SUM(Факт.Сума) as Сума |, SUM(Факт.КвоВ) as КвоВ |, SUM(Факт.СумаВ) as СумаВ |FROM | ( |SELECT | Товары.Тов as Тов |, Клиенты.Клиент as Клиент |FROM | ( |SELECT | Запр.Тов |FROM | ( |SELECT | $ТчДокР.Товар as Тов |FROM | $Документ.РасходнаяНакладная as ДокР |INNER JOIN | $ДокументСтроки.РасходнаяНакладная as ТчДокР |ON | ДокР.IDDOC = ТчДокР.IDDOC |INNER JOIN | " + Журн + " as Жур |ON | ДокР.IDDOC = Жур.IDDOC |WHERE | Жур." + ДатаДок + " |AND | Жур." + Закрыт + " = 1 | " + Условие1 + " |GROUP BY | $ТчДокР.Товар |UNION ALL | |SELECT | $ТчДокП.Товар as Тов |FROM | $Документ.ПриходнаяНакладная as ДокП |INNER JOIN | $ДокументСтроки.ПриходнаяНакладная as ТчДокП |ON | ДокП.IDDOC = ТчДокП.IDDOC |INNER JOIN | " + Журн + " as Жур |ON | ДокП.IDDOC = Жур.IDDOC |WHERE | Жур." + ДатаДок + " |AND | Жур." + Закрыт + " = 1 | " + Условие2 + " |GROUP BY | $ТчДокП.Товар |)Запр |GROUP BY | Запр.Тов) Товары, | ( |SELECT | Запр.Клиент |FROM | ( |SELECT | $ДокР.Клиент as Клиент |FROM | $Документ.РасходнаяНакладная as ДокР |INNER JOIN | $ДокументСтроки.РасходнаяНакладная as ТчДокР |ON | ДокР.IDDOC = ТчДокР.IDDOC |INNER JOIN | " + Журн + " as Жур |ON | ДокР.IDDOC = Жур.IDDOC |WHERE | Жур." + ДатаДок + " |AND | Жур." + Закрыт + " = 1 | " + Условие1 + " |GROUP BY | $ДокР.Клиент |UNION ALL | |SELECT | $ДокП.Клиент as Клиент |FROM | $Документ.ПриходнаяНакладная as ДокП |INNER JOIN | $ДокументСтроки.ПриходнаяНакладная as ТчДокП |ON | ДокП.IDDOC = ТчДокП.IDDOC |INNER JOIN | " + Журн + " as Жур |ON | ДокП.IDDOC = Жур.IDDOC |WHERE | Жур." + ДатаДок + " |AND | Жур." + Закрыт + " = 1 | " + Условие2 + " |GROUP BY | $ДокП.Клиент |)Запр |GROUP BY | Запр.Клиент) Клиенты) ВсеТК | |LEFT JOIN | ( |SELECT | Зап.Тов as Тов |, Зап.Клиент as Клиент |, SUM(Зап.Кво) as Кво |, SUM(Зап.Сума) as Сума |, SUM(Зап.КвоВ) as КвоВ |, SUM(Зап.СумаВ) as СумаВ |FROM | ( |SELECT | $ТчДокР.Товар as Тов |, $ДокР.Клиент as Клиент |, (SUM(CASE | WHEN $ДокР.ПризнакНакладной = :Продажа THEN $ТчДокР.Количество ELSE 0 END)) as Кво |, (SUM(CASE | WHEN $ДокР.ПризнакНакладной = :Продажа THEN $ТчДокР.Сумма ELSE 0 END)) as Сума |, 0 as КвоВ |, 0 as СумаВ | |FROM | $Документ.РасходнаяНакладная as ДокР |INNER JOIN | $ДокументСтроки.РасходнаяНакладная as ТчДокР |ON | ДокР.IDDOC = ТчДокР.IDDOC |INNER JOIN | " + Журн + " as Жур |ON | ДокР.IDDOC = Жур.IDDOC |WHERE | Жур." + ДатаДок + " |AND | Жур." + Закрыт + " = 1 | " + Условие1 + " |GROUP BY | $ТчДокР.Товар |, $ДокР.Клиент | |UNION ALL | |SELECT | $ТчДокП.Товар as Тов |, $ДокП.Клиент as Клиент |, 0 as КвоР |, 0 as СумаР |, (SUM(CASE | WHEN $ДокП.ПризнакНакладной = :Возврат THEN $ТчДокП.Количество ELSE 0 END)) as КвоВ |, (SUM(CASE | WHEN $ДокП.ПризнакНакладной = :Возврат THEN $ТчДокП.Сумма ELSE 0 END)) as СумаВ | |FROM | $Документ.ПриходнаяНакладная as ДокП |INNER JOIN | $ДокументСтроки.ПриходнаяНакладная as ТчДокП |ON | ДокП.IDDOC = ТчДокП.IDDOC |INNER JOIN | " + Журн + " as Жур |ON | ДокП.IDDOC = Жур.IDDOC |WHERE | Жур." + ДатаДок + " |AND | Жур." + Закрыт + " = 1 | " + Условие2 + " |GROUP BY | $ТчДокП.Товар |, $ДокП.Клиент |)Зап | |GROUP BY | Зап.Тов |, Зап.Клиент) Факт |ON | Факт.Тов = ВсеТК.Тов |AND | Факт.Клиент = ВсеТК.Клиент |INNER JOIN | $Справочник.Товары as спТов |ON | спТов.ID = ВсеТК.Тов | " + Условие5 + " |GROUP BY | $спТов.ГрупаТМЦ |, ВсеТК.Тов |, ВсеТК.Клиент WITH ROLLUP |ORDER BY | $спТов.ГрупаТМЦ |, ВсеТК.Тов |, ВсеТК.Клиент |, ИтогПоГрупаТМЦ DESC |, ИтогПоТовар DESC |, ИтогПоКлиент DESC |"; |
|||
55
Ёпрст
03.04.13
✎
18:18
|
какой то неправильный мёд
|
|||
56
woha
03.04.13
✎
23:31
|
(55) Но работает. Ищу оптимальный вариант размещения фильтров.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |