04.06.2007, 14:32 | #1 |
Участник
|
Зарплата: расчет дней б/л
23101 обновление
Сотрудник принят в середине месяца 02/01/07. В классе RPayAverageEarnEngine_SickList есть метод calendarDaysGroup. В нем идет просчет дней для среднего заработка. Февраль - Апрель 2007 посчитался нормальный, а вот январь нет. Там зацикливание происходит в методе, потому что X++: curDateLocal = curDate; workStartDate = RPayHistory::findLastOperation(_emplId, RHRMJournalType::Receive, curDateLocal).StartDate; while (curDateLocal >= workStartDate) { nonAppearanceTime = hoursInDay(curDateLocal, true); if (nonAppearanceTime) { return UnknownNoYes::No; } else { appearanceTime = hoursInDay(curDateLocal, false); if (appearanceTime) { return UnknownNoYes::Yes; } } curDateLocal --; } А почему не может определить тоже ясно X++: static RPayHistory findLastOperation(EmplId _emplId, RHRMJournalType _operationType, StartDate _startDate = maxDate()) { RPayHistory RPayHistory; ; if (_emplId) { select firstonly RPayHistory order StartDate desc, TransTime desc where RPayHistory.number == _emplId && RPayHistory.operationType == _operationType && RPayHistory.StartDate < _startDate; } return RPayHistory; } Ставлю RPayHistory.StartDate <= _startDate И все становится хорошо. Последний раз редактировалось Arahnid; 04.06.2007 в 14:35. |
|
04.06.2007, 15:30 | #2 |
Участник
|
Добрый день.
Лучше исправить следующим образом. Вместо: workStartDate = RPayHistory::findLastOperation(_emplId, RHRMJournalType::Receive, curDateLocal).StartDate; Написать : workStartDate = RPayHistory::findLastOperation(_emplId, RHRMJournalType::Receive, curDateLocal + 1).StartDate; А саму функцию findLastOperation() лучше не переопределять, так как она используется в и в других местах и условие RPayHistory.StartDate < _startDate; может быть критичным. И еще такой вопрос. Как у Вас настроена группа времени для неявок (Группа указывается в «Общих настройках больничных листов», закладка «Средний заработок», поле «Неявки»). Так как если она у Вас настроена и в табеле есть информация по данному сотруднику, то выход из цикла должен произойти раньше того момента, когда переменная curDateLocal примет значение 01/01/1900. |
|
|
За это сообщение автора поблагодарили: Prof (2). |
04.06.2007, 17:51 | #3 |
Участник
|
У нас сотрудник просто принят на работу не с начала месяца. Неявок в том месяце не было.
Так что Неявки тут не причем, хотя и такая группа времен у нас есть. А что менять текущее рабочее нельзя, ну это итак понятно. Последний раз редактировалось Arahnid; 04.06.2007 в 17:56. |
|
04.06.2007, 17:56 | #4 |
Участник
|
А что у Вас указано в поле "Неявки" на закладке "Средний заработок" в общих настройках больничных листов?
|
|