Страница 1 из 1
Запрос в интерфейсе
Добавлено: 13 июл 2010, 19:40
BlazeBio
Почему здесь всегда выводится одна и та же МЦ? (В суппорте нормально отрабатывается запрос и выводит всё как надо).
Код: Выделить всё
Interface FillTable 'Заполение таблицы ppkatstan';
create view pp
Select ecn1.name, ecs1.name, katmc.name
From Exclassname ecn1, Exclassseg ecs1, EXCLASSVAL ecv1, katmc//,ppkatstanmc,ppkatstan//(katmc01)
Where ((ecn1.classcode==ecs1.classcode and 1411==ecn1.wtable
and ecn1.classcode==ecv1.classcode and ecs1.nrec==ecv1.CCLASSSEG
/*and 1411==EXCLASSVAL.wtable*/ and ecv1.CREC==katmc.nrec))
and ('Коллекция'=ecn1.name);
ORDER BY Exclassname.name+Exclassname.wtable, Exclassseg.name+Exclassseg.classcode;
handleEvent
cmInit:
pp._loop Exclassname
{
pp._loop Exclassseg
{
pp._loop EXCLASSVAL
{
if pp.getfirst katmc=tsOk
{
message(pp.katmc.name);
}
}
}
}
end;
end.
Re: Запрос в интерфейсе
Добавлено: 14 июл 2010, 07:52
Pehterev
BlazeBio писал(а):Почему здесь всегда выводится одна и та же МЦ? (В суппорте нормально отрабатывается запрос и выводит всё как надо).
Код: Выделить всё
pp._loop Exclassname
{
pp._loop Exclassseg
{
pp._loop EXCLASSVAL
{
наверно это надо заменить на
Код: Выделить всё
pp._loop ecn1
{
pp._loop ecs1
{
pp._loop ecv1
{
Re: Запрос в интерфейсе
Добавлено: 14 июл 2010, 09:28
edward_K
1. убрать order by - все равно не по тем таблицам что в where
2. подобрать все таки нужные индексы, это вам для примера - уж поменяете местами что надо
Код: Выделить всё
from katos(KATOS13)
where ((
15 == katos.tidk and 1 == katos.isleaf
and 3000 == EXCLASSNAME.wtable
and 'TEST' ==EXCLASSNAME.name
and EXCLASSNAME.classcode == exclassval.classcode
and 3000 == exclassval.wtable
and katos.nrec ==exclassval.crec << в вашем случае здесь наоборот
and exclassval.cclassseg == exclassseg.nrec
)) ;
Re: Запрос в интерфейсе
Добавлено: 14 июл 2010, 14:17
BlazeBio
Как быть всё же с сортировкой по МЦ. Cделал такое view, тут по order by в суппорте выводятся данные, а через vip ничего(вывод МЦ происходит только без order by и без сортировки, а нужна сортировка):
Код: Выделить всё
Interface FillTable 'Заполение таблицы ppkatstan';
var knrec:comp;
create view
as Select ecn1.name,ecs1.name,katmc.name
From Exclassname ecn1(EXCLASSNAME2),Exclassseg ecs1(EXCLASSSEG06),katmc(KATMC02), EXCLASSVAL ecv1//ppkatstanmc,ppkatstan//(katmc01)
Where ((
1411==ecn1.wtable
and ('Коллекция'=ecn1.name or 'Цветность'=ecn1.name)
and ecn1.classcode==ecv1.classcode
and 1411==ecv1.wtable
and ecv1.CREC==katmc.nrec
and ecv1.CCLASSSEG==ecs1.nrec));
//order by katmc.name+katmc.barkod;
create view pp
as select *
from
ppkatstanmc,ppkatstan;
handleEvent
cmInit:
{
StartNewVisual(vtRotateVisual ,
vfTimer+vfBreak+vfConfirm, 'Идёт заполнение таблицы ppkatstan,ppkatstanmc...', 0);
j:=0;
m:=1;
if getfirst ppkatstan=tsOk
{
delete all ppkatstan;
}
if getfirst ppkatstanmc=tsOk
{
delete all ppkatstanmc;
}
//message(katmc.name);
_loop ecn1
{//message(ecn1.name);
_loop ecs1
{//message(ecs1.name);
_loop ecv1
{
if getfirst katmc=tsOk
{
message(katmc.name);
clearbuffer(#ppkatstanmc);
ppkatstanmc.cmc:=katmc.nrec;
If (s1<>ecs1.name) and ('Цветность'=ecs1.name) and (katmc.name<>'')
{
clearbuffer(#ppkatstan);
s:=s1+ecs1.name;
ppkatstan.name:=s;
insert current ppkatstan;
knrec:=ppkatstanmc.atl_nrec;
}
s1:=ecs1.name;
ppkatstanmc.cppkatstan:=knrec;
insert current ppkatstanmc;
}
}
}
}
StopVisual('', 0);
}
end;
end.
Re: Запрос в интерфейсе
Добавлено: 14 июл 2010, 17:40
BlazeBio
Сортировка не работает по Katmc02 и Katmc07, другие более длинные составные индексы из Katmc не использовал. Как я писал при Order by katmc.name+katmc.barkod не выводится ни одной строки. Что делать? Наверное индекс добавлять в katmc будет не совсем корректно. Может можно сделать ещё как-то сортировку по katmc, может коряво, может медленным способом?
Re: Запрос в интерфейсе
Добавлено: 14 июл 2010, 17:50
edward_K
1. в order by поля нужно писать через запятую а не через +
2. задав порядок по katmc вы сваливаетесь во внешнюю выгрузку, что во первых медленно во вторых не всегда корректно работает.
либо надо тогда переделать на мой образец - katmc должна быть главной таблицей, добавив жесткую подцепку, либо выгрузить нужные поля во временную таблицу
delete all tmp_table
insert tmp_table select ..... from .. where .. ;
Re: Запрос в интерфейсе
Добавлено: 14 июл 2010, 20:27
BlazeBio
edward_K писал(а):... выгрузить нужные поля во временную таблицу
delete all tmp_table
insert tmp_table select ..... from .. where .. ;
Создал таким образом временную таблицу t1. Фишка интерфейса в том, что создать по коллекции+цветности МЦ в таблице ppkatstan, которая связана с таблицей katmc через таблицу связей ppkatstanmc, в ppkatstanmc должны быть записаны все ссылки на katmc в состав которых входят коллекции+цветность из ppkatstan. Но данный фейс создаёт много дубликатов в таблице ppkatstan, а нужно чтобы не было повторяющихся значений. Может можно как-то избавиться от дублирующихся значений в t1 или ppkatstan?. (Примечание:таблицы ppkastan и ppkatstanmc созданы мной.) И вообщее как организовать сортировку в t1 по нескольким позициям?
Код: Выделить всё
Interface FillTable 'Заполение таблицы ppkatstan';
var knrec:comp;
i,l,m,j,d:integer;
s1,s2,s:string[200];
table struct t1
(
nrec : comp,
// cmc : comp,
name: string, // наименование
name2:string,
name3:string
// isarch:string,
// cppgrformat: string
)
with index
(
t101 = nRec,//(Unique,Surrogate),
//t102 = name,
t103 = name+name3+name2
);
create view
as Select katmc.name,Exclassname.name,Exclassseg.name
From Exclassname(EXCLASSNAME2),Exclassseg(EXCLASSSEG06),katmc(KATMC02), EXCLASSVAL, ppkatstanmc,ppkatstan//(katmc01)
Where ((
1411==Exclassname.wtable
and ('Коллекция'=Exclassname.name or 'Цветность'=Exclassname.name)
and Exclassname.classcode==EXCLASSVAL.classcode
and 1411==EXCLASSVAL.wtable
and EXCLASSVAL.CREC==katmc.nrec
and EXCLASSVAL.CCLASSSEG==Exclassseg.nrec));
create view t
as select name,name2,name3
from t1(t103);
/*create view els
as select * from
ppkatstan,ppkatstanmc,ppgrformat,ppline; //where ((comp(281474976729069)==katmc.nrec));*/
handleEvent
cmInit:
{
StartNewVisual(vtRotateVisual ,
vfTimer+vfBreak+vfConfirm, 'Идёт заполнение таблицы ppkatstan,ppkatstanmc...', 0);
j:=0;
m:=1;
if getfirst ppkatstan=tsOk
{
delete all ppkatstan;
}
if getfirst ppkatstanmc=tsOk
{
delete all ppkatstanmc;
}
if t.getfirst t1=tsOk
{
t.delete all t1;
}
//message(katmc.name);
_loop Exclassname
{//message(ecn1.name);
_loop Exclassseg
{//message(ecs1.name);
_loop EXCLASSVAL
{
if getfirst katmc=tsOk
{
//message(katmc.name);
t.t1.nrec:=katmc.nrec;
t.t1.name:=katmc.name;
t.t1.name2:=Exclassseg.name;
t.t1.name3:=Exclassname.name;
t.insert current t1;
}
}
}
}
s1:=' ';
t._loop t1
{
//message(t.t1.name+' '+t.t1.name2+' '+t.t1.name3);
clearbuffer(#ppkatstanmc);
clearbuffer(#ppkatstan);
ppkatstanmc.cmc:=t.t1.nrec;
if (s1=' ')
{
s:=t.t1.name2;
ppkatstan.name:=s;
insert current ppkatstan;
knrec:=ppkatstan.atl_nrec;
}
else
{
If (s1<>t.t1.name2 and 'Цветность'=t.t1.name3 and t.t1.name<>'')
{
s:=s1+' '+t.t1.name2;
ppkatstan.name:=s;
insert current ppkatstan;
knrec:=ppkatstan.atl_nrec;
}
If (s1<>t.t1.name2 and 'Коллекция'=t.t1.name3 and t.t1.name<>'')
{
s:=t.t1.name2;
ppkatstan.name:=s;
insert current ppkatstan;
knrec:=ppkatstan.atl_nrec;
}
}
s1:=t.t1.name2;
ppkatstanmc.cppkatstan:=knrec;
insert current ppkatstanmc;
}
StopVisual('', 0);
}
end;
end.