Рассчитать значение поля по атрибуту PXformula в Acumatica - PullRequest
0 голосов
/ 29 марта 2020

Я использую pxformula для умножения значений, но не смог получить его. когда я умножил значения констант, такие как decimal100 * decimal100, это дало мне результат. но когда я использую avgcost, он не работает. Я думаю, что avgcost, используемый в pxformula, исходит из таблицы INItemCost. Ниже приведена статья, которую я получил от acumatica.

Вы можете использовать предопределенные атрибуты PXFormula и PXUnboundFormula в классах доступа к данным (DAC), чтобы вычислять значения полей из значений той же записи данных . Вы также можете рассчитать агрегированные значения по записям подробных данных и назначить агрегированное значение полю записи основных данных.

enter image description here

На снимке экрана не отображается результат , enter image description here

Пожалуйста, посоветуйте мне разобраться с этим.

1 Ответ

2 голосов
/ 30 марта 2020

В этом случае вы хотите обновить значения из DA C CSAnswer информацией из DA C INItemCost . Насколько я понимаю, атрибут PXFormula [] может использоваться для обновления значений из той же записи DA C и / или для агрегированных вычислений.

Типичный пример : Сетка Цена за единицу и Количество используются для получения Расширенная цена (значения из той же записи DA C). И этот результат обновляется в итоговой сумме документа (агрегированной итоговой). Я не видел, чтобы он использовался в примере, подобном вашему.

Однако я смог обновить значение с помощью этого альтернативного подхода:

  public class InventoryItemMaint_Extension : PXGraphExtension<InventoryItemMaint>
  {  
       protected virtual void CSAnswers_Value_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
       {
           if (e.Row == null) return;

          CSAnswers answer = (CSAnswers)e.Row;
          CSAnswersExt answerExt = sender.GetExtension<CSAnswersExt>(answer);

          if (answerExt != null)
          {

              INItemCost itemCost = PXSelect<INItemCost, Where<INItemCost.inventoryID, Equal<Required<InventoryItem.inventoryID>>>>.Select(this.Base, this.Base.Item.Current.InventoryID);

              if (itemCost != null && itemCost.AvgCost != null)
              {
                  answerExt.UsrPrice = itemCost.AvgCost * (decimal)365;
              }
          }
        }
    }

Результат

enter image description here

Дополнительные примечания

  • Я использовал поле CSAnswers_Value для обновления данных, учитывая, что средняя стоимость является отключенным полем
  • Этот лог c будет обновлять UsrPrice в новых записях и для определенных строк атрибута c, которые обновляются. Если вы хотите массово обновить существующие данные, вам придется использовать дополнительные логи c.
...