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 --;
}
workStartDate - он не может определить. И он зацикливается.
А почему не может определить тоже ясно
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 заложена RPayHistory.StartDate < _startDate. И получается по существу поиск приказа дата начала приема меньше даты curDateLocal (а она и есть дата приема).
Ставлю RPayHistory.StartDate <= _startDate И все становится хорошо.