如何通过Acumatica API实现单张支票自动打印与账单处理
Acumatica API 单张支票全流程处理实现方案
单张支票处理不需要复用批量逻辑的批次层逻辑,直接基于AP付款(AP305000 付款与核销屏幕)实体做单实体生命周期操作即可,全流程实现步骤如下:
前置说明
- 接口直接使用Acumatica默认Default端点即可,版本匹配你当前实例版本(如2023R2/2024R1),不需要额外启用批量处理相关的接口参数
- 现有批量逻辑里的批次创建、批量队列提交、批量筛选处理的步骤全部可以跳过,全程绑定单个Payment实体实例操作即可
步骤1:单张支票创建
初始化Payment实体对象时,核心字段配置注意和批量逻辑做区分:
- 付款类型字段赋值为
Check,不要用批量逻辑里的BatchCheck类型 - 正常赋值供应商ID、付款日期、现金账户、付款金额等基础必填字段
- 待核销的账单直接在
Applications数组下添加单条关联记录,填入对应账单的单据类型、参考号、核销金额即可,不要给BatchID字段赋值,一旦赋值系统会自动把支票归到批量处理队列,无法走单张流程 - 提交时直接将Hold字段设为
false,跳过待提交批次的暂存环节 - 调用
Put接口提交单条记录后,拿到系统返回的支票主键(Type + RefNbr)即可,创建成功的初始状态为Pending Print
参考调用片段(基于Acumatica官方REST SDK):
var singleCheck = new Payment { Type = new StringValue { Value = "Check" }, VendorID = new StringValue { Value = "V000217" }, PaymentDate = new DateTimeValue { Value = DateTime.Now }, CashAccount = new StringValue { Value = "1020-01" }, PaymentAmount = new DecimalValue { Value = 3680.5m }, Hold = new BooleanValue { Value = false }, Applications = new[] { new ApplicationDetail { DocType = new StringValue { Value = "Bill" }, RefNbr = new StringValue { Value = "B001294" }, AmountPaid = new DecimalValue { Value = 3680.5m } } } }; var createdRes = client.Put<Payment>( entitySet: "Payment", entity: singleCheck, parameters: new { returnBehavior = "Standard" } );
步骤2:单张支票打印
拿到创建成功的支票主键后,不需要调用批量打印的ProcessBatchChecks接口,直接调用单条记录绑定的打印动作即可:
- 动作名为
PrintCheck,调用时传入对应支票的Type和RefNbr作为主键参数 - 接口会直接返回生成的支票PDF文件流,可直接在自有应用内做预览、本地存储、推送打印设备的处理
- 打印成功后系统会自动将支票状态更新为
Pending Release - 如果需要重打,调用时追加参数
reprint = true即可,不需要走批量重打的审批流程
参考调用片段:
var printRes = client.Post( entitySet: "Payment", key: new { Type = createdRes.Type.Value, RefNbr = createdRes.RefNbr.Value }, action: "PrintCheck" ); // 直接读取返回字节流为PDF文件 byte[] checkFileBytes = printRes.RawBytes;
步骤3:支票释放与账单关闭
打印完成后直接调用单条记录的释放动作,不需要走批量释放队列:
- 动作名为
Release,同样传入支票的Type和RefNbr作为主键 - 接口返回成功后,系统会自动完成支票过账、对应账单核销的逻辑,关联账单状态会自动更新为
Closed - 可在调用后追加一次
Get请求拉取支票最新状态,确认状态变为Released即代表全流程完成 - 如果出现释放后账单未关闭的异常,直接检查
Applications数组下对应账单行的Balance字段,确认核销金额和账单应付余额完全一致即可,不需要做批量对账操作
常见踩坑点
- 不要复用批量逻辑里的
BatchPayment实体做单张处理,该实体是专门绑定批次使用的,单张操作直接用基础Payment实体即可 - 所有动作调用都直接绑定单条支票的主键(Type+RefNbr),不要传任何批次筛选类参数
- API账号不需要分配批量付款处理的权限,只要有AP付款录入、打印、释放的基础权限即可跑通全流程
- 不要在单张支票上赋值
BatchSeq之类的批次关联字段,否则会被系统强制归入批量处理流程,单张调用动作会报权限或流程错误
内容的提问来源于stack exchange,提问作者Dipole-Dev
相关产品推荐
相关产品推荐

