Проблема с vip-м
Добавлено: 12 сен 2007, 10:04
Помогите, пожалуйста, беда ващще!!!
Имеется интерфейс с предварительно описанными таблицами в памяти:
(подробно описывать не буду, опытные галактиоиды должны понять)
table struct SpecDog
( CDog : comp,
kod : string,
......)
with index
(MyReestr 00 = CDog + Kod,
......);
Interface ReestR 'Реестр номенклатуры договоров по наличию и движению.........'
..........
create view
var
......
coDog: comp;
....
KodMU : string;
......
as select *
from
.......
dogovor, katsopr,
spdocs, spsopr,
.....
specdog, synonym specdog specdog_p,
......
where
(( ....... // здесь подцепки
and coDog == specdog.cdog
and kodMU == specdog.bkod
and coDog == specdog_p.cdog
and kodMU == specdog_p.bkod
.......
))
;
........
........
.........
procedure Make;
{ var
........;
if(Getfirst dogovor = tsOk)
Do
{
coDog := dogovor.nrec;
............
..............// здесь выборка изаполнение временных таблиц
If (GetFirst Spdocs <> tsOk) {LogStrToFile('logGrPr.log', 'No!');}
If (GetFirst Spdocs = tsOk)
Do
..........
KodMU := Katmc_D.Barkod;
........
if(GetFirst specdog <> tsOk)
{
Insert specdog set
specdog.cdog = coDog,
specdog.bkod = KodMU,
......
;
LogStrToFile('logGrPr.log', specdog.bkod + ' //'+ specdog.named +' // '+ specdog.cdog);
}
while (Getnext Spdocs = tsOk);
If (GetFirst KatSopr = tsOk)
Do
{
If (GetFirst SpSopr = tsOk)
Do
{
KodMU := KatMC.barkod;
.........
if(GetFirst specdog_p = tsOk) // ищутся уже заведенная запись по индексу
{ Kod_D := specdog_p.bkod;
sp_name := specdog_p.Named;
LogStrToFile('logGr10.log',Kod_d + ' \ ' + CoDog +' \ '+ specdog_p.priz);
}
else
{Insert specdog_p set
specdog_p.cdog = coDog,
specdog_p.bkod = 'нет',
sp_name := specdog_p.named;
Kod_D := specdog_p.bkod;
LogStrToFile('logGr10.log',Kod_d + ' \ ' + sp_name +' \ '+ specdog_p.priz);
}
...........
}
While(GetNext SpSopr = tsOk);
}
While(GetNext katsopr = tsOk);
}
While(GetNext dogovor = tsOk);
}
Суть проблемы в том, что во втором случае обращения к таблице в памяти SPECDOG записи никакие не находятся и вставляются новые, хотя таблица уже заполнена
( Это видно из лог-файлов!!!) и индексы к ней должны работать в этой вьюхе.
Что делать ?????
Имеется интерфейс с предварительно описанными таблицами в памяти:
(подробно описывать не буду, опытные галактиоиды должны понять)
table struct SpecDog
( CDog : comp,
kod : string,
......)
with index
(MyReestr 00 = CDog + Kod,
......);
Interface ReestR 'Реестр номенклатуры договоров по наличию и движению.........'
..........
create view
var
......
coDog: comp;
....
KodMU : string;
......
as select *
from
.......
dogovor, katsopr,
spdocs, spsopr,
.....
specdog, synonym specdog specdog_p,
......
where
(( ....... // здесь подцепки
and coDog == specdog.cdog
and kodMU == specdog.bkod
and coDog == specdog_p.cdog
and kodMU == specdog_p.bkod
.......
))
;
........
........
.........
procedure Make;
{ var
........;
if(Getfirst dogovor = tsOk)
Do
{
coDog := dogovor.nrec;
............
..............// здесь выборка изаполнение временных таблиц
If (GetFirst Spdocs <> tsOk) {LogStrToFile('logGrPr.log', 'No!');}
If (GetFirst Spdocs = tsOk)
Do
..........
KodMU := Katmc_D.Barkod;
........
if(GetFirst specdog <> tsOk)
{
Insert specdog set
specdog.cdog = coDog,
specdog.bkod = KodMU,
......
;
LogStrToFile('logGrPr.log', specdog.bkod + ' //'+ specdog.named +' // '+ specdog.cdog);
}
while (Getnext Spdocs = tsOk);
If (GetFirst KatSopr = tsOk)
Do
{
If (GetFirst SpSopr = tsOk)
Do
{
KodMU := KatMC.barkod;
.........
if(GetFirst specdog_p = tsOk) // ищутся уже заведенная запись по индексу
{ Kod_D := specdog_p.bkod;
sp_name := specdog_p.Named;
LogStrToFile('logGr10.log',Kod_d + ' \ ' + CoDog +' \ '+ specdog_p.priz);
}
else
{Insert specdog_p set
specdog_p.cdog = coDog,
specdog_p.bkod = 'нет',
sp_name := specdog_p.named;
Kod_D := specdog_p.bkod;
LogStrToFile('logGr10.log',Kod_d + ' \ ' + sp_name +' \ '+ specdog_p.priz);
}
...........
}
While(GetNext SpSopr = tsOk);
}
While(GetNext katsopr = tsOk);
}
While(GetNext dogovor = tsOk);
}
Суть проблемы в том, что во втором случае обращения к таблице в памяти SPECDOG записи никакие не находятся и вставляются новые, хотя таблица уже заполнена
( Это видно из лог-файлов!!!) и индексы к ней должны работать в этой вьюхе.
Что делать ?????