0

我正在尝试使用以下代码通过 Intuit.IPP API (Interop.QBFC12) 向供应商发出支票:

    IMsgSetRequest messageSet = session.CreateMsgSetRequest("US", 7, 0);
    ICheckAdd cheque = messageSet.AppendCheckAddRq();
    cheque.AccountRef.ListID.SetValue(vendor.ListID.GetValue());
    cheque.AccountRef.FullName.SetValue("myAccountName");
    cheque.TxnDate.SetValue(DateTime.Today);

    IMsgSetResponse responseSet = session.DoRequests(messageSet);
    IResponse response = responseSet.ResponseList.GetAt(0);
    responseType = (ENResponseType)response.Type.GetValue();
    if (responseType == ENResponseType.rtCheckAddRq)
        returnMessage = response.StatusMessage;

结果response.StatusMessage = "无法找到请求中指定的对象80000005-1374598713。" 指定的对象ID是我为供应商拉取的ListID。

我的编码几乎是盲目的,因为我发现 IPP 文档对第 12 版不是很有帮助或最新的。

我错过了什么?

4

1 回答 1

1

这个:

cheque.AccountRef.ListID.SetValue(vendor.ListID.GetValue());
cheque.AccountRef.FullName.SetValue("myAccountName");

是什么导致你的问题。

AccountRef 节点用于指定Account,而不是Vendor。帐户是 QuickBooks 会计科目表中的内容(“帐户”对象)。供应商是供应商列表中的东西(“供应商”对象),它们不是可互换的对象。

由于您已经设置了 AccountRef/FullName:

cheque.AccountRef.FullName.SetValue("myAccountName");

不需要设置AccountRef/ListID。

您应该始终设置 ListIDFullName - 没有理由同时设置两者(这只是引用同一对象的替代方法 - 两者都是 QuickBooks 的“外键”)。

你可能想要做的是像你想要的那样设置 AccountRef,但也要设置 PayeeEntityRef。例如:

cheque.PayeeEntityRef.ListID.SetValue(vendor.ListID.GetValue());

另外,关于这个:

我的编码几乎是盲目的,因为我发现 IPP 文档对第 12 版不是很有帮助或最新的。

IPP 与您使用的 API 完全不同。IPP 文档对您没有用处,因为它与您正在使用的 API 不相近。

您应该参考的是 QuickBooks OSR:

还有 QuickBooks SDK 可下载的 .EXE,它有一堆相关的 PDF 文档。

于 2013-07-24T00:58:01.397 回答