Acumatica采购收货上架页新增GS1客户零件号条码支持及重写问题
Acumatica采购模块「Receive and Put Away」页面新增GS1客户零件号支持方案
基础扩展错误修复
CS0311报错的核心原因是PX.Objects.PO.WMS.ReceivePutAway属于WMS扫描场景专用BLC,继承自WMSScanGraph基类而非普通PXGraph,不能直接使用PXGraphExtension<T>扩展,正确的扩展基类为WMSScanGraphExtension<T>。
代码重写实现方案
GetGS1ApplicationSteps方法可通过[PXOverride]特性配合原生委托调用实现重写,无需修改系统原生代码,完整实现示例如下:
using PX.Data; using PX.WMS; using PX.Objects.PO.WMS; using System.Collections.Generic; using System.Linq; public class ReceivePutAway_Extension : WMSScanGraphExtension<ReceivePutAway> { // 启用GS1支持(若原有属性为关闭状态) [PXOverride] public virtual bool GS1Support => true; // 重写GS1应用步骤,新增客户零件号支持 [PXOverride] public virtual IEnumerable<GS1ApplicationStep> GetGS1ApplicationSteps(Func<IEnumerable<GS1ApplicationStep>> baseMethod) { var originalSteps = baseMethod?.Invoke() ?? new List<GS1ApplicationStep>(); // GS1标准中客户零件号对应应用标识符为241,若使用自定义AI可替换对应值 var customerPartStep = new GS1ApplicationStep( ai: "241", apply: (scannedValue, scanState) => { // 示例逻辑:将扫描值赋值到当前入库单行的客户零件号字段 if (scanState.Document is POReceiptLine currentLine) { currentLine.CustomerPartNumber = scannedValue.Trim(); } // 需添加校验逻辑可在此处实现,不满足条件直接返回false即可抛出扫描错误 return true; } ); return originalSteps.Concat(new[] { customerPartStep }); } }
优先尝试无代码配置方案
版本在2022 R1及以上的Acumatica实例,可先通过平台原生配置实现需求,无需开发:
- 打开条码扫描设置页面(路径:配置→条码扫描→条码扫描设置,页面ID CS102000)
- 筛选找到「Receive and Put Away」对应的扫描场景配置项
- 进入GS1规则配置标签页,新增一条规则,应用标识符填
241,目标字段绑定采购入库单行的CustomerPartNumber字段 - 保存配置后清空站点缓存即可生效
生效验证说明
代码实现完成后需要执行以下操作验证:
- 重新发布所有自定义项目
- 清空浏览器缓存和站点服务器缓存
- 进入WMS的Receive and Put Away页面扫描带241AI的GS1条码,确认客户零件号字段可正常赋值
内容的提问来源于stack exchange,提问作者David F
相关产品推荐
相关产品推荐

