11.11.2008, 09:47 | #1 |
Участник
|
Поле CostAmountAdjustment в InventTrans
Как можно проверить в InventTrans поле CostAmountAdjustment для ValueOpen = да?
Проверить на предмет, что оно посчитано правильно. Сравнить с аналогичным полем в InventSettlement не предлагать (Не в этом вопрос).
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
11.11.2008, 10:01 | #2 |
----------------
|
если не в этом, то в чем?
посмотреть с кем сопоставлена проводка и сравнить их costValue по сопоставленному кол-ву... опять же возвращаемся к InventSettlement |
|
11.11.2008, 10:28 | #3 |
Участник
|
Цитата:
Есть такая проблема. Есть приложение сильное изменённое. В нём хватает чужого кода в классах закрытия, пересчёта и корректирки. По одной номенклатуре (возможно их больше) не получается скорректировать себестоимость через корректировку наличия. Выкидывает сообщение Отрицательная себестоимость не возможна. (S) \Classes\InventTransAdjust\updateNow - line 72 Не могу понять в чём дело. Считается вроде всё правильно и интуиция подсказывает возможно входные данные не правильны. А именно поле корректировки. Предположил что это поле на InventTrans проверяется таким образом. Для ValueOpen = да X++: display Amount MRD_calcCostAmountAdjustment() { Amount costAmountAdjustment; ; if(this.QtySettled) costAmountAdjustment = this.Qty * this.CostAmountSettled / this.QtySettled - this.CostAmountPosted; else costAmountAdjustment = this.CostAmountSettled; return costAmountAdjustment; } 1) Цифры в основном различаются на втором знаке после запятой. На той проводке которая меня интересует на первой после запятой. Как раз мне мальца и нехватает чтоб ошибку убрать. 2) Что меня ещё смущает? Что есть прводки без сопоставления, но с корректировкой. Не понятно тогда откуда эти суммы беруться, если нет сопоставления. Визуально вижу что эти цифры иногда совпадают с проводками по той же номенклатуре но по которой были сопоставления. Связано это или нет не знаю точно. Первый вопрос более интересен. Но если кто сможет объяснить второй (Почему так) тоже будет хорошо.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. Последний раз редактировалось miklenew; 11.11.2008 в 10:47. Причина: описался место номенклатуры написал накладной |
|
11.11.2008, 11:33 | #4 |
Member
|
Проверка целостности данных компании пересчитывает это поле по InventSettlement. Попробуйте запустить на тестовой базе, посмотрите что получится.
Проверку целостности лучше выдрать из стандартного кода и пустить джобом. А то стандартная там много чего проверяет, и может затянуться надолго.
__________________
С уважением, glibs® |
|
|
За это сообщение автора поблагодарили: miklenew (5). |
11.11.2008, 11:44 | #5 |
Участник
|
Спасибо нашёл.
InventTrans\checkFixSettlement() Щас посмотрю. Чёто сначало по галочкам прошёл, с сопоставлением не нашёл. Но не подумал, что оно может в проверке Проводки.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
11.11.2008, 11:51 | #6 |
Участник
|
Рано обрадовался. Там простенькие проверки на соответствие inventTrans и inventSettlement.
Может кто в Ax 2009 или в Ax 4.0 посмотрит написано ли ещё что в InventTrans\checkFixSettlement().
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
11.11.2008, 12:04 | #7 |
Программатор
|
AX 4
X++: void checkFixSettlement(InventConsistencyCheck_Trans inventConsistencyCheck_Trans) { InventSettlement inventSettlement; setprefix("@SYS55578"); while select forupdate inventSettlement where inventSettlement.TransRecId == this.RecId && inventSettlement.InventTransCurrency_RU == InventTransCurrency_RU::PrimaryCur { setprefix(#prefixField(inventSettlement,RecId)); if (inventSettlement.ItemId != this.ItemId || inventSettlement.InventTransId != this.InventTransId) { checkFailed("@SYS67934",'', SysInfoAction_TableField::newBufferField(inventSettlement, fieldnum(InventSettlement, RecId))); if (inventConsistencyCheck_Trans.checkFix() == CheckFix::Fix) { inventSettlement.doDelete(); inventConsistencyCheck_Trans.updateCorrected(); } else inventConsistencyCheck_Trans.updateNotCorrected(); } } select sum(QtySettled),sum(CostAmountSettled),sum(CostAmountAdjustment) from inventSettlement where inventSettlement.TransRecId == this.RecId && inventSettlement.Cancelled == NoYes::No && inventSettlement.SettleModel != InventSettleModel::PhysicalValue && inventSettlement.InventTransCurrency_RU == InventTransCurrency_RU::PrimaryCur; if (inventSettlement.QtySettled != this.QtySettled) { checkFailed("@SYS67938",'', SysInfoAction_TableField::newBufferField(this, fieldnum(InventTrans, QtySettled))); if(inventConsistencyCheck_Trans.checkFix() == CheckFix::Fix) { this.QtySettled = inventSettlement.QtySettled; this.doUpdate(); inventConsistencyCheck_Trans.updateCorrected(); } else inventConsistencyCheck_Trans.updateNotCorrected(); } if (inventSettlement.CostAmountSettled != this.CostAmountSettled) { checkFailed("@SYS67939",'', SysInfoAction_TableField::newBufferField(this, fieldnum(InventTrans, CostAmountSettled))); if (inventConsistencyCheck_Trans.checkFix() == CheckFix::Fix) { this.CostAmountSettled = inventSettlement.CostAmountSettled; this.doUpdate(); inventConsistencyCheck_Trans.updateCorrected(); } else inventConsistencyCheck_Trans.updateNotCorrected(); } if (inventSettlement.CostAmountAdjustment != this.CostAmountAdjustment) { checkFailed("@SYS67940",'', SysInfoAction_TableField::newBufferField(this, fieldnum(InventTrans, CostAmountAdjustment))); if (inventConsistencyCheck_Trans.checkFix() == CheckFix::Fix) { this.CostAmountAdjustment = inventSettlement.CostAmountAdjustment; this.doUpdate(); inventConsistencyCheck_Trans.updateCorrected(); } else inventConsistencyCheck_Trans.updateNotCorrected(); } } |
|
|
За это сообщение автора поблагодарили: miklenew (2). |
11.11.2008, 12:19 | #8 |
Участник
|
В 2009 почти то же самое (без российского функционала)
X++: public void checkFixSettlement(InventConsistencyCheck_Trans inventConsistencyCheck_Trans) { InventSettlement inventSettlement; setprefix("@SYS55578"); while select forupdate inventSettlement where inventSettlement.TransRecId == this.RecId { setprefix(#prefixField(inventSettlement,RecId)); if (inventSettlement.ItemId != this.ItemId || inventSettlement.InventTransId != this.InventTransId) { checkFailed("@SYS67934",'', SysInfoAction_TableField::newBufferField(inventSettlement, fieldnum(InventSettlement, RecId))); if (inventConsistencyCheck_Trans.checkFix() == CheckFix::Fix) { inventSettlement.doDelete(); inventConsistencyCheck_Trans.updateCorrected(); } else inventConsistencyCheck_Trans.updateNotCorrected(); } } select sum(QtySettled),sum(CostAmountSettled),sum(CostAmountAdjustment) from inventSettlement where inventSettlement.TransRecId == this.RecId && inventSettlement.Cancelled == NoYes::No && inventSettlement.SettleModel != InventSettleModel::PhysicalValue; if (inventSettlement.QtySettled != this.QtySettled) { checkFailed("@SYS67938",'', SysInfoAction_TableField::newBufferField(this, fieldnum(InventTrans, QtySettled))); if(inventConsistencyCheck_Trans.checkFix() == CheckFix::Fix) { this.QtySettled = inventSettlement.QtySettled; this.doUpdate(); inventConsistencyCheck_Trans.updateCorrected(); } else inventConsistencyCheck_Trans.updateNotCorrected(); } if (inventSettlement.CostAmountSettled != this.CostAmountSettled) { checkFailed("@SYS67939",'', SysInfoAction_TableField::newBufferField(this, fieldnum(InventTrans, CostAmountSettled))); if (inventConsistencyCheck_Trans.checkFix() == CheckFix::Fix) { this.CostAmountSettled = inventSettlement.CostAmountSettled; this.doUpdate(); inventConsistencyCheck_Trans.updateCorrected(); } else inventConsistencyCheck_Trans.updateNotCorrected(); } if (inventSettlement.CostAmountAdjustment != this.CostAmountAdjustment) { checkFailed("@SYS67940",'', SysInfoAction_TableField::newBufferField(this, fieldnum(InventTrans, CostAmountAdjustment))); if (inventConsistencyCheck_Trans.checkFix() == CheckFix::Fix) { this.CostAmountAdjustment = inventSettlement.CostAmountAdjustment; this.doUpdate(); inventConsistencyCheck_Trans.updateCorrected(); } else inventConsistencyCheck_Trans.updateNotCorrected(); } } |
|
|
За это сообщение автора поблагодарили: miklenew (2). |
11.11.2008, 13:14 | #9 |
Участник
|
Цитата:
Проверить CostAmountSettled сравнивая проводки по которым было сопоставление можно. А вот как проверить CostAmountAdjustment?
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
11.11.2008, 13:37 | #10 |
Member
|
Цитата:
Сообщение от miklenew
...
А вот как проверить CostAmountAdjustment? ... Вам даже метод таблицы InventTrans показали, который это делает.
__________________
С уважением, glibs® |
|
11.11.2008, 13:49 | #11 |
Участник
|
Цитата:
Я их проверил и до того как нашёл этот метод.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
11.11.2008, 14:16 | #12 |
Участник
|
И ещё такой вопрос: Можно ли удалять сопоставление по закрытым проводкам (ValueOpen = нет)?
А то у нас себестоимость считается по средней стоимости. Таблица InventSettlement пухнет как на дрожях.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
11.11.2008, 14:18 | #13 |
Участник
|
Удалять, наверное не стоит. А вот сворачивать проверенные месяцы вполне нормально.
|
|
|
За это сообщение автора поблагодарили: miklenew (2). |
11.11.2008, 14:25 | #14 |
Участник
|
Цитата:
Безболезненно можно удалять InventSettlement.cancelled = Yes. Однако помните, что нельзя ничего удалять пока идет закрытие/пересчет склада или отмена закрытия/пересчета. Будут страшенные глюки. Если закрытие не делается, то запускать удаление отмененных можно. |
|
11.11.2008, 14:27 | #15 |
Участник
|
Сворачивать стандартным алгоритмом можно только в том случае, если на InventSettlement не навешаны дополнительные признаки.
Зачастую для того, чтобы получить отчет "Структура стоимости", в InventSettlement добавляют MarkupCode. В этом случае стандартный алгоритм свертки надо научить распознавать такой код и учитывать его в свертке. |
|
11.11.2008, 14:33 | #16 |
Участник
|
Сворачивать по каким полям? Если суммировать коррекцию, сопоставление, тогда вся остальная инфа потеряется лот, ссылка на RecId. А толку тогда от этой информации если нет лота и ссылки на RecId.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
11.11.2008, 14:38 | #17 |
Участник
|
Скорее всего, имелась в виду стандартная свертка
Управление запасами \ Периодические операции \ Очистка \ Очистка сопоставлений запасов см. также http://axapta.mazzy.ru/lib/dbgrowthsolution/ |
|
|
За это сообщение автора поблагодарили: miklenew (2). |
11.11.2008, 14:44 | #18 |
Участник
|
Цитата:
А по сопоставлению она полезного практически ничего не проверяет. Покрайней мере можно докрутить класс InventConsistencyCheck_Trans, чтоб на сопоставление проверялись только открытые проводки. В расчёте сопоставления по закрытым проводкам они уже не учавствуют. Так смысл тогда в них, если закрытия склада прошло, по лоту количество всё сопоставили, проводка закрылась. Это информация уже больше никогда не используется(поправьте если ошибаюсь).
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
11.11.2008, 15:06 | #19 |
Участник
|
Цитата:
А совсем удалять записи потому, что у нас ещё и бухгалтерия получает отчетность и, например, ОСВ по складу без записей в InventSettlement не построить (нет дат коррекций, а только общая сумма) |
|
|
За это сообщение автора поблагодарили: miklenew (5). |
11.11.2008, 15:12 | #20 |
Участник
|
Цитата:
Сообщение от Raven Melancholic
Нет, стандартная процедура оставляет лот (но RecId убивает, но это не страшно. так как проводка по лоту закрыта). Убирается информация о том, с чем сопоставлена проводка. У нас тоже средняя себестоимость, сворачивание сокращает информацию за месяц примерно до 15% от исходного объема (имею ввиду оставляет 15%). Выполняем сверку после проверки результатов закрытия и в том случае ,если уверены, что отменять закрытие не придётся.
А совсем удалять записи потому, что у нас ещё и бухгалтерия получает отчетность и, например, ОСВ по складу без записей в InventSettlement не построить (нет дат коррекций, а только общая сумма) Надо будет с консультантами поговорить по этому поводу.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
Теги |
логистика, переоценка |
|
|