Страница 1 из 1

Задвоенные записи в tree

Добавлено: 05 июл 2011, 15:54
n0where
Заполняю tree динамически через временную таблицу. после обработки появляются задвоенные записи. Никак не получается их обойти если я повторно вызываю doCreateTable.

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

create view
var
  node       : comp;
as select
  if(SearchMarker(lMarkerList,tmp_table.nRec,inx), '√', '')  ( FieldName = MarkerInx ),
  *
from
  tmp_table,
where
((
    node == tmp_table.cOwner
))
;

//...

procedure doCreateTable;
begin
MTClear(#tmp_table, mfNormal);

incert current tmp_table;
end;

//...

panel scr_Main;
  tree tr_tblMyTree  ('',,sci1EnInsTree);
    table tmp_table
    fields
     {Font = {
          bold  = if((MarkerInx='√'), true, false);
      }};
      tmp_table.sResv   'Наименование'  : [6]   , protect;
      tmp_table.sKol    'Кол-во'        : [4.2] , protect;
    end;
end;

//...

panel scr_Main; table tmp_table;
handleEvent
cmTreeTop: {
  node := 0;
}
cmTreeUp: {
  node := tmp_table.cOwner;
}
cmTreeDown: {
  node := tmp_table.nRec;
}
cmTreeNodeType: {
 if (tmp_table.cOwner<>0)
   TreeSetNodeType(tr_tblMyTree, 2);
}
end;
end;

HandleEvent
CmInit: {
  doCreateTable;
}
end;
end.

Re: Задвоенные записи в tree

Добавлено: 05 июл 2011, 17:33
Masygreen
может поможет .. смотрите по аналогии с fpco

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

as select *
from  FPCO,FPCO FPCO1
where ((CurOwner_up==FPCO.cNode(noindex)))
      ;

//////////////////////для поментки жирного шрифта/////////////
function SearchIndex(_Nrec:comp):boolean;
{    
    if(GetFirst pr285FPCO where ((_Nrec==pr285FPCO._NrecFPCO)) =tsok) SearchIndex:=TRUE;
    else SearchIndex:=FALSE;
}
//////////////////////для поментки жирного шрифта/////////////
//////////////////визуальная часть//////////////////////
   panel PTree;
     table FPCO;
     TREE TREE_ORG;
        Show at (,,,);
          fields
            if(SearchIndex(FPCO.nrec),'v','')'v ':[3],Skip   ,{font={bold=TRUE}};
            FPCO.name   'Наименование группы' :Protect, [40],{font={bold=SearchIndex(FPCO.Nrec)}};
          end;
//////////////////визуальная часть//////////////////////

     HandleEvent 
//////////////////////////Начальная инициализация////////////////////////////////////////////////////
       cmInit:
       {
         TreeCloseAllOpenedNode(TREE_ORG);
       }    
//////////////////////////Начальная инициализация////////////////////////////////////////////////////
       cmTreeTop  :   {CurOwner_up := 0;}

       cmTreeDown :   {CurOwner_up := FPCO.nrec;}

       cmTreeUp   :   {CurOwner_up := FPCO.cNode;}

       cmTreeNodeType : { if TreeisTerminal(TREE_ORG) then TreeSetNodeType(TREE_ORG, ntfText);}

Re: Задвоенные записи в tree

Добавлено: 05 июл 2011, 21:26
edward_K
rescanpanel как миниум нужно делать после вставки. А на дереве еще TreeJump

Re: Задвоенные записи в tree

Добавлено: 06 июл 2011, 08:32
n0where

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

ResetBounds

//...Обновление

SetBounds
ReReadRecord
TreeJumpToRecord
Не помогает

Masygreen
Типо в переменную затолкнуть позицию? У меня разве по другому?

Re: Задвоенные записи в tree

Добавлено: 06 июл 2011, 08:49
n0where

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

  TreeCloseAllOpenedNode(tr_tblMyTree);
  TreeGetFirst(tr_tblMyTree);
Помогло частично - задвоения нет, но открыть какой-то узел не возможно

Re: Задвоенные записи в tree

Добавлено: 06 июл 2011, 10:40
edward_K
обычно для определения что это узел используют синоним - если есть записи main.nrec == slave.cowner тогда это узел. Перепешите cmTreeNodeType. И rescanpanel после каких то манипуляций с таблой всегда нужно делать.