如何通过代码创建采购订单?序列编号生成错误修复咨询
如何通过代码创建采购订单 & 修复编号序列报错问题
我来帮你一步步解决这两个问题哈:
1. 通过代码创建采购订单的完整流程
要在Acumatica里用代码创建采购订单,核心是依托POOrderEntry图来处理单据的插入和保存,步骤如下:
- 首先初始化采购订单的处理图实例:
POOrderEntry poGraph = PXGraph.CreateInstance<POOrderEntry>(); - 创建采购订单对象并设置必填核心字段——
OrderType、VendorID、BranchID这三个是绝对不能少的,其他字段按需补充:POOrder newPO = new POOrder(); newPO.OrderType = "NORMAL"; // 这里要和系统中配置的采购订单类型代码一致,通常是大写 newPO.VendorID = 123; // 替换成系统中存在的供应商ID // 获取系统默认分支(也可以指定特定分支ID) Branch defaultBranch = PXSelect<Branch>.Select(poGraph); newPO.BranchID = defaultBranch.BranchID; newPO.OrderDesc = "通过代码创建的测试采购订单"; newPO.Hold = false; // 如果不需要挂起订单就设为false - 将订单对象插入到图的
Document数据视图,让系统处理字段默认值和关联逻辑:newPO = poGraph.Document.Insert(newPO); - (可选)如果需要添加采购订单行,初始化
POOrderLine并插入到Transactions数据视图:POOrderLine poLine = new POOrderLine(); poLine.InventoryID = 456; // 替换成实际的库存ID poLine.OrderQty = 10M; poLine.UnitPrice = 5.99M; poGraph.Transactions.Insert(poLine); - 最后调用保存按钮提交订单:
poGraph.Save.Press();
2. 修复"CS Error: 无法生成序列的下一个编号"报错
这个报错本质是系统找不到采购订单编号的生成规则,或者前置必填字段缺失导致流程异常,我帮你梳理几个关键排查点:
可能的原因及修复方案:
- 缺失
BranchID字段:Acumatica的采购订单编号序列是和分支(Branch)绑定的,代码里没设置BranchID的话,系统找不到对应的序列规则,直接报编号生成失败。补充分支设置:Branch defaultBranch = PXSelect<Branch>.Select(graph); order.BranchID = defaultBranch.BranchID; - 未设置
VendorID:采购订单是供应商关联单据,VendorID是必填项,缺少它会导致系统内部流程异常,间接引发序列生成失败。一定要给POOrder对象设置有效的供应商ID。 - 订单类型的编号序列未配置:检查你代码中用的
OrderType(比如"Normal")是否在系统配置里设置了编号序列。路径:采购管理 > 配置 > 订单类型,找到对应类型,确认“编号序列”字段已配置且序列本身是有效的。 - 订单插入方式不正确:不要直接给POOrder对象赋值后就保存,应该先通过
graph.Document.Insert()把对象加入数据视图,让系统处理默认值和序列逻辑,再设置字段并保存。调整后的代码示例:protected void createPO() { POOrderEntry graph = PXGraph.CreateInstance<POOrderEntry>(); POOrder order = new POOrder(); // 先插入空对象,触发系统初始化逻辑 order = graph.Document.Insert(order); // 再设置字段 order.OrderType = "NORMAL"; // 注意和系统配置的类型代码大小写一致 order.OrderDesc = "some text"; order.EmployeeID = 215; order.Hold = false; // 补充必填的VendorID和BranchID order.VendorID = 123; // 替换为系统中存在的供应商ID Branch defaultBranch = PXSelect<Branch>.Select(graph); order.BranchID = defaultBranch.BranchID; // 提交保存 graph.Save.Press(); }
内容的提问来源于stack exchange,提问作者JackZeng
相关产品推荐
相关产品推荐

