How to Create a Generic Inquiry in Acumatica
how to create a generic inquiry in Acumatica
Also searched as
- Acumatica generic inquiry tutorial
- Acumatica GI builder how to join tables
- how to build a report screen in Acumatica without code
Short answer
Generic Inquiries (GI) are Acumatica's no-code query builder for joining tables, adding filters, and exposing the result as an inquiry screen, dashboard data source, or API endpoint. Open System > Customization > Generic Inquiry, add your base table, define joins and conditions, then run and save. No SQL or customization project is required.
Applies to: Acumatica ERP 2021 R1 through 2024 R2, all editions
Build and publish a Generic Inquiry
- 1Go to System > Customization > Generic Inquiry (screen ID SM208000).
- 2Click Add New Record, enter an Inquiry Title, and give it a unique Inquiry Name - this becomes the internal name, for example MyCustomerBalance.
- 3On the Tables tab, click Add Table and choose the primary DAC (Data Access Class), such as Customer.
- 4Add each related table with Add Table, then open the Relations tab and set how it joins an existing table - Inner Join or Left Outer Join.
- 5On the Results Grid tab, add the fields to expose, set captions, data types, and sort order.
- 6Use the Conditions tab for fixed filter logic, or the Parameters tab to expose fields as prompted, user-entered filters.
- 7Click View Inquiry to run the result set and confirm the rows and columns are correct before saving.
- 8Save the GI, then use Grant Access Rights to control which roles can see it, and check Expose via OData if it needs to be reachable from outside Acumatica.
Why Generic Inquiry instead of a custom report
SSRS reports and BQL-based custom pages both require a customization project, deployment, and a publish cycle. A Generic Inquiry is built and changed live in the production or a test instance, by anyone with access to the Customization workspace, and takes effect immediately. That makes it the right tool for one-off operational questions, ad hoc dashboards, and lightweight API endpoints that do not justify a full extension.
The tradeoff is that a GI is read-oriented. It can join, filter, and sort existing data, but it cannot write records back or run business logic. For anything that needs validation, calculations against multiple related documents, or posting, a processing screen or a generic inquiry paired with a Business Process Automation (BPM) workflow is the better fit.
Joining tables and picking the right relation type
The Relations tab decides whether rows survive the join. An Inner Join only returns rows where both sides match - join Customer to SalesOrder with Inner Join and any customer with zero orders disappears from the result entirely. A Left Outer Join keeps every row from the left table and fills unmatched right-side fields with null, which is almost always what you want when the report needs to show all customers, all items, or all periods regardless of activity.
Acumatica infers the join key from the DAC relationships already defined in the schema (foreign keys such as BAccountID or InventoryID), so in most cases you only pick the two tables and the join type, not the individual columns. When a table has more than one possible relationship to another (for example, an order linked to both a bill-to and a ship-to customer), the GI wizard prompts you to choose which relationship to use.
Exposing a GI as an API endpoint (OData)
Checking Expose via OData on a saved Generic Inquiry publishes it as a read-only feed reachable at a URL under /entity/ once the inquiry is added to an endpoint version, or more simply consumed directly by the built-in OData v4 endpoint that Acumatica maintains per GI. External tools such as Power BI, Excel Power Query, or a scheduled export job can then pull the same result set the GI screen shows, filtered with OData query parameters.
This is the fastest way to get a specific Acumatica answer into a spreadsheet or BI tool without asking for a full SuiteApp-style customization. It is still subject to the Grant Access Rights configured on the GI, so the credentials used to call the endpoint need the matching role.
Using a GI as a dashboard or Business Event data source
Any saved Generic Inquiry can be dropped into a Dashboard widget (chart, grid, or scorecard) or set as the trigger source for a Business Event, which then fires an email, a generic inquiry-based notification, or a BPM process whenever the underlying condition becomes true - for example, a GI that returns open sales orders past their promise date feeding a daily late-order alert.
Troubleshooting slow Generic Inquiries
GIs that join five or more large tables, or that filter on a non-indexed field, can time out or run slowly once real data volume builds up. Check the Conditions tab for filters on fields that are not part of the table's primary key or an existing index, reduce the number of joined tables where possible, and prefer Parameters (user-supplied filters applied before the query runs) over Conditions that scan the full result set after the fact.
Common pitfalls
- !Leaving the default Inner Join on a table that should be optional (like an order's ship-to) silently drops valid rows from the result.
- !Renaming the Inquiry Name after other screens, dashboards, or Business Events already reference it breaks those links.
- !Exposing a GI via OData without reviewing Grant Access Rights can surface financial or customer data to roles that should not see it.
- !Joining too many large tables in one GI causes timeouts under real transaction volume, even though it runs fine on a small test dataset.
- !Using Conditions instead of Parameters for filters that should be user-entered forces Acumatica to evaluate the condition against the full joined result every time.
How an ERP-grounded AI assistant handles this
Most of the time spent building a Generic Inquiry is picking the right base table, the correct join type, and the field that actually holds the answer - not typing into the wizard. An assistant like Netray's ERPray, grounded in the live Acumatica schema and existing GI library, can answer the underlying business question directly (open AR balance by customer, late purchase orders this week) without a GI ever being built, or draft the table list, joins, and filter conditions for a new GI so the Customization workspace step is a five-minute confirmation instead of a from-scratch build.
Frequently asked questions
Can a Generic Inquiry update or insert records?
No. A Generic Inquiry is read-only by design - it selects and joins data but cannot write back to the database. For record updates you need a processing screen, an import scenario, or a customization with business logic attached to it.
How is a Generic Inquiry different from a Pivot table (PXRS) in Acumatica?
A GI defines the underlying query - tables, joins, filters, fields. A Pivot Table or chart widget is a presentation layer built on top of a GI's result set. You typically build the GI first, then create a pivot or dashboard widget that points at it.
Why does my Generic Inquiry show fewer rows than I expect?
Almost always an Inner Join on a table that should be a Left Outer Join, which drops any row without a match on the joined side. Check the Relations tab for each added table and switch to Left Outer Join where the related record may not always exist.
Can I use a Generic Inquiry inside a BPM (Business Process Automation) condition?
Yes. GIs are a common data source for BPM conditions and for Business Events, letting you trigger notifications or workflow steps when the GI's filtered result set changes, without writing a custom C# condition.
Related
Fix Odoo AccessError: You Are Not Allowed to Access Records
Odoo raises AccessError when a user's security groups do not grant a CRUD right on a model through ir.model.access.csv, or when an ir.rule record rule filters the specific record out for that user or company. Fix it by adding the user to the group named in the error, editing the model's access rights, or reviewing the record rule's domain under Settings > Technical > Security.
How-toHow to Void a Check in Sage 100
Sage 100 voids checks through Accounts Payable > Main > Check and Payment Voiding. Select the bank code, choose the check number, and Sage reverses the Cash Disbursements Journal entry and reopens the invoice it paid. A check that already cleared in Bank Reconciliation or falls in a closed period needs an extra step before it can be voided cleanly.
How-toHow to Run Requirements Planning (MRP) in SYSPRO
SYSPRO's MRP engine lives under Planning and Scheduling > Requirements Planning. Set planning parameters per warehouse, run the Requirements Calculation to net demand against supply, then review and release the resulting suggestions as purchase requisitions or work orders. A full regenerative run typically runs on a schedule, with net change runs in between to pick up new activity.
Error fixFix Fishbowl Error: MySQL Server Has Gone Away
This error means the Fishbowl Server lost its connection to the underlying MySQL database, usually because a session sat idle past MySQL's wait_timeout, MySQL itself restarted, or a large import or report exceeded max_allowed_packet. Raise the relevant MySQL timeout and packet settings, confirm the MySQL service is actually running, and restart both MySQL and the Fishbowl Server service.
Error fixQAD Says "Unable to Connect to the Application Server": How to Fix It
This error almost always means the Progress OpenEdge AppServer broker behind QAD is stopped, unreachable over the network, or out of licensed connections, not a database problem. Confirm the broker process is running and healthy in OpenEdge Explorer, check the port and firewall path from the client, then restart the broker with clean agent settings.
How-toHow to Close a Job in JobBOSS2
A job in JobBOSS2 will not close cleanly until every routing operation is marked complete, all material has been issued or returned, and all labor and cost transactions are posted. Review the job's Work In Process detail first, clear any open items, then change the job status to Complete and run final job costing before it is locked.
AI for ERPAI for Acumatica Manufacturing Edition, Built on Your Own Data
Add AI to Acumatica Manufacturing Edition without giving up control of your shop and cost data. Private LLMs and agents grounded in your Acumatica instance.
AI for ERPNatural Language Query for ERP Data: Ask SAP, Infor, or Oracle a Question in Plain English
See how natural language query over SAP, Infor, Oracle, and NetSuite data works: grounded text-to-SQL, role-based permissions, and a visible audit trail.
Stuck on Acumatica Cloud ERP?
Talk to engineers who work inside Acumatica Cloud ERP every week, and who build private AI that answers these questions from your own ERP data.