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

Acumatica 21R1 OpenAPI 2.0创建采购收据报curyid不能为空问题咨询

问题原因

  1. 会话分支上下文初始化异常
    就算Acumatica实例没有配置多分支机构,采购收据这类涉及财务核算的单据,也依赖分支上下文获取默认币种配置。你登录时将branch参数传为空值,且错误地将预生成的JSON字符串传给RestSharp的AddJsonBody方法,导致请求体被二次转义,最终会话的分支上下文没有正确初始化,系统无法取到默认币种,抛出curyid can not be null错误。
  2. 单据提交参数格式异常
    你手动将PurchaseReceipt对象序列化后再传给AddJsonBody,同样会触发二次序列化,导致提交的JSON结构不符合Acumatica OpenAPI要求,即便你取消币种参数的注释,字段也无法被系统正确识别。

修复方案

  • 修正登录请求逻辑
    不要传入预生成的JSON字符串,直接传入匿名对象让AddJsonBody自动序列化,同时补充实例的默认分支ID(可到Acumatica后台分支管理页面查询,哪怕仅有一个默认分支也必须填写):
// 替换原有的strBody定义和AddJsonBody代码
var loginBody = new {
    name = "admin",
    password = "[proper password]",
    tenant = "PWS Milwaukee",
    branch = "替换为你的实例默认分支编码"
};
request.AddJsonBody(loginBody);
  • 修正采购收据提交逻辑
    不要手动序列化PurchaseReceipt对象,直接将对象传给AddJsonBody即可,也可以按需显式指定币种参数:
PurchaseReceipt theRec = new PurchaseReceipt{ 
    Type = new StringValue { Value = "Receipt" },
    VendorID = new StringValue { Value = "V1002" },
    CurrencyID = new StringValue { Value = "USD" }
};
// 去掉JsonConvert.SerializeObject调用,直接传对象
request.AddJsonBody(theRec); 
  • 可选校验:若修复后仍报错,可检查供应商V1002的基础配置,确认其默认币种字段未被设为空值。

内容的提问来源于stack exchange,提问作者T-Rav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 17:45:03