Имя: Пароль:
1C
1C 7.7
v7: 1Sqlite: Запрос ругается на GROUP BY
,
0 Zhuravlik
 
18.02.13
22:48
Добрый всем вечер) Начал копать поставщик данных SQLite, и вот такой код:


   гБаза = СоздатьОбъект("SQLiteBase");
   гБаза.Открыть(":memory:");
   
   Поставщик=СоздатьОбъект("SQLiteDataProvider");
   Поставщик.УстановитьБД(гБаза);
   
   ТекстЗапроса = "
   |SELECT
   |    ДокПЛ.ссВодитель As [Водитель $Справочник.Сотрудники],
   |    ДокПЛ.саАвтовоз  As [Автовоз $Справочник.АВТ_ТранспортныеСредства]
   |FROM
   |    [Документ.АВТ_ПутевойЛист] as [ДокПЛ]
   |INNER JOIN
   |    [_1S.JOURN] As [TabJ] ON (ДокПЛ.IDDOC = TabJ.IDDOC)
   |
   |WHERE
   |    (TabJ.DATE between @НачДата AND @КонДата)
   |GROUP BY ДокПЛ.ссВодитель, ДокПЛ.саАвтовоз
   |";
   
   Поставщик.УстановитьТекстЗапроса(ТекстЗапроса, "Водитель, Автовоз");
   
Без "GROUP BY" работает замечательно, а вот сним ругается <near "GROUP": syntax error>
В доке написано, что "Запрос должен быть запросом на выборку (select'ом), без указания упорядочивания запроса (без order by). ". Это и групп бай касается? Или у меня в коде где косяк?
1 Aleksey
 
18.02.13
22:49
а зачем тут GROUP BY?
2 Aleksey
 
18.02.13
22:50
или просто нужен аналог SELECT DISTINCT
3 Zhuravlik
 
18.02.13
22:51
Чтобы было Один водитель = один автовоз. А то ведь есть несколько документов, с одними и теже водителями и автовозами.
4 Zhuravlik
 
18.02.13
22:51
DISTINCT!
5 Aleksey
 
18.02.13
22:51
(3) SELECT DISTINCT
6 Zhuravlik
 
18.02.13
22:51
Я и забыл о нем)
7 Zhuravlik
 
18.02.13
22:52
А разве это не прерогатива GROUP BY?  GROUP BY - это чтобы "свернуть", так? А дистинкт - выбрать уникальные?
8 orefkov
 
18.02.13
22:53
(0)
С group by не будет работать.
Поставщик данных sqlite не предназначен для этого.
Он для отображения таблиц с фильтацией.
9 orefkov
 
18.02.13
22:56
С дистинктом тоже будет работать крайне хреново.
Твоя задача больше на отчет походит, а не на журнал.
Делай запрос в тз и используй поставщика тз из 1С++.
10 Aleksey
 
18.02.13
22:56
(7) Ну чистый SQL в плане запросов как раз и не знает что такое DISTINCT, а преобразует его в GROUP BY. Но в данном случае (8)
11 Zhuravlik
 
18.02.13
22:56
(8) А если мне нужно сумму неск. полей взять? Так не получится?
12 Zhuravlik
 
18.02.13
22:59
(9) Это я для тренировки. А так мне поставщик SQLite нужен чтобы читать справочник, в котором будут одновременно работать неск. человек, с тз уже написал хочу попробовать с SQlite првайдером, а то чтобы одноить флаг запрета редактирования приходится искать элемент справочника в ПриВыводеСтроки, а мне что-то кажется что это не очень.
13 Zhuravlik
 
18.02.13
22:59
*одноить = обновить
14 Zhuravlik
 
18.02.13
23:04
В общем все понятно, спасибо за помощь)
15 orefkov
 
18.02.13
23:08
(11)
Должна быть основная таблица, записи из которой будут отображаться 1 в 1 (ну, с возможной фильтрацией, т.е. пропуском некоторых записей) а к ней можно уже цеплять подзапросы (лучше left join'ом) и кореляционные поля.
16 Zhuravlik
 
18.02.13
23:17
(15) Суть понял, буду пробовать. Спасибо еще раз)