我添加了 2 个 USR 字段来更改调整屏幕上交易网格的数量,用户字段用法如下...
第一个 (Qty On Hand) 包含他们在所选位置和 LotSerialNbr 中此项目的现有 Qty。
第二个(物理数量)是设置他们想要在(位置 - LotSerialNbr)上拥有的剩余数量。
当用户打开调整屏幕时,它会显示具有相同数量的两个字段,例如,现有数量 = 100 和物理数量 = 100,因此交易屏幕的数量必须为零(意味着他们不想调整任何东西)如果用户更改了物理量,系统需要计算出要调整的数量,例如,手头数量 = 100,物理数量 = 50 表示数量必须为 -50,因此 Acumatica 将数量调整为 50。
我试图通过更改 Physical Qty USR 字段的 FieldUpdated 事件上的 Qty 来做到这一点,但 LotSerialNbr 有时会消失,并且在 INTran 的 RowUpdated 事件中,调整的总数量不会改变其值
protected virtual void _(Events.FieldUpdated<INTranTGExt.usrQtyPhysical> e)
{
if (e.Row == null) return;
INTran iNTranRow = (INTran)e.Row;
INTranTGExt iNTranTGExtRow = PXCache<INTran>.GetExtension<INTranTGExt>(iNTranRow);
Base.transactions.Cache.SetValueExt<INTran.qty>(iNTranRow, (iNTranTGExtRow.UsrQtyOnHand - (iNTranTGExtRow.UsrQtyPhysical)) * (-1));
}
protected virtual void _(Events.RowUpdated<INTran> e)
{
if (e.Row == null) return;
INTran iNTranRow = (INTran)e.Row;
INTranTGExt iNTranTGExtRow = PXCache<INTran>.GetExtension<INTranTGExt>(iNTranRow);
Base.transactions.Cache.SetValueExt<INTran.qty>(iNTranRow, (iNTranTGExtRow.UsrQtyOnHand - (iNTranTGExtRow.UsrQtyPhysical)) * (-1));
}