0
Отвечен

Функция выборки рабочего по нормативному календарю

AC! 2 года назад в Прочее обновлен Шинкарев Вячеслав (Менеджер разработки) 2 года назад 6

Подскажите, пожалуйста, как выбрать норму рабочего времени в днях/в часах по нормативному календарю за запрашиваемый период?

Script

Ответ

Ответ
Отвечен

Такая функция поможет:

UsrGetNormPeriod(what,&D1,&D2,numcalend)
{
   int am1 = KDateFromStr(D1).GetAbs();
   int am2 = KDateFromStr(D2).GetAbs();
   int tmrasch = mrasch;
   int tmp = nkalend;
   if ( nkalend!=numcalend && numcalend>0 )
      rwnorma(numcalend,0);
   double Total = 0.;
   for (int am=am1; am<=am2; ++am )
   {
      mrasch=am;
      s118();
      Total += norm(what);
   }
   mrasch=tmrasch;
   if ( nkalend!=tmp )
   {
      rwnorma(tmp,0);
      s118();
   }  
   return Total;
}

Пример вызова: 

return UsrGetNormPeriod(1,"01.01.2018","31.12.2018",2);


ХОРОШО, МНЕ ПОНРАВИЛОСЬ
Оценка удовлетворенности от AC! 2 года назад
На рассмотрении

Надо написать что то вроде:

int cntDays=CountDaySimv("01.01.2018",""20.02.2018","2",0,1);

CountDaySimv(DateBeg,DateEnd,StrSimv,Tip,bNorm);
/////////////////////////////////////////////////////////////////////////
// Подсчитывает количество дней помеченных символами StrSimv в табеле
// работника между датами [DateBeg,DateEnd]
// Отличия от функции dney_v_tab в том что дата начала и конца периода
// могут находится в разных месяцах!
// Tip = 0 - подсчитывает точное количество дней
// 1 - отвечает на вопрос есть ли хотя бы один!
// 2 - отвечает на вопрос есть ли хотя бы один, но при этом просмотр
// ведет с даты конца.
// В том случае, если определяется "есть хотя бы один", возвращается кол-во дней
// до этого "одного" (включая дату от которой велась проверка!).
// bNorm - смотрим не табель, а нормативный график

А можно получить значения из итоговых клеток дней/часов нормативного календаря?

GetNorma(what,mAbs); 


где what:

  • 0 – нopмa paбoчих днeй зa первую пoлoвину месяцa
  • 1 – нopмa paбoчиx днeй месяца
  • 2 – нopмa paбoчиx чacoв месяца.

Что "ваяете", если не секрет?

Не секрет. Проверяющие органы требуют отчет, чтобы было видно за период (квартал/полугодие и т.д.) количество дней/часов по графику работника. Количество часов в колонка "Всего р.дней/часов" по некоторым графикам не заполняется "внаглую"- используется для разрывных графиков, где каждый день отмечен, как рабочий.


Т.е. за квартал/год просто не получится?


Отвечен

Почему не получится? Цикл по месяцам нужного периода, суммируем месячные значения и вуаля!

Ответ
Отвечен

Такая функция поможет:

UsrGetNormPeriod(what,&D1,&D2,numcalend)
{
   int am1 = KDateFromStr(D1).GetAbs();
   int am2 = KDateFromStr(D2).GetAbs();
   int tmrasch = mrasch;
   int tmp = nkalend;
   if ( nkalend!=numcalend && numcalend>0 )
      rwnorma(numcalend,0);
   double Total = 0.;
   for (int am=am1; am<=am2; ++am )
   {
      mrasch=am;
      s118();
      Total += norm(what);
   }
   mrasch=tmrasch;
   if ( nkalend!=tmp )
   {
      rwnorma(tmp,0);
      s118();
   }  
   return Total;
}

Пример вызова: 

return UsrGetNormPeriod(1,"01.01.2018","31.12.2018",2);


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