Имя: Пароль:
1C
1C 7.7
v7: запутался с join
0 dsultan
 
14.04.08
16:48
подключаюсь к dbf через microsoft.jet
запутался в joinах, вот что выдает
Ошибка синтаксиса (пропущен оператор) в выражении запроса 'ttl.ACCID = accs.ID INNER JOIN 1SACCS AS accs2 ON accs.SCHKOD >= accs2.SCHKOD'.
если убрать второй джойн - не ругается
где собака?

SELECT ttl.ACCID AS schet, ttl.CURRID AS valut,
iif(ttl.VSC0 = ' EL',ttl.SC0,iif(ttl.VSC1 = ' EL',ttl.SC1,
iif(ttl.VSC2 = ' EL',ttl.SC2,0))) AS sk1, iif(KIND = '1',ttl.SD
,0) AS sumost, iif(KIND = '2',ttl.SD,0) AS valsumost,
iif(KIND = '3',ttl.SD,0) AS kolost
FROM 1SBKTTL AS ttl
INNER JOIN
1SACCS AS accs ON ttl.ACCID = accs.ID
INNER JOIN
1SACCS AS accs2 ON accs.SCHKOD >= accs2.SCHKOD AND LEFT(accs.SCHKOD,LEN(accs2.SCHKOD)) = accs2.SCHKOD
AND accs.PLANID = 809 AND accs2.ID = ' 1V '
WHERE (ttl.date = #1/1/2008#) AND (ttl.KIND IN ('1', '2', '3')) AND (' EL' IN (ttl.VSC0,
ttl.VSC1, ttl.VSC2))
1 sapphire
 
14.04.08
16:54
Попробуй, если ты используешь INNER JOIN
использовать select ... from {перечень таблиц} where {условие выборки} AND {условия соединений}
2 sapphire
 
14.04.08
16:56
SELECT ttl.ACCID AS schet, ttl.CURRID AS valut,

iif(ttl.VSC0 = ' EL',ttl.SC0,iif(ttl.VSC1 = ' EL',ttl.SC1,
iif(ttl.VSC2 = ' EL',ttl.SC2,0))) AS sk1, iif(KIND = '1',ttl.SD
,0) AS sumost, iif(KIND = '2',ttl.SD,0) AS valsumost,
iif(KIND = '3',ttl.SD,0) AS kolost
FROM 1SBKTTL AS ttl,  1SACCS AS accs, 1SACCS AS accs2
WHERE
((ttl.date = #1/1/2008#) AND (ttl.KIND IN ('1', '2', '3')) AND (' EL' IN (ttl.VSC0,
ttl.VSC1, ttl.VSC2)))
AND
(
accs ON ttl.ACCID = accs.ID AND accs.SCHKOD >= accs2.SCHKOD AND LEFT(accs.SCHKOD,LEN(accs2.SCHKOD)) = accs2.SCHKOD
AND accs.PLANID = 809 AND accs2.ID = ' 1V '
)
3 dsultan
 
14.04.08
17:21
(2) пустоту вернул :(
4 sapphire
 
14.04.08
17:31
(3) Если положение dbf-ок статично, можно создать mdbшник и прилепить к нему через связь с таблицами запрос внутри. Так делают, когда хотят уйти от ограничений ядра jet
5 dsultan
 
14.04.08
17:35
все ок, спасибо, при копипасте пробелы в ' 1v ' потерялись, и еще заодно узнал, что planID в dbf лежит 36ричный, а в sql версии десятичный
6 sapphire
 
14.04.08
17:36
(5) :)
7 dsultan
 
14.04.08
17:37
(4) я так и делаю для дебага, удобно в акцесе проверять
одно смущает - тот же самый запрос через тот же джет акцес выдает результат мгновенно, а прога отбирает что то долго
8 sapphire
 
14.04.08
17:37
+(4) Иногда лучше использовать драйвер FoxPro (см документацию к 1С++),
или через Access. Кстати, частенько Accessовские БД используют для диагностики.
9 sapphire
 
14.04.08
17:38
(7) Правильно, потому что ты не используешь индексы.
10 dsultan
 
14.04.08
17:39
(8) я и начал с фокспрошного драйвера, уперся в форматы дат, устал бодаться, решил  джет попробовать
11 dsultan
 
14.04.08
17:41
а их можно через джет использовать?
12 КонецЦикла
 
14.04.08
17:47
(10) Юзай ОлеДБ, 1С++ и поиск
Хватит долбить
13 КонецЦикла
 
14.04.08
17:48
Кроме того уже есть аккаунтрекордсет
14 dsultan
 
14.04.08
18:07
(12)а чем джет не оледб?
делал уже через 1с++, быстрые итоги, все супер, только оказалось, что с dbf они не работают

самому переписывать быстрые итоги под dbf что то влом
спрофайлил то, что они запрашивают, пытаюсь приладить

(13) это к чему?