Показать сообщение отдельно
Старый 24.04.2009, 11:06   #12  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Цитата:
Сообщение от Pantera Посмотреть сообщение
Меня интересует вкладка ЦЕНА/СКИДКА
Почему не идут там обновления, и влияет ли данная вкладка на что либо?
Это при том, что модель формирования цены: СРЕДНЕВЗВЕШЕННАЯ.

И опорная цена не обновляется.Там прописывается первоночальная,самая первая цена проставленная в Договоре.
Вкладка Цена/Скидка это интерфейс к таблице InventTableModule, цены из которой могут применяться при Стандартной модели формировании стоимости.

Вот вариант расчета опорной стоимости до наших доработок (метод на таблице PriceBaseData)

X++:
display CostPrice baseCostPrice()
{
    PriceModel priceModel = this.priceModel();
    ;

    switch (priceModel.CostModel)
    {
        case PriceCostModel::Purch:
            return Currency::amount(this.lastPurchaisePrice());
            
        case PriceCostModel::Standard:
            return Currency::amount(InventTableModule::find(this.ItemId, ModuleInventPurchSales::Invent).price());

        default:
            return InventSum::costPriceAvg(this.ItemId);
    }
}
По умолчанию расчитывается средневзвешенная цена, при модели формировании стоимости Стандартная - идем в InventTableModule. Ну и здесь же Последняя цена закупки.

У нас модель формирования стоимости Стандартная не используется - поэтому цены с вкладки Цена/Скидка ни на что не влияют. При средневзвешенной модели формировании стоимости тоже влиять не должно.

Если модель средневзвешенная то опорная должна меняться по алгоритму (метод на InventSum)

X++:
static server CostPrice costPriceAvg(ItemId _itemId)
{
    InventSum     inventSum;
    InventDimParm inventDimParm;
;
    InventDimParm.ItemIdFlag = NoYes::Yes;

    inventSum = InventSum::findSum(_itemId, null, inventDimParm, InventSumFields::All);
    inventSum.ItemId = _itemId;

    return Currency::amount(inventSum.costPricePcs());
}

Display CostPrice costPricePcs()
{
    InventModelGroup inventModelGroup = InventModelGroup::find(InventTable::find(this.itemId).modelGroupId);

    if (inventModelGroup.standardCost   ||
        this.postedQty      + (inventModelGroup.inclPhysicalValueInCost ? this.received - this.deducted : 0) <= 0 ||
        this.postedValue    + (inventModelGroup.inclPhysicalValueInCost ? this.physicalValue            : 0) <= 0
        )
    {
        return InventTable::findCostPcsPrice(this.itemId, this.inventDimId);
    }

    return (this.postedValue  + (inventModelGroup.inclPhysicalValueInCost ? this.physicalValue : 0)) /
           (this.postedQty    + (inventModelGroup.inclPhysicalValueInCost ? this.received - this.deducted : 0));
}
И это только в том случае, если у нас с вами прежние доработки совпадают.
У нас этот код уже переписан, и средневзвешенная считается иначе.