powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос
21 сообщений из 21, страница 1 из 1
Запрос
    #36282575
Добрый день Всем!!!
помогите разобраться в чем проблема в данном запросе

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
local ldStartDate, ldEndDate, lcSclad,lcKli

ldStartDate = date()- 10 
ldEndDate = date()
lcSclad = '000001'
lcKli='000051'

select
      l.postav as postav,
      l.sgrup as grup,
      l.snnum as nnum,
      l.sartic as artic,
      l.ed as ed,
      t.start_kol as start_kol,
      l.rskolout as kolout,
      l.rssumout as sumout
      from
(select
      ml.marka as postav,
      ml.grup as sgrup,
      ml.nnum as snnum,
      ml.name as sartic,
      ml.ed as ed,
      Round(SUM(IIF(md.vid ='2' and md.type ='1',md.kolout, 0 )), 3 )+Round(SUM(IIF(md.vid ='1' and md.type ='5',-md.kolout, 0 )), 3 ) as rskolout,
      Round(SUM(IIF(md.vid ='2' and md.type ='1',md.sumout, 0 )), 3 )+Round(SUM(IIF(md.vid ='1' and md.type ='5',-md.sumout, 0 )), 3 ) as rssumout
from sclad_mlabel ml
inner join sclad_mdocm md on ml.grup = md.grup and ml.nnum=md.nnum
where md.date between ldStartDate and ldEndDate and Substr(md.agentcode, 1 , 6 )=lcKli and md.sclad = lcSclad and md.schet_a like '361*'and len(md.agentcode)> 6  and md.sclad not in ('000010', '000021', '000022', '000023')
group by ml.marka, ml.grup,ml.nnum,ml.name,ml.ed) as l,
(select
 mkt.sclad as ksclad,
 mkt.grup as kgrup,
 mkt.nnum as knnum,
 mkt.kol0+Round(SUM(IIF(mdm.vid ='1',mdm.kolout, 0 )), 3 )-Round(SUM(IIF(mdm.vid ='2',mdm.kolout, 0 )), 3 ) as start_kol
from sclad_mkart mkt
inner join sclad_mdocm mdm on mkt.grup = mdm.grup and mkt.nnum=mdm.nnum and mdm.sclad=mkt.sclad
where mdm.date < ldStartDate and Substr(mdm.agentcode, 1 , 6 )=lcKli and mdm.sclad = lcSclad and mdm.schet_a like '361*and len(mdm.agentcode)>6 and mdm.sclad not in (' 000010 ', ' 000021 ', ' 000022 ', ' 000023 ')
group by mkt.kol0,mkt.sclad,mkt.grup,mkt.nnum) as t

where l.sgrup=t.kgrup and l.snnum=t.knnum

перевожу запрос с MS SQL на VFP7 но в фоксе не сильно силен
...
Рейтинг: 0 / 0
Запрос
    #36282649
есть вопрос???,

1) Первое, что бросается в глаза - отсутствие ";" (символ продолжения выражения на следующую строку) в запросах в конце каждой строки
то есть должно быть:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select ;
      l.postav as postav,;
      l.sgrup as grup,;
      l.snnum as nnum,;
      l.sartic as artic,;
      l.ed as ed,;
....
только в последней строчке не должно быть этого знака
2) Пустые строки в "теле" запроса не допускаются
3) Ну и еще одна "трабла": при использовании ";" пробелы не добавляются.
То есть выражение (нет пробела между select и ";"):
Код: plaintext
1.
2.
select;
      l.postav as postav,;
будет преобразовано в:
Код: plaintext
1.
selectl.postav as postav,;
Это должен программист контролировать сам....
...
Рейтинг: 0 / 0
Запрос
    #36282693
Станислав С...кий,
все равно ругается на синтаксическую ошибку
...
Рейтинг: 0 / 0
Запрос
    #36282741
Фотография Saller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это как-то настораживает:
Код: plaintext
like '361*and len(mdm.agentcode)>6 and mdm.sclad not in (' 000010 ', ' 000021 ', ' 000022 ', ' 000023 ')
...
Рейтинг: 0 / 0
Запрос
    #36282745
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть вопрос???,

Исправленный код - в студию!
...
Рейтинг: 0 / 0
Запрос
    #36282755
Saller,

опечатка получилась
...
Рейтинг: 0 / 0
Запрос
    #36282766
причесал код, но все равно говорит что синтаксическая ошибка

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
local ldStartDate, ldEndDate, lcSclad,lcKli

ldStartDate = date()- 10 
ldEndDate = date()
lcSclad = '000002'
lcKli='000258'

select ;
      l.postav as postav, ;
      l.sgrup as grup, ;
      l.snnum as nnum, ;
      l.sartic as artic, ;
      l.ed as ed, ;
      t.start_kol as start_kol, ;
      l.rskolout as kolout, ;
      l.rssumout as sumout ;
      from ;
(select ;
      ml.marka as postav, ;
      ml.grup as sgrup, ;
      ml.nnum as snnum, ;
      ml.name as sartic, ;
      ml.ed as ed, ;
      Round(SUM(IIF(md.vid ='2' and md.type ='1',md.kolout, 0 )), 3 )+Round(SUM(IIF(md.vid ='1' and md.type ='5',-md.kolout, 0 )), 3 ) as rskolout, ;
      Round(SUM(IIF(md.vid ='2' and md.type ='1',md.sumout, 0 )), 3 )+Round(SUM(IIF(md.vid ='1' and md.type ='5',-md.sumout, 0 )), 3 ) as rssumout ;
from sclad_mlabel ml ;
inner join sclad_mdocm md on ml.grup = md.grup and ml.nnum=md.nnum ;
where md.date between ldStartDate and ldEndDate and Substr(md.agentcode, 1 , 6 )=lcKli and md.sclad = lcSclad and md.schet_a like '%361%'and len(md.agentcode)> 6  and (not INLIST(md.sclad'000010', '000021', '000022', '000023')) ;
group by ml.marka,ml.grup,ml.nnum,ml.name,ml.ed) as l, ;
(select ;
 	mkt.sclad as ksclad, ;
 	mkt.grup as kgrup, ;
 	mkt.nnum as knnum, ;
 	mkt.kol0+Round(SUM(IIF(mdm.vid ='1',mdm.kolout, 0 )), 3 )-Round(SUM(IIF(mdm.vid ='2',mdm.kolout, 0 )), 3 ) as start_kol ;
from sclad_mkart mkt ;
inner join sclad_mdocm mdm on mkt.grup = mdm.grup and mkt.nnum=mdm.nnum and mdm.sclad=mkt.sclad ;
where mdm.date <ldStartDate and mdm.sclad = cSclad ;
group by mkt.sclad,mkt.grup,mkt.nnum,mkt.kol0) as t ;
where l.sgrup=t.kgrup and l.snnum=t.knnum
...
Рейтинг: 0 / 0
Запрос
    #36282804
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть вопрос???
ml.grup as sgrup, ;
ml.nnum as snnum, ;
ml.name as sartic, ;

Здесь верные имена полей?
...
Рейтинг: 0 / 0
Запрос
    #36282839
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть вопрос???,
скорее всего в этой строчке:
Код: plaintext
1.
where md.date between ldStartDate and ldEndDate and Substr(md.agentcode, 1 , 6 )=lcKli and md.sclad = lcSclad and md.schet_a like '%361%'and len(md.agentcode)> 6  and (not INLIST(md.sclad'000010', '000021', '000022', '000023')) ;

Я бы переписал ее так:
Код: plaintext
1.
where md.date between ldStartDate and ldEndDate and len(md.agentcode)> 6  and Substr(md.agentcode, 1 , 6 )=lcKli and md.sclad = lcSclad and md.schet_a like '%361%' and md.sclad not IN ('000010', '000021', '000022', '000023') ;
Только следует иметь в виду, что в IN() должно быть не более 24 значений...
...
Рейтинг: 0 / 0
Запрос
    #36282853
