Inquiries versus entity queries
Two ways to answer a reporting question, and the choice matters more than it looks.
What a Generic Inquiry is
A Generic Inquiry is a saved query the customer built inside Acumatica — a join across tables, with its own filters and calculated columns, exposed as a screen people use. When someone ticks Expose via OData on it (SM208000), it becomes readable over /t/{tenant}/api/odata/gi/{Inquiry}.
acumatica_list_inquiries shows which ones are exposed. An empty list does not mean there are none — it means none are exposed yet, and exposing one is a checkbox for whoever administers the instance.
Why to prefer it
It is a number the customer already trusts. The AR ageing inquiry the controller opens every morning has been reconciled against the books, argued about, and corrected over years. Its definition of "overdue" is the company's definition.
If you assemble the same figure yourself from Invoice and Payment queries, you are re-deriving that definition from scratch — including every exception you do not know about: the credit memos, the on-account payments, the branch that bills in another currency. Your number will be close. Close is worse than wrong, because it survives the meeting and gets found later.
When your figure and their inquiry disagree in front of a CFO, the inquiry wins, and it should.
When to query entities instead
- No inquiry exists for the question, and nobody will build one on your timeline.
- You need the document, not the aggregate — the specific order, its lines, its status right now.
- You are writing. Inquiries are read-only.
- You need a field the inquiry does not carry. Ask for it to be added before rebuilding the whole thing around it.
Practical notes
- The OData path changed in 24R2, from
/OData/{tenant}/{gi}to/t/{tenant}/api/odata/gi/{gi}. Both are tried, so either vintage works. - Inquiry parameters are passed as OData filters on the inquiry's own columns, not as the screen's parameter fields.
- Always bound with
top. An unfiltered inquiry over a year of transactions is a slow query running on the customer's production instance, and it is holding a licensed concurrency slot while it runs. - An inquiry pinned as an
inquiryasset renders as a live table. That is the cheapest path from "the finance team already has this view" to "it is on a board that refreshes" — no export, no rebuild.