Не обновляется логическая таблица.

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Ответить
Irin
Сообщения: 3
Зарегистрирован: Ср, 20/10/2010 09:27
Имя Фамилия: Владельщикова Ирина

Не обновляется логическая таблица.

Сообщение Irin »

Добрый день!

Хочу разложить деврево по полям временной таблицы, для того чтобы потом построить сводную таблицу, но у меня почемуто при удаление записи в pick не отражается в логической таблице. Вот код:

Код: Выделить всё

create view 
from pick, GROUPSCH, synonym GROUPSCH GROUPSCH1
  where ((root==GROUPSCH.nrec and pick.crec==GROUPSCH.nrec and 4==pick.wlist));

.....

   Runinterface('L_GRSCH::GetGroupsch',2,2,2,true,1,false);
   delete all from DereboTMP;


   type StekArray=array[1..2] of comp;
   var StekNrec: StekArray;
   var StekName:array[1..8] of string;
   var i:integer;
   i:=1;

   if (getFirst GROUPSCH where (GROUPSCH.nrec<>GROUPSCH.cnode) )=tsOK
    {
     StekNrec[i]:=GROUPSCH.nrec;
     StekName[i]:=GROUPSCH.name;
     message('Верх: '+StekName[i]);
    }

   while count(StekNrec)<>0
    {
      if (getfirst GROUPSCH where ((comp(StekNrec[i])==GROUPSCH.cnode)))=tsok
      {
       i:=i+1;
       StekNrec[i]:=GROUPSCH.nrec;
       StekName[i]:=GROUPSCH.name;
       message('Добавили в стек:'+StekName[i]+' - '+StekNrec[i]);

       //удалим из табл pick
       if (getfirst GROUPSCH1 where ((GROUPSCH.nrec==GROUPSCH1.nrec)) )=tsOK
        if (getfirst pick where ((GROUPSCH1.nrec==pick.crec(noindex))) )=tsOk
         {
          delete current pick;
         }
      }
     else
      {
       message('Не нашел...записываем в таблицу');
       StekName[i]:='';
       ArrAtDelete(StekNrec,i);
       i:=i-1;
       message('Вернулись к '+StekName[i]+' - '+StekNrec[i]);
      }
    }

он встает на одну и ту же запись вот в этом месте

Код: Выделить всё

if (getfirst GROUPSCH where ((comp(StekNrec[i])==GROUPSCH.cnode)))=tsok 
Помогите, плиз.
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Re: Не обновляется логическая таблица.

Сообщение cruger »

Насколько я понял, позиционирование от удаления вообще никак не зависит?
Т.е. позиционирование происходит по сцепке из какого-то массива по индексу, а удаление само по себе.
Может тогда имеет смысл перед циклом распечатать содержимое массива и в цикле печатать текущее значение?
Irin
Сообщения: 3
Зарегистрирован: Ср, 20/10/2010 09:27
Имя Фамилия: Владельщикова Ирина

Re: Не обновляется логическая таблица.

Сообщение Irin »

Но логическая таблица ограничена же: pick.crec==GROUPSCH.nrec and 4==pick.wlist, потом в я удаляю строку из pick. А она все равно встает тут: if (getfirst GROUPSCH where ((comp(StekNrec)==GROUPSCH.cnode)))=tsok

В том то и проблема, что мне не нужно тут выводить в отчет...а разбить по полям. Или я чего-то не понимаю :conf:
vadim
топ-софт
Сообщения: 197
Зарегистрирован: Чт, 06/09/2007 17:38
Имя Фамилия: Вадим Володько
Откуда: ТопСофт
Контактная информация:

Re: Не обновляется логическая таблица.

Сообщение vadim »

в основной вьюшке действительно есть ограничние на groupsch, но когда делаете getfirst where, вы перестраиваете логическую таблицу с нуля.
если хотите, чтобы осталось и основное и добавилось новое ограничение, либо повторите основное заново в условиях либо опишите требуемое дополнительное органичение при помощи bounds или condition, сделайте addbounds или pushcondition и потом просто if getfirst groupsch {...}
кстати, перед первым позиционированием по этой таблице по условию - стоит поступить аналогично, если нужно ограничение из логической таблицы сохранить
Irin
Сообщения: 3
Зарегистрирован: Ср, 20/10/2010 09:27
Имя Фамилия: Владельщикова Ирина

Re: Не обновляется логическая таблица.

Сообщение Irin »

Разобралась, всем большое спасибо!
Ответить