Функция, вызываемая перед началом расчета среднего для отпуска
BeforeCalcSrednOtp(string DatBeg, string DatEnd, long Adr, &FlagShowTabl,&Arr)
DatBeg - начала отпуска (строка вида ДД.ММ.ГГГГ)
DatEnd - конец отпуска (строка вида ДД.ММ.ГГГГ)
Adr - адрес для инициализации
var Sr = CreateObject("KCalcSredn"); Sr.InitByPointer(Adr); // (класс используемый для расчета среднего в скриптах) - через этот класс можно получить доступ к настройкам по которым будет считаться средний. |
FlagShowTabl - признак "показывать таблицу среднего"
Arr - резерв (для новых параметров если понадобиться)
BeforeCalcSrednOtp(DatBeg,DatEnd,Adr,&FlagShowTabl,&Arr) /* Функция вызывается перед расчетом отпуска. Считаем кол-во символов Sim в табеле за период от "даты начала периода для отпуска"(псевдоним "BdataOtp") + 12 месяцев Если "дата начала периода" не указана - берем период 12 предыдущих месяцев от даты начала отпуска При количестве символов Sim >14, выдаем сообщение */ { string Sim="А"; //символы табеля //создаем объект для работы со списком должностей var CL=CreateObject("CombineList"); var it = CL.CreateIterator(); for (it.SetBegin();!it.IsEnd();it.Next()) //цикл по должностям (it.CurKey() - внутренний код исполняемой должности { var tc=CreateObject("TmpCurCombine"); // Класс для временной смены, а затем и восстановления текущей должности tc.Init(it.CurKey());//инициализируем //определяем "дату начала периода для отпуска" на дату начала отпуска var datBegOtp = CreateObject("KDate"); datBegOtp.SetDate(to_string(DatBeg)); char str[256]; //если поле с псевдонимом "BdataOtp" нашли в настройке к.ч. получим значение этого поля на дату начала отпуска if (kch_num_sys("BdataOtp")!=-1) GetKchValue("BdataOtp",str,10,datBegOtp); var DateBegPeriodOtp = CreateObject("KDate"); DateBegPeriodOtp.SetDate(to_string(str)); //дата не указана - берем 12 предыдущих месяцев от даты начала отпуска if (!DateBegPeriodOtp.IsValid()) DateBegPeriodOtp.SetDateII(datBegOtp.GetDay(),datBegOtp.GetAbs()-12); var DateEndPeriodOtp = CreateObject("KDate"); DateEndPeriodOtp.SetDateII(DateBegPeriodOtp.GetDay(),DateBegPeriodOtp.GetAbs()+12); DateEndPeriodOtp.Dec(); //уменьшаем дату на 1 день int cntSim=CountDaySimv(DateBegPeriodOtp.GetStr(),DateEndPeriodOtp.GetStr(),Sim,0,0); if (cntSim>14) { char s[256],nameDolgn[256]; nameDolgn=CL.GetName(it.CurKey());FreeSpaceString(nameDolgn,2,""); //название должности sprintf(s,"У должности \"%s\" проставлено %d символов \"%s\" в периоде с %s по %s",nameDolgn,cntSim,Sim,DateBegPeriodOtp.GetStr(),DateEndPeriodOtp.GetStr()); string message=to_string(s)+"\r\n"; AmbaMessageBox(message,"Внимание!",MB_OK|MB_ICONERROR,0); } } }