AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 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.
Старый 04.06.2007, 15:30   #2  
SerAl is offline
SerAl
Участник
 
163 / 44 (2) +++
Регистрация: 24.06.2004
Адрес: г. Москва
Добрый день.

Лучше исправить следующим образом.
Вместо: 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 is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
У нас сотрудник просто принят на работу не с начала месяца. Неявок в том месяце не было.
Так что Неявки тут не причем, хотя и такая группа времен у нас есть.
А что менять текущее рабочее нельзя, ну это итак понятно.

Последний раз редактировалось Arahnid; 04.06.2007 в 17:56.
Старый 04.06.2007, 17:56   #4  
SerAl is offline
SerAl
Участник
 
163 / 44 (2) +++
Регистрация: 24.06.2004
Адрес: г. Москва
А что у Вас указано в поле "Неявки" на закладке "Средний заработок" в общих настройках больничных листов?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Зарплата. Расчет доплаты за полмесяца??? nicko DAX: Функционал 18 28.05.2009 13:54
Зарплата: расчет среднего заработка для Отпусков Arahnid DAX: Функционал 3 06.12.2007 19:09
Неправильный расчет отпускных листов Artild DAX: Функционал 1 14.07.2003 11:02
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Кто нибудь писал расчет кол-ва дней для выплаты компенсации за отпуск ? Dmitryus DAX: Программирование 0 18.04.2003 10:05

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:20.