Показать сообщение отдельно
Старый 04.06.2007, 14:32   #1  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Зарплата: расчет дней б/л
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 И все становится хорошо.

Последний раз редактировалось Arahnid; 04.06.2007 в 14:35.