PrintOneRowSredn(tabl,row,&prevSrc) { string src=tabl.TextS("SOURCE",row); if( IsNullOrWhiteSpace(src) ) //шёЄюўэшъ эх єърчрэ - схЁхь чэрўхэшх ш яЁхф. ёЄЁюъш src=prevSrc; else //чряюьшэрхь фы  сєфє∙шї ёЄЁюъ prevSrc=src; string fond=tabl.TextS("FOND",row); double sum=atof(tabl.TextS("SREDN_OSN",row)); bool notempty = nabs(sum)>0.0001 ? 1 : 0; if(notempty) { char str[256]; sprintf(str,"%s|%s|%11.3f|",src,fond,sum); print(str); } } Message ( &Arg, &pcT, W, A) ////////////////////////////////////////////////////////////////// // Сообщение(парам1,парам2) // парам1 - текст сообщения // парам2 - заголовок окна ////////////////////////////////////////////////////////////////// { var FuncParam = CreateObject("ParamFuncRW"); FuncParam.IInitial(static_cast_to_string(Arg),",",10); int CountParam=FuncParam.Count(); if ( CountParam ) { MessageBox(0,FuncParam.Get(0),FuncParam.Get(1),1); } return pcT; } //возвращает дату начала действия строки, параметр - внеш.код вида GetBegDateUser(Code) { var dat = CreateObject("KDate"); //создаем объекта класса KDate int Rowcode = GetRowForIntCode(Extern_To_InternE(Code)); dat.SetDateD(GetBegDate(Rowcode)); //инициализируем объект числом return dat.GetStr(); } //Получить дату выплаты по внутр.коду, мес.начисления, мес.принадлежности GetPayDateMR(intcode,m,src) { int rowkod[ROWMAX];//массив с номерами строк int cntrow=poiskosnkod(static_cast_to_double(intcode),rowkod,0,src);//получаем список строк с внут. кодом string month = static_cast_to_string(m); month = "0"+FreeSpaceString(month,5,"") ; month = "01."+substr(month,max(0,strlen(month)-7)); var d = CreateObject("KDate"); //создаем объекта класса KDate d.SetDate(month); //инициализируем объект строкой вида ДД.ММ.ГГГГ d.ImproveDay(); FiltrRowkod(rowkod,cntrow, d.GetAbs(), 1); for ( int row=0; row0) return CL.GetPodr(comb); } //получить значение базы по внутр.коду вида GetBZcode(Kod) { double res,int_code; int_code = static_cast_to_double(Kod); poiskbz(0,int_code,0," ",res); //БЗ return res; } //получить дату начала действия вида GetDateBeginIntCod(IntKod,ExtSrc) { int i,rowkod[ROWMAX]; char str[256]; double pos,kod = static_cast_to_double(IntKod); char Src = 0; if ( Str_Cmp(ExtSrc,"*","") ) Src = ExtSrcToInt(ExtSrc[0]); int n=poiskosnkod(kod,rowkod,0,Src); pos=.0; for (i=0; i0 && pkg>0) kat=pkg*10+ku; else kat = 0; return kat; } //получаем комментарий для сетки ПКГ 27.11.2013 СРД GetCommentPKG(FC) { char Comment[256]; GetValueClassif("T_GUIDE\\pkg.tab",FC,Comment,80,"Value","Kod"); FreeSpaceString(Comment,3,""); return Comment; } GetNewCodV(prm) { switch (substr(prm,2,3)) { case "114": return substr(prm,0,2)+"126"; case "115": return substr(prm,0,2)+"127"; default: return prm; } } CalcUpLimit(par0,par1,spif,pmainif,dt,fl) { double limit=.0; double p0=atof(par0); //общий доход с нач.года по предыдущий мес. double p1=atof(par1); //общий доход за тек.мес. if (fl==1) limit=1032000.0; //соцстрах else limit=1565000.0; //пфр //if (p0+p1limit) flup=1; //превышение лимита было зафиксировано ранее double res; double res_src_total; double resbl; double totalup; string sp=spif; char stres[512]; string stsrc; char tmp[256]; char strcomb[10]; char src[4]; int pos; int comb; int srci; int subj; int podr; var CL=CreateObject("CombineList"); var it = CL.CreateIterator(); var prop = CreateObject("APropBE"); int imon = atoi(substr(dt,0,2)); int month = Transl_Date_To_Abs(dt)+1; int row194 = poisk_row(194,0,KDateFromInt(month).GetDouble(),0); int mainif = pmainif; if (row194!=EOF) mainif = GetSrcOfCod(GetCode(row194)); // основной источник по виду 294 else { row194 = poisk_row(146,0,KDateFromInt(month).GetDouble(),0); if (row194!=EOF) mainif = GetSrcOfCod(GetCode(row194)); // основной источник по виду 114 else { row194 = poisk_row(14,0,KDateFromInt(month).GetDouble(),0); if (row194!=EOF) mainif = GetSrcOfCod(GetCode(row194)); // основной источник по виду 246 } } //для соцстраха добавить в общий доход суммы по 208 виду if (fl==1) { p1=p1+CashSumm(0,108,month,month,96,CL_SOURCE|CL_NACH|CL_MV,0); } if (p0+p1>limit) { //из общего дохода вычесть суммы БЛ и МП, добавлено 10.12.2021 //resbl=CashSumm(0,180,month-imon,month-1,96,CL_SOURCE|CL_NACH|CL_MV,0); //исключаем БЛ //resbl=resbl+CashSumm(0,790,month-imon,month-1,96,CL_SOURCE|CL_NACH|CL_MV,0); //resbl=resbl+CashSumm(0,77,month-imon,month-1,96,CL_SOURCE|CL_NACH|CL_MV,0); //исключаем мат.помощь //p0 = p0-resbl; ///////////////////////////////////////////// totalup = p0+p1-limit; //цикл по списку источников for (pos=1; pos<=strlen(sp); pos++) if (substr(sp,pos,1)==",") break; while (pos<=strlen(sp)) { strcpy(src,trimN(substr(sp,1,pos-1))); if ((static_cast_to_string(src)!=trimN(mainif)) || (flup)) //здесь не рассматриваем основной источник { stsrc=CharAsString(IntSrcToExt(src)); res=CashSumm(0,59,month,month,96,CL_COL|CL_SOURCE|CL_NACH|CL_MV,src); // получаем общую сумму начислений за тек.мес по источнику из списка //для соцстраха добавить в доход по источнику суммы по 208 виду if (fl==1)res=res+CashSumm(0,108,month,month,96,CL_SOURCE|CL_NACH|CL_MV,src); //resbl=CashSumm(0,180,month,month,96,CL_SOURCE|CL_NACH|CL_MV,src); //исключаем БЛ //resbl=resbl+CashSumm(0,790,month,month,96,CL_SOURCE|CL_NACH|CL_MV,src); //resbl=resbl+CashSumm(0,77,month,month,96,CL_SOURCE|CL_NACH|CL_MV,src); //исключаем мат.помощь //res=res-resbl; if (((p0+res>limit) || (flup)) && (res!=0)) // или есть превышение или лимит был превышен ранее и тогда все начисления попадают в превышение { if ((totalup-(p0+res-limit)>0) || (flup)) { //totalup=totalup-max(p0+res-limit,0); // откусываем от общей суммы превышения кусок по источнику (перенес ниже в цикл по совм.) if (!flup) res=p0+res-limit; if ((strlen(stres)>0) && (res!=0)) sprintf(stres,"%s%s",stres,"/"); sprintf(tmp,"%s: %.2f",stsrc,res); if (res!=0) sprintf(stres,"%s%s",stres,static_cast_to_string(tmp)); srci = atoi(src); for (it.SetBegin();!it.IsEnd();it.Next()) // цикл по совместительствам { comb=it.CurKey(); strcomb = CL.GetExtCod(comb); //if (strcomb!="Осн") //{ subj = CL.GetIDSubject(comb); podr = CL.GetPodr(comb); prop.Init(srci,subj,podr,comb); res=CashSummProp(0,59,month,month,96,CL_COL|CL_SOURCE|CL_NACH|CL_MV,prop); // получаем сумму начислений за тек.мес по совмест. и источнику из списка //для соцстраха добавить в доход по источнику и совм суммы по 208 виду if (fl==1)res=res+CashSummProp(0,108,month,month,96,CL_SOURCE|CL_NACH|CL_MV,prop); //CashSumm(0,108,month,month,96,CL_SOURCE|CL_NACH|CL_MV,src); totalup=totalup-max(p0+res-limit,0); // откусываем от общей суммы превышения кусок по источнику+совм //resbl=CashSummProp(0,180,month,month,96,CL_SOURCE|CL_NACH|CL_MV,prop); //исключаем БЛ //resbl=resbl+CashSummProp(0,790,month,month,96,CL_SOURCE|CL_NACH|CL_MV,prop); //resbl=resbl+CashSummProp(0,77,month,month,96,CL_SOURCE|CL_NACH|CL_MV,prop); //исключаем мат.помощь //res=res-resbl; //res_src_total=CashSummProp(0,59,month-imon,month,96,CL_COL|CL_SOURCE|CL_NACH|CL_MV,prop); resbl = res; if (!flup) res=p0+res-limit; if (((p0+resbl>limit) || (flup)) && (res!=0)) sprintf(stres,"%s%s%s%s%s: %.2f",stres," ",stsrc,"-",strcomb,res); //} } } else break; } } sp=substr(sp,pos+1); if (strlen(sp)==0) break; for (pos=1; pos<=strlen(sp); pos++) if (substr(sp,pos,1)==",") break; } if (!flup) // здесь добавляем превышение, отнесенное к осн.ист. { stsrc=CharAsString(IntSrcToExt(mainif)); //resbl=CashSumm(0,180,month,month,96,CL_SOURCE|CL_NACH|CL_MV,mainif); //исключаем БЛ //resbl=resbl+CashSumm(0,790,month,month,96,CL_SOURCE|CL_NACH|CL_MV,mainif); //resbl=resbl+CashSumm(0,77,month,month,96,CL_SOURCE|CL_NACH|CL_MV,0); //исключаем мат.помощь по всем ист. //totalup = totalup-resbl; if (totalup>0) { sprintf(tmp,"%s: %.2f",stsrc,totalup); if (strlen(stres)>0) sprintf(stres,"%s%s",stres,"/"); } else tmp=""; sprintf(stres,"%s%s",stres,static_cast_to_string(tmp)); for (it.SetBegin();!it.IsEnd();it.Next()) //цикл по совместительствам { comb=it.CurKey(); strcomb = CL.GetExtCod(comb); //if (strcomb!="Осн") //{ subj = CL.GetIDSubject(comb); podr = CL.GetPodr(comb); prop.Init(atoi(mainif),subj,podr,comb); res=CashSummProp(0,59,month,month,96,CL_COL|CL_SOURCE|CL_NACH|CL_MV,prop); //resbl=CashSummProp(0,180,month,month,96,CL_SOURCE|CL_NACH|CL_MV,prop); //исключаем БЛ //resbl=resbl+CashSummProp(0,790,month,month,96,CL_SOURCE|CL_NACH|CL_MV,prop); //resbl=resbl+CashSummProp(0,77,month,month,96,CL_SOURCE|CL_NACH|CL_MV,prop); //исключаем мат.помощь //res=res-resbl; res=p0+res-limit; if (res>0) sprintf(stres,"%s%s%s%s%s: %.2f",stres," ",stsrc,"-",strcomb,res); //} } } return stres; } return 0; } // функция приема кода должности по значению совместительства в ЛС getCodeDoljnByComb(pcomb,ppodr,pdt) //параметры: // pcomb - совместительство // ppodr - подразделение // pdt - дата запроса, м.б.пустая { int comb; int srci=0; // вариант по всем источникам int subj; int podr; int pdi=atoi(ppodr); string scomb; var CL=CreateObject("CombineList"); var it = CL.CreateIterator(); var prop = CreateObject("APropBE"); int month = Transl_Date_To_Abs(pdt); if (month==0) month=Transl_Date_To_Abs(datatek); var doljnElem; for (it.SetBegin();!it.IsEnd();it.Next()) // цикл по совместительствам { comb = it.CurKey(); scomb = GetCombineExtString(comb); subj = CL.GetIDSubject(comb); podr = CL.GetPodr(comb); prop.Init(srci,subj,podr,comb); if (podr==pdi && scomb==pcomb) { doljnElem=GetDoljnFromKCH(KDateFromInt_LastDay(month).GetStr(),comb); if(!doljnElem.IsEmpty()) { return doljnElem.GetExtCode(); } } } return 0; } // функция приема: сбор суммы по столбцу (ТВХ=73), заданному подразделению и месяцу начисления getNachPodr(spif,pd,pdmain,dt,dtshift) { // параметры: //spif - список источников из таблицы, при необходимости можно из него отбирать, ниже закомментарено //pd - код необходимого подразделения //pdmain - код осн подр. на случай если в строке вида подразделение=0, //dt - абсолютный номер тек. месяца //dtshift - сдвиг от текущего мес. int comb; int srci=0; // вариант по всем источникам int subj; int podr; int pdi=atoi(pd); int pdmaini=atoi(pdmain); int pos; char src[4]; double res; string sp=spif; var CL=CreateObject("CombineList"); var it = CL.CreateIterator(); var prop = CreateObject("APropBE"); int month = atoi(dt)+atoi(dtshift); //Transl_Date_To_Abs(dt); res=.0; //цикл по списку источников //for (pos=1; pos<=strlen(sp); pos++) if (substr(sp,pos,1)==",") break; //while (pos<=strlen(sp)) //{ // strcpy(src,trimN(substr(sp,1,pos-1))); // srci = atoi(src); for (it.SetBegin();!it.IsEnd();it.Next()) // цикл по совместительствам { comb = it.CurKey(); subj = CL.GetIDSubject(comb); podr = CL.GetPodr(comb); prop.Init(srci,subj,podr,comb); if (podr==pdi || (podr==0 && pdi==pdmaini)) res=res+CashSummProp(0,72,month,month,96,CL_COL|CL_SOURCE|CL_NACH|CL_MV,prop)-CollectSummProp(1,month,month,CL_MV,prop); } //sp=substr(sp,pos+1); //if (strlen(sp)==0) break; //for (pos=1; pos<=strlen(sp); pos++) if (substr(sp,pos,1)==",") break; //} return res; } getdaysinperiod(d1,d2) { char de[11], db[11]; db = d1; if (atoi(substr(d2,6))==0) de="31.12." + substr(datatek,6); else de=d2; if (atoi(substr(de,6))-atoi(substr(db,6))>1) return 730; if (atoi(substr(de,6))-atoi(substr(db,6))<0) return -1; int mb = atoi(substr(db,3,2)); int me = atoi(substr(de,3,2)); int yb = atoi(substr(db,6)); int ye = atoi(substr(de,6)); int dayb = atoi(substr(db,0,2)); int daye = atoi(substr(de,0,2)); int dfb = yb/4; /*if (dfb*4==yb) dfb=29; else dfb=28; int dfe = ye/4; if (dfe*4==ye) dfe=29; else dfe=28; if (ye-yb>1) { yb=ye-1; mb=1; dayb=1;} */ int sd=0; for (var i=yb ; i<=ye; i++) { for (var j=1 ; j<=12; j++) { if ( !(j>me&&i==ye) ) { int df = i/4; if (df*4==i) df=29; else df=28; if (j==1||j==3||j==5||j==7||j==8||j==10||j==12) sd=sd+31; if (j==4||j==6||j==9||j==11) sd=sd+30; if (j==2) sd=sd+28; } } } //***sd=sd-dayb+1; if (me==1||me==3||me==5||me==7||me==8||me==10||me==12) sd=sd-(31-daye); if (me==4||me==6||me==9||me==11) sd=sd-(30-daye); if (me==2) sd=sd-(28-daye); return sd; } BkartDecode(code) { char bank[24]; sprintf(bank,"%s",""); if (code=="к") sprintf(bank,"%s","СБРФ"); if (code=="с") sprintf(bank,"%s","СКБ"); if (code=="м") sprintf(bank,"%s","ЕМБ"); if (code=="з") sprintf(bank,"%s","ПСБ"); return bank; } FrvOnAllCmbUsr(dateBeg,dateEnd) // Функция приема, для подсчета ФРВ по всем совместительствам { char rez[256], Buf[256], f[256], B[256]; int onlyBaseCmb = GetCommonCnfInt("HowCalcFRV","prgmin"); // 1 = ФРВ только по основному совместительству var CL=CreateObject("CombineList"); var it = CL.CreateIterator(); var DBeg=CreateObject("KDate"); DBeg.SetDateII(1,atoi(dateBeg)); var MEnd=CreateObject("KMonth"); MEnd.SetMonth(atoi(dateEnd)); var DEnd=CreateObject("KDate"); DEnd.SetDateIM(MEnd.CountDay(),MEnd); double itogFRV = 0.0; double eps = 0.001; for (it.SetBegin();!it.IsEnd();it.Next()) // цикл по совместительствам ( it.CurKey() - внутр.код совместительства ) { var Combine=CreateObject("TmpCurCombine"); long IDCombine=it.CurKey(); // отфильтровываем должность если она не "основная" и настройка "как считать ФРВ" = 1 if ( onlyBaseCmb==1 && IDCombine!=CL.GetBaseID() ) continue; // отфильтровываем совмещения if ( CL.GetHostComb(IDCombine)!=0 ) continue; Combine.Init(IDCombine); // смотрим дату поступления на работу GetKchValue("data_rb",Buf,10,DBeg); var dat_rb = KDateFromStr(Buf); if ( !dat_rb.IsValid() ) dat_rb.SetDateII(1,MIN_MONTH_VALUE); // смотрим дату увольнения GetKchValue("data_uv",Buf,10,DBeg); var dat_uv = KDateFromStr(Buf); if ( !dat_uv.IsValid() ) dat_uv.SetDateII(31,MAX_MONTH_VALUE); // отсечем исп.должности с периодом работы не пересекающимся с заданным периодом if ( dat_uv.LE(DBeg) || dat_rb.GE(DEnd) ) continue; // ФРВ по табелю s50(mrasch); sprintf(f,"ИЗ_ТАБЕЛЯ(%d,%s,%d)",2,rsimv,1); CallFuncReceive(f,B,255,2); itogFRV += atof(B); } sprintf(rez,"%*.*f",6,2,itogFRV); return static_cast_to_string(rez); } //---nopass---11.05.2023--- //выборка сумм с учетом дат действия видов в периоде [d1;d2] GetSumWithKoefNepoln(absM,stolb,Simv,d1,d2,flagNU,tipNepoln) { //коэффициент неполноты double koefNepoln; int tmpMrasch=mrasch; double rezult=0.0; var LS = CreateObject("LS"); LS.GetGlobalLS(); var MatrLS = LS.MatrLS(); int size = MatrLS.Size(); //цикл по видам НУ for (int index = 0; index=0 || !takeFirstNonZeroSrc; --idx ) { var curProp=takeFirstNonZeroSrc?ListProp.Get(idx):Prop; // Рассматриваем только свойства к текущей исп.должности (если она задана) if ( takeFirstNonZeroSrc && combine && combine!=curProp.GetCombine() ) continue; int isPrior=0; for ( int ii=0; ii=0;j--) { int row=rowkod[j]; var d1 = KDateFromD(GetBegDate(row)); var d2 = KDateFromD(GetEndDate(row)); if ( d2.LT(DBeg) || d1.GT(DEnd) ) continue; if ( d1.LT(DBeg) ) d1 = DBeg; if ( d2.GT(DEnd) ) d2 = DEnd; if ( d2.LT(d1) ) continue; double codeNU = GetCode(row); double bz = GetBase(row); double rz = bz; bz_kod(codeNU,d1.GetDouble(),bz,rz); roundd(rz,2,rz); if ( rz<1. ) continue; if ( Arr[ii] > 145 ) isPrior=1; fixPeriods.UpdateLevelCod(countLevel++,d1.GetStr(),d2.GetStr(),to_string(rz)); } } // если не надо бегать по нескольким источникам или нашли ненулевое РВ - выходим if ( !takeFirstNonZeroSrc || countLevel>1 ) break; } for ( fixPeriods.SetBegin(); !fixPeriods.End(); fixPeriods.Next() ) { var db = fixPeriods.GetCurBeg(); var de = fixPeriods.GetCurEnd(); string totalfix = ""; int cnt=0; for ( int level = 1; level0.00001 ) { if ( cnt++ ) totalfix += ","; totalfix += to_string(trf); } } trfPeriods.AddFreePeriod(db.GetStr(), de.GetStr(), totalfix); } } GetShifrSrc(pSrc) { char Src[3]; sprintf(Src,"%s",pSrc); char value[256]; sprintf(value,"%s","Источник не определен!"); char dir[256]; GetCommonZPL(dir,255);//определяем путь до сетевого ЗПЛ -справочник берем из него string filePath =dir+"\\TABLSET2\\Tabl10.sum"; // путь до справочника var tabl = CreateObject("CurPrnTbl"); tabl.InitialNameFile(to_string(filePath)); // цикл по записям таблицы for (int zap=0; zap < tabl.Count_Rcr(); zap++) { char code[3]; sprintf(code,"%s",tabl.TextS("kod",zap)); if (code == Src) { sprintf(value,"%s", tabl.TextS("shifr2",zap)); break; } } return value; } TryFindCodeValidOnDate(comb,extCode,kDate) { var Prob = CreateObject("APropBE"); Prob.Init(CLL_TOTAL_SRC,CLL_TOTAL_SUBJECT,CLL_TOTAL_PODR,comb); //инициализируем APropBE внутр.кодом совместительства int rowkod[ROWMAX];//массив с номерами строк int cntrow=poiskosnkodProp(Extern_To_Intern(extCode),rowkod,0,Prob);//получаем список строк с кодом==kod FiltrRowkod(rowkod,cntrow, kDate.GetAbs(), 1); //отфильтровываем из массива недействующие for (int row=0; row < cntrow; row++) { double ikod=GetCode(rowkod[row]); var dbRow=KDateFromD(GetBegDate(rowkod[row])); var deRow=KDateFromD(GetEndDate(rowkod[row])); if (dbRow.IsValid() && dbRow.GT(kDate)) //вид еще не открыт continue; if (deRow.IsValid() && deRow.LT(kDate)) //вид закрыт continue; return ikod; } return -1; //////и обработать ситуацию, когда строку не нашли ( функция вернула -1) ////Вызов функции: //rowCode294=TryFindCodeValidOnDate(CLL_TOTAL_COMBINE,294,kDate); //kDate = CreateObject("KDate"); //if (rowCode742!=-1)//нашли вид 742 // return GetIDCombineOfCod(GetCode(rowCode742)); } usCellToExcel(tabl, rcr, fld) // тючтЁр∙рхЄ ышсю string ышсю double { char format = tabl.Format_Fld(fld); char accuracy = tabl.Accurasy_Fld(fld); var value=TrimN(OemToAnsi(tabl.Text(fld,rcr))); if (accuracy != 0) { value = atof(value); if (format == 'Q') value = CodeNUToStringEx(value,1,NUExtPrecision()); } if (format == 'D') // ЇюЁьрЄ яюы  т °рсыюэх xltx фюыцхэ с√Є№ ─рЄр! { var kd = KDateFromStr(value); value = kd.IsValid() ? kd.GetVariantDate() : GetEmpty(); } return value; }