Вывод меню пользователя в Excel

Автор:KaMPiLeR
Дата:09.10.2003
Просмотров:2374
Скачиваний:747
Оценка:, Оценок - 6
Скачать (zip-файл; Размер - 1288)

Обсудить в форуме

Описание

Пример рекурсии. Кто сказал что PSQL отстой?

Требует lg и rsd.

Текст примера

 import lgxs, RSD;

/*Глобальные переменные для рекурсии и вообще*/
var Excel, i=5, k=0, v=0, mestr="",o, pr, cmd, rs;


/*Рекурсивная процедура*/
macro TreeWalk(aNode, aProg, aOper)
  var cmd, rs;
  i=i+1; v=v+1;
  cmd = RsdCommand("RSBANK",
                   "select * from OperMenu_dbt "+
                   "where iNumberFather="+aNode+" and iIdentProgram="+aProg+" and iOper="+aOper+" "+
                   "order by iNumberLine");
  cmd.execute();
  rs = RsdRecordset(cmd);
  while(rs.MoveNext())
    message(rs.Value("iCaseItem")+"::"+rs.Value("szNameItem"));
    mestr=MkStr("\t", v-1);
    [#]
    (mestr+rs.Value("szNameItem") );
    Excel.ActiveSheet.Cells(i,v)=rs.Value("szNameItem");
    TreeWalk(rs.Value("iNumberPoint"), aProg, aOper);
  end;
  v=v-1;
end;

/*Начало программы*/
file p(person);
array mnMenu;
asize(mnMenu,0);
while(next(p))
  mnMenu(k)=p.Name;
  k=k+1;
end;

o=0;
o=menu(mnMenu,"Выбор операциониста","Выбор операциониста",null,null,o);
if(o<0)
  msgbox("Отмена Выбора операциониста");
  exit(1);
end;

/*формируем список подсистем*/
asize(mnMenu,0);
k=0;
cmd = RsdCommand("RSBANK",
                 "Select DISTINCT iIdentProgram From opermenu_dbt where iOper="+string(o));
cmd.execute();
rs = RsdRecordset(cmd);
while(rs.MoveNext())
  mnMenu(k)=string(rs.Value("iIdentProgram"));
  k=k+1;
end;
pr=0;
pr=menu(mnMenu,"Выбор программы","Выбор программы",null,null,pr);
if(pr<0)
  msgbox("Отмена Выбора программы");
  exit(1);
end;

/*иксель заинициализируем*/
Excel = TlgActiveX("Excel.Application");
/*открываем шаблон менюшки - ну не хочется мне в макросе оформлением заниматься*/
Excel.Workbooks.Open("..\\..\\pattern\\menu.xls");
Excel.Visible = TRUE;


/*А вот и само дерево...*/
TreeWalk(0,mnMenu(pr),o+1);
/*Excel.ActiveWindow.SelectedSheets.PrintPreview;*/


OnError(e)
var iError=0;
print(e.message);
if(RslDefEnv)
  while( iError<RslDefEnv.ErrorCount )
    println(RslDefEnv.error(iError).descr);
    iError=iError+1;
  end;
end;