You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:57:25