26.11.2013, 10:53 | #1 |
Участник
|
Цена БОМа ( Ах 2009 )
Здраствуйте,
Ненравиться как Аксапта подсчитает цену БОМа ... Если в главном товаре есть другой БОМ, а етот БОМ имеет запись с BOMQtySerie ( напр. для 12 ед. ) , то цена подсчитаеться для всех 12 , а не для 1-ой едн. Почему то планнирование подсчитает хорошо , а вот цена - уже по инному . Структура такая : - главный товар ( БОМ1 ) 1 едн. Он имеет несколько записей с товарами и полуфабрикат; - Етот полуфабрикат ( БОМ2 ) имеет запись , что для него нужен полуфабрикат БОМ3; - например для БОМ2 есть краски , несколько кг для 1000 едн. ( BOMQtySerie ). Оно как сырьё посдчитаеться правильно; - в таблице БОМ2 указано , что БОМ3 будет сделано для 12 едн. БОМ2; ( BOMQtySerie ) Вот здесь проблема - как писал , цена подсчитаеться для всех 12 едн. Она сделаеться очень большая . Почему то для запицей типа БОМ неделаеться деление из BOMQtySerie . Ето буг Аксапты или какой то непонятный смысл ? Наверное есть какая то "галочка" исправить ето ? Заранее спасибо за помочь ... |
|
26.11.2013, 11:44 | #2 |
Участник
|
В классе BOMCalcItem есть метод
X++: void initSeriesSize() { ; if(level == 0) { seriesSize = calcConsumptionInventQty; return; } else if(bom) { // Line type = Item if(bomCalcExplosionMode != BOMCalcExplosionMode::MakeToOrder && !bom.type().mustBeDerivedDirectly()) // makeToOrder forces linetype Item to be Production { seriesSize = inventTable.inventStandardQty(this.parmInventDimId()); this.parmUseStandardQty(true); } // Line types : Production, Vendor, Phantom else { seriesSize = calcConsumptionInventQty; this.parmUseStandardQty(false); } } |
|
|
За это сообщение автора поблагодарили: Rimantas (1). |
26.11.2013, 12:12 | #3 |
Участник
|
Цитата:
Сообщение от tourist
В классе BOMCalcItem есть метод
X++: void initSeriesSize() { ; if(level == 0) { seriesSize = calcConsumptionInventQty; return; } else if(bom) { // Line type = Item if(bomCalcExplosionMode != BOMCalcExplosionMode::MakeToOrder && !bom.type().mustBeDerivedDirectly()) // makeToOrder forces linetype Item to be Production { seriesSize = inventTable.inventStandardQty(this.parmInventDimId()); this.parmUseStandardQty(true); } // Line types : Production, Vendor, Phantom else { seriesSize = calcConsumptionInventQty; this.parmUseStandardQty(false); } } |
|
26.11.2013, 15:51 | #4 |
Участник
|
Цитата:
X++: protected void calcConsumption() { BOMCalcConsumption bomCalcConsumption; Qty consumptionBOMQty; Qty netWeightConsumptionBOMQty; Percent calcAccError; BOMMap bom2; // отцовский БОМ ; bomCalcConsumption = BOMCalcConsumption::construct(bom.Formula, bomCalcData); calcAccError = Route::accError(this.parmParentBOMCalc().parmRouteId(), bom.OprNum); consumptionBOMQty = bomCalcConsumption.calcConsumption(bom, calcAccError); // начяло мод. bom2 = this.parmParentBOMCalc().parmBOM(); // отыскиваем отцовский БОМ if ( bom2.BOMQtySerie > 1 && seriesSize != bom2.BOMQtySerie && InventTable::find( bom2.ItemId ).ItemType == ItemType::BOM ) { seriesSize = bom2.BOMQtySerie; consumptionBOMQty = consumptionBOMQty / seriesSize; consumptionBOMQty = roundUp( consumptionBOMQty, bom.RoundUpQty ); } // конец модиф. netWeightConsumptionBOMQty = bomCalcConsumption.calcConsumption(bom, 1, NoYes::Yes, NoYes::No, NoYes::No); // excludes scrap // Calculation is done in inventory units if(bom.UnitId != inventUnitId) { calcConsumptionInventQty = UnitConvert::qty(consumptionBOMQty, bom.UnitId, inventUnitId, itemId); calcNetWeightConsumptionInventQty = UnitConvert::qty(consumptionBOMQty, bom.UnitId, inventUnitId, itemId); } else { calcConsumptionInventQty = consumptionBOMQty; calcNetWeightConsumptionInventQty = netWeightConsumptionBOMQty; } [calcConsumpVariableQty, calcConsumpConstantQty] = this.getCalcConsumption(); } |
|
|
|