AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.11.2013, 10:53   #1  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цена БОМа ( Ах 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  
tourist is offline
tourist
Участник
 
21 / 14 (1) ++
Регистрация: 03.05.2006
В классе 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);
        }
    }
Здесь сбравсывается seriesSize
За это сообщение автора поблагодарили: Rimantas (1).
Старый 26.11.2013, 12:12   #3  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от 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);
        }
    }
Здесь сбравсывается seriesSize
Спасибо за подсказку ! Я искал пока в классе BOMCalcConsumption . Так , значить надо ето место перебить ... Небудет влияния на других мест , кроме цены ?
Старый 26.11.2013, 15:51   #4  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от Rimantas Посмотреть сообщение
Спасибо за подсказку ! Я искал пока в классе BOMCalcConsumption . Так , значить надо ето место перебить ... Небудет влияния на других мест , кроме цены ?
Перебил в другом месте ( класс BomCalcItemLine ) :

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();
}
Теперь всё похоже на правду ...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Установка АХ 2009 duz DAX: Администрирование 8 10.08.2011 23:04
axinthefield: Dynamics AX Event IDs Blog bot DAX Blogs 0 01.03.2011 22:11
semanticax: Dynamics AX 2009 Installation - Application Blog bot DAX Blogs 0 22.12.2010 08:11
emeadaxsupport: List of fixes that improve performance of certain features in Dynamics AX 2009 Blog bot DAX Blogs 0 13.10.2009 19:06
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:45.