Макрос(модуль) для выбора информации по офисам.

Автор:Alexander
Дата:06.08.2002
Просмотров:2324
Скачиваний:1807
Оценка: - , Оценок - 0
Сохранить в файле

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

Описание

Банк у нас с филиалами и офисами,
соответственно (при переходе на офисы), для формирования различных отчетов(и не только) по каждому структурному подразделению и в целом по банку, пришлось корректировать многие макросы. Для этого был написан данный модуль office1.mac. (может кому и пригодиться)

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

 /* Макрос для выбора информации по офисам */

/* на входе номер отделения ({NumDprt}), номер операциониста {Oper} */
/* на выходе
   0   - выбор не сделан, покинуть программу
   705 - головной банк + офисы или филиал
   706 - головной банк без офисов
   NNN - информация по любому офису
*/

IMPORT Bankinter;

file dp_dep(dp_dep,"bank.def");
file person(person,"bank.def");

CONST Kod_dprt=9000,  /*для Зарплаты, Основных фондов, МБП -
                        начало номера у офисов в базе отделений depart.dbt*/
      Peter1_Department_all=705,
      Peter1_Department    =905;/*706*/

array НомераФилиалов;

var Department,office="",{NumDprt},{Oper};

/*вставка для офиса*/
Macro Numb_office(dprt);
   if((dprt>900)and(dprt!=Peter1_Department))
      dprt=dprt-200;
   end;
   return dprt;
end;
/**/

/***********************************************************************/
Macro НомераФилиалов_(Status,Code);/*НомераФилиалов_(0,0);*/
var i=0,flag1;
  keynum(dp_dep,1);
  dp_dep.Status=Status;
  dp_dep.Code=Code;
  flag1=GetGE(dp_dep);
  while(flag1 and (dp_dep.Status==Status))
        if(dp_dep.Code==Peter1_Department_all)
          НомераФилиалов(i)=string(dp_dep.Code:4)+"  "+string(dp_dep.Comment:30);
          i=i+1;
        else
          if(dp_dep.cRX_UseSum=="X")
            НомераФилиалов(i)=string(dp_dep.Code:4)+"  "+string(dp_dep.Comment:30);
            i=i+1;
          end;
        end;
        flag1=next(dp_dep);
  end;
end;

Macro КодФилиала(_НомераФилиалов);
      return int(trim(substr(_НомераФилиалов, 1, 4)));
end;

Macro НазваниеФилиала(Code);
  keynum(dp_dep,0);
  dp_dep.Code=Code;
  if(GetEQ(dp_dep))
     return dp_dep.Comment;
  end;
  return "Такого филиала нет";
end;

Macro Офисы_(Status,Code); /*Офисы_(0,dep_Code/*706*/)*/
var Офисы="#",flag1,
  i=0;
  keynum(dp_dep,1);
  dp_dep.Status=Status;
  dp_dep.Code=Code;
  flag1=GetGE(dp_dep);
  while(flag1 and (dp_dep.Status==Status))
        Офисы=Офисы+string((Kod_dprt+Numb_office(dp_dep.Code)):4)+"#";
        flag1=next(dp_dep);
  end;
  return Офисы;
end;

Macro Выбор_отделения(numdprt,noper);

var dprt=Peter1_Department;

keynum(person,0);
НомераФилиалов_(0,0);
if(numdprt==Peter1_Department_all)
   person.Oper=noper;
   if(not GetEQ(person))
      exit(1);
   end;
   if((person.CodeDepart==0)or(person.CodeDepart==Peter1_Department_all))
       if(asize(НомераФилиалов)<1)
          return 0;
       elif(asize(НомераФилиалов)==1)
          dprt=0;
          dprt=КодФилиала(НомераФилиалов(dprt));
          return dprt;
       else
          dprt=menu(НомераФилиалов,
                    "Выберите отделение для отчета?",
                    "Список отделений");
       end;
       if(dprt<0)
          return 0;
       else
          dprt=КодФилиала(НомераФилиалов(dprt));
          /*вставка для офиса*/
          dprt=Numb_office(dprt);
          /**/
          return dprt;
       end;
   else
       return person.CodeDepart;
   end;
else
   return numdprt;
end;

end; /*модуля office1.MAC*/


/* например как это выглядит в макросе для зарплаты
Import "office1.mac";
Department=Выбор_отделения({NumDprt},{oper});
if(Department==0)
   msgbox("Отделение не выбрано!");
   exit(1);
elif(Department==Peter1_Department)
   office=Офисы_(0,Department);
end;
..........
           if(((Department==Peter1_Department)and
              (index(office,trim(string("#",lshtflw.Shop,"#")))==0))
              or
              ((Department!=Peter1_Department)and
               (lshtflw.Shop==(Kod_dprt+Department))
              )
              or(Department==Peter1_Department_all)
             )
.......
/*деиствия с выбранным подразделением*/
.......
end;
......

*/