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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.05.2007, 21:55   #1  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
:( Обновление зарплаты: по б/л 21699 и 23101
Скажите, пж, господа. Мне партнеры предоставили два СП 21699 и 23101. Все ли это изменения. Дело в том, что в этих изменениях у меня зарплата так и не заработала на типовой (выдается ошибка при расчете Периодические выплаты - т.е. изначальная процедура расчета Аксапты).

Может быть кто подскажет, внесены ли изменения в класс, например, RPayCalculate_EmplPeriod в метод calcEmpl (там , как мне кажется, не хватает запроса по таблице RPayEmplPeriodTrans или где этот запрос создается? Поскольку , если идти отладчиком, этот запрос у меня нигде не создается, зато обращение к таблице из запроса происходит в 2 местах: класс RPayCalculate_EmplPeriod и Classes\RPayCalculate\CalcQuery).


Раньше, насколько я понимаю, периодические выплаты считались с использованием класса RPayCalculate и все было нормально. Начиная с 21699 расчет выделили в отдельный класс, как и больничные листы. Метод calcEmpl класса RPayCalculate бал перекрыт методом в классе RPayCalculate_EmplPeriod . И, если в RPayCalculate в методе запрос создается, то уже в RPayCalculate_EmplPeriod этого запроса нет и программа не может вытаскивать данные из запроса, которого нет.

Что же я не так делаю, откуда взять запрос? Ну, маги администраторы, программисты, выскажите свое мнение (кроме того, что не фиг зарплату в аксапте считать )

Откройте секрет, работает ли у кого типовая конфигурация после установки этих изменений?

Последний раз редактировалось Arahnid; 10.05.2007 в 22:24.
Старый 11.05.2007, 13:27   #2  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
А вы что посчитать хотите, пособие или обычную периодическую выплату?
Старый 11.05.2007, 13:39   #3  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Пособие на детей. Оформила б/л. Он создал периодическую выплату как в инструкции сказано. Иду в процедуры расчета и пытаюсь посчитать текущую. Выдается ошибка.
Пытаюсь посчитать из карточки Начисления и удержания, нажав кнопку Расчет. Тоже выдается ошибка.
Периодические выплаты в принципе не получается считать, даже если и их нет.
Старый 11.05.2007, 13:43   #4  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Просто поставьте типовую и накатите 2 этих обновления. Потом просто нажмите на кнопку посчитать Периодические выплаты и выплевывается ошибка
Старый 11.05.2007, 14:19   #5  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
Ошибка-то какая?
Старый 11.05.2007, 14:49   #6  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Если из расчета процедур
Ошибка времени выполнения. : Неправильный тип аргумента функции.
Трассировка стека:
\Classes\QueryRun\get
\Classes\RPayCalculate\CalcQuery - line 59
\Classes\FormButtonControl\Clicked - line 8

Если из расчета в карточке сотрудника
Ошибка времени выполнения. : Неправильный тип аргумента функции.
Трассировка стека:
\Classes\QueryRun\get
\Classes\RPayCalculate_EmplPeriod\CalcEmpl - line 26
\Classes\RPayModuleCalculate\CalculateChildModule - line 43
\Classes\RPayModuleCalculate\CalculateAllModule - line 26
\Classes\FormButtonControl\Clicked - line 13
Старый 11.05.2007, 14:53   #7  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
Попробуйте инкрементную компиляцию по классам RPayModuleControl, RPayCalculate, RPayCounterCalcEngine

Ну и проект еще разочек откомпилируйте, если это вы еще не сделали 100 раз.
Старый 11.05.2007, 14:58   #8  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Я уже синхринизацию, глобальную компиляцию запускала. Ну еще раз по классам запустила. Ну я откровенно отладчиком не нашла места где делается запрос. Где вообще хоть раз создается источник данных с таблицей RPayEmplPeriodTrans. Где делается обращение к объекту Query я видела, но не более.
Старый 11.05.2007, 15:08   #9  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
RPayModuleControl_EmplPeriod.new()

void new(RPayModuleTable _payModuleTable)
{
super(_payModuleTable);
enumEmplPeriod = new DictEnum(enumnum(RPayEmplPeriodCalcType));
queryRun = new QueryRun(queryStr(RPayEmplPeriodTrans));
this.CalcItemsAdd(enumEmplPeriod);
this.initQuery();
}
Здесь собственно он и создается. По готовому Query из АОТа: RPayEmplPeriodTrans
Этот query тоже есть в проекте.
Старый 11.05.2007, 15:13   #10  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Так, у меня таки получилось добиться работы от типовой конфигурации. Вопрос следующий

что значит в классе RPayModule

X++:
void new(RPayModuleTable _payModuleTable)
{
    ;
    enumCommon = new DictEnum(enumnum(RPayCommonCalcType));
    queryRun = new QueryRun(queryStr(RPayCalcCommonQuery));
    payModuleTable = _payModuleTable.data();
    this.CalcItemsAdd(enumCommon);
    this.initQuery();

}
что значит строчка payModuleTable = _payModuleTable.data();, после которой payModuleTable.query получается значение size = 1 и в методе
X++:
void initQuery()
{
    ;
    if(payModuleTable.query)
    {
        query = new Query(payModuleTable.query);
        queryRun.query(query);
    }
    query = queryRun.query();
    queryRun.saveUserSetup(false);
    query.title(payModuleTable.payModuleName);
}
создается запрос заново.
В типовой size = 0 и программа не идет в
query = new Query(payModuleTable.query); И при этом в ней все работает.

Я убрала в рабочей
X++:
        query = new Query(payModuleTable.query);
        queryRun.query(query);
И после этого у меня все заработало.

Ключевой вопрос: что такое size = 1 ?

Последний раз редактировалось Arahnid; 11.05.2007 в 22:34.
Старый 11.05.2007, 22:37   #11  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Теперь стало яснее, у меня к процедуре Периодические выплаты в рабочей базе привязан запрос не Расчет процедур, а привязан Сотрудники, как было до обновления. Вопрос, почему в рабочей в одной из компаний так получилось. Причем во всех других все хорошо.
Как сделать так, чтобы при нажатии "запрос" из "процедур расчета" на периодической выплате стояла "Расет процедур"? Где хранится запрос и почему так вышло именно в одной из компаний?


Решение проблемы нашлось в переименовании предопределнной процедуры расчета. Ее удалении и создании новой процедуры с предопределнным названием. Но ответы, если кто может дать, хотелось бы услышать.

Последний раз редактировалось Arahnid; 12.05.2007 в 01:47.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Обновление процедуры закрытия склада в АХ 3.0 Vadim Korepin DAX: Функционал 10 07.08.2006 16:21
Пересчет закрытого периода зарплаты nicko DAX: Функционал 3 30.05.2006 11:39
Расчет вида зарплаты в отпуске со значением период Год nicko DAX: Функционал 5 30.05.2006 08:14
Обновление ... SerAl DAX: Программирование 0 14.04.2005 19:57
Обновление detail-таблицы DreamCreator DAX: Программирование 1 05.04.2005 15:57

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

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

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