Обсуждение:Вывод меню пользователя в Excel

0 (0)
  • Развернуть Обсуждение:Вывод меню пользователя в Excel ( Обсуждение примера  14.10.2003 10:00 )
    0(0)
    Пример рекурсии. Кто сказал что PSQL отстой?

    Требует lg и rsd.
    Посмотреть пример
    >> Ответить
    • Развернуть Немного исправленный макрос ( 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;
      

      >> Ответить