О "Check Cost Price" в закрытии склада DAX4
В закрытии склада есть две проверочные процедуры, которые нигде толком не описаны. Так как меня попросили объяснить как вообще работает все закрытие склада, то пришлось начать разбираться с того, в каком случае оно не работает.
Одна из процедур - проверка CostPrice.
Может быть кому-нибудь тоже будет полезно знать логику, так что делюсь:
1. Идем по таблице InventTrans, группировки InventTransId, Voucher, TransType, TransRefId, DateFinancial, учитываем следующие условия:
• receipts.ValueOpen = InventTransOpen::Yes
• receipts.StatusIssue = StatusIssue::None
• receipts.StatusReceipt = StatusReceipt::Purchased
• receipts.TransType != InventTransType::InventTransfer
• receipts.TransType != InventTransType::WMSTransport
• receipts.TransType != InventTransType::QuarantineOrder
• receipts.TransType != InventTransType::Production or not ignoreProduction (из диалога)
• receipts.PackingSlipReturned == NoYes::No
• receipts.DateFinancial <= toDate или пустое toDate из диалога
• receipts.Qty > 0
2. Считаем InventTrans.CostAmountStd = currency::amount((InventTrans.CostAmountPosted + InventTrans.CostAmountAdjustment)/ InventTrans.Qty);
3. receiptCostPricePcsMax = CostPricePcsMaxValue в inventParameters;
4. Если costPriceBase из диалога не CostPriceBase::Median, то baseCostPricePcs = inventCostPricePcs = standart Cost Price из InventTable и InventDim, иначе baseCostPricePcs = medianCostPricePcs = currency::amount((receipt.CostAmountStd + prevValue)/2); где мы берем две средние записи из InventTrans для расчета
5. minDeviation, maxDeviationPercent (по умолчанию 50%) – из диалога к отчету
6. Печатаем следующие транзакции с сообщениями об ошибках
• baseCostPricePcs < 0
• receipt.CostAmountStd < 0
• receipt.CostAmountStd > receiptCostPricePcsMax
• baseCostPricePcs >= 0 and abs(receipt.CostAmountStd - baseCostPricePcs) > minDeviation)
• baseCostPricePcs >= 0 and abs(receipt.CostAmountStd - baseCostPricePcs) > minDeviation) and deviation > maxDeviationPercent; где deviation = abs(receipt.CostAmountStd - baseCostPricePcs)*100 / baseCostPricePcs
|