2013-05-31 30 views
0

我是一名python開發人員,而不是QB用戶,所以請原諒我使用較差的術語。要求QB進行檢查,稍後再獲取支票信息

我們有一個內部網絡應用程序,財務人員使用它來識別特定收款人的小額支付請求。然後他們使用QB生成支票來支付該收款人。然後他們手動輸入支票號碼並將其重新輸入到Web應用程序中。我正在修改Web應用程序,以便財務人員可以使用該應用程序將支付請求捆綁在一起,並且 - 我希望 - 向QB發送請求以進行支票,每個收款人一個。要發送的數據將是收款人信息,支票金額以及其他所需的數據。從QB(稍後)返回的數據將是支票號碼和支票日期以及一些標識符,我可以使用它們將它與先前發送的請求進行匹配。

與QB實現此通信的最佳方式是什麼?

+0

更新:現在我們已經實現了一個解決方案,使用iif文件從我們的應用程序導出並導入事務數據(一個文件用於請求檢查,另一個用於創建發票),我們知道只有QB管理員可以導入iif文件。此外,財務部門問我們爲什麼不能只使用Transaction Pro。 – marlacparker

回答

2

我使用python3構造qbXML查詢,並使用Elementree來解析響應。 我也使用非Windows機器進行開發。我發現我真的需要在Windows VM中共同使用QB和Python來取得進展。 QB和COM都需要它。

這裏是在Python 3.1幾個片段,顯示我如何做到這一點:

首先,使用COM來從QuickBooks連接到的QuickBooks和斷開。

import win32com.client 

def start(external_application_name): 
    """Connect a QuickBooks instance using COM. Start QB if needed""" 

    SessionManager = win32com.client.Dispatch("QBXMLRP2.RequestProcessor") 
    # Example only - insecure! 
    SessionManager.OpenConnection('', external_application_name) 
    return SessionManager 

def stop(SessionManager): 
    """Disconnect from the existing Quickbooks instance.""" 
    SessionManager.CloseConnection() 
    return 

接下來,我使用python來執行邏輯,構造qbXML查詢,並將響應解析到ElementTree中。

import xml.etree.ElementTree as etree 

def xml_query(QB_SessionManager, company_file_path, qbXML_query_string): 
    """ 
    Do a QuickBooks QBXML query. 
    The query must be valid - this function doesn't do error checking. 
    Return an ElementTree of the XML response. 
    """ 
    ticket = QB_SessionManager.BeginSession(company_file_path, 0) 
    response_string = QB_SessionManager.ProcessRequest(ticket, qbXML_query_string) 
    #print(response_string) # Debug tool 
    SessionManager.EndSession(ticket) 
    QBXML = etree.fromstring(response_string) 
    response_tree = QBXML.find('QBXMLMsgsRs') 
    #etree.dump(QBXML)  # Debug tool 
    return response_tree 

實際qbXML查詢字符串和響應字符串進行了檢查查詢現於https://member.developer.intuit.com/qbSDK-current/Common/newOSR/index.html 那裏qbXML參考,你會看到,你可以下載由收款人,日期範圍過濾檢查數據,支票號碼範圍,等等。

您可以將多個XML查詢或事務鏈接到一個大的XML文件中。分配每個唯一的請求號碼(例如:<CustomerQueryRq requestID="1">),以便您找到正確的響應。

使用<IncludeRetElement>標記來限制回覆大小,並加快搜索速度。

+0

感謝您的詳細解答,非常感謝。我前一天去度假,剛回來。我把這件作品交給了一名同事,他是在我出門時注意到你的答覆的人,他建議我們做類似的事情。謝謝! – marlacparker

+0

我已經完成了qb syncronziation的完整解決方案,但多線程的主要問題不起作用.... qb的最大問題。我管理單線程,但即使僅使用單線程票證,也只能使用一次。 –

1

由於您的應用程序不是SaaS應用程序,因此您可以在此用例中使用qbsdk。 sdk下載鏈接 - https://developer.intuit.com/docs/0025_quickbooksapi/0055_devkits

不再支持IIF文件。 IIF文件可以直接導入到QB中,但它可以繞過所有的業務邏輯。

+0

@ManusMukherjee,謝謝你的回覆!實際上,它是一個SaaS應用程序,但爲了避免通過防火牆進行通信,我認爲正確的做法是讓我的應用程序將數據傳遞給客戶端輔助應用程序,以用於從防火牆內的QB請求支票的單個窄用例。根據您的回答,我現在正在調查使用: - QuickBooks SDK 12.0 - QBXML請求處理器API - QuickBooks Web連接器 - Quickbooks企業解決方案:專業服務12。0發佈(財務正在使用) 我的下一個障礙是我在Mac上開發,QBSDK顯然只適用於Windows。 – marlacparker

+0

嗨,不幸的是,QuickBooks REST API不支持Mac版本的QuickBooks,但僅支持Windows版本。 –

+0

@JarredKeneally - 謝謝。我們的財務部門肯定會在Windows上運行QB。我在Mac上做我的開發,但是我們有可用於測試或這種特殊情況開發的窗口框。 – marlacparker