Имя: Пароль:
1C
1C 7.7
v7: Ошибка в запросе "Столбец недопустим в списке выбора"
0 GandolF
 
27.06.13
13:39
Всем привет!
При обработке запроса пишет: Столбец "dh8959.SP8949" недопустим в списке выбора, поскольку он не содержится ни в агрегатной  функции, ни в предложении GROUP BY.
Собственно код:
SELECT
   CAST('20120101' as datetime) AS Период,
   Док.sp8949 AS [Клиент $Справочник.Клиенты],
   Док.sp8950 AS [ПР $Справочник.ПунктыРазгрузки],
   СпрТов.ParentID AS [ГруппаТовар $Справочник.Товары],
   ДокументСтроки_.sp8951 AS [Товар $Справочник.Товары],
   SUM(ДокументСтроки_.sp8955) AS [Количество $Число]
FROM
   dh8959 AS Док (NOLOCK)
   LEFT OUTER JOIN sc2760 AS СпрПР (NOLOCK)  ON ((СпрПР.ID) = Док.sp8950)
   INNER JOIN _1sJourn AS Жур (NOLOCK)  ON (Жур.IDDoc = Док.IDDoc) AND
               Жур.Date_Time_IDDoc BETWEEN '20120101' AND '20120131Z' AND
               Жур.Closed & 1 = 1
   INNER JOIN dt8959 AS ДокументСтроки_ (NOLOCK)  ON (ДокументСтроки_.IDDoc = Жур.IDDoc)
  INNER JOIN sc33 AS СпрТов (NOLOCK)  ON ((СпрТов.ID) = ДокументСтроки_.sp8951)

WHERE
   1=1
AND    Док.sp8949='     W   '
ORDER BY
   Док.sp8949,Док.sp8950,СпрТов.ParentID,ДокументСтроки_.sp8951
В чем же ошибка? Если вместо ORDER BY ставлю GROUP BY, то всё катит, но мне не нужна GROUP BY !
1 Господин ПЖ
 
27.06.13
13:41
>но мне не нужна GROUP BY

тебе нет... sql - да... и поверь у него пока опыта в этом больше
2 Волшебник
 
27.06.13
13:41
если есть SUM, значит нужна GROUP BY
3 vicof
 
27.06.13
13:41
то есть ты суммируешь, а группировать не хочешь? печально
4 GandolF
 
27.06.13
13:49
Дак вот оно чё!.. СУМ ему мешал
Спасибо большое!
5 GandolF
 
28.06.13
16:00
Помогите ещё с одним глюком !
Код проверял через конструктор - работает, ставлю в отчет- выдаёт чушь:
Meta name parser error: неизвестное метаимя или алиас "$Документ_РеализацияЗаМесяц_2"
Код:
|SELECT
|    Документ_МатрицаТов_1.IDDoc AS [МатрицаТов_Шапка_ТекущийДокумент $Документ.МатрицаТов],
|    $ДокументСтроки_МатрицаТов_1.Товар AS [МатрицаТов_ТабличнаяЧасть_Товар $Справочник.Товары],
|    __1sJourn_1.DocNo AS [МатрицаТов_Шапка_НомерДок $Число],
|    $Документ_РеализацияЗаМесяц_2.Клиент AS [РеализацияЗаМесяц_Шапка_Клиент $Справочник.Клиенты],
|    $Документ_РеализацияЗаМесяц_2.ПунктРазгрузки AS [РеализацияЗаМесяц_Шапка_ПунктРазгрузки $Справочник.ПунктыРазгрузки]
|FROM
|    $Документ.МатрицаТов AS Документ_МатрицаТов_1 (NOLOCK)
|    INNER JOIN _1sJourn AS __1sJourn_1 (NOLOCK)  ON (__1sJourn_1.IDDoc = Документ_МатрицаТов_1.IDDoc)
|    INNER JOIN $ДокументСтроки.МатрицаТов AS ДокументСтроки_МатрицаТов_1 (NOLOCK)  ON (ДокументСтроки_МатрицаТов_1.IDDoc = __1sJourn_1.IDDoc),
|    $Документ.РеализацияЗаМесяц AS Документ_РеализацияЗаМесяц_2 (NOLOCK)
|        LEFT OUTER JOIN $Справочник.ПунктыРазгрузки AS Справочник_ПунктыРазгрузки_2_6 (NOLOCK)  ON ((Справочник_ПунктыРазгрузки_2_6.ID) = $Документ_РеализацияЗаМесяц_2.ПунктРазгрузки)
|            LEFT OUTER JOIN $Документ.МатрицаТов AS Документ_МатрицаТов_2_6_2 (NOLOCK)  ON ((Документ_МатрицаТов_2_6_2.IDDoc) = $Справочник_ПунктыРазгрузки_2_6.МатрицаТов)
|    INNER JOIN _1sJourn AS Жур2 (NOLOCK)  ON (Жур2.IDDoc = Документ_РеализацияЗаМесяц_2.IDDoc)
|                Жур2.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
|                Жур2.Closed & 1 = 1
|WHERE
|    Документ_МатрицаТов_1.IDDoc = Документ_МатрицаТов_2_6_2.IDDoc";

Если ВыбКлиент.Выбран()=1 Тогда
   ТекстЗапроса1= ТекстЗапроса1+"
       |AND    $Документ_РеализацияЗаМесяц_2.Клиент=:ВыбКлиент";
КонецЕсли;
Если (ВыбПР.Выбран()=1) Тогда
   ТекстЗапроса1= ТекстЗапроса1+"
   |    AND $Документ_РеализацияЗаМесяц_2.ПунктРазгрузки=:ВыбПР
   |";
КонецЕсли;
6 АнжелаДэвис
 
28.06.13
16:01
(5) у тебя нет объекта в базе Документ_РеализацияЗаМесяц_2
может надоть так: Документ.РеализацияЗаМесяц_2
7 GandolF
 
28.06.13
16:03
Так вот же оно:
$Документ.РеализацияЗаМесяц AS Документ_РеализацияЗаМесяц_2 (NOLOCK)
Разве нет?
8 Mikeware
 
28.06.13
16:03
(5) это не глюк
9 Mikeware
 
28.06.13
16:04
(7) и что _это_?
кросс джойн?
10 GandolF
 
28.06.13
16:05
(9) типа того. А что не верно-то?
11 Ёпрст
 
28.06.13
16:06
(10) да всё..
12 Mikeware
 
28.06.13
16:06
(10) всё!
13 GandolF
 
28.06.13
16:07
Конкретней!
14 АнжелаДэвис
 
28.06.13
16:08
(13) блин, почитай ты уже про типизацию полей...
15 Mikeware
 
28.06.13
16:08
(13) соотношение радиусов слишком малО.
16 АнжелаДэвис
 
28.06.13
16:09
+14 если уже (6) тебе не понятно
17 Mikeware
 
28.06.13
16:09
(14) да там и без типизации...
18 Mikeware
 
28.06.13
16:10
(16) в (6) дурь написана
19 АнжелаДэвис
 
28.06.13
16:10
(18) наверное, я запросы ленюсь читать )
20 АнжелаДэвис
 
28.06.13
16:10
+19 а то вывалят пять страниц...
21 Ёпрст
 
28.06.13
16:10
(13) что в твоём понимании, должна делать конструкция

|    INNER JOIN $ДокументСтроки.МатрицаТов AS ДокументСтроки_МатрицаТов_1 (NOLOCK)  ON (ДокументСтроки_МатрицаТов_1.IDDoc = __1sJourn_1.IDDoc),
|    $Документ.РеализацияЗаМесяц AS Документ_РеализацияЗаМесяц_2 (NOLOCK)
22 АнжелаДэвис
 
28.06.13
16:13
(21) разве не фул джойн?
23 Ёпрст
 
28.06.13
16:14
(22) че ?
24 Mikeware
 
28.06.13
16:14
(22) хез. я не пойму. думааю, что сиквел тоже не понимает...
25 GandolF
 
28.06.13
16:15
(21) Начиная с: |    $Документ.РеализацияЗаМесяц AS Документ_РеализацияЗаМесяц_2 (NOLOCK)
Обработать описанный док, т.е РеализацияЗаМесяц
26 АнжелаДэвис
 
28.06.13
16:16
(23)
скуль не понимает
select... from table1, table2 ?
27 Mikeware
 
28.06.13
16:16
(25) обработать - это удалить? просуммировать строки и разделить на фазу луны?
28 GandolF
 
28.06.13
16:22
(27) Где ты видишь удаление, и  тем более суммирование ?
2-я часть нужна по-сути только для условий  в запросе. Основной является table1 (если так понимать) И на хр.. между ними джоины ???
Другой вопрос если: (26)
29 Ёпрст
 
28.06.13
16:27
(26) понимает, нежелательно использовать старый синтаксис для cross join и тут скорее старый приклол метапарсера - у ТС после from есть знаки табуляции
30 Mikeware
 
28.06.13
16:27
(28) а что значчит "обработать"?
почитай уже про ситнаксис...
31 Ёпрст
 
28.06.13
16:27
Хотя, он сам не понимает, что пишет - каша мала, а не запрос.
32 АнжелаДэвис
 
28.06.13
16:33
(31) +1 но зато автор с амбициями
33 GandolF
 
28.06.13
16:36
(30) Не флуди! Ни одного поста по делу...
(31) этот запрос получился через КонструкторЗапросовSQL.ert - для меня как новичка - вполне удобная веЩ, и, да, он грешит дублированием некоторых джоинов, НО  ни один ведь так и не ответил на ВОПРОС!
34 Ёпрст
 
28.06.13
16:39
(33) см. (29) вторую часть предложения
35 GandolF
 
28.06.13
16:44
(34) посмотрел сразу как прочитал - не помогло,
36 GandolF
 
28.06.13
17:00
Ну что Умным и Без амбициозным по существу нечего больше добавить добавить !?!
37 Ёпрст
 
28.06.13
17:01
(35) не помогло что ?
табуляцию замени на пробелы везде.
38 GandolF
 
28.06.13
17:13
(37) заменял, убирал, менял на CROSS JOIN...
39 Ёпрст
 
28.06.13
17:20
И ?
показывай запрос из отладки
40 GandolF
 
28.06.13
17:50
(39) В том-то и дело, что до отладки не доходит - спотыкаеца сразу на $Документ_РеализацияЗаМесяц_2.Клиент AS [РеализацияЗаМесяц_Шапка_Клиент $Справочник.Клиенты]
41 Mikeware
 
28.06.13
17:52
ОбрМетаСКЛ тоже?
42 Dolly_EV
 
01.07.13
07:10
А если для $Документ.РеализацияЗаМесяц просто второй INNER JOIN попробовать сделать?
43 ЧеловекДуши
 
01.07.13
08:31
Ужас, автор как дятел, все время бьется головой об одно и тоже место :)

Использовать Кросс в запросе, это же надо, учитывая что наверняка у него там SQL 2000 х32 (максимум 4 Гб + еще сколько то, если железка поддерживает расширение памяти) :)

INNER JOIN - на SQL 2000 оно работает отвратительно, т.е. быстрее будет работать Left or Right Join :)

+(0) Вот пример, как отловить ошибку парсера.

//Вставь в код команду
ЗапросSQL.Отладка(1);

//какой либо твой мусоро код...

//После получения текста запроса...
Если ЗапросSQL.Подготовить(ТекстЗапроса) = 0 Тогда
//А тут ты увидишь ошибку подготовки запроса :)
Сообщить(ЗапросSQL.GetLastError(), "!");
//А тут можно еще для наглядности вывести сам текст запроса
Сообщить(ТекстЗапроса, "!");
Возврат;
КонецЕсли;



Переменная "ТекстЗапроса" - у тебя своя и содержит текст запроса :)
44 GandolF
 
02.07.13
09:44
Ошибку победил - плохо-хорошо, умно или глупо, но отчет заработал как часы.
И ни одному "Члену" "МногоУважаемого Общества" не могу сказать спасибо! Раскритиковать чужую работу может каждый более-менее подкованный в этом деле, а вот предложить решение (пусть даже и на ваш субъективный взгляд) - НЕ СПОСОБЕН НИКТО!
В остальных темах смотрел, всё тоже: автор- идиот, а то что он у вас и просит помочь разобраться, это как-то мимо прошло...
Вообщем удачи вам, "кучка прыщавых юнцов" распираемых от собственной значимости, может ещё повзрослеете!
45 Mikeware
 
02.07.13
09:46
(44) что, за тебя работу не сделали? Пришлось самому межушный ганглий напрягать?
46 GandolF
 
02.07.13
09:49
(45) За меня мою работу никто никогда не делал и не сделает.
И уж точно не тебе об этом говорить...
47 viktor_vv
 
02.07.13
09:49
(44) Ты бы поделился, в чем проблема была, может кому приголится. А то становишься как все тут, по твоему мнению.
48 Ёпрст
 
02.07.13
09:51
показывай своё решение, старец
49 GandolF
 
02.07.13
09:53
(47) Ты прав - уподобляюсь)
Но делиться желание отпало, пишите в личку - поделюсь СВОИМИ наработками без всякого флуда)