Возникла проблема с логической таблицей в следующем интерфейсе
Код: Выделить всё
table struct local party041 (
NREC : COMP
, CKatmc : COMP
, party : string
, Podr : STRING
, Mol : STRING)
WITH INDEX(
MT01 = NREC(unique, surrogate)
,MT02= cKatmc);
//--------------------------------------------------------------------------------------------------------
Interface i041Konvertor_Int1 'Выбор из партий заданной МЦ';
Var mc_nrec,_csklad,_cmol,_cparty: comp;
kolSpsopr : DOUBLE;
CREATE VIEW T1 AS SELECT * FROM PARTY041,TEKSALDO,KATMC
WHERE ((MC_NREC == KATMC.NREC
AND KATMC.NREC == PARTY041.CKATMC))
AND _csklad <> PARTY041.PODR
AND _cmol <> PARTY041.MOL
AND _cparty <> PARTY041.PARTY;
Parameters mc_nrec, kolSpsopr, _csklad, _cmol, _cparty;
//--------------------------------------------------------------------------------------------------------
Procedure FillTable(nr_mc : comp);{
Message('FillTable: ['+String(nr_mc,0,0)+']');
_loop TEKSALDO WHERE ((nr_mc == TEKSALDO.CMC)) {
Message('Итерация TEKSALDO ['+String(TEKSALDO.NREC,0,0)+']');
}
}
//--------------------------------------------------------------------------------------------------------
HandleEvent
cmInit:{ FillTable(mc_nrec); }
End;
End.
Код: Выделить всё
_loop TEKSALDO WHERE
Если убрать сцепки из логической таблицы T1, то все работает на ура, т.е.:Если вызван оператор навигации с конструкцией where, то на время своего выполнения он отменяет текущую подцепку для таблицы в которой происходит поиск /перебор записей и если найденная запись не попадает в текущую подцепку, то модификатор возвращает статус tsOk, но текущая запись становится невалидной. Перед вызовом операторов навигации, условие в where для которых не является более сильным чем условие текущей подцепки рекомендуется вызывать ResetBounds, после вызова модификатора и выборки найденных значений рекомендуется вызывать SetBounds для таблицы модификатора.
Код: Выделить всё
table struct local party041 (
NREC : COMP
, CKatmc : COMP
, party : string
, Podr : STRING
, Mol : STRING)
WITH INDEX(
MT01 = NREC(unique, surrogate)
,MT02= cKatmc);
//--------------------------------------------------------------------------------------------------------
Interface i041Konvertor_Int1 'Выбор из партий заданной МЦ';
Var mc_nrec,_csklad,_cmol,_cparty: comp;
kolSpsopr : DOUBLE;
CREATE VIEW T1 AS SELECT * FROM PARTY041,TEKSALDO,KATMC
WHERE ((MC_NREC == KATMC.NREC));
Parameters mc_nrec, kolSpsopr, _csklad, _cmol, _cparty;
//--------------------------------------------------------------------------------------------------------
Procedure FillTable(nr_mc : comp);{
Message('FillTable: ['+String(nr_mc,0,0)+']');
_loop TEKSALDO WHERE ((nr_mc == TEKSALDO.CMC)) {
Message('Итерация TEKSALDO ['+String(TEKSALDO.NREC,0,0)+']');
}
}
//--------------------------------------------------------------------------------------------------------
HandleEvent
cmInit:{ FillTable(mc_nrec); }
End;
End.
Код: Выделить всё
ResetBounds(tnTEKSALDO);
_loop TEKSALDO WHERE ((nr_mc == TEKSALDO.CMC)) {
Message('Итерация TEKSALDO ['+String(TEKSALDO.NREC,0,0)+']');
}