|
![]() |
#1 |
Участник
|
рекомендую сначала сделать пробное суммирование по inventtrans по 200 - 1000 номенклатур и сравнить полученное значение с inventsum по этим же номенклатурам. если различий будет очень очень мало, то можно и по inventsum остатки считать.
но у нас было много кастомизаций. в итоге беглое сравнение показало что для первых 1000 номенклатур в 30% случаях суммы отличаются. видимо где не успевало обновится inventsum если у вас различия меньше 5% то можно наверно и по inventsum. |
|
![]() |
#2 |
Участник
|
Цитата:
Сообщение от Evgeniy2020
![]() рекомендую сначала сделать пробное суммирование по inventtrans по 200 - 1000 номенклатур и сравнить полученное значение с inventsum по этим же номенклатурам. если различий будет очень очень мало, то можно и по inventsum остатки считать.
но у нас было много кастомизаций. в итоге беглое сравнение показало что для первых 1000 номенклатур в 30% случаях суммы отличаются. видимо где не успевало обновится inventsum если у вас различия меньше 5% то можно наверно и по inventsum. X++: static void Job70(Args _args) { InventTrans inventTransStatus; RecordSortedList cacheInventSum; InventSum inventSum; InventSum inventSumCurrent; InventDimId lastDimId; ItemId itemId; boolean mustInventBeControlled; boolean ok; Dialog dialog = new Dialog("Пересчет"); DialogField dfItemId; InventTable iTb; void testSum(InventSum _inventSum) { inventSumCurrent.itemId = _inventSum.itemId; inventSumCurrent.inventDimId = _inventSum.inventDimId; cacheInventSum.find(inventSumCurrent); cacheInventSum.del(inventSumCurrent); } dfItemId = dialog.addFieldValue(typeid(ItemId),itemId,"Номенклатура"); if(!dialog.run()) return; itemId = dfItemId.value(); cacheInventSum = new RecordSortedList(TableNum(InventSum)); cacheInventSum.sortOrder(FieldNum(InventSum,itemId),FieldNum(InventSum,inventDimId)); //Che while select iTb where iTb.ItemId like itemId { //Che // mustInventBeControlled = InventTable::find(itemId).inventItemType().mustInventBeControlled(); mustInventBeControlled = InventTable::find(iTb.ItemId).inventItemType().mustInventBeControlled(); ttsbegin; // while select forupdate inventSum where inventSum.itemId == itemId while select forupdate inventSum where inventSum.itemId == iTb.ItemId { cacheInventSum.ins(inventSum); inventSum.delete(); } if(mustInventBeControlled) { while select sum(qty),sum(costAmountPosted),sum(costAmountAdjustment),sum(CostAmountSecCurPosted_RU),sum(CostAmountSecCurAdjustment_RU),sum(CostAmountSecCurPhysical_RU),sum(costAmountPhysical) from inventTransStatus group by itemId,inventDimId,statusReceipt,statusIssue,datePhysical,dateInvent,dateExpected // where inventTransStatus.itemId == itemId where inventTransStatus.itemId == iTb.ItemId { if (ok) { if (inventTransStatus.inventDimId != lastDimId) { // inventSum.itemId = itemId; inventSum.itemId = iTb.ItemId; inventSum.inventDimId = lastDimId; inventSum.insert(); testSum(inventSum); inventSum.clear(); }//if (inventTransStatus.inventDimId != lastDimId) } //if (ok) else ok = true; lastDimId = inventTransStatus.inventDimId; inventSum.addInventTransOnSum(inventTransStatus); } //while }//if(mustInventBeControlled) if (ok) { // inventSum.itemId = itemId; inventSum.itemId = iTb.ItemId; inventSum.inventDimId = lastDimId; inventSum.insert(); testSum(inventSum); }//if (ok) ttscommit; }//while select iTb where iTb.ItemId like itemId } Последний раз редактировалось Che; 22.02.2011 в 11:22. |
|
![]() |
#3 |
Участник
|
это неправильный джобик.
на правильный указал S.Kuskov там же сказано как сделать принудительный пересчет без джобиков, из главного меню |
|
![]() |
#4 |
Участник
|
|
|
![]() |
#5 |
Участник
|
1. Закат солнца вручную
2. в вашей проверке нет таблицы inventSettlement, поэтому финансовые остатки вы проверить не сможете. только количество. 3. поле costAmountAdjustment само по себе является агрегатом (= sum of inventSettlement). это поле может содержать неверные значения (обычно из-за вмешательства программистов). Его нельзя использовать для ПРОВЕРКИ! и сравните со стандартным кодом: Пересчет inventSum юзайте стандартные классы |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|