10.05.2007, 21:55 | #1 |
Участник
|
Обновление зарплаты: по б/л 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 |
Участник
|
А вы что посчитать хотите, пособие или обычную периодическую выплату?
|
|
11.05.2007, 13:39 | #3 |
Участник
|
Пособие на детей. Оформила б/л. Он создал периодическую выплату как в инструкции сказано. Иду в процедуры расчета и пытаюсь посчитать текущую. Выдается ошибка.
Пытаюсь посчитать из карточки Начисления и удержания, нажав кнопку Расчет. Тоже выдается ошибка. Периодические выплаты в принципе не получается считать, даже если и их нет. |
|
11.05.2007, 13:43 | #4 |
Участник
|
Просто поставьте типовую и накатите 2 этих обновления. Потом просто нажмите на кнопку посчитать Периодические выплаты и выплевывается ошибка
|
|
11.05.2007, 14:19 | #5 |
Участник
|
Ошибка-то какая?
|
|
11.05.2007, 14:49 | #6 |
Участник
|
Если из расчета процедур
Ошибка времени выполнения. : Неправильный тип аргумента функции. Трассировка стека: \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 |
Участник
|
Попробуйте инкрементную компиляцию по классам RPayModuleControl, RPayCalculate, RPayCounterCalcEngine
Ну и проект еще разочек откомпилируйте, если это вы еще не сделали 100 раз. |
|
11.05.2007, 14:58 | #8 |
Участник
|
Я уже синхринизацию, глобальную компиляцию запускала. Ну еще раз по классам запустила. Ну я откровенно отладчиком не нашла места где делается запрос. Где вообще хоть раз создается источник данных с таблицей RPayEmplPeriodTrans. Где делается обращение к объекту Query я видела, но не более.
|
|
11.05.2007, 15:08 | #9 |
Участник
|
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 |
Участник
|
Так, у меня таки получилось добиться работы от типовой конфигурации. Вопрос следующий
что значит в классе RPayModule X++: void new(RPayModuleTable _payModuleTable) { ; enumCommon = new DictEnum(enumnum(RPayCommonCalcType)); queryRun = new QueryRun(queryStr(RPayCalcCommonQuery)); payModuleTable = _payModuleTable.data(); this.CalcItemsAdd(enumCommon); this.initQuery(); } 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; 12.05.2007 в 01:47. |
|