Вывод меню пользователя в Excel
Скачать (zip-файл; Размер - 1288)Обсудить в форуме
Описание
Пример рекурсии. Кто сказал что PSQL отстой?
Требует lg и rsd.
Требует 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;