我正在将QuickBooks(桌面版)与ASP.NET应用程序集成.为此,我使用的是QuickBooks Web Connector.如何为自定义Web服务创建.qwc文件?
我收到此错误:
由于以下错误,检索具有CLSID {6C9E80E3-B780-4361-A693-5E5C6BDC83A9}的组件的COM类工厂失败:80040154.
Dim smgrGlobal As QBSessionManager
smgrGlobal = New QBSessionManagerClass()
Run Code Online (Sandbox Code Playgroud)
第二行是错误的一行.
我只在QB2013和QBFC12上出现此错误.任何以前的版本都不会发生这种情况.
我可以找到,这个错误是由于应用程序没有为x86编译(如果使用"任何CPU").但是我已经设置我的应用程序编译为x86而不是"任何CPU"我仍然收到此错误.
我能够很好地提高销售订单,我认为修改已经存在的订单项看起来很有意义,但我该如何添加额外的订单项呢?
OSR对我来说似乎没有意义. https://developer-static.intuit.com/qbSDK-current/Common/newOSR/index.html
在我申请销售订单后,我会收到这些订单项:
<SalesOrderLineRet>
<TxnLineID>15-1379092567</TxnLineID>
<ItemRef>
<ListID>80000002-1379090362</ListID>
<FullName>4684</FullName>
</ItemRef>
<Desc>tester</Desc>
<Quantity>3</Quantity>
<Rate>600.00</Rate>
<Amount>1800.00</Amount>
<SalesTaxCodeRef>
<ListID>80000002-1378850266</ListID>
<FullName>Non</FullName>
</SalesTaxCodeRef>
<Invoiced>0</Invoiced>
<IsManuallyClosed>false</IsManuallyClosed>
</SalesOrderLineRet>
<SalesOrderLineRet>
<TxnLineID>16-1379092567</TxnLineID>
<ItemRef>
<ListID>80000001-1378935144</ListID>
<FullName>Test Item</FullName>
</ItemRef>
<Desc>Shipment</Desc>
<Quantity>5</Quantity>
<Rate>5.00</Rate>
<Amount>25.00</Amount>
<SalesTaxCodeRef>
<ListID>80000002-1378850266</ListID>
<FullName>Non</FullName>
</SalesTaxCodeRef>
<Invoiced>0</Invoiced>
<IsManuallyClosed>false</IsManuallyClosed>
</SalesOrderLineRet>
Run Code Online (Sandbox Code Playgroud)
现在这是有道理的,那么我看看SalesOrderMod的qbxml和我看到的订单项部分:
<SalesOrderLineMod> <!-- optional -->
<TxnLineID >IDTYPE</TxnLineID> <!-- required -->
<ItemRef> <!-- optional -->
<ListID >IDTYPE</ListID> <!-- optional -->
<FullName >STRTYPE</FullName> <!-- optional -->
</ItemRef>
<Desc >STRTYPE</Desc> <!-- optional -->
<Quantity >QUANTYPE</Quantity> <!-- optional -->
<UnitOfMeasure >STRTYPE</UnitOfMeasure> <!-- optional -->
<OverrideUOMSetRef> …Run Code Online (Sandbox Code Playgroud) 我正在建立一个简单的网站,我公司的客户可以查看过去12个月的报表,以及他们当前的余额.为此,我将使用QuickBooks Web连接器将必要的数据从我们的QuickBooks公司文件导出到MySQL数据库(通过ConsoliBYTE的PHP DevKit).
但是,我对QuickBooks本身并不十分精通,所以我的问题是:为了计算准确的客户余额,我需要在哪些字段中存储QBXML响应以存储在数据库中?
我不知道哪种类型的交易可以促成或影响余额(除了发票),所以我不知道在InvoiceQuery和CustomerQuery之外要做出哪些QBXML请求.
我也意识到Keith Palmer 的这篇文章,它暗示发票余额本身并不一定可靠:
"发票余额可以更改而不会更改发票本身(因为余额是从其他记录计算的字段,而不是发票本身的字段)"
我不知道每次Web连接器运行时是否更好地替换数据库中的所有Invoice数据,或者自己从相关记录计算Invoice余额,在这种情况下,我需要哪些数据来计算Invoice余额?
@ consolibyte的答案似乎是获得客户余额的最简单方法,所以我已经接受了它,即使它对我的具体用法不够冗长.
@Hpjchobbes的回答对于获取QuickBooks内置的Balance Detail报告非常有用.
我还添加了自己的答案,因为我需要提供一个完整的逐项清单.它似乎工作正常,但可能会出现失败的情况.
我尝试连接到Quickbooks时收到错误-2147220472.该应用程序由Windows服务执行.日志文件如下:
I 8788 RequestProcessor ========= Started Connection =========
I 8788 RequestProcessor Request Processor, QBXMLRP2 v12.0
I 8788 RequestProcessor Connection opened by app named 'QBWatcher'
I 8788 RequestProcessor OS: Microsoft Professional (build 9200), 64-bit
I 8788 RequestProcessor Current Process is elevated
I 8788 RequestProcessor Current User is in AdminGroup
I 8788 RequestProcessor Current Process is ran as Admin
I 8788 RequestProcessor Current Process Integrity Level : 3000
I 8788 RequestProcessor Previous instance of QB is going down..! Wait and retry to …Run Code Online (Sandbox Code Playgroud) 我正在使用QuickBooks Web Connector使用QBXML请求将员工记录从Windows 8.1计算机上的QuickBooks Desktop中拉出。是否有原因导致TimeModified时间戳返回的偏移量不占夏时制时间的原因?有没有一种方法可以获取主机系统上的当前时间?
即使当前时区已设置为“东部时间”并启用了“调整夏令时”,当前仍为TimeModified返回“ 2014-03-27T14:20:53-05:00”。偏移量应为-04:00。
QBXML请求:
<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="12.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<EmployeeQueryRq metaData="MetaDataAndResponseData">
<OwnerID>0</OwnerID>
</EmployeeQueryRq>
</QBXMLMsgsRq>
</QBXML>
Run Code Online (Sandbox Code Playgroud) 我在许多程序上执行技术支持和一些开发,这些程序使用QuickBooks SDK来执行各种功能.最近我注意到当用户执行以下操作时:
先决条件: - QuickBooks未在桌面上打开,并且当前未运行. - 我的桌面程序未在QuickBooks集成应用程序列表中设置以自动登录.
1)打开我的一个程序.
2)执行启动与QuickBooks的连接和会话的操作.
3)QuickBooks界面返回一个错误,指出您必须打开QuickBooks并登录到公司文件才能执行此操作.
4)我的程序关闭会话和连接,然后向用户显示一些对话框,为他们提供故障排除提示.
结果:
QuickBooks本身继续作为QBW32.exe在后台运行,即使会话和连接都已关闭.
如果用户然后尝试打开QuickBooks桌面程序,则会收到错误消息,告诉他们QuickBooks已在运行.然后,他们必须在Windows中打开任务管理器并关闭正在运行的QBW32.exe,然后才能成功打开QuickBooks.
我已经使用我在下面编写的非常基本的C#程序重现了这一点.
在测试应用程序中,我使用以下步骤/方案:
先决条件:1)测试应用程序未设置为自动登录到QuickBooks.它设置为仅在用户打开QuickBooks桌面程序并且具有打开的公司文件时登录.
2)确保在下面的测试之前没有打开QuickBooks.
脚步:
1)打开测试C#应用程序
2)按下"打开连接"按钮.应通过QBXML互操作与QuickBooks的界面打开连接.
3)按"开始会话"按钮.应该使用QuickBooks启动会话.
4)假设上面的测试预先请求已经满足,您应该收到QuickBooks返回的错误消息,告诉您应用程序未设置为自动登录,您需要先打开QuickBooks才能尝试会话.
5)QBW32.exe现在应该在后台运行.
6)按下结束会话的按钮.这应该使用QuickBooks界面结束会话.无论如何,会话应该已经通过步骤3按钮中的try-catch结束.
7)按"关闭连接"按钮.这应该关闭与QuickBooks的所有连接.
8)即使会话和连接已经结束并关闭,QBW32.exe仍然在后台运行.
9)使用退出按钮关闭测试应用程序.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
using Interop.QBXMLRP2;
namespace Open_Connection
{
public partial class Form1 : Form
{
bool sessionBegun = false;
bool connectionOpen = false;
RequestProcessor2 rp = null;
string ticket;
public Form1()
{
InitializeComponent();
}
private …Run Code Online (Sandbox Code Playgroud) 我正在使用 QBXML 并尝试将付款应用于 ReceivePaymentAddRq 中的特定发票。我收到的消息显然很常见,“找不到请求中指定的对象 TxnID”。一旦将 ARAccountRef 字段添加到请求中,有关此主题的大多数其他论坛主题都会得到解决,这对我来说似乎没有什么影响。
我已查询了 TxnID 68B4-1290718970 的发票并验证了以下内容:
我的 XML 请求如下。我缺少什么?
谢谢
<QBXML>
<QBXMLMsgsRq onError = "continueOnError">
<ReceivePaymentAddRq requestID = "0">
<ReceivePaymentAdd>
<CustomerRef>
<ListID>80000111-1286514304</ListID>
</CustomerRef>
<ARAccountRef>
<ListID>80000091-1273734429</ListID>
</ARAccountRef>
<TxnDate>2010-11-10</TxnDate>
<RefNumber>2999 </RefNumber>
<TotalAmount>15.95</TotalAmount>
<PaymentMethodRef>
<ListID>80000002-1273560098</ListID>
</PaymentMethodRef>
<Memo>_32T0DE94J</Memo>
<DepositToAccountRef>
<ListID>80000090-1273734138</ListID>
</DepositToAccountRef>
<AppliedToTxnAdd>
<TxnID>68B4-1290718970</TxnID>
<PaymentAmount>15.95</PaymentAmount>
</AppliedToTxnAdd>
</ReceivePaymentAdd>
</ReceivePaymentAddRq>
</QBXMLMsgsRq>
</QBXML>
Run Code Online (Sandbox Code Playgroud) 我已经在 QBSDK_ProGuid.pdf 文件(第 117 页)上看到了有关迭代的文档。我很困惑如何再次发出相同的查询并将迭代器值设置为“继续”,并将 IteratorID 字段设置为从第一次查询迭代返回的 IteratorID 值。
<?xml version="1.0" ?>
<?qbxml version="5.0" ?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<CustomerQueryRq requestID="5001" iterator="Continue"
iteratorID="{D7355385-A17B-4f5d-B34D-F34C79C3E6FC}">
<MaxReturned>10</MaxReturned>
<IncludeRetElement>ListID</IncludeRetElement>
</
CustomerQueryRq>
</QBXMLMsgsRq>
</QBXML>
Run Code Online (Sandbox Code Playgroud)
我正在关注由 intuit 提供的 WCWebService 示例...并获取客户数据..任何人都可以提供一个使用迭代概念的示例。谢谢 !
我编写了一个代码,使用quickbooks Web连接器将购物车与quickbooks集成在一起。问题是,当我尝试找出按名称和电子邮件过滤的快速手册中是否有客户时。我尝试了这个:
<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="9.0"?>
<QBXML>
<QBXMLMsgsRq onError="continueOnError">
<CustomerQueryRq>
<FullName>Mladen Petrov</FullName>
<Email>bksi@abf.cd</Email>
</CustomerQueryRq>
</QBXMLMsgsRq>
</QBXML>
Run Code Online (Sandbox Code Playgroud)
但是它给我返回了一个错误。有没有一种方法可以通过名称和电子邮件找到速记本客户,或者我必须获得所有QB客户并以某种方式将他们的QB ID存储到我的数据库中?