Макрос(модуль) для выбора информации по офисам.
Сохранить в файлеОбсудить в форуме
Описание
Банк у нас с филиалами и офисами,
соответственно (при переходе на офисы), для формирования различных отчетов(и не только) по каждому структурному подразделению и в целом по банку, пришлось корректировать многие макросы. Для этого был написан данный модуль office1.mac. (может кому и пригодиться)
соответственно (при переходе на офисы), для формирования различных отчетов(и не только) по каждому структурному подразделению и в целом по банку, пришлось корректировать многие макросы. Для этого был написан данный модуль 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; ...... */