0
Отвечен

Как автоматически определять праздничные дни при расчёте за месяц

Анатолий Русин 5 лет назад в Расчеты начислений и удержаний / Алгоритмы обновлен Гашков Николай (Эксперт) 5 лет назад 2

Добрый день!

В организации рассчитывается заработная плата сторожа.

График приходит автоматически из КП.

Image 2932

12.06.2019 - праздничный день.

Нужно, чтобы при расчёте за месяц сотруднику начислялись праздничные по 128-му коду. Алгоритм представлен ниже:

//======================= Расчёт праздничных (РВ - из табеля) ==================

case 928:

{ int col = 33; // столбец для расчета нормативного заработка
var D = CreateObject("KDate");
D.SetDateII(countday,mrasch);
rwlsbuf(1);

if ( ras_normzar(col-1,"1",5,4,n1,D)==ESC )
n1 = 0.;

double nz=n1; // нормативный заработок
double sch = n1 / norm(2); // ставка в час
skoljko(r[2],data,info.z1,info.z2,"В",calm,cht); // количество выходных часов по символам "В"
n1 = sch*r[2];//*info.bz/100; // сумма выходных

if(FL_V_ALG && uprc != NO_SCREEN)
{

infolist.add_record("Столбец выборки",col);
infolist.add_record("Нормативный заработок",nz);
infolist.add_record("Нормативные часы",norm(2));
infolist.add_record("Ставка в час", sch);
infolist.add_record("Праздничные часы",r[2]);
infolist.add_record("Процент выплаты",info.bz);
infolist.add_record("Результат",n1);

}

break;
},

Проблема в том, что из КП табель по этому сотруднику за 12-е число приходит с обычной "Р"-кой. Поскольку под сотрудника настроен сменный график, для него этот день является рабочим.

В нормативном календаре 

Image 2936


12.06.2019 подсвечивается, как праздничный. Подскажите, пожалуйста, можно ли внутри алгоритма проверять, является ли день праздничным, и если да, менять символ "Р" на "В", чтобы приведённый выше алгоритм правильно отрабатывал?

Script

Ответ

Ответ
На рассмотрении

Добрый день.

Можете для примера посмотреть ф-цию 

CountTabelNormCalendDay(absm, _SimvTabel, _SimvNorm, bHoliday, &Hours )
   string Holidays = ListHolidays(absm);
   var razb = CreateObject("ParamFuncRW");
   razb.IInitial(Holidays,",",32);
   short HolidayDay[32];
   for ( int i=0; i< razb.Count(); ++i )
   {
      HolidayDay[i]=atoi(razb.Get(i));
   }
   
   for ( int day=1; day<=countday; day++ )
   {
      int pos = poisk1(day,HolidayDay,razb.Count(),0);
      if (pos!=EOF)
      //праздничный день

Для замены символа табеля используйте 

zamena_simv_v_tab
Ответ
На рассмотрении

Добрый день.

Можете для примера посмотреть ф-цию 

CountTabelNormCalendDay(absm, _SimvTabel, _SimvNorm, bHoliday, &Hours )
   string Holidays = ListHolidays(absm);
   var razb = CreateObject("ParamFuncRW");
   razb.IInitial(Holidays,",",32);
   short HolidayDay[32];
   for ( int i=0; i< razb.Count(); ++i )
   {
      HolidayDay[i]=atoi(razb.Get(i));
   }
   
   for ( int day=1; day<=countday; day++ )
   {
      int pos = poisk1(day,HolidayDay,razb.Count(),0);
      if (pos!=EOF)
      //праздничный день

Для замены символа табеля используйте 

zamena_simv_v_tab

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