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

如何在QuickBooks中自动结清新建SalesOrder记录的未结余额?

解决QuickBooks销售记录显示未结余额&Open状态的问题

嘿,我来帮你搞定这个问题!你用nsoftware InQB SDK创建的销售订单显示未结余额和Open状态,主要原因是QuickBooks里的Sales Order(销售订单)本身就是待履行的意向订单,默认状态就是Open,未结余额等于订单总金额——因为它还没关联发票或收款流程。咱们分两种场景来解决:

场景1:你实际想要创建已开单且结清的销售记录(比如现金销售)

如果你的业务是直接完成收款的销售,不该用Salesorder对象,应该用SalesReceipt(销售收据)或者Invoice(发票+标记已付款)。这里给你用SalesReceipt的代码示例,它会直接记录已收款的销售,不会有未结余额:

var total = "999";
var connectionString = config.ToString();

// 使用SalesReceipt对象,对应已收款的现金销售
var salesReceipt = new nsoftware.InQB.SalesReceipt {
    QBConnectionString = connectionString,
    CustomerName = "Internal Application Test",
    TotalAmount = total
};

var receiptItem = new SalesReceiptItem();
receiptItem.ItemName = "Daily Cash Sales Test";
receiptItem.Amount = total;
salesReceipt.Items.Add(receiptItem);

// 提交到QuickBooks
salesReceipt.Add();

场景2:你确实需要创建销售订单,但要标记为已完成

如果你的需求就是创建销售订单,只是希望它不再显示Open状态和未结余额,需要做两个关键设置:

  • 把订单的Status设为"Closed"
  • 给每个行项设置QuantityFulfilled等于Quantity(标记已发货)

修改后的代码如下:

var total = "999";
var connectionString = config.ToString();

var salesOrder = new nsoftware.InQB.Salesorder {
    QBConnectionString = connectionString,
    CustomerName = "Internal Application Test",
    Status = "Closed" // 标记订单为已关闭
};

var salesOrderItem = new SalesOrderItem();
salesOrderItem.ItemName = "Daily Cash Sales Test";
salesOrderItem.Quantity = 1; // 假设数量为1
salesOrderItem.QuantityFulfilled = 1; // 标记该商品已发货
salesOrderItem.Amount = total;
salesOrder.Items.Add(salesOrderItem);

// 提交到QuickBooks
salesOrder.Add();

额外说明

QuickBooks的对象逻辑很清晰:

  • Salesorder:待履行的客户订单,默认Open状态,未结余额是订单总额,需要后续生成发票或收款后才会清零
  • Invoice:已开单但可能未收款的记录,会显示未结余额,需要用ReceivePayment来关联收款
  • SalesReceipt:已收款的销售记录,无未结余额,状态默认是Completed

内容的提问来源于stack exchange,提问作者Dan Beaulieu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:43:44