调用SalesInvoice REST API创建Cash Sale报CurrentDocument提交失败
问题原因
调用entity/Default/18.200.001/SalesInvoice端点创建Cash Sale单据返回The system failed to commit the CurrentDocument row错误,核心是请求体存在三类问题:
- 传入了大量系统只读/计算字段:直接复用GET返回的全量字段时,
Amount、Balance、CashDiscount、CreditHold、VATExemptTotal、VATTaxableTotal、明细行的Amount、DiscountAmount、LineNbr、FinancialDetails下的BatchNbr、CustomerTaxZone都是后端根据业务规则自动计算/生成的字段,手动传值会触发校验冲突,哪怕值和系统计算结果完全一致也可能拦截提交。 - 缺失Cash Sale专属必填字段:Cash Sale和普通赊销发票不同,创建时必须指定支付方式、对应现金账户,否则系统无法完成现金类交易的账务落账,这是触发该报错的最常见原因。GET返回结果中这两个字段如果没有做扩展映射默认不会出现在响应里,直接复用响应体自然会缺失。
- 冗余字段干扰:
rowNumber是接口分页/批量操作的定位参数,单条创建时不需要传递;空值的CustomerOrder、和Cash Sale即时结清属性冲突的DueDate也可能触发字段校验逻辑拦截。
修复步骤
- 清理所有只读、计算、冗余字段,只保留业务可配置的传值字段
- 补充
PaymentMethod(支付方式)、CashAccount(现金账户)两个必填字段,取值和你之前GET到的已生效Cash Sale保持一致即可 - 如果编号序列配置为自动生成,可移除
ReferenceNbr字段让系统按规则自动生成单据编号,避免手动传入的编号不符合规则触发校验失败
最小可用请求示例
{ "Type": {"value": "Cash Sale"}, "ReferenceNbr": {"value": "POS15841581"}, "Hold": {"value": true}, "Date": {"value": "2022-07-14T00:00:00+00:00"}, "CustomerID": {"value": "ABB001"}, "Currency": {"value": "USD"}, "Branch": {"value": "QI"}, "Project": {"value": "X"}, "PaymentMethod": {"value": "替换为原Cash Sale对应的支付方式ID,例如CASH"}, "CashAccount": {"value": "替换为原Cash Sale对应的现金账户ID,例如10200"}, "Details": [ { "BranchID": {"value": "QI"}, "InventoryID": {"value": "115"}, "WarehouseID": {"value": "01"}, "Location": {"value": "XX"}, "UOM": {"value": "EACH"}, "Qty": {"value": 1.000000}, "UnitPrice": {"value": 20.000000}, "ManualDiscount": {"value": false}, "DiscountPercent": {"value": 0.000000}, "TaxCategory": {"value": "TAXABLE"}, "TransactionDescr": {"value": "BOSC001 test"} } ] }
额外排查项
如果调整后仍报错,优先检查两个配置:
- 确认
Project字段取值X是当前环境配置的默认无项目编码,部分环境默认无项目编码为000000,取值不匹配会导致单据头提交失败 - 确认明细行中
Location取值XX属于客户ABB001下的有效发货地点,无效地点值会触发行级校验失败
内容的提问来源于stack exchange,提问作者bryan
相关产品推荐
相关产品推荐

