import "layer92.dll" UserAlgorithmCalc(&info,&r) { // инициализация локальных переменных int RetFlag = code_Break, crow = info.crow, b3 = info.b3, ikod = info.ikod, kod_alg = info.kod_alg, pos = info.pos, mkat = info.mkat, krabot = info.krabot, tip_s9600 = info.tip_s9600, flag_propusk0 = info.flag_propusk0, z1 = info.z1, z2 = info.z2; double h[4]; double kod = info.kod, n1 = info.n1, d1 = info.d1, d2 = info.d2, bz = info.bz; h[0] = info.h[0], h[1] = info.h[1], h[2] = info.h[2], h[3] = info.h[3]; int rowkod[ROWMAX],i,m,m1,b1,b2,mvrem; char t[20],str[81],str1[81]; double n2,n3,n4,n5,n6,n7,n8,n9,n10,r8,r9,k; /*-----------------------------------------------------*/ /* tip_s9600=0 - функция обработки СУММЫ по строке */ /* (s9600) - обнуляет РВ, если СУММА==0. */ /* tip_s9600=1 - не обнуляет (в спец.случаях) */ /*-----------------------------------------------------*/ /*-----------------------------------------------------*/ /* Если flag_propusk0=1, то расчет данного вида по его */ /* алгоритму производится только через режимы "Расчет */ /* произвольного вида", "Доп.расчеты" и при расчете от-*/ /* дельной строки в "Просмотре, корректировке ЛС". */ /* flag_propusk0=3, то же, что =1, только в этом случае*/ /* программа работает со строкой вида даже если у нее */ /* вышли даты действия (например, для квартал.дотаций).*/ /* В остальных режимах - если есть СУММА, то подается */ /* на корректировку, иначе - вид пропускается в расчете*/ /*-----------------------------------------------------*/ int c=-4096; switch(kod_alg) { // Сюда можно вставлять вызов собственных алгоритмов расчета. // Примеры функций с алгоритмами находятся // в файле SCRIPT\ALGSYS.S // начало описания алгоритмов пользователя case 596: /* СН по "3" в % */ return UserAlg596(info,r); case 598: /* РК по "3" в % */ return UserAlg598(info,r); case 597: /* СН по "4" в % */ return UserAlg597(info,r); case 599: /* РК по "4" в % */ return UserAlg599(info,r); case 590: /* Интенсивность % */ return UserAlg590(info,r); case 279: /* Выслуга % */ return UserAlg279(info,r); case 521: /* Простой */ return UserAlg521(info,r); case 500: /* Оклад БЗ/календарные дни */ worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */ if (nkalend==knorm) /* если строка считается по основному графику ЛС */ r[2]=dney_v_tab(rsimv,calm,z1,z2); if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; n1=r[2]*bz/countday; break; case 3: /* сдельно */ worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */ if ( r[2]==0.) { if (nkalend==knorm) /* если строка считается по основному графику ЛС */ skoljko(r[2],data,z1,z2,rsimv,calm,cht); } if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; break; case 9: /* пpаздничные, БЗ - тариф в коп. */ worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */ if (nkalend==knorm) /* если строка считается по основному графику ЛС */ skoljko(r[2],data,z1,z2,rsimv,calm,cht); if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; if ( uprc!=NO_SCREEN ) { flagrow[jf][2]=1; zaprosd(scr04,windrow+1,0, "ПОД pаботника",7,r[2],n8,-500.,500.,0);} n9=r[2]*bz; n1=n9+n9*n8/100.; break; case 18: /*совмещение*/ s1001("н",d1,d2,0,17,r9,4); n1=r9*bz/100.; break; case 22: /*мат.помощь*/ s1001("н",d1,d2,0,12,r9,4); n1=r9*bz*2.2/100.; break; case 21: /*вредность на оклад и расш.зона*/ s1001("н",d1,d2,0,21,r9,4); n1=r9*bz/100.; break; //case 24: /*вредность на совм*/ s1001("н",d1,d2,0,24,r9,4); n1=r9*bz/100.; break; case 178: /*выслуга от оклада*/ s1001("н",d1,d2,0,4,r9,4); if (r[2]==0.) r[2]=bz; // 02.07.2013 if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; n1=r9*bz/100.; break; case 179: /*выслуга от оклада*/ s1001("н",d1,d2,0,34,r9,4); if (r[2]==0.) r[2]=bz; // 02.07.2013 if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; n1=r9*bz/100.; break; case 4: /* оклад */ worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */ if (nkalend==knorm) /* если строка считается по основному графику ЛС */ r[2]=dney_v_tab(rsimv,calm,z1,z2); if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; n1=r[2]*bz/norm(1); /* bz - базовое значение по строке вида Н-У */ break; case 128: /* оклад */ worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */ if (nkalend==knorm) /* если строка считается по основному графику ЛС */ r[2]=dney_v_tab(rsimv,calm,z1,z2); if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; n1=r[2]*(bz/norm(1))*2; /* bz - базовое значение по строке вида Н-У */ break; case 151: /* волонтер*/ worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */ if (nkalend==knorm) /* если строка считается по основному графику ЛС */ //r[2]=dney_v_tab(rsimv,calm,z1,z2); skoljko(r[2],data,z1,z2,rsimv,calm,cht); if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; n1=r[2]*(bz/norm(2))*20/100.; /* bz - базовое значение по строке вида Н-У */ break; case 194: /* оклад административный*/ r[2]=r[2]+h[2]; // учет для случая пересчета if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; n1=r[2]*bz/norm(1); /* bz - базовое значение по строке вида Н-У */ break; case 16: /* расш.зона*/ r[2]=r[2]+h[2]; // учет для случая пересчета // if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; n1=r[2]*bz/100.; /* bz - базовое значение по строке вида Н-У */ break; case 5: /* почасовая тарифная оплата, БЗ - тариф в коп. */ worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */ if ( r[2]==0.) {if (nkalend==knorm) /* если строка считается по основному графику ЛС */ skoljko(r[2],data,z1,z2,rsimv,calm,cht);} if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 )break; n1=r[2]*bz; break; case 24: /* почасовая тарифная оплата, БЗ - тариф в коп. */ worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */ if ( r[2]==0.) // {if (nkalend==knorm) // /* если строка считается по основному графику ЛС */ // skoljko(r[2],data,z1,z2,rsimv,calm,cht);} if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 )break; n1=r[2]*bz/100.; break; //case 178: // Выслуга лет // 17.04.97 // //procent_ot_staga(78,"datavys",1,0,31,crow,d1,d2,&n3); //по-старому // procent_ot_staga(78,"",1,0,1,crow,d1,d2,&n3); // // n3 - % от стажа // s98(0,&n6); // r[2]=n6*norm(1); // r[2] - отработанных дней // if ( (c=korrv(r,t,0,h,flagrow,&jf)) != 1 ) goto return_c; // s97(d1,d2,&n2,&n5,1); // n2 - дневная ставка // n1=r[2]*n3/100.; // break; case 192: /* почасовая тарифная оплата, БЗ - тариф в руб. */ r[2]=r[2]+h[2]; if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; n1=r[2]*bz/3*2; break; case 37: /* процентные надбавки */ s1001("н",d1,d2,0,18,r9,4); n1=r9*bz/100.; break; case 66: /* процентные надбавки */ s1001("н",d1,d2,0,18,r9,4); n1=r9*bz*2.2/100.; break; /* case 15: /* процентные надбавки */ // s1001("н",d1,d2,0,20,r9,4); s1001("н",d1,d2,0,19,r9,4); n1=r9*bz/100.; break; */ case 19: /* процентные надбавки */ s1001("н",d1,d2,0,22,r9,4); n1=r9*bz/100.; break; case 180: /* ВЫСЛУГА СОВМ. НА 106 */ s1001("н",d1,d2,0,21,r9,4); n1=r9*bz/100.; break; case 6: /* часовая оплата по окладу */ worktime(crow,b3,0); if (nkalend==knorm) /* если строка считается по основному графику ЛС */ skoljko(r[2],data,z1,z2,rsimv,calm,cht); if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; n1=r[2]*bz/norm(2); break; case 196: /* часовая оплата по окладу */ worktime(crow,b3,0); // if (nkalend==knorm) /* если строка считается по основному графику ЛС */ // skoljko(r[2],data,z1,z2,rsimv,calm,cht); if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; n1=r[2]*bz/norm(2); break; case 127: /* часовая оплата по окладу */ worktime(crow,b3,0); if (nkalend==knorm) /* если строка считается по основному графику ЛС */ skoljko(r[2],data,z1,z2,rsimv,calm,cht); if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; n1=r[2]*(bz/norm(2))*2; break; case 46: /* Замороженная за 1998 год */ if (n1==0.&& func[6]) n1=bz; break; case 8: /* ремонт , праздничные */ c=s98(0,n6); r[2]=r[2]+h[2]; if (c==1) /* "дневник" */ n6=dney_v_tab(rsimv,calm,z1,z2)/norm(1); else { /* "часовик" */ skoljko(n2,data,z1,z2,rsimv,calm,cht); n6=n2/norm(2); } /* n6 - отношение ФРВ/НРВ */ if ( uprc!=NO_SCREEN) {flagrow[jf][2]=1; zaprosd(scr04,windrow+1,0, " % ПОД работника",7,0,n4,-500.,500.,0);} n9=n6*r[2]; n1=n9+n9*n4/100.; break; case 112: /* процентная премия за месяц; БЗ-базовый процент */ { // Struct_Alg Work; int mes1=0,mes2=0,stolbec=ST_MPREM+1; Get_AlgWithParam(Work,ikod); // 31.01.1995 // Work.Count_Par - число паpаметpов для кода алгоpитма //-- параметр 1 - столбец таблицы входимости (по умолчанию = 2) if (Work.Count_Par>0) { i=atoi(Work.List_Par[0]); if (i>0 && i<=99) stolbec=i; } //-- параметр 2 - месяц начала выборки (относительно расчетного) // (по умолчанию берется за один текущий месяц) if (Work.Count_Par>1) { i=atoi(Work.List_Par[1]); if (i>=(-PMES) && i<=BMES) mes1=mes2=i; } //-- параметр 3 - месяц конца выборки (относительно расчетного) // (по умолчанию берется за один месяц, указанный параметром 2) if (Work.Count_Par>2) { i=atoi(Work.List_Par[2]); if (i>=mes1 && i<=BMES) mes2=i; } n5=0.; for(m=mes1;m<=mes2;m++) { s1001("*",d1,d2,m,stolbec-1,r9,4); n5+=r9; } // 08.11.95 if (r[2]==0.) r[2]=bz; // 17.04.95 if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; n1=n5*r[2]/100.; } break; //case 24: /* доплата до нормы часов, БЗ - тариф в руб. */ // r[2]=r[2]+h[2]; /* учет для случая пересчета */ // if ( (c=korrv(r,t,0,h,flagrow,&jf)) != 1 ) return(c); // n1=r[2]*bz; // break; case 35: /* ночные БЗ -ОКЛАД*/ s96(d1,d2,n5,1); if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; n1=bz*r[2]/norm(2)*30/100.; break; case 124: /* СВ. Х 50*/ //c 06.2020 s96(d1,d2,n5,1); if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 )break; n1=bz*r[2]/norm(2)*150/100.; break; case 125: /* СВ. Х 100*/ // c 06.2020 s96(d1,d2,n5,1); if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; n1=bz*r[2]/norm(2)*200/100.; break; case 197: /* СВ. Х 50*/ s96(d1,d2,n5,1); if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 )break; n1=bz*r[2]/norm(2)*50/100.; break; case 198: /* СВ. Х 100*/ s96(d1,d2,n5,1); if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; n1=bz*r[2]/norm(2)*100/100.; break; case 141: /* доплата за праздничные */ s96(d1,d2,n5,1); r[2]=r[2]+h[2]; /* учет для случая пересчета */ if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; n1=r[2]*n5*2; break; case 190: /* район.коэф-т до 3-х лет 289 */ sumvid("=тек",189.,0,r9); n1=r9*0.7; break; case 215: /* СУММА=БЗ */ if (n1==0.) n1=bz; break; case 20: /* */ /*БЗ - процент доплаты */ s96(d1,d2,n5,0); if ( (c=korrv(r,t,0,h,flagrow,jf)) != 1 ) break; if ( uprc!=NO_SCREEN ) { flagrow[jf][2]=1; zaprosd(scr04,windrow+1,0, "ПОД pаботника",7,r[2],n8,-500.,500.,0);} n9=n5*r[2]*bz/100.; n1=n9+n9*n8/100.; break; // конец описания алгоритмов пользователя // Пример вызова алгоритма пользователя. //case 4: // return UserAlg4(info,r); // case 712: // return UserAlg712(info,r); default: RetFlag=0; break; } if ( RetFlag ) { info.crow = crow, info.b3 = b3, info.kod = kod, info.ikod = ikod, info.kod_alg = kod_alg, info.n1 = n1, info.d1 = d1, info.d2 = d2, info.pos = pos, info.mkat = mkat, info.krabot = krabot, info.tip_s9600 = tip_s9600, info.flag_propusk0 = flag_propusk0, info.z1 = z1, info.z2 = z2, info.h[0] = h[0], info.h[1] = h[1], info.h[2] = h[2], info.h[3] = h[3], info.bz = bz; if (c<=-4096) c=1; info.c = c; } return RetFlag; } UserAlg4(&info,&r) { return SysAlg4(info,r); } UserAlg521 ( &info, &r ) // оплата простоев // алгоритм имеет 5 параметров // 1: РВ в днях - 1; РВ в часах - 2 // 2: РВ задается - 0; РВ берется из табеля по символам 'В' для простоя по // вине работодателя или 'Е' для простоя не по вине работодателя если // 5-м параметром не определен другой символ // 3: считать по тарифной ставке - 0; по среднему заработку - 1 // 4: коэффициент расчета простоя (не может быть меньше 2/3) // 5: символ для обозначения дня простоя в табеле работника { double Epsilon = 0.00001; int tip_rv=1; // 1 - РВ в днях; 2 - РВ в часах int where_rv=1; // 0 - РВ задается; 1 - РВ из табеля по символам 'В' int tip_ras=1; // 0- считать по тарифной ставке; 1- по среднему заработку // double koef_prost=2./3.; // коэффициент расчета простоя double koef_prost=0.6667; // коэффициент расчета простоя char SimvTab[2]; SimvTab[0]=SimvTab[1]='\0'; struct Struct_Alg Work; //значения параметров по умолчанию: Get_AlgWithParamEx(Work, info.ikod, "1,1,1,0,0"); // Work.Count_Par - число паpаметpов для кода алгоpитма //-- параметр 1 - РВ в днях - 0; РВ в часах - 1 int param=atoi(reinterpret_cast_to_string(Work.List_Par[0])); if ( param>=1 && param<=2 ) tip_rv=param; //-- параметр 2 - РВ задается - 0 или // РВ берется из табеля по симвалам 'В'- 1; по умолчанию - 0 param = atoi(reinterpret_cast_to_string(Work.List_Par[1])); if (param >= 0 && param <= 1) where_rv = param; //-- параметр 3 - простой считать по тарифной ставке - 0; // по среднему заработку - 1 param = atoi(reinterpret_cast_to_string(Work.List_Par[2])); if (param >= 0 && param <= 1) tip_ras = param; //-- параметр 4 - коэффициент расчета простоя (не менее 2/3) double paramf = atof(reinterpret_cast_to_string(Work.List_Par[3])); if ( paramf >= Epsilon ) koef_prost = paramf; //-- параметр 5 - символ для табеля // по умолчанию 'В' - простой по вине работодателя // 'Е' - простой не по вине работодателя SimvTab[0]= (tip_ras)?'В':'Е'; if ( Work.List_Par[4] && GetCharFromStr(reinterpret_cast_to_string(Work.List_Par[4]),0)>'0' ) { char Simv = GetCharFromStr(reinterpret_cast_to_string(Work.List_Par[4]),0); if ( Simv>' ' ) SimvTab[0] = Simv; } //--- вспомогательный вывод строки r[2]=r[2]-info.h[2]; // учет для случая пересчета char t[20]; indstr(scr04,mrasch,windrow,r,t,1); r[2]=r[2]+info.h[2]; // учет для случая пересчета if (where_rv==1 && uprc!=NO_SCREEN) { // Табель рассматриваем только той строки, что рассчитываем var ts = CreateObject("TempCommonSrc"); ts.TempCommonSrcInitial(CMN_SRC_INT_LS); SetCommonProp(CMN_SRC_INT_LS,GetPropOfCod(info.kod)); corcal(mrasch,3); } int day1 = info.z1, day2 = info.z2; double base_sum = 0.; if (tip_ras) // считаем по среднему заработку { var Dat=CreateObject("KDate"); var PoSredn = CreateObject("KCalcSredn"); if ( PoSredn.InitSredn(info.crow,info.kod_alg,Dat,uprc!=NO_SCREEN?2:0)==ESC ) return code_Break; var Nastr = PoSredn.GetNastr(); Nastr.SetNastr(TIP_RV,tip_rv); // - запись изменений в табель ЛС перед вызовом tabl_sredn s145(colc2,1); //--- подсчет среднего за единицу времени PoSredn.Calculate(0,2); // if (uprc==3) menuras(0); // перевывод меню расчета // Дни за которые простой считаем + базовая сумма от которой делаем расчет day1 = Nastr.GetDateSr().GetDay(), day2 = Nastr.GetDateEndSr().GetDay(); base_sum = PoSredn.SumSredn(); } else // считаем по тарифной ставке { double stavka=0.,r9=0.; if (tip_rv==1) // окладники - ставка в месяц s97(info.d1,info.d2,stavka,r9,0); else // тарифники - ставка в час s96(info.d1,info.d2,stavka,3); if (nabs(stavka)0) return GetBase(rowkod[0]); return 0.; } UserAlg279(&info,&r) { // выбор РВ и БЗ по виду 296 double rv=0; rvvid("0",196,0,rv); double bz=0.; int row = poisk_row(196,0,data,0); if ( row!=-1 ) bz=GetBase(row); // выбор РВ и БЗ по виду 104 double rv1=0; rvvid("0",4,0,rv1); var curProp = GetCurPropCountLS(); double bz1=GetBzCode(4,curProp,mrasch); double r9; s1001("н",info.d1,info.d2,0,34,r9,4); infolist.add_record("Сумма по 35 столбцу",r9); if (rv>0 & bz>0) { r[2]=info.bz; // учет для случая пересчета double n2; n2=norm(2); char t[20]; if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1) return code_ReturnCode; infolist.add_record("РВ 296",rv); infolist.add_record("НРВ",norm(2)); infolist.add_record("БЗ 296",bz); infolist.add_record("Процент",info.bz); if(rv<=n2) info.n1=((((bz/n2)*rv)+r9)*info.bz)/100.; else { rv=norm(2); info.n1=((((bz/n2)*rv)+r9)*info.bz)/100.; } } if (rv1>0 & bz1>0) { r[2]=info.bz; // учет для случая пересчета double n3; n3=norm(1); char t[20]; if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1) return code_ReturnCode; infolist.add_record("РВ 104",rv1); infolist.add_record("НРВ",norm(1)); infolist.add_record("БЗ 104",bz1); infolist.add_record("Процент",info.bz); if(rv1<=n3) info.n1=((((bz1/n3)*rv1)+r9)*info.bz)/100.; // info.n1=(r9*info.bz)/100.; else { rv1=norm(1); info.n1=((((bz1/n3)*rv1)+r9)*info.bz)/100.; // info.n1=(r9*info.bz)/100.; } } infolist.add_record("результат",info.n1); return code_Break; } /* UserAlg279(&info,&r) { // выбор РВ и БЗ по виду 296 double rv=0; rvvid("0",196,0,rv); double bz=0.; int row = poisk_row(196,0,data,0); if ( row!=-1 ) { bz=GetBase(row); } if (rv>0 & bz>0) { r[2]=info.bz; // учет для случая пересчета double n2; n2=norm(2); char t[20]; if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1) return code_ReturnCode; infolist.add_record("РВ 296",rv); infolist.add_record("НРВ",norm(2)); infolist.add_record("БЗ 296",bz); infolist.add_record("Процент",info.bz); double r9; s1001("н",info.d1,info.d2,0,34,r9,4); infolist.add_record("Сумма по 35 столбцу",r9); if(rv<=n2) info.n1=((((bz/n2)*rv)+r9)*info.bz)/100.; else { rv=norm(2); info.n1=((((bz/n2)*rv)+r9)*info.bz)/100.; } } infolist.add_record("результат",info.n1); return code_Break; } */ UserAlg590(&info,&r) { // выбор РВ и БЗ по виду 296 double rv=0; rvvid("0",196,0,rv); double bz=0.; int row = poisk_row(196,0,data,0); if ( row!=-1 ) { bz=GetBase(row); } // выбор РВ и БЗ по виду 104 double rv1=0; rvvid("0",4,0,rv1); double bz1=0.; int row1 = poisk_row(4,0,data,0); if ( row1!=-1 ) { bz1=GetBase(row1); } if (rv>0 & bz>0) { r[2]=info.bz; // учет для случая пересчета double n2; n2=norm(2); char t[20]; if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1) return code_ReturnCode; infolist.add_record("РВ 296",rv); infolist.add_record("НРВ",norm(2)); infolist.add_record("БЗ 296",bz); infolist.add_record("Процент",info.bz); if(rv<=n2) info.n1=((bz/n2)*rv*info.bz)/100.; else { rv=norm(2); info.n1=((bz/n2)*rv*info.bz)/100.; } } if (rv1>0 & bz1>0) { r[2]=info.bz; // учет для случая пересчета double n3; n3=norm(1); char t[20]; if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1) return code_ReturnCode; infolist.add_record("РВ 104",rv1); infolist.add_record("НРВ",norm(1)); infolist.add_record("БЗ 104",bz1); infolist.add_record("Процент",info.bz); if(rv1<=n3) info.n1=((bz1/n3)*rv1*info.bz)/100.; else { rv1=norm(1); info.n1=((bz1/n3)*rv1*info.bz)/100.; } } infolist.add_record("результат",info.n1); return code_Break; } UserAlg596(&info,&r)/* Северная надбавка по "3" в столбце 11*/ { r[2] = DefineSevS(mrasch, info.d1, info.d2)*100.; double r9; /* if(info.kod_alg == 97 || info.kod_alg == 187) // ФЗП s1001simv("1","н",info.d1,info.d2,0,ST_RK,r9,2,0); */ if(info.kod_alg == 596) // СН по "3" s1001simv("3","н",info.d1,info.d2,0,ST_RK,r9,2,0); char t[20]; if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1) return code_ReturnCode; info.n1=r9*r[2]/100.; if(FL_V_ALG && uprc != NO_SCREEN) { infolist.add_record("Столбец для выборки",ST_RK+1); infolist.add_record("Сумма",r9); infolist.add_record("Северный процент",r[2]); infolist.add_record("Результат",info.n1); } return code_Break; } UserAlg598(&info,&r) { // при изменениях измените и в s100ras_TFunc() var StrSimv; // символы для выборки if(info.kod_alg == 598) StrSimv="3"; // ФЗП // 08.11.95 /* else StrSimv="2"; // ФМП // 08.11.95 */ double r9; s1001simv(StrSimv,"н",info.d1,info.d2,0,ST_RK,r9,2,0); if ( nabs(info.bz)<0.000001 ) info.bz = DefineRk(data+countday/100.,0)*100.; info.n1=r9*info.bz/100.; if(FL_V_ALG && uprc != NO_SCREEN) { infolist.add_record("Столбец для выборки",ST_RK+1); infolist.add_record("Символ выборки",StrSimv); infolist.add_record("Выборка",r9); infolist.add_record("Процент",info.bz); infolist.add_record("Результат",info.n1); } return code_MDefault; } UserAlg597(&info,&r)/* Северная надбавка по "3" в столбце 11*/ { r[2] = DefineSevS(mrasch, info.d1, info.d2)*100.; double r9; /* if(info.kod_alg == 97 || info.kod_alg == 187) // ФЗП s1001simv("1","н",info.d1,info.d2,0,ST_RK,r9,2,0); */ if(info.kod_alg == 597) // СН по "4" s1001simv("4","н",info.d1,info.d2,0,ST_RK,r9,2,0); char t[20]; if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1) return code_ReturnCode; info.n1=r9*r[2]/100.; if(FL_V_ALG && uprc != NO_SCREEN) { infolist.add_record("Столбец для выборки",ST_RK+1); infolist.add_record("Сумма",r9); infolist.add_record("Северный процент",r[2]); infolist.add_record("Результат",info.n1); } return code_Break; } UserAlg599(&info,&r) { // при изменениях измените и в s100ras_TFunc() var StrSimv; // символы для выборки if(info.kod_alg == 599) StrSimv="4"; // ФЗП // 08.11.95 /* else StrSimv="2"; // ФМП // 08.11.95 */ double r9; s1001simv(StrSimv,"н",info.d1,info.d2,0,ST_RK,r9,2,0); if ( nabs(info.bz)<0.000001 ) info.bz = DefineRk(data+countday/100.,0)*100.; info.n1=r9*info.bz/100.; if(FL_V_ALG && uprc != NO_SCREEN) { infolist.add_record("Столбец для выборки",ST_RK+1); infolist.add_record("Символ выборки",StrSimv); infolist.add_record("Выборка",r9); infolist.add_record("Процент",info.bz); infolist.add_record("Результат",info.n1); } return code_MDefault; } UserAlg712(&info,&r) { struct Struct_Alg Work; var mes1=0; var mes2=0; var stolbec=ST_MPREM+1; // символы для выборки // по умолчанию - по всем ненулевым char StrSimv[51]; sprintf(StrSimv,"*"); Get_AlgWithParam(Work,info.ikod); // 31.01.1995 // Work.Count_Par - число паpаметpов для кода алгоpитма //-- параметр 1 - столбец таблицы входимости if(Work.Count_Par > 0) { var i=atoi(reinterpret_cast_to_string(Work.List_Par[0])); if( i > 0 && i <= 99 ) stolbec=i; } //-- параметр 2 - месяц начала выборки (относительно расчетного) // (по умолчанию берется за один текущий месяц) if(Work.Count_Par > 1) { var i=atoi(reinterpret_cast_to_string(Work.List_Par[1])); if( i >= (- PMES) && i <= BMES ) mes1=mes2=i; } //-- параметр 3 - месяц конца выборки (относительно расчетного) // (по умолчанию берется за один месяц, указанный параметром 2) if(Work.Count_Par > 2) { var i=atoi(reinterpret_cast_to_string(Work.List_Par[2])); if( i >= mes1 && i <= BMES ) mes2=i; } //-- параметр 4 - символы выборки if(Work.Count_Par > 3) sprintf(StrSimv,"%.50s",reinterpret_cast_to_string(Work.List_Par[3])); var n5=0.; for(var m=mes1; m<=mes2; m++) { double r9; s1001simv(StrSimv,"*",info.d1,info.d2,m,stolbec-1,r9,4,0); n5+=r9; } // Заполним таблицу уже найденными значениями if(FL_V_ALG && uprc != NO_SCREEN) { infolist.add_record("Месяц начала выборки",mes1); infolist.add_record("Месяц окончания выборки",mes2); infolist.add_record("Столбец выборки",stolbec); infolist.add_record("Символы выборки",StrSimv); infolist.add_record("Сумма выборки",n5); } // А теперь пройдемся по полю кадровой части "procPREM" // И возьмем оттуда все значения процентов, действовавшие // в рассчитываемом месяце info.n1=0.; // обнулили итоговую сумму // Дата конца действия очередного значения процента // В самом начале она равна последнему дню месяца. var DateEnd = CreateObject("KDate"); DateEnd.SetDateII(countday,mrasch); // Найдем дату начала действия очередного значения процента char StrD[21]; GetKchDate("procPREM",StrD,10,DateEnd); var Date=CreateObject("KDate"); Date.SetDate(static_cast_to_string(StrD)); // Если вдруг дата начала пустая или выходит за рамки расчетного // месяца, то установим ее равной первому числу расчетного месяца if ( Date.IsEqI(INVALID_DATE_VALUE) || Date.GetAbs()