Tips and FAQ

Tax Object Mappings

There is a small difference between what we call a few objects in Quickbooks Enterprise and how QuickBooks refers to them. 

  • tax-rate is called ItemsSalesTax in Quickbooks Enterprise. 
  • tax-code is called SalesTaxCode in Quickbooks Enterprise. 

When mapping fields to a virtual data resource, be sure to look for the Quickbooks Enterprise object name and not the Cloud Elements object name. 

What versions of Quickbooks are supported?

Ground2Cloud uses the QuickBooks SDK, and supports every version of QuickBooks that is supported by that SDK. This includes all United States, Canada and UK versions of QuickBooks from 2012->2018.

The QuickBooks Enterprise (QBE) Element itself supports CA and UK in terms of the functionality that the SDK supports, but there may be limitations in the QBE element resources for CA and UK versions. This limitation is because the CA and UK versions have all the same endpoints and use the same SDK, but the difference is that there may be extra or missing fields depending on the specific endpoint. As part of development for the QBE element to officially support QuickBooks Canada and UK versions the models will need to be updated to accurately reflect accepted fields for the CA/UK versions; if you have a specific requirement please reach out to your contacts at Cloud Elements to ensure your use case is supported.

It is also important to note that the QBE element supports all 3 versions of QuickBooks on-premises applications (Pro, Premier, Enterprise).

How to Query a Ledger-Account by FullName

When trying to query a Ledger-Account by “FullName”, you will often receive a 400 response code with the following message:

"message":"Invalid field name provided in where clause."

Unfortunately, this happens due to a limitation on QBE’s query management. In order to enable a user to query ledger-accounts by its name, QBE demands that we either filter the name by using a “Name Filter” or something called a “Name Range”:

"<NameFilter> <!-- optional -->
<!-- MatchCriterion may have one of the following values: StartsWith, Contains, EndsWith -->
<MatchCriterion >ENUMTYPE</MatchCriterion> <!-- required -->
<Name >STRTYPE</Name> <!-- required -->
</NameFilter>
<!-- OR -->
<NameRangeFilter> <!-- optional -->
<FromName >STRTYPE</FromName> <!-- optional -->
<ToName >STRTYPE</ToName> <!-- optional -->
</NameRangeFilter>"

Therefore, in order to filter a Ledger-Account based on the “FullName”, one should use the following query within Cloud Elements CEQL tool:

where Name='{myLedger-AccountName}'

Here is a full CURL to give you a clear example:

curl -X GET "https://console.cloud-elements.com/elements/api-v2/hubs/finance/ledger-accounts?where=Name%20%3D%20'Accounts%20Receivable'" -H "accept: application/json" -H "Authorization: User {cloudElementsUserToken}, Organization {cloudElementsOrgToken}, Element {cloudElementsElementToken}"

And based on the CURL given above, the “response.body” should look like this:

[
  {
    "CurrencyRef": {
      "ListID": "80000096-1484939752",
      "FullName": "US Dollar"
    },
    "IsActive": "true",
    "EditSequence": "1484940218",
    "AccountType": "AccountsReceivable",
    "AccountNumber": "11000",
    "Name": "Accounts Receivable",
    "TimeCreated": "2017-01-20T12:23:38-07:00",
    "TimeModified": "2018-01-02T16:45:05-07:00",
    "Desc": "Unpaid or unapplied customer invoices and credits",
    "TotalBalance": "81.52",
    "SpecialAccountType": "AccountsReceivable",
    "Sublevel": "0",
    "ListID": "80000027-1484940218",
    "TaxLineInfoRet": {
      "TaxLineID": "1174",
      "TaxLineName": "B/S-Assets: Accts. Rec. and trade notes."
    },
    "FullName": "Accounts Receivable",
    "CashFlowClassification": "Operating",
    "Balance": "81.52"
  }
]

Why am I getting a "Exception from HRESULT: 0x80040300" error when doing a POST /time-activities?

{
"requestId": "5555555555",
"message": "Exception from HRESULT: 0x80040300"
}

This error message is often caused by a corrupt timesheet in Quickbooks. To resolve the issue, try the following:

  • Log into QuickBooks as a single-user administrator.
  • Select Employees from the top menu bar of the QuickBooks application.
  • Further from the menu, select Enter Time > Use Weekly Timesheet.
  • From the Name drop-down item in the Weekly Timesheet window, select the affected user.
  • Go to the previous timesheet and return to the active timesheet again
  • Retry POST /time-activities

How can report headers/categories be returned in /reports?

To retrieve header/category rows (e.g., ASSETS, Current Assets) that have zero dollar amounts in QuickBooks Enterprise (QBE) Reports an additional parameter must be passed in the where clause of 'ReturnRows = 2'.

For example:

GET /reports where ReportName='Balance Sheet Standard' and ReturnRows = 2

By passing this additional field/value all rows are returned from QBE. It is important to note that these zero-value categorization rows are returned by QBE in a single array and are not maintained in the same sequence as how the data is displayed in QBE desktop. So depending on the specific business requirements additional effort must be made to format the response for user consumption.

What do I do about "QB Connector is Running but Quickbooks File may not be open or Quickbooks is not running."

If you are receiving the following error message in the error logs of Ground2Cloud or when creating an instance:

{"errorMessage":"QB Connector is Running but Quickbooks File may not be open or Quickbooks is not running.","errorCode":501,"errorTrace":"   at Quickbooks.Session_Framework.SessionManager.initialize(String appName, String appId, ENConnectionType connType)\r\n   at Quickbooks.Session_Framework.SessionManager.getSessionInstance(String appName, String editionString)\r\n   at CEConnector.Models.quickbooks.QuickbooksHelper.init(Object elementInstance)\r\n   at CEConnector.Models.quickbooks.QuickbooksHelper.execute(Object input)"}

Make sure that the instance name that has been specified for QBE exists in the QBE integrated applications list.

Screen_Recording_2017-08-02_at_02.46_PM.gif

Must I set the time zone in the polling configuration to match the time zone of the Quickbooks server?

Yes, the timezone in your polling configuration should match the timezone of your on-premise server where Quickbooks resides. If you use the default polling, it will use UTC time and this can cause missed events if the time comparisons are off. It is also recommended that you use a format that does not require updates for Daylight Savings time.

The following json snippet is an example of the correct poller configuration with a Mountain Time: 

{
"payments": {
  "url": "/hubs/finance/payments?where=TimeModified >= '${dateTimeZone:America/Denver:yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}'",
  "idField": "TxnID",
  "datesConfiguration": {
    "updatedDateField": "TimeModified",
    "updatedDateFormat": "yyyy-MM-dd'T'HH:mm:ssXXX",
    "createdDateField": "TimeCreated",
    "createdDateFormat": "yyyy-MM-dd'T'HH:mm:ssXXX"
     }
  }
}

Can I enable Multi-Threaded Execution for my Quickbook Enterprise formulas?

No, all Quickbooks Enterprise formulas need to be single threaded execution.