Acumatica - Как настроить формулу пересчета цен?

Меня попросили настроить формулу, которая вычисляет цену за единицу при использовании таблицы продажных цен. Вместо того, чтобы дисконтировать количество строк, они хотят сделать скидку на общее общее количество SO.

Цена за единицу Widget1 составляет 0,80, если заказано 100 штук. Цена за единицу Widget2 составляет 1,75, если заказано 150.

Строка заказа на продажу 1 предназначена для Widget1, количество единиц 200 ... цена единицы для этой строки будет 0,80. Строка заказа на продажу 2 предназначена для Widget2, unitqty 10 ... unitprice для этой строки будет 1,75, потому что она основана на общем количестве единиц, которое равно 210 (более 150).

Я не могу найти код расчета, чтобы его переопределить. У меня была идея / сохранить SOLine unitqty в переменной OldUnitQty / обновить SOLine untiqty до SOOrder unitqty / вызвать GetPriceCalculationScope / установить SOLine unitqty обратно в OldUnitQty

Я не уверен, что это хорошая идея или вообще сработает ли она. Может ли кто-нибудь дать мне несколько советов, как это сделать?


person Rowan    schedule 21.01.2020    source источник


Ответы (1)


Вы можете обработать событие обновления unitqty (где общее количество заголовка будет уже обновлено), проверить, превышает ли общее количество 150, и обновить стоимость единицы для текущей строки. Код будет таким:

protected virtual void SOLine_OrderQty_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e, PXFieldUpdated del)
{
    del?.Invoke(cache, e);

    SOLine line = (SOLine)e.Row;
    if (line != null)
    {
        if (Base.Document.OrderQty > ...)
        {
            line.CuryUnitPrice = ...;
        }
    } 
}
person Hayk    schedule 24.01.2020