Имя: Пароль:
1C
1C 7.7
v7: Недопустимое имя столбца
0 GandolF
 
16.05.13
17:15
Такая проблема.Соединил два select-a union-ом по 2-м документам, в конце стоит ORDER BY. Типы и даже названия этих документов идентичны (хотя в dd-шнике имеют разные обозначения)
Выдает ошибку:Недопустимое имя столбца "sp5820".
Хотя sp5820 является реквизитом документа во 2-м select-е. Подскажите куда копать?
версия 1cpp 3.2.4., SQL 2008
1 ДенисЧ
 
16.05.13
17:17
А в первом как называется? Вот по нему и сортируй
2 ЧеловекДуши
 
16.05.13
17:21
(0) Запрос покажи, как он записан с учетом метаданных.
3 GandolF
 
16.05.13
17:51
|SELECT
|CAST(:НачДата as datetime) AS Период,
|$Док.ПунктРазгрузки AS [ПунктРазгрузки [Справочник.ПунктыРазгрузки],
|$Док.Клиент AS [Клиент $Справочник.Клиенты],
|SUM($ДокументСтроки_.Количество) AS [Количество $Число]
|FROM
|$Документ.РеализацияГП AS Док (NOLOCK)
|INNER JOIN _1sJourn AS Жур (NOLOCK)  ON (Жур.IDDoc = Док.IDDoc) AND
|Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
|Жур.Closed & 1 = 1
|INNER JOIN $ДокументСтроки.РеализацияГП AS ДокументСтроки_ (NOLOCK)  ON (ДокументСтроки_.IDDoc = Док.IDDoc)
|WHERE
|$Док.Клиент=:ВыбКлиент
|UNION ALL
|
|SELECT
|CAST(:НачДата as datetime) AS Период,
|$Док.ПунктРазгрузки AS [ПунктРазгрузки $Справочник.ПунктыРазгрузки],
|$Док.Клиент AS [Клиент $Справочник.Клиенты],
|SUM($ДокументСтроки_.Количество) AS [Количество $Число]
|FROM
|$Документ.ВозвратГП AS Док (NOLOCK)
|    INNER JOIN _1sJourn AS Жур (NOLOCK)  ON (Жур.IDDoc = Док.IDDoc) AND
|Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
|Жур.Closed & 1 = 1
|INNER JOIN $ДокументСтроки.ВозвратГП AS ДокументСтроки_ (NOLOCK)  ON (ДокументСтроки_.IDDoc = Док.IDDoc)
|WHERE
|$Док.Клиент=:ВыбКлиент
|GROUP BY
|Жур.Date_Time_IDDoc,$Док.Клиент,$Док.ПунктРазгрузки WITH ROLLUP
|ORDER BY
|Жур.Date_Time_IDDoc,
|$Док.Клиент,
|$Док.ПунктРазгрузки
|";
Запрос.ВыполнитьИнструкцию(ТекстЗапроса,ТЗ,0);

Так вот sp5820 - это $Док.ПунктРазгрузки, но(!) для $Документ.ВозвратГП.
А для  $Документ.РеализацияГП должен быть SP2864, но в обоих случаях берет sp5820 и ругается, понятное дело
4 ДенисЧ
 
16.05.13
17:52
(3) что-то в (1) не понятно?
5 Ёпрст
 
16.05.13
17:54
А зачем группировать второй селект и еще и сортировать его ?
6 Ёпрст
 
16.05.13
17:55
+ типизацию выкинь со второго селекта
7 Ёпрст
 
16.05.13
17:55
ну и Sum в первом селекте не нужна - нету group by
8 GandolF
 
16.05.13
18:06
Не помогло.
В обоих select-ах ставит:
SELECT
CAST('20130101' as datetime) AS Период,
Док.sp5820 AS [ПунктРазгрузки $Справочник.ПунктыРазгрузки],
Док.sp2510 AS [Клиент $Справочник.Клиенты]
...
а должно быть:
SELECT
CAST('20130101' as datetime) AS Период,
Док.sp2864 AS [ПунктРазгрузки $Справочник.ПунктыРазгрузки],
Док.SP1830AS [Клиент $Справочник.Клиенты]
..........
SELECT
CAST('20130101' as datetime) AS Период,
Док.sp5820 AS [ПунктРазгрузки $Справочник.ПунктыРазгрузки],
Док.sp2510 AS [Клиент $Справочник.Клиенты]
та же хрень и с Клиентом будет. Знать бы что не так
9 Ёпрст
 
16.05.13
18:08
1. указывай разные алиясы для юнионов
2. типизируй только первый селект
3. если че, твой group by будет только на последний селект, либо группируй каждый, либо оборачивай все юнионы в подзапрос
4.наслаждайся
10 GandolF
 
17.05.13
09:34
Спасибо, всё работает!
Наслаждаюсь)))