0
На рассмотрении

Алгоритм ночных\праздничных от МРОТ

Татьяна Батурина 4 года назад в Расчеты начислений и удержаний / Алгоритмы обновлен 4 года назад 5

Добрый день!

Помогите пожалуйста с реализацией алгоритма для расчета Ночных\Праздничных от суммы S1 =>МРОТ

БЗ

НРВ (168)

РВ

Сумма

Оклад (час)

5000,00

168

160

4761,90

Нагрузка

100%

4761,90

S1

Оклад+Нагрузка

S1 = 9523,80

S2 = Ночные

Если S1<МРОТ (12130,00), то S2=МРОТ/НРВ * РВ (ночных)

Если S1>=МРОТ (12130,00), то S2=S1/НРВ * РВ (ночных)

считаем пока без сравнения с МРОТ.

+1
На рассмотрении

Добрый день.

Пример алгоритма:

USALG.S

UserAlg444(&info,&r)
{
  struct Struct_Alg Work;
  Get_AlgWithParamEx(Work, info.ikod, "25,86,0");
  //-- параметр 1 - столбец таблицы входимости (по умолчанию 25) 
  int stolbec =25;
  int param=atoi(reinterpret_cast_to_string(Work.List_Par[0]));
  if ( param>0 && param<=99 ) stolbec=param;

   //-- параметр 2 - Номер сетки для МРОТ (по умолчанию 86) 
   int numberSet=86;
   param=atoi(reinterpret_cast_to_string(Work.List_Par[1]));
   if ( param>0 ) numberSet = param;

   //-- параметр 3 - Номер строки в сетке (по умолчанию 0) 
   int rowSet=0;
   param=atoi(reinterpret_cast_to_string(Work.List_Par[2]));
   if ( param > 0 && param <= 999) rowSet=param;
   
  //сумма выборки
  double summ=0.;
  s100("н",0,stolbec-1,summ);
  
  //МРОТ
  double mrot=0.;
  int CodOrg = GetOrgForPodr(GetPodrOfCod(info.kod));
  if (Value_For_Table_CodO(numberSet, CodOrg, rowSet, data, mrot) == EOF) mrot=info.bz;  
  
  char t[20];
  if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1)
    return code_ReturnCode;
      
 info.n1 = (summ < mrot) ?
            mrot*r[2]/norm(2):
            summ*r[2]/norm(2);
  // Заполним таблицу уже найденными значениями
  if(FL_V_ALG && uprc != NO_SCREEN)
  {
    infolist.add_record("Столбец выборки",stolbec);
    infolist.add_record("Сумма выборки",summ);
    infolist.add_record("МРОТ",mrot);
    infolist.add_record("НРВ",norm(2));
    infolist.add_record("ночные часы",r[2]);
    infolist.add_record("Результат",info.n1);
  }
  return code_Break;  
}

Спасибо большое. В процессе внедрения выяснилось:
Если S1<МРОТ, то S2 (ночных) =  МРОТ/НРВ * БЗ(ночных,%) * РВ (ночных);
Если S1>МРОТ, то S2 (ночных) = S1/РВ (106-Оклад/час) *  БЗ(ночных,%) * РВ (ночных)

как определить РВ по 106:Оклад/час

info.n1 = (summ < mrot) ?
mrot*info.bz/100.*r[2]/norm(2):
summ*info.bz/100.*r[2]/norm(2); -  norm(2) заменить на РВ (106-вида)

+1

Добрый день!

РВ по 106 виду можно определить с помощью, например, ф-ции rvvid()

rvvid("*тек",6.,0,n2);

Переменную n2 надо выше описать, как 

double n2;

Спасибо большое, получилось.

Получилось так:

UserAlg444(&info,&r)

{

struct Struct_Alg Work;

Get_AlgWithParamEx(Work, info.ikod, "25,86,0");

//-- параметр 1 - столбец таблицы входимости (по умолчанию 25)

int stolbec =25;

int param=atoi(reinterpret_cast_to_string(Work.List_Par[0]));

if ( param>0 && param<=99 ) stolbec=param;

//-- параметр 2 - Номер сетки для МРОТ (по умолчанию 86)

int numberSet=86;

param=atoi(reinterpret_cast_to_string(Work.List_Par[1]));

if ( param>0 ) numberSet = param;

//-- параметр 3 - Номер строки в сетке (по умолчанию 0)

int rowSet=0;

param=atoi(reinterpret_cast_to_string(Work.List_Par[2]));

if ( param > 0 && param <= 999) rowSet=param;

//сумма выборки

double summ=0.;

s100("н",0,stolbec-1,summ);

//определение РВ по 106 виду - Оклад/час

double n2;

rvvid("*тек",6.,0,n2);

//МРОТ

double mrot=0.;

int CodOrg = GetOrgForPodr(GetPodrOfCod(info.kod));

if (Value_For_Table_CodO(numberSet, CodOrg, rowSet, data, mrot) == EOF) mrot=info.bz;

char t[20];

if((info.c=korrv(r,t,0,info.h,flagrow,jf)) != 1)

return code_ReturnCode;

info.n1 = (summ < mrot) ?

mrot*info.bz/100.*r[2]/norm(2):

summ*info.bz/100.*r[2]/n2;

// Заполним таблицу уже найденными значениями

if(FL_V_ALG && uprc != NO_SCREEN)

{

infolist.add_record("Столбец выборки",stolbec);

infolist.add_record("Сумма выборки",summ);

infolist.add_record("МРОТ",mrot);

infolist.add_record("НРВ",norm(2));

infolist.add_record("РВ (106)",n2);

infolist.add_record("БЗ праздничных",info.bz);

infolist.add_record("Праздничные часы",r[2]);

infolist.add_record("Результат",info.n1);

}

return code_Break;

}

Сервис поддержки клиентов работает на платформе UserEcho