Функция выборки рабочего по нормативному календарю
Подскажите, пожалуйста, как выбрать норму рабочего времени в днях/в часах по нормативному календарю за запрашиваемый период?
Ответ
Надо написать что то вроде:
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
Такая функция поможет:
Пример вызова: