|
![]() |
#1 |
Участник
|
Ну тогда, позвольте я еще про одну ошибку изложу. Скажу сразу, что толком не помню как ее воспроизвести (давненько это было). Кроется она в классе IntercompanyTransferInventDim метод transfer:
X++: ... while (qr.next()) { fromInventTrans = qr.get(tablenum(InventTrans)); fromInventDim = qr.get(tablenum(InventDim)); ... fromQty = -fromInventTrans.Qty; if (inventDimParm.InventLocationIdFlag && fromInventDim.InventLocationId) { convInventLocation = new TradeInterCompanyConv(); salesInventLocationId = fromInventDim.InventLocationId; convInventLocation.axInventLocationId(fromValueMap, fromInventDim.InventLocationId); } ... changecompany(_toDataAreaId) { toInventTrans = null; select forceplaceholders sum(Qty) from toInventTrans where toInventTrans.InventTransId == _toInventTransId && (toInventTrans.StatusReceipt <= StatusReceipt::Registered || toInventTrans.InterCompanyInventDimTransferred == true) && toInventTrans.StatusIssue == StatusIssue::None #inventDimJoin(toInventTrans.InventDimId,toInventDim,fromInventDim,inventDimParm); fromQty -= toInventTrans.Qty; .... P.S.: надеюсь понятно пояснил, как-то сумбурно получилось, млин |
|
![]() |
#2 |
Участник
|
Забыл добавить: DAX 4.0 SP2
|
|
![]() |
#3 |
Участник
|
Ошибка проявляется в именно так, как описал JeS.
Ой, насчет: Цитата:
Кроется она в классе IntercompanyTransferInventDim метод transfer
Он неправильно отрабатывает в случаях, когда были кредит-ноты по строке, лечилось добавлением в выборки (те, которые зависят от того, какие аналитики включены) условий (то, что выделено комментариями): Код: select forceplaceholders sum(Qty) from fromInventTrans where fromInventTrans.InventTransId == _fromInventTransId && fromInventTrans.StatusIssue <= _statusIssue && fromInventTrans.StatusReceipt == StatusReceipt::None // ААК: МФД40_09_01_0013_001 11.07.2009 [Сторнирование и копирование документов] --> && fromInventTrans.InvoiceReturned == NoYes::No && fromInventTrans.PackingSlipReturned == NoYes::No // ААК: МФД40_09_01_0013_001 11.07.2009 [Сторнирование и копирование документов] <-- join InventLocationId, InventBatchId, InventSerialId, InventGtdId_RU from fromInventDim group by InventLocationId, InventBatchId, InventSerialId, InventGtdId_RU where fromInventDim.InventDimId == fromInventTrans.InventDimId; X++: select forupdate toInventTrans index hint TransIdIdx where toInventTrans.InventTransId == _toInventTransId && toInventTrans.StatusReceipt == StatusReceipt::Ordered && toInventTrans.StatusIssue == StatusIssue::None && toInventTrans.InterCompanyInventDimTransferred == false; Для воспроизведения этой ошибки нужно чтобы проводки по лоту были расщеплены как со стороны заказа на продажу, так и со стороны заказа на покупку. Причем, иногда везет и комплектуются те записи, по которым установили флаг, но везение не всегда случается. Эту проблему решили, но грубо (стояли отгрузки, поэтому было не до изящности): вместо X++: inventTransUpd.InterCompanyInventDimTransferred = true; X++: //lex 24.04.2009 при регистрации могла выбраться еще необработанная проводка и на пересечении...--> if (!_registerReceipt) { inventTransUpd.InterCompanyInventDimTransferred = true; } //lex 24.04.2009 при регистрации могла выбраться еще необработанная проводка и на пересечении...<-- X++: //lex 24.04.2009 при регистрации могла выбраться еще необработанная проводка и на пересечении...--> update_recordset refInventTrans setting InterCompanyInventDimTransferred = true where refInventTrans.InventTransId == inventTransUpd.InventTransId && refInventTrans.StatusReceipt == StatusReceipt::Registered && !refInventTrans.InterCompanyInventDimTransferred; //lex 24.04.2009 при регистрации могла выбраться еще необработанная проводка и на пересечении...<-- |
|
|
За это сообщение автора поблагодарили: JeS (1). |
![]() |
#4 |
Участник
|
Еще один недостаток этого метода. Бывает, что в компании, в которой производится продажа конечному клиенту, требуются данные не только номера партии, а и то, что есть в таблице партий (например, дата производства, если существует контроль и предоставление клиенту информации о сроках годности), тоже может требоваться по серийным номерам и, естественно, нужна страна по ГТД. Однако, в методе создаются записи только с номером:
X++: if (!InventBatch::exist(toInventTrans.ItemId,inventDimUpd.InventBatchId))
{
inventBatch.clear();
inventBatch.ItemId = toInventTrans.ItemId;
inventBatch.InventBatchId = inventDimUpd.InventBatchId;
inventBatch.insert();
} X++: while (fromInventTrans) { // ААК: МФД40_08_01_0003 19.03.2009 [Планирование сделок] --> inventBatchFrom = null; if (fromInventDim.inventBatchId) { inventBatchFrom = InventBatch::find(fromInventDim.inventBatchId, itemIdFrom); } ... X++: if (!InventBatch::exist(toInventTrans.ItemId,inventDimUpd.InventBatchId)) { inventBatch.clear(); inventBatch.ItemId = toInventTrans.ItemId; inventBatch.InventBatchId = inventDimUpd.InventBatchId; // ААК: МФД40_08_01_0003 19.03.2009 [Планирование сделок] --> inventBatch.initFromInventBatch_OVK(inventBatchFrom); // ААК: МФД40_08_01_0003 19.03.2009 [Планирование сделок] <-- inventBatch.insert(); } |
|