case 897: /* Доплата до МРОТ */ { //значения параметров по умолчанию: 25,86,0,0,0,0 Struct_Alg Work; Get_AlgWithParam(&Work,ikod); //-- параметр 1 - столбец таблицы входимости (по умолчанию 25) int stolbec =25; if (Work.Count_Par>0) { int i=atoi(Work.List_Par[0]); if ( i>0 && i<=99 ) stolbec=i; } //-- параметр 2 - Номер сетки для МРОТ (по умолчанию 86) int numberSet=86; if (Work.Count_Par>1) { int i=atoi(Work.List_Par[1]); if ( i>0 ) numberSet = i; } //-- параметр 3 - Номер строки в сетке (по умолчанию 0) int rowSet=0; if(Work.Count_Par > 2) { int i=atoi(Work.List_Par[2]); if ( i > 0 && i <= 999) rowSet=i; } //-- параметр 4 - Тип ФРВ: // 0 - в часах (по умолчанию) // 1 - в днях bool bHours=true; if(Work.Count_Par > 3) { bHours =atoi(Work.List_Par[3])==0; } int idxNorm = bHours?2:1; //-- параметр 5 - Увеличить МРОТ на РК и Северные (постановление КС от 07.12.2017 № 38-П) // 0 - доплата до "чистого МРОТ" (по умолчанию) // 1 - доплата до "МРОТ*(РК + Северные)" bool bUseRk=false; if(Work.Count_Par > 4) { bUseRk =atoi(Work.List_Par[4])!=0; } //-- параметр 6 - Особенности расчета доплаты (флаги): // 0x01 - не рассчитывать доплату, если ФРВ/НРВ<1 // 0x02 - Ограничить ФРВ/НРВ единицей // 0x04 - вычислять ФРВ/НРВ через s98() bool calcOnlyFullMonth=false; bool limitFrv=false; bool useS98=false; bool fillTabel=true; if(Work.Count_Par > 5) { int Flag=atoi(Work.List_Par[5]); calcOnlyFullMonth=(Flag & 0x01)!=0; limitFrv =(Flag & 0x02)!=0; useS98 =(Flag & 0x04)!=0; fillTabel =!(Flag & 0x08)!=0; } if(fillTabel) worktime(crow,b3,0); /* заполнение рабоч.дней в табеле */ //ФРВ if (!useS98) { if (nkalend==knorm) { if (!bHours) r[2]=dney_v_tab(rsimv,calm,z1,z2); else skoljko(&r[2],data_mrasch,z1,z2,rsimv,calm,0); } if ((c = korrv(r, t, 0, h, flagrow, &jf)) != 1) goto return_c; } double frv_nrv=r[2]/norm(idxNorm); if ( useS98 ) s98(0,&frv_nrv); roundd(frv_nrv, 2, &frv_nrv); //сумма выборки double summ=0.; s100("н",0,stolbec-1,&summ); //сумма выборки не может быть отрицательной if(summ<-Epsilon) summ=0.; // Коэффициент занятости из КЧ double k_employ=1.; char strTemp[11]; KDate D(countday,mrasch); GetKchValue("k_employ",strTemp,10,D); if (Str_Cmp(strTemp,""," ")!=0) k_employ=atof(strTemp); //"чистый" МРОТ double mrot=0.; if (Value_For_Table_Cod(numberSet, CodOrg, rowSet, data_mrasch, &mrot) == EOF) mrot=bz; if ( limitFrv && frv_nrv>1+Epsilon ) frv_nrv=1.; //МРОТ для расчета double mrot_frv_nrv=mrot*k_employ*frv_nrv; double rk_sev = 0.; if( bUseRk ) { rk_sev= DefineRkFull(data_mrasch+countday/100.); //2018.03.20 - процент северных определяем только в том случае, если в ЛС нашли действующую строку вида "северной надбавки" //вид является "северной надбавкой", если у его алгоритм один из: "96,97,186,187" if (FindSevNu(mrasch)) rk_sev = rk_sev + DefineSev(mrasch, 0., 0.); mrot_frv_nrv*=(1+rk_sev); } roundd(mrot_frv_nrv, 2, &mrot_frv_nrv); n1 = ( summ>mrot_frv_nrv || calcOnlyFullMonth && frv_nrv + Epsilon<1. ) ? 0. : mrot_frv_nrv-summ; if(FL_V_ALG&&uprc!=NO_SCREEN) { if( !useS98 ) { infolist.add_record("ФРВ",r[2]); infolist.add_record("НРВ",norm(idxNorm)); } else infolist.add_record("Использовать s98()","true"); if ( limitFrv ) infolist.add_record("Ограничить ФРВ/НРВ", "true"); infolist.add_record("ФРВ/НРВ",frv_nrv); infolist.add_record("Столбец выборки",stolbec); infolist.add_record("Сумма выборки",summ); infolist.add_record("-----------------------","------------------------------"); infolist.add_record("Номер сетки для МРОТ",numberSet); infolist.add_record("Номер строки в сетке",rowSet); infolist.add_record("МРОТ",mrot); infolist.add_record("Коэфф.занятости",k_employ); if (bUseRk) infolist.add_record("% РК и Северных", rk_sev*100.); infolist.add_record("МРОТ для расчета",mrot_frv_nrv); infolist.add_record("-----------------------","------------------------------"); if (calcOnlyFullMonth && frv_nrv + Epsilon<1. ) infolist.add_record("Доплату не рассчитываем", "frv_nrv<1."); infolist.add_record("Доплата",n1); } break; }