Обсуждение:Вывод меню пользователя в Excel
0 (0)
Обсуждение:Вывод меню пользователя в Excel ( Обсуждение примера 14.10.2003 10:00 )
0(0)Немного исправленный макрос ( KaMPiLeR 18.12.2003 16:28 )
0(0)/*Евгений Дадыков МБ СЕНАТОР - кто не знает рекурсии - тот отдыхает*/ /*макрос оптимизирован для Far 100х40 */ import lgxs, RSD; /*Глобальные переменные для рекурсии и вообще*/ var Excel, ij, 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); [#] (string(aProg)+"::"+string(aOper)+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)=string(p.Oper:4)+"::"+p.Name; k=k+1; end; o=0; o=menu(mnMenu,"Выбор операциониста","Выбор операциониста",null,null,o); if(o<0) msgbox("Отмена Выбора операциониста"); exit(1); end; o=int(substr(mnMenu(o),1,4)); /*иксель заинициализируем-------------------------------------------------------------------*/ Excel = TlgActiveX("Excel.Application"); /*открываем шаблон менюшки - ну не хочется мне в макросе оформлением заниматься*/ Excel.Workbooks.Open("\\\\servc0\\rsbank\\rsbank\\mac\\_pattern_\\menu.xls"); Excel.Visible = TRUE; rewind(p); p.Oper=o; println(o); Excel.ActiveSheet.Cells(1,1)=string(o); if(not(geteq(p))) msgbox("не найдено"); exit; end; pr=p.szIdentProgram; ij=1; while( ij<=StrLen(pr) ) /*А вот и само дерево...*/ [ #] ("подсистема - "+substr(pr,ij,1)); Excel.ActiveSheet.Cells(i,1)="подсистема - "+substr(pr,ij,1); TreeWalk(0,CodeFor(substr(pr,ij,1)),o); i=i+5; ij=ij+1; end; /*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;
>> Ответить