Acumatica - Как настроить формулу пересчета цен? - PullRequest
0 голосов
/ 21 января 2020

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

Widget1 получает цену в размере 0,80, если заказано 100. Widget2 получает цену за единицу 1,75, если заказано 150.

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

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

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

1 Ответ

0 голосов
/ 24 января 2020

Вы можете обработать событие обновленного unitqty (где общее количество заголовков будет уже обновлено), проверить, превышает ли общее количество qty более 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 = ...;
        }
    } 
}
...