Проблема с vip-м
Модераторы: m0p3e, edward_K, Модераторы
-
- Постоянный обитатель
- Сообщения: 151
- Зарегистрирован: 27 авг 2007, 12:16
- Откуда: ОАО КЧХК
- Контактная информация:
Проблема с vip-м
Помогите, пожалуйста, беда ващще!!!
Имеется интерфейс с предварительно описанными таблицами в памяти:
(подробно описывать не буду, опытные галактиоиды должны понять)
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 записи никакие не находятся и вставляются новые, хотя таблица уже заполнена
( Это видно из лог-файлов!!!) и индексы к ней должны работать в этой вьюхе.
Что делать ?????
-
- Постоянный обитатель
- Сообщения: 151
- Зарегистрирован: 27 авг 2007, 12:16
- Откуда: ОАО КЧХК
- Контактная информация:
-
- Постоянный обитатель
- Сообщения: 151
- Зарегистрирован: 27 авг 2007, 12:16
- Откуда: ОАО КЧХК
- Контактная информация:
-
- Местный житель
- Сообщения: 254
- Зарегистрирован: 08 июн 2007, 08:26
- Откуда: Красноярск
- Контактная информация:
san, аффтор жжжжжет !!!!!!!
Гаврилюк Марина, попробуйте убрать synonym, без него тоже будет работат. Ваша проблема в том что образно говоря логическая табла делает слепок на момент обращенияк ней, дак вот, когда вы первый раз обращаетесь к лог табле, то заносите в таблу specdog. Табла же specdog_p фактически не имеет к specdog никакого отношения в этой ЛОГ. табле, и поэтому записей в specdog_p никаких нет на момент ее считывания после добавления записей в specdog_p. Делайте инсерт в одну таблу(specdog), не используйте при этом синонимов. а потом попробуйте rereadrecords(#specdog_p).
Я бы делал так, с использование pushpos и poppos. Это позволяет не использовать сининим, к примеру:такое использование
Гаврилюк Марина, попробуйте убрать synonym, без него тоже будет работат. Ваша проблема в том что образно говоря логическая табла делает слепок на момент обращенияк ней, дак вот, когда вы первый раз обращаетесь к лог табле, то заносите в таблу specdog. Табла же specdog_p фактически не имеет к specdog никакого отношения в этой ЛОГ. табле, и поэтому записей в specdog_p никаких нет на момент ее считывания после добавления записей в specdog_p. Делайте инсерт в одну таблу(specdog), не используйте при этом синонимов. а потом попробуйте rereadrecords(#specdog_p).
Я бы делал так, с использование pushpos и poppos. Это позволяет не использовать сининим, к примеру:такое использование
Код: Выделить всё
_loop mySklOst
{
if (CurCount <= mySklOst.Kol){
pushpos(#mySklOst);
update mySklOst where ((TmpSklOst == mySklOst.SklOstNrec)) set mySklOst.Kol := mySklOst.Kol - CurCount;
poppos(#mySklOst);
break;
}else{
pushpos(#mySklOst);
update mySklOst where ((TmpSklOst == mySklOst.SklOstNrec)) set mySklOst.Kol := 0;
poppos(#mySklOst);
}
}
-
- Постоянный обитатель
- Сообщения: 151
- Зарегистрирован: 27 авг 2007, 12:16
- Откуда: ОАО КЧХК
- Контактная информация: