|
v7: Все ВошедшиеВЗапрос и 1С++ | ☑ | ||
---|---|---|---|---|
0
woha
12.03.15
✎
11:57
|
Доброго дня!
Помогите, пожалуйстра, разобраться с прямым запросом: ТекстЗапроса = " |SELECT | РегТовар.Товар as [Товар $Справочник.ТМЦ], | РегДатаДок.ДатаДок as ДатаДок |FROM |(SELECT DISTINCT | РегТовар.Товар |FROM ( |SELECT | $ТЧЗаказ.ТМЦ as Товар |FROM | $ДокументСтроки.ЗаказРеализатора as ТЧЗаказ |INNER JOIN | $Документ.ЗаказРеализатора as ДокЗаказ |ON | ТЧЗаказ.IDDoc = ДокЗаказ.IDDoc |INNER JOIN | _1SJourn as Жур ON Жур.IDDoc = ТЧЗаказ.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ |AND | Жур.Closed & 1 = 1 | " + Доп + " |GROUP BY | $ТЧЗаказ.ТМЦ | |UNION ALL | |SELECT | $ТЧДок.ТМЦ as Товар |FROM | $ДокументСтроки.РасходнаяНакладная as ТЧДок |INNER JOIN | $Документ.РасходнаяНакладная as Док |ON | ТЧДок.IDDoc = Док.IDDoc |INNER JOIN | _1SJourn as Жур ON Жур.IDDoc = ТЧДок.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ |AND | Жур.Closed & 1 = 1 | " + Доп1 + " |GROUP BY | $ТЧДок.ТМЦ) as РегТовар |GROUP BY | РегТовар.Товар |) as РегТовар, | |(SELECT DISTINCT | РегДатаДок.ДатаДок as ДатаДок |FROM ( |SELECT | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок |FROM | $ДокументСтроки.ЗаказРеализатора as ТЧЗаказ |INNER JOIN | $Документ.ЗаказРеализатора as ДокЗаказ |ON | ТЧЗаказ.IDDoc = ДокЗаказ.IDDoc |INNER JOIN | _1SJourn as Жур ON Жур.IDDoc = ТЧЗаказ.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ |AND | Жур.Closed & 1 = 1 | " + Доп + " |GROUP BY | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) | |UNION ALL | |SELECT | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок |FROM | $ДокументСтроки.РасходнаяНакладная as ТЧДок |INNER JOIN | $Документ.РасходнаяНакладная as Док |ON | ТЧДок.IDDoc = Док.IDDoc |INNER JOIN | _1SJourn as Жур ON Жур.IDDoc = ТЧДок.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ |AND | Жур.Closed & 1 = 1 | " + Доп1 + " |GROUP BY | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime)) as РегДатаДок |GROUP BY | РегДатаДок.ДатаДок |) as РегДатаДок | |LEFT JOIN |( |SELECT | РегКолво.Товар as Товар, | РегКолво.ДатаДок as ДатаДок, | SUM(РегКолво.КоличествоЗаказ) as Заказано, | SUM(РегКолво.КоличествоРасход) as Отгружено, | SUM(РегКолво.КоличествоРасход - РегКолво.КоличествоЗаказ) as НеСделано, | SUM(РегКолво.СуммаРасход) as Сумма |FROM ( |SELECT | $ТЧЗаказ.ТМЦ as Товар, | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок, | SUM($ТЧЗаказ.Кво) as КоличествоЗаказ, | 0 as КоличествоРасход, | 0 as СуммаРасход |FROM | $ДокументСтроки.ЗаказРеализатора as ТЧЗаказ |INNER JOIN | $Документ.ЗаказРеализатора as ДокЗаказ |ON | ТЧЗаказ.IDDoc = ДокЗаказ.IDDoc |INNER JOIN | _1SJourn as Жур ON Жур.IDDoc = ТЧЗаказ.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ |AND | Жур.Closed & 1 = 1 | " + Доп + " |GROUP BY | $ТЧЗаказ.ТМЦ, | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) | |UNION ALL | |SELECT | $ТЧДок.ТМЦ as Товар, | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок, | 0, | SUM($ТЧДОк.Кво) as КоличествоРасход, | SUM($ТЧДОк.СуммаСНДС) as СуммаРасход |FROM | $ДокументСтроки.РасходнаяНакладная as ТЧДок |INNER JOIN | $Документ.РасходнаяНакладная as Док |ON | ТЧДок.IDDoc = Док.IDDoc |INNER JOIN | _1SJourn as Жур ON Жур.IDDoc = ТЧДок.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ |AND | Жур.Closed & 1 = 1 | " + Доп1 + " |GROUP BY | $ТЧДок.ТМЦ, | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) |) as РегКолво |GROUP BY | РегКолво.Товар, | РегКолво.ДатаДок |) as РегКолво |ON | РегКолво.Товар = РегТовар.Товар |AND | РегКолво.ДатаДок = РегДатаДок.ДатаДок |"; Когда запускаю без левого соединения - работает, как только подключаю соединение ругается на алиас: The column prefix 'РегТовар' does not match with a table name or alias name used in the query. Два дня поисков и никакого толку. Спасибо. |
|||
1
woha
12.03.15
✎
11:58
|
Похоже проблема в:
|
|||
2
mikecool
12.03.15
✎
11:58
|
вызываешь по алиасу таблицу, которой нет
запрос не смотрел, ибо не хочу |
|||
3
woha
12.03.15
✎
11:59
|
Похоже проблема в:
|ON | РегКолво.Товар = РегТовар.Товар |AND | РегКолво.ДатаДок = РегДатаДок.ДатаДок |
|||
4
woha
12.03.15
✎
11:59
|
(2) Есть таблица.
|
|||
5
woha
12.03.15
✎
12:00
|
запрос сделан по примеру: http://www.script-coding.com/Direct_queries.html
|
|||
6
dk
12.03.15
✎
12:03
|
реально думаешь кто-то будет твою портянку читать? да еще и неполную
--- упрости пример либо запакуй во временные таблицы, чтобы читать проще было |
|||
7
mehfk
12.03.15
✎
12:06
|
в
|GROUP BY | РегТовар.Товар |) as РегТовар, замени |) as РегТовар, на что-нибудь другое |
|||
8
mehfk
12.03.15
✎
12:07
|
и потом в соединении тоже
|
|||
9
Ёпрст
12.03.15
✎
12:07
|
Какой-то бестолковый запрос
|
|||
10
Ёпрст
12.03.15
✎
12:08
|
еще и кросс джоин там зачем то.. нипанятна
|
|||
11
woha
12.03.15
✎
12:11
|
Извините за беспокойство. два select distinct завернул в одну таблицу, к ней сделал левое соединение и тогда пошло.
|SELECT | Рег.Товар as [Товар $Справочник.ТМЦ], | Рег.ДатаДок as ДатаДок, | РегКолво.Заказано as Заказано, | РегКолво.Отгружено as Отгружено, | РегКолво.Отгружено - РегКолво.Заказано as НеСделано, | РегКолво.Сумма as Сумма | FROM |( |SELECT | РегТовар.Товар Товар, | РегДатаДок.ДатаДок as ДатаДок |FROM |(SELECT DISTINCT | РегТовар.Товар |FROM ( |SELECT | $ТЧЗаказ.ТМЦ as Товар |FROM | $ДокументСтроки.ЗаказРеализатора as ТЧЗаказ |INNER JOIN | $Документ.ЗаказРеализатора as ДокЗаказ |ON | ТЧЗаказ.IDDoc = ДокЗаказ.IDDoc |INNER JOIN | _1SJourn as Жур ON Жур.IDDoc = ТЧЗаказ.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ |AND | Жур.Closed & 1 = 1 | " + Доп + " |GROUP BY | $ТЧЗаказ.ТМЦ | |UNION ALL | |SELECT | $ТЧДок.ТМЦ as Товар |FROM | $ДокументСтроки.РасходнаяНакладная as ТЧДок |INNER JOIN | $Документ.РасходнаяНакладная as Док |ON | ТЧДок.IDDoc = Док.IDDoc |INNER JOIN | _1SJourn as Жур ON Жур.IDDoc = ТЧДок.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ |AND | Жур.Closed & 1 = 1 | " + Доп1 + " |GROUP BY | $ТЧДок.ТМЦ) as РегТовар |GROUP BY | РегТовар.Товар |) as РегТовар, | |(SELECT DISTINCT | РегДатаДок.ДатаДок as ДатаДок |FROM ( |SELECT | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок |FROM | $ДокументСтроки.ЗаказРеализатора as ТЧЗаказ |INNER JOIN | $Документ.ЗаказРеализатора as ДокЗаказ |ON | ТЧЗаказ.IDDoc = ДокЗаказ.IDDoc |INNER JOIN | _1SJourn as Жур ON Жур.IDDoc = ТЧЗаказ.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ |AND | Жур.Closed & 1 = 1 | " + Доп + " |GROUP BY | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) | |UNION ALL | |SELECT | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок |FROM | $ДокументСтроки.РасходнаяНакладная as ТЧДок |INNER JOIN | $Документ.РасходнаяНакладная as Док |ON | ТЧДок.IDDoc = Док.IDDoc |INNER JOIN | _1SJourn as Жур ON Жур.IDDoc = ТЧДок.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ |AND | Жур.Closed & 1 = 1 | " + Доп1 + " |GROUP BY | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime)) as РегДатаДок |GROUP BY | РегДатаДок.ДатаДок |) as РегДатаДок ) as Рег | |LEFT JOIN |( |SELECT | РегКолво.Товар as Товар, | РегКолво.ДатаДок as ДатаДок, | SUM(РегКолво.КоличествоЗаказ) as Заказано, | SUM(РегКолво.КоличествоРасход) as Отгружено, | SUM(РегКолво.КоличествоРасход - РегКолво.КоличествоЗаказ) as НеСделано, | SUM(РегКолво.СуммаРасход) as Сумма |FROM ( |SELECT | $ТЧЗаказ.ТМЦ as Товар, | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок, | SUM($ТЧЗаказ.Кво) as КоличествоЗаказ, | 0 as КоличествоРасход, | 0 as СуммаРасход |FROM | $ДокументСтроки.ЗаказРеализатора as ТЧЗаказ |INNER JOIN | $Документ.ЗаказРеализатора as ДокЗаказ |ON | ТЧЗаказ.IDDoc = ДокЗаказ.IDDoc |INNER JOIN | _1SJourn as Жур ON Жур.IDDoc = ТЧЗаказ.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ |AND | Жур.Closed & 1 = 1 | " + Доп + " |GROUP BY | $ТЧЗаказ.ТМЦ, | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) | |UNION ALL | |SELECT | $ТЧДок.ТМЦ as Товар, | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок, | 0, | SUM($ТЧДОк.Кво) as КоличествоРасход, | SUM($ТЧДОк.СуммаСНДС) as СуммаРасход |FROM | $ДокументСтроки.РасходнаяНакладная as ТЧДок |INNER JOIN | $Документ.РасходнаяНакладная as Док |ON | ТЧДок.IDDoc = Док.IDDoc |INNER JOIN | _1SJourn as Жур ON Жур.IDDoc = ТЧДок.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ |AND | Жур.Closed & 1 = 1 | " + Доп1 + " |GROUP BY | $ТЧДок.ТМЦ, | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) |) as РегКолво |GROUP BY | РегКолво.Товар, | РегКолво.ДатаДок |) as РегКолво |ON | РегКолво.Товар = Рег.Товар |AND | РегКолво.ДатаДок = Рег.ДатаДок |"; Спасибо Всем! |
|||
12
Ёпрст
12.03.15
✎
12:16
|
вот такие вещи
|SELECT | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок |FROM | $ДокументСтроки.ЗаказРеализатора as ТЧЗаказ |INNER JOIN | $Документ.ЗаказРеализатора as ДокЗаказ |ON | ТЧЗаказ.IDDoc = ДокЗаказ.IDDoc |INNER JOIN | _1SJourn as Жур ON Жур.IDDoc = ТЧЗаказ.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ |AND | Жур.Closed & 1 = 1 | " + Доп + " |GROUP BY | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) вообще за гранью добра и зла.. |
|||
13
trad
12.03.15
✎
12:16
|
с таким форматированием понять структуру запроса очень трудно
|
|||
14
trad
12.03.15
✎
12:18
|
как я понял автор пытался вязать так
select from A, B join C on C.f = A.f |
|||
15
woha
12.03.15
✎
12:25
|
(14) AND C.j = B.j
|
|||
16
trad
12.03.15
✎
12:28
|
(15) так вот - это невозможно
представь запрос в таком условном виде и будет понятно почему select from A, (B join C on C.f = A.f and C.j = B.j) |
|||
17
woha
12.03.15
✎
12:28
|
пришлось сделать:
select D.f, D.j from A,B join C on C.f = D.f and C.j = D.j пример оказался не совсем верным. |
|||
18
trad
12.03.15
✎
12:29
|
(16) + тут тебе и будет сказано
The column prefix 'A'... |
|||
19
woha
12.03.15
✎
12:30
|
ТекстЗапроса = "
|SELECT | РегТовар.Товар Товар, | РегСклад.Склад Склад, | РегКолво.Количество Количество |FROM |( |SELECT DISTINCT | РегТовар.Товар Товар |FROM | $РегистрОстатки.ОстаткиТоваров(:ВыбДата~,, | Фирма = :ВыбФирма, | (Товар), (Количество)) as РегТовар |) as РегТовар, |( |SELECT DISTINCT | РегСклад.Склад Склад |FROM | $РегистрОстатки.ОстаткиТоваров(:ВыбДата~,, | Фирма = :ВыбФирма, | (Склад), (Количество)) as РегСклад |) as РегСклад |LEFT JOIN |( |SELECT | РегКолво.КоличествоОстаток Количество, | РегКолво.Товар Товар, | РегКолво.Склад Склад |FROM | $РегистрОстатки.ОстаткиТоваров(:ВыбДата~,, | Фирма = :ВыбФирма, | (Склад, Товар), (Количество)) as РегКолво |) as РегКолво ON РегКолво.Склад = РегСклад.Склад AND | РегКолво.Товар = РегТовар.Товар |"; это не я писал, это http://www.script-coding.com/Direct_queries.html#11. Глава 11. |
|||
20
trad
12.03.15
✎
12:30
|
(17) что есть D
и зачем столько ентеров - читать невозможно же |
|||
21
woha
12.03.15
✎
12:31
|
по этому образцу и делал вначале.
|
|||
22
woha
12.03.15
✎
12:32
|
D - select из A и B в одной таблице
|
|||
23
trad
12.03.15
✎
12:39
|
(19) "это не я писал, это Глава 11." - там бред написан
|
|||
24
woha
12.03.15
✎
12:43
|
(23) Немного подправил и работает.
|
|||
25
DrZombi
гуру
12.03.15
✎
13:03
|
(0) Переименуй название Таблиц по человечески, не стоит их называть однотипно
|GROUP BY | $ТЧДок.ТМЦ) as РегТовар |GROUP BY | РегТовар.Товар |) as РегТовар, Что за дьявольская конструкция? РегТовар в РегТовар, фантазия кончилась? |
|||
26
woha
12.03.15
✎
19:45
|
Еще раз всем спасибо.
Конечный вариант запроса: ТекстЗапроса = " |SELECT | РегКолво.Товар as Товар, | РегКолво.ДатаДок as ДатаДок, | SUM(РегКолво.КоличествоЗаказ) as Заказано, | SUM(РегКолво.КоличествоРасход) as Отгружено, | SUM(РегКолво.КоличествоРасход - РегКолво.КоличествоЗаказ) as НеСделано, | SUM(РегКолво.СуммаРасход) as Сумма |INTO | #TempTab | |FROM ( |SELECT | $ТЧЗаказ.ТМЦ as Товар, | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок, | SUM($ТЧЗаказ.Кво) as КоличествоЗаказ, | 0 as КоличествоРасход, | 0 as СуммаРасход |FROM | $ДокументСтроки.ЗаказРеализатора as ТЧЗаказ |INNER JOIN | $Документ.ЗаказРеализатора as ДокЗаказ |ON | ТЧЗаказ.IDDoc = ДокЗаказ.IDDoc |INNER JOIN | _1SJourn as Жур ON Жур.IDDoc = ТЧЗаказ.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ |AND | Жур.Closed & 1 = 1 | " + Доп + " |GROUP BY | $ТЧЗаказ.ТМЦ, | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) | |UNION ALL | |SELECT | $ТЧДок.ТМЦ as Товар, | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок, | 0, | SUM($ТЧДОк.Кво) as КоличествоРасход, | SUM($ТЧДОк.СуммаСНДС) as СуммаРасход |FROM | $ДокументСтроки.РасходнаяНакладная as ТЧДок |INNER JOIN | $Документ.РасходнаяНакладная as Док |ON | ТЧДок.IDDoc = Док.IDDoc |INNER JOIN | _1SJourn as Жур ON Жур.IDDoc = ТЧДок.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ |AND | Жур.Closed & 1 = 1 | " + Доп1 + " |GROUP BY | $ТЧДок.ТМЦ, | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) |) as РегКолво |GROUP BY | РегКолво.Товар, | РегКолво.ДатаДок"; Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата); Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата); ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); ТекстЗапроса = " |SELECT | Рег.Товар as [Товар $Справочник.ТМЦ], | Рег.ДатаДок as ДатаДок, | РегКолво.Заказано as Заказано, | РегКолво.Отгружено as Отгружено, | РегКолво.Отгружено - РегКолво.Заказано as НеСделано, | РегКолво.Сумма as Сумма | FROM |( |SELECT | РегТовар.Товар Товар, | РегДатаДок.ДатаДок as ДатаДок |FROM |(SELECT DISTINCT | РегТовар.Товар |FROM | #TempTab as РегТовар |) as РегТовар, | |(SELECT DISTINCT | РегДатаДок.ДатаДок as ДатаДок |FROM | #TempTab as РегДатаДок |) as РегДатаДок ) as Рег | |LEFT JOIN |( |SELECT | РегКолво.Товар as Товар, | РегКолво.ДатаДок as ДатаДок, | SUM(РегКолво.Заказано) as Заказано, | SUM(РегКолво.Отгружено) as Отгружено, | SUM(РегКолво.Отгружено - РегКолво.Заказано) as НеСделано, | SUM(РегКолво.Сумма) as Сумма |FROM | #TempTab as РегКолво | |GROUP BY | РегКолво.Товар, | РегКолво.ДатаДок |) as РегКолво |ON | РегКолво.Товар = Рег.Товар |AND | РегКолво.ДатаДок = Рег.ДатаДок |ORDER BY | Рег.Товар, | Рег.ДатаДок |"; Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата); Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата); ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); Вынес основной запрос отдельно во временную таблицу. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |