Ступор _loop по таблице в памяти

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Ступор _loop по таблице в памяти

Сообщение Goblin »

Делал тут и-фейс оборотки для затратных счетов по подразделениям и обнаружил странный затык (до того ни разу не встреченный, хотя по подобной схеме с десяток и-фейсов написано уже - и ни каких проблем) :o : при печати выполнение начало клинить в буквальном смысле - цикл _loop по временной таблице в памяти останавливался на последней записи и дальше никуда ни шел. Визуализаторы(как родной у формы, так и мой с отладочной информацией) не гасились, но таймер на них продолжал считать время и само окно визуализатора на внешние события реагировало - таскалось мышом по родительскому как положено , то бишь сама Галактика была жива. Попытки разобраться ни к чему не привели - выполнение клинило именно на последней записи (в том числе и в конструкции цикла в виде if(getfirst=tsOk){do{/*Какая-то */}while(getnext=tsOk)})- и это даже в почти пустом цикле(напоследок оставил внутри лишь один визуализатор по текущей записи). Операторов навигации, изменения значений ключевых полей, текущей позиции в таблице не было в цикле и в помине.Дальше веселее - эти же циклы клинило даже по пустой таблице ! ???
Может поможет кто , ежель сталкивались ?
структура временной таблицы и определение логической таблицы и-фейса дано ниже :
table struct oborotpodrtbl
(
cpodr:comp,
podr:string[100],
schet:string[20],
kau:string[20],
nkau:string[100],
debet:double,
kredit:double
)
with index
(
oborotpodrtbl0=cpodr(unique)+schet(unique)+kau(unique)
);

create view
var sdate,edate:date;
schet,subschet:string;
sink,sind,soutk,soutd:double;
currcount:longint;
isnotprint:word
%0
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Re: Ступор _loop по таблице в памяти

Сообщение Goblin »

Обрезало кусок, сорри ...
Последней строкой , есессно будет
as select * from oborotpodrtbl;
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Ступор _loop по таблице в памяти

Сообщение Den »

Не далее чем перед праздниками тоже пришлось "пообщаться" с таблами с памяти, но вроде все прошло успешно..Правда опыт у меня с ними небольшой но все же позволь спросить - а где ты заполняешь oborotpodrtbl.
Лично мне пришлось создать две таких таблицы, и "циклить" по одной в другой.Но вроде все бегает нормально :

...
create view
var
c1 :comp
sumper,p :double
oldb :comp
yesorno,first,n:integer
mony :string
as
select * from katorg,lschet,shtraf,katbank,persons
where ((lschet.tperson==persons.nrec
and c1==lschet.cex
and lschet.nrec==shtraf.clsch
and (lschet.CHAR1='+')
and shtraf.cpol==katorg.nrec
and shtraf.CBANKPOL==katbank.nrec
)) and htraf.vidud=199 ;
Form avan('avan.OUT','avan');
HandleEvent
CmInit : {
Avan.Reinit;
Runinterface ('Getapodr',c1,0);
Rundialog ('SEtPROC',p);
n:=0;
if getfirst xarpred=tsOk {mony:=datetostr(xarpred.DATOTCH,'month');}
if getfirst lschet=tsok
{do
{
yesorno:=0;
_loop banki
{
if (banki.kod=katorg.nrec)
then
yesorno:=1;
}
if yesorno=0
then
{
banki.kod :=katorg.nrec;
banki.nameba :=katorg.name;
banki.nomersc:=katbank.SCHET1;
banki.bik :=katbank.MFO1;
banki.mon :=mony;
insert current banki;
}
sumper:=lschet.tarif*p/100;
rebor.tbn :=lschet.tabn;
rebor.man :=persons.fio;
rebor.kodp :=katorg.nrec;
rebor.sums :=sumper;
rebor.nameba :=katorg.name;
rebor.nomersc:=katbank.SCHET1;
rebor.bik :=katbank.MFO1;
rebor.mon :=mony;
insert current rebor;
}
While getnext lschet=tsok;
};
else Message('Не удалось попасть в lschet');
first:=1;
if getfirst banki=tsok
{
do
{
Avan.PuteventByid(fedoloop,fcna);
Avan.Write(rebor.nameba);
Avan.write(rebor.nomersc);
Avan.write(rebor.bik);
Avan.write(rebor.mon);
if getfirst rebor where ((banki.kod==rebor.kodp))=tsok
{
do
{
Avan.PuteventByid(fedoloop,fcpeop);
Avan.Write(rebor.tbn);
Avan.Write(rebor.man);
Avan.Write(sums);
Avan.Write(rebor.nameba);
}
While getnext rebor where ((banki.kod==rebor.kodp))=tsOK;
};
}
while getnext banki=tsok;
};
else Message('Не могу попасть в банки');
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Re: Ступор _loop по таблице в памяти

Сообщение Goblin »

Да уже разобрался ...
Криворукость и кривоглазость подвела )
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Ответить