如何将SOOrder.OrderNbr添加至付款与应用屏幕(AR302000)的RefNbr选择器?
在AR302000待核销单据参考编号选择器中添加销售订单号的实现方法
1. 先搞懂AdjdRefNbr的特殊属性
ARAdjust的AdjdRefNbr字段用的不是标准PXSelector,而是Acumatica专为AR核销场景定制的**ARAdjustAdjdRefNbrAttribute**,默认仅包含AR类文档(发票、贷项通知单等)。要加入销售订单,需要修改这个属性的查询范围。
2. 扩展ARAdjust DAC替换原有属性
通过DAC扩展,替换AdjdRefNbr字段的属性,将SOOrder的数据合并进选择器:
public class ARAdjustExt : PXCacheExtension<ARAdjust> { [PXDBString(15, IsUnicode = true, InputMask = ">CCCCCCCCCCCCCCC")] [PXUIField(DisplayName = "Reference Nbr.", Visibility = PXUIVisibility.SelectorVisible)] // 自定义选择器,合并AR文档与销售订单数据 [PXCustomSelectorAttribute( typeof(Search2<ARAdjust.adjdRefNbr, LeftJoin<SOOrder, On<SOOrder.orderNbr, Equal<ARAdjust.adjdRefNbr>, And<SOOrder.orderType, Equal<ARAdjust.adjdDocType>>>>>), typeof(ARAdjust.adjdDocType), typeof(ARAdjust.adjdRefNbr), typeof(SOOrder.customerID), typeof(SOOrder.orderDate), typeof(SOOrder.status) )] [PXRestrictor(typeof(Where<ARAdjust.adjdDocType, In3<ARDocType.invoice, ARDocType.debitMemo, ARDocType.creditMemo>, Or<SOOrder.orderType, Equal<SOOrderTypeConstants.salesOrder>>>), "无效单据类型")] public virtual string AdjdRefNbr { get; set; } }
这里用
PXCustomSelectorAttribute重新定义选择器,通过左连接SOOrder表把销售订单号与AR文档号合并展示;用PXRestrictor过滤掉不符合业务要求的单据类型。
3. 调整选择器显示列(可选)
如果需要在选择器中展示销售订单的额外信息(比如订单日期、状态),直接在PXCustomSelectorAttribute的参数中添加对应字段,再去屏幕配置里调整选择器的列即可。
4. 处理核销逻辑(核心步骤)
原ARAdjust默认关联AR文档,加入销售订单后需确保核销逻辑能正确识别SO订单。扩展ARPaymentEntry图的字段更新事件,处理SO订单的属性映射:
public class ARPaymentEntryExt : PXGraphExtension<ARPaymentEntry> { public void ARAdjust_AdjdRefNbr_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e) { ARAdjust adj = e.Row as ARAdjust; if (adj == null) return; // 判断当前选择的是否为销售订单 SOOrder soOrder = PXSelect<SOOrder, Where<SOOrder.orderNbr, Equal<Required<SOOrder.orderNbr>>>> .Select(Base, adj.AdjdRefNbr); if (soOrder != null) { // 设置单据类型为SO(可根据业务自定义) adj.AdjdDocType = "SO"; // 同步客户ID等核心信息 adj.CustomerID = soOrder.CustomerID; } } }
注意:需根据自身业务需求调整后续核销逻辑,比如凭证生成、应收款冲抵等环节,确保销售订单与付款的关联流程符合业务规则。
5. 测试验证
部署自定义代码后,打开AR302000屏幕的「待核销单据」标签页,点击参考编号选择器即可看到销售订单号;测试选择SO订单后的核销流程,确认所有环节正常运行。
内容的提问来源于stack exchange,提问作者pmfith
相关产品推荐
相关产品推荐