igorbik,

создание таблиц
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
CREATE TABLE [mlabel]
(
[grup]		CHAR		( 5 ),
[nnum]		CHAR		( 13 ),
[name]		CHAR		( 60 ),
[ED]		CHAR		( 5 ),
[cena]		NUMERIC		( 19 , 8 ),
[cena0]		NUMERIC		( 19 , 8 ),
[date]		DATE,
[norma]		NUMERIC		( 19 , 4 ),
[odate]		DATE,
[ocena1]	NUMERIC		( 19 , 8 ),
[vcena1]	NUMERIC		( 19 , 8 ),
[ocena2]	NUMERIC		( 19 , 8 ),
[vcena2]	NUMERIC		( 19 , 8 ),
[ocena3]	NUMERIC		( 19 , 8 ),
[vcena3]	NUMERIC		( 19 , 8 ),
[ocena4]	NUMERIC		( 19 , 8 ),
[vcena4]	NUMERIC		( 19 , 8 ),
[codeval]	CHAR		( 3 ),
[cenaval]	NUMERIC		( 13 , 5 ),
[nacen]		NUMERIC		( 10 , 4 ),
[marka]		CHAR		( 25 ),
[sort]		CHAR		( 25 ),
[profil]	CHAR		( 25 ),
[razmer]	CHAR		( 25 ),
[koef]		NUMERIC		( 14 , 4 ),
[ed1]		CHAR		( 5 ),
[ed2]		CHAR		( 5 ),
[ed3]		CHAR		( 5 ),
[algo1]		CHAR		( 40 ),
[algo2]		CHAR		( 40 ),
[algo3]		CHAR		( 40 ),
[skid]		CHAR		( 4 ),
[skidq]		CHAR		( 4 ),
[kol1]		NUMERIC		( 19 , 4 ),
[kol2]		NUMERIC		( 19 , 4 ),
[kol3]		NUMERIC		( 19 , 4 ),
[kol4]		NUMERIC		( 19 , 4 ),
[kol5]		NUMERIC		( 19 , 4 ),
[skidka1]	NUMERIC		( 5 , 2 ),
[skidka2]	NUMERIC		( 5 , 2 ),
[skidka3]	NUMERIC		( 5 , 2 ),
[skidka4]	NUMERIC		( 5 , 2 ),
[skidka5]	NUMERIC		( 5 , 2 ),
[status]	CHAR		( 1 ),
[ins]		CHAR		( 1 ),
[stat]		CHAR		( 1 ),
[r1]		NUMERIC		( 14 , 5 ),
[r2]		NUMERIC		( 14 , 5 ),
[r3]		NUMERIC		( 14 , 5 ),
[koef1]		NUMERIC		( 14 , 4 ),
[cod_okdp]	CHAR		( 250 ),
[sclads]	INT,
[nnoper]	NUMERIC		( 10 , 0 ),
[n_r]		NUMERIC		( 1 , 0 ),
[n_p]		NUMERIC		( 1 , 0 ),
[oper]		CHAR		( 22 ),
[cenan]		NUMERIC		( 19 , 8 ),
[cena0n]	NUMERIC		( 19 , 8 ),
[daten]		DATE,
[wrk_cl]	CHAR		( 1 ),
[pereoc_d]	DATE,
[damso]		DATE,
[damson]	DATE,
[cdattr1]	CHAR		( 30 ),
[cdattr2]	CHAR		( 30 ),
[cdattr3]	CHAR		( 30 ),
[cdattr4]	CHAR		( 30 ),
[ndattr1]	NUMERIC		( 19 , 4 ),
[ndattr2]	NUMERIC		( 19 , 4 ),
[id_label]	CHAR		( 22 )
)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
create table mkart
(
sclad		char		( 6 ),
grup		char		( 5 ),
nnum		char		( 13 ),
prim		char		( 15 ),
kol0		numeric		( 19 , 4 ),
koltek		numeric		( 19 , 4 ),
kolres0		numeric		( 19 , 4 ),
kolres		numeric		( 19 , 4 ),
kollim		numeric		( 19 , 4 ),
kol_wd		numeric		( 19 , 4 ),
schet		char		( 4 ),
[name]		char		( 34 ),
[status]	char		( 1 ),
price		char		( 1 ),
mesto1		char		( 10 ),
mesto2		char		( 10 ),
partia		char		( 5 ),
[datepart]	date,
nnoper		numeric		( 10 , 0 ),
marka		char		( 25 ),
sort		char		( 25 ),
profil		char		( 25 ),
razmer		char		( 25 )
)
...
Рейтинг: 0 / 0
Запрос
    #36282865
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В любом случае для проверки я бы сначала выполнил отдельно все подзапросы в курсоры, а затем на них построил главный запрос.
Синтаксис всех запросов слегка изменится, особенно главного.
По ходу дела могут вывалиться какие-то ошибки.
Если все в порядке, а по-старому никак, то смириться и делать запросы по очереди.

Возможно также, что Фокс ругается на имена подзапросов, начинающиеся с цифры
Вот из Хелпа: "Имена таблиц должны начинаться буквы или знака подчеркивания (_)"
Так что имена полей типа "1.postav" могут не восприниматься.
...
Рейтинг: 0 / 0
Запрос
    #36282868
Станислав C.,

не помогает, все равно говорит что ошибка синтаксиса...
...
Рейтинг: 0 / 0
Запрос
    #36282900
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igorbik
Возможно также, что Фокс ругается на имена подзапросов, начинающиеся с цифры
Вот из Хелпа: "Имена таблиц должны начинаться буквы или знака подчеркивания (_)"
Так что имена полей типа "1.postav" могут не восприниматься.

С трудом разглядел, что l.postav начинается не с цифры, а с буквы "L". Так что это снимается
...
Рейтинг: 0 / 0
Запрос
    #36282906
igorbik,

дело в том что данный запрос я пишу в бухгалтерской системе "БЭСТ" называется..., в системе есть модуль для написания запросов к базе, как мне сказали разработчики "Нужно следовать синтаксису VFP 7.0". По теме, подзапросы по отдельности работают, а вместе не хотят уже целый день бьюсь над одним отчетом...
...
Рейтинг: 0 / 0
Запрос
    #36282935
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть вопрос???,

Ну что же, в таком случае я начинаю с чистого листа.
Обычно в этом месте все смеются, но мне помогает.

Делаем простой запрос:

select ml.marka as postav from sclad_mlabel ml

Если ОК, то идем дальше:

select ;
ml.marka as postav, ;
ml.grup as sgrup, ;
ml.nnum as snnum, ;
ml.name as sartic, ;
ml.ed as ed ;
from sclad_mlabel ml

Если ОК, то идем дальше и дальше, подключая фильтры, условия, группировки, соединения и пр.

Таким образом проверяем все подзапросы и затем переходим к основному запросу.
Если исправить все ошибки по ходу усложнения, то все должно получиться в конце концов.
Мне это всегда помогает.
...
Рейтинг: 0 / 0
Запрос
    #36282937
есть вопрос???igorbik,

дело в том что данный запрос я пишу в бухгалтерской системе "БЭСТ" называется..., в системе есть модуль для написания запросов к базе, как мне сказали разработчики "Нужно следовать синтаксису VFP 7.0".Вот с этого и надо было начинать. Вы используете синтаксис 9-ки.
...
Рейтинг: 0 / 0
Запрос
    #36282960
проходящий.,

а в чем разница в синтаксисе??? можно пример
...
Рейтинг: 0 / 0
Запрос
    #36282976
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть вопрос???igorbik,
уже целый день бьюсь над одним отчетом...
Удивили, однако! Иногда днями что-то пытаешься сделать, и в конце концов просто заходишь с другой стороны, и все получается быстро и просто.
есть вопрос???igorbik,
подзапросы по отдельности работают, а вместе не хотят
Не надо вместе их соединять так, как в исходном коде. Это синтаксис 9-ки.
Если создан курсор L и курсор T , то осн. запрос напишите так:

select ;
l.postav as postav, ;
l.sgrup as grup, ;
l.snnum as nnum, ;
l.sartic as artic, ;
l.ed as ed, ;
t.start_kol as start_kol, ;
l.rskolout as kolout, ;
l.rssumout as sumout ;
from l, t ;
where l.sgrup=t.kgrup and l.snnum=t.knnum ;
into cursor f1 nofilter

и должно быть вам счастье.
...
Рейтинг: 0 / 0
Запрос
    #36282991
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть вопрос???,


По коду есть:

where md.date between ldStartDate and ldEndDate

Должно быть

where between ( md.date , ldStartDate, ldEndDate )
...
Рейтинг: 0 / 0
Запрос
    #36283031
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igorbik,

Попробуйте последовательно:

select ;
ml.marka as postav, ;
ml.grup as sgrup, ;
ml.nnum as snnum, ;
ml.name as sartic, ;
ml.ed as ed, ;
Round(SUM(IIF(md.vid ='2' and md.type ='1',md.kolout,0)),3)+Round(SUM(IIF(md.vid ='1' and md.type ='5',-md.kolout,0)),3) as rskolout, ;
Round(SUM(IIF(md.vid ='2' and md.type ='1',md.sumout,0)),3)+Round(SUM(IIF(md.vid ='1' and md.type ='5',-md.sumout,0)),3) as rssumout ;
from sclad_mlabel ml ;
inner join sclad_mdocm md on ml.grup = md.grup and ml.nnum=md.nnum ;
where BETWEEN(md.date, ldStartDate, ldEndDate) ;
and Substr(md.agentcode,1,6)=lcKli ;
and md.sclad = lcSclad ;
and md.schet_a like '361' ;
and len(md.agentcode)>6 and not INLIST(md.sclad, '000010', '000021', '000022', '000023') ;
group by ml.marka,ml.grup,ml.nnum,ml.name,ml.ed ;
INTO CURSOR L

select ;
mkt.sclad as ksclad, ;
mkt.grup as kgrup, ;
mkt.nnum as knnum, ;
mkt.kol0+Round(SUM(IIF(mdm.vid ='1',mdm.kolout,0)),3)-Round(SUM(IIF(mdm.vid ='2',mdm.kolout,0)),3) as start_kol ;
from sclad_mkart mkt ;
inner join sclad_mdocm mdm ;
on mkt.grup = mdm.grup ;
and mkt.nnum=mdm.nnum ;
and mdm.sclad=mkt.sclad ;
where mdm.date <ldStartDate and mdm.sclad = cSclad ;
group by mkt.sclad,mkt.grup,mkt.nnum,mkt.kol0 ;
INTO cursor t

select ;
l.postav as postav, ;
l.sgrup as grup, ;
l.snnum as nnum, ;
l.sartic as artic, ;
l.ed as ed, ;
t.start_kol as start_kol, ;
l.rskolout as kolout, ;
l.rssumout as sumout ;
from l,t ;
WHERE l.sgrup=t.kgrup and l.snnum=t.knnum

Исправлен INLIST
Исправлен BETWEEN
Вместо LIKE используйте $ (пока я только убрал %% из него)

Сложный составной запрос не проходит даже в 9-ке
...
Рейтинг: 0 / 0
Запрос
    #36283097
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igorbik,

Похоже, один я тут работаю...
Однако после возврата на место '%...%' в LIKE, а также после исправления INLIST и BETWEEN
_сложный запрос_ не обнаружил синтаксических ошибок даже на 5-м фоксе (ну нету младше у меня...)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]