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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.03.2012, 21:51   #1  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Ax9 Зарплата Расчет Фондов
Переносили данные из 3.0. По таким сотрудникам Фонды считаются.
Принимаем нового сотрудника и не считается.

Смотрю вообще по каким сотрудникам считаются фонды в классе RpayTaxSumCalc.
Там есть метод updateFundPeriod.

X++:
while select rpayFundEmplSumEmpl
            group by EmplId
            where (rpayFundEmplSumEmpl.EmplId    == _emplId || (_emplId ? false : true))
    {
        if (! _emplId)
        {
            operationProgress.setText("@HRP372" + rpayFundEmplSumEmpl.EmplId);
            operationProgress.incCount();
        }

        for (currentPeriod = _payPeriod; currentPeriod <= dateEndYr(_payPeriod); currentPeriod = endmth(nextmth(currentPeriod)))
        {
            this.runFund(currentPeriod,rpayFundEmplSumEmpl.EmplId);
        }

        this.createCorrection(rpayFundEmplSumEmpl.EmplId);
        this.updateSumYearCompensation(year(_payPeriod), rpayFundEmplSumEmpl.EmplId);
    }
согласно коду вижу, что фонды считаются только по тем сотрдуникам, по которым они уже считались за прошлые периоды, т.к., насколько я увидела, только такие сотрудники попадают в таблицу rpayFundEmplSumEmpl.

Не могу понять, а как же вновь принятые. У них же нет записи в rpayFundEmplSumEmpl. В какой момент по ним должны считаться фонды?
Старый 03.03.2012, 01:12   #2  
rusk is offline
rusk
Участник
 
17 / 16 (1) ++
Регистрация: 26.12.2001
Адрес: г. Невинномысск
Да, есть такое дело... Сами заменили на следующее:
X++:
...
    EmplTable            emplTable;
    ;
...
    while select EmplId from emplTable
        where emplTable.PayMainEmplId_Ru == emplTable.EmplId &&
             (emplTable.EmplId           == _emplId || (_emplId ? false : true))
    {
        if (! _emplId)
        {
            operationProgress.setText("@HRP372" + emplTable.EmplId);
            operationProgress.incCount();
        }

        for (currentPeriod = _payPeriod; currentPeriod <= endmth(openPeriod); currentPeriod = endmth(nextmth(currentPeriod)))
        {
            this.runFund(currentPeriod,emplTable.EmplId);
        }

        this.createCorrection(emplTable.EmplId);
        this.updateSumYearCompensation(year(_payPeriod), emplTable.EmplId);
    }
Опять же не понятно зачем в оригинале делают пересчет до конца года: currentPeriod <= dateEndYr(_payPeriod);
За это сообщение автора поблагодарили: gl00mie (5).
Старый 03.03.2012, 01:59   #3  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Спасибо, хотела заменить на таблицу сотрудников, но сомневалась, т.к. странно, что такое неработающее есть в типовом функционале.

А по поводу endmth(openPeriod) спасибо, а то получалось, что если перешли в след период. Там посчитали зарплату. Вернулись назад, пересчитали фонды и они учли в текущем открытом периоде в базе фонда все будущее начисления.
Старый 03.03.2012, 22:44   #4  
Diman is offline
Diman
Участник
Сотрудники Microsoft Dynamics
 
166 / 35 (2) +++
Регистрация: 27.06.2003
Адрес: Москва
Цитата:
Сообщение от Arahnid Посмотреть сообщение
Переносили данные из 3.0. По таким сотрудникам Фонды считаются.
Принимаем нового сотрудника и не считается.

Смотрю вообще по каким сотрудникам считаются фонды в классе RpayTaxSumCalc.
Там есть метод updateFundPeriod.

X++:
while select rpayFundEmplSumEmpl
            group by EmplId
            where (rpayFundEmplSumEmpl.EmplId    == _emplId || (_emplId ? false : true))
    {
        if (! _emplId)
        {
            operationProgress.setText("@HRP372" + rpayFundEmplSumEmpl.EmplId);
            operationProgress.incCount();
        }

        for (currentPeriod = _payPeriod; currentPeriod <= dateEndYr(_payPeriod); currentPeriod = endmth(nextmth(currentPeriod)))
        {
            this.runFund(currentPeriod,rpayFundEmplSumEmpl.EmplId);
        }

        this.createCorrection(rpayFundEmplSumEmpl.EmplId);
        this.updateSumYearCompensation(year(_payPeriod), rpayFundEmplSumEmpl.EmplId);
    }
согласно коду вижу, что фонды считаются только по тем сотрдуникам, по которым они уже считались за прошлые периоды, т.к., насколько я увидела, только такие сотрудники попадают в таблицу rpayFundEmplSumEmpl.

Не могу понять, а как же вновь принятые. У них же нет записи в rpayFundEmplSumEmpl. В какой момент по ним должны считаться фонды?
Метод вызывается для пересчета, например по кнопке из формы фондов, а вот непосредственно фонды считаются в методе runFund того же класса, посмотрите по перекрестным ссылкам. Во всяком случае в 2009 фонды считаются и для вновь принятых
__________________
Sapere aude

Последний раз редактировалось Diman; 03.03.2012 в 22:49.
Старый 03.03.2012, 22:49   #5  
Diman is offline
Diman
Участник
Сотрудники Microsoft Dynamics
 
166 / 35 (2) +++
Регистрация: 27.06.2003
Адрес: Москва
Цитата:
Сообщение от rusk Посмотреть сообщение
Да, есть такое дело... Сами заменили на следующее:
X++:
...
    EmplTable            emplTable;
    ;
...
    while select EmplId from emplTable
        where emplTable.PayMainEmplId_Ru == emplTable.EmplId &&
             (emplTable.EmplId           == _emplId || (_emplId ? false : true))
    {
        if (! _emplId)
        {
            operationProgress.setText("@HRP372" + emplTable.EmplId);
            operationProgress.incCount();
        }

        for (currentPeriod = _payPeriod; currentPeriod <= endmth(openPeriod); currentPeriod = endmth(nextmth(currentPeriod)))
        {
            this.runFund(currentPeriod,emplTable.EmplId);
        }

        this.createCorrection(emplTable.EmplId);
        this.updateSumYearCompensation(year(_payPeriod), emplTable.EmplId);
    }
Опять же не понятно зачем в оригинале делают пересчет до конца года: currentPeriod <= dateEndYr(_payPeriod);
так используется переменная openPeriod в конструкции currentPeriod <= endmth(openPeriod);
__________________
Sapere aude
Старый 05.03.2012, 14:16   #6  
rusk is offline
rusk
Участник
 
17 / 16 (1) ++
Регистрация: 26.12.2001
Адрес: г. Невинномысск
Цитата:
Сообщение от Diman Посмотреть сообщение
Метод вызывается для пересчета, например по кнопке из формы фондов, а вот непосредственно фонды считаются в методе runFund того же класса, посмотрите по перекрестным ссылкам. Во всяком случае в 2009 фонды считаются и для вновь принятых
Как раз в стандартной 2009 фонды считаются из updateFundPeriod, из которого уже вызывается runFund (в этом и косяк - см. выше).
Цитата:
Сообщение от Diman Посмотреть сообщение
так используется переменная openPeriod в конструкции currentPeriod <= endmth(openPeriod);
Это уже мы модифицировали - изначально используется конструкция currentPeriod <= dateEndYr(_payPeriod);
Старый 05.03.2012, 14:28   #7  
Diman is offline
Diman
Участник
Сотрудники Microsoft Dynamics
 
166 / 35 (2) +++
Регистрация: 27.06.2003
Адрес: Москва
Цитата:
Сообщение от rusk Посмотреть сообщение
Как раз в стандартной 2009 фонды считаются из updateFundPeriod, из которого уже вызывается runFund (в этом и косяк - см. выше).

Это уже мы модифицировали - изначально используется конструкция currentPeriod <= dateEndYr(_payPeriod);
код из метода runFund, перебор EmplTable
X++:
 while select EmplId from emplTable
        where emplTable.PayMainEmplId_Ru == emplTable.EmplId &&
             (emplTable.EmplId           == _emplId || (_emplId ? false : true))
    {
        if(operationProgress)
        {
            operationProgress.setText("@HRP372" + emplTable.EmplId);
            operationProgress.incCount();
        }

        this.createFundTrans(_payPeriod, emplTable.EmplId, _counterUnit);

        if (!_emplId && !recalc)
        {
            this.createCorrection(emplTable.EmplId);
        }
    }
По поводу переменной openPeriod, у меня она на FP14 по умолчанию есть. Может у вас не последняя версия?
__________________
Sapere aude
Теги
расчет фондов, расчеты с персоналом

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Альтернативные рабочие центы и расчет потребления по формуле мощность Starling DAX: Функционал 0 25.08.2010 14:13
Зарплата не расcчиталась!!! Помогите! lolita DAX: Функционал 2 20.08.2008 13:04
Зарплата: расчет среднего заработка для Отпусков Arahnid DAX: Функционал 3 06.12.2007 19:09
Статистический вопрос. Сколько считается зарплата? 3oppo DAX: Функционал 10 15.07.2005 07:06
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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