Crystal Reports and AI
15 may

Crystal Reports on AI

Anyone developing their own reports in SAP Business One quickly encounters the same problem: the B1 database schema is extensive, Crystal Reports has its own formula and connection logic, and the path from information need to executable report takes time. AI for Crystal Reports promises a solution here. This article shows where these promises are kept – and where the typical pitfalls lie, costing rather than saving time in day-to-day development.

Read more: Crystal Reports auf KI

Crystal Reports and SAP Business One: understanding how they work together

SAP Business One uses Crystal Reports as its primary tool for printing and displaying reports and documents. Crystal Reports does not access the database directly; instead, it communicates via a translation layer that mediates between the report tool and the actual database. This principle applies to both supported database platforms: Microsoft SQL Server and SAP HANA.

Besides this, SAP Business One offers the Print Layout Designer as a built-in tool for simpler layouts. This provides hundreds of pre-made templates and is suitable for standard customisations. For complex reports – multi-level groupings, conditional formatting, calculated fields – Crystal Reports remains the tool of choice.

The reference version for SAP Business One 10.0 is Crystal Reports 2020. The SAP manual refers in several places to the Crystal Reports 2020 User Guide and the SAP BusinessObjects Business Intelligence Platform 4.3 Installation Guide as the authoritative documentation. Statements about newer CR versions or their release status cannot be substantiated here – refer to „Open Points“ for that.

The B1 database schema: the real hurdle

The biggest challenge in CR development for SAP Business One lies not in Crystal Reports itself, but in the database schema. B1 works with a characteristic naming convention: header tables carry an „O“ as a prefix (ORDR, OINV, OWOR), item tables follow without a prefix (RDR1, INV1, WOR1). This pattern applies consistently across all modules.

The most important tables for operational reports:

Sales and Invoicing

TableContent
ORDRCustomer order — Header
Red Dead RedemptionCustomer order — Items
OINVOutgoing invoice - header
INV1Sales invoice — items
OCRDBusiness partner master data

production

TableContent
OWORProduction Order - Header
WOR1Production Order - Items (Components)
OITMArticle master
OITWStock per location

Purchasing

TableContent
OPOROrder - Header
POR1Order — Items
OPDNGoods Receipt - Header
OPCHIncoming invoice — Header

This schema must be known by every AI before it can generate meaningful SQL queries. Without this context, a language model will hallucinate plausible-sounding table names that do not exist in the B1 database.

Where AI actually helps with Crystal Reports — and where it fails

The real-world benefit

AI assistants like Claude or ChatGPT perform well in CR development, particularly where patterns are required: SQL JOINs between header and item tables, date filters, GROUP BY aggregations. If you provide the AI with the relevant schema, you’ll receive usable starting points for queries. The iteration — first draft, testing against the database, providing feedback to the AI, second draft — works well in practice.

Crystal formulas for conditional formatting, calculations, or suppression rules are also an application area. The syntax is idiosyncratic, and AI can at least provide suggestions that serve as a starting point.

The typical failure modes

This is where the crucial difference lies between the theoretical promise and the reality of development:

1. Hallucinated field names
AI models do not know the B1 schema from their own knowledge. Without explicit context transfer, they invent field names that look plausible but do not exist. OWOR.OrderStatus sounds plausible — the actual field is called Status with the values P (Planned), R (Shared), L (Completed), C (Cancelled). For those who haven't experienced this, you'll spend ages debugging a query that's actually constructed correctly, but based on a wrong field name.

NULL handling
SQL Server and HANA handle NULL values differently. In SQL Server, the function ISNULL(Field, ReplacementValue), on HANA IFNULL(Field, Replacement Value). AI models confuse this syntax when not explicitly prompted for the database platform. The result is a query that runs on one platform and throws an error on another.

3. Joint direction
The B1 schema follows the pattern head → positions over DocEntry. A JOIN of OWOR on WOR1 over OWOR.DocEntry = WOR1.DocEntry This is correct. AI occasionally suggests inverse or additional join conditions that lead to Cartesian products and distort the result set.

4. HANA-specific quoting rules
On HANA, column names must be enclosed in double quotesT0.ItemCode"), in square brackets on SQL Server (T0.[ItemCode]Both spellings appear in AI outputs. Without a platform-specific instruction, the result is not reliable.

Passing schema context effectively

The most important practical lever is the quality of the AI prompt. An AI that only hears „Write an SQL query for manufacturing orders“ produces generic SQL. An AI with precise schema context produces usable SQL.

A structured prompt contains:

  1. Database platform — MS SQL Server or SAP HANA (determines syntax for NULL handling, quoting, date literals)
  2. Relevant tables with columns — not all fields, but only those required for the query
  3. Terms of participation — which fields link the tables
  4. Status codes — for OWOR: P/R/L/C; for ORDR: O (open), C (closed); for OCRD CardType: C (customer), S (supplier)
  5. Expected outcome — Which columns should the query return, what filter criteria apply

Weak prompt

SELECT
    T0.DocNum AS 'Order Number',
    T0.DocStatus AS 'Status',
    T0.PlannedQty AS 'Planned Quantity',
    T0.CmpltQty AS 'Completed Quantity',
    T0.ItemCode AS 'Item Code',
    T1.ItemName AS 'Item Description'
FROM
    Omln T0
INNER JOIN
    OITM T1 ON T0.ItemCode = T1.ItemCode
WHERE
    T0.DocStatus = 'O'  -- Or use 'C' for completed orders, depending on your needs
ORDER BY
    T0.DocNum.

Later: structured prompt with schema context

SAP Business One, MS SQL Server.

Tables:
- OWOR (Production Order Header): DocEntry, DocNum, ItemCode, Status, DueDate, PlannedQty
  Status values: P=Planned, R=Released, L=Closed, C=Cancelled
- OITM (Item Master Data): ItemCode, ItemName
Join: OWOR.ItemCode = OITM.ItemCode

Task: All production orders with status R (Released),
due date this week, sorted by DueDate ascending.
Columns: DocNum, ItemCode, ItemName, PlannedQty, DueDate, Status

The second prompt provides a query that can be tested directly in SQL Server Management Studio – without guesswork about field names or status values.

HANA and SQL Server: practical differences for BI developers

As SAP Business One runs on both Microsoft SQL Server and SAP HANA, each Crystal Reports query will either be for one or the other platform. The syntax differences are minor, but crucial:

StructureSQL ServerHANA
NULL replacementISNULL(x, 0)IFNULL(x, 0)
Identifier-Quoting[ColumnName]"ColumnName"
Date literal'2024-01-31''20240101'
Date arithmeticDATEADD(day, -7, GETDATE())ADD_DAYS(CURRENT_DATE, -7)
String concatenationa + bCONCAT(a, b)

Anyone using AI for SQL generation must explicitly specify the platform. Otherwise, the AI will mix syntax from both dialects, resulting in a query that doesn't run flawlessly on either SQL Server or HANA.

A practical example: Production order status report

The objective: a report showing all released production orders with item description and due date, with overdue orders highlighted in red.

Step 1 – Generate SQL with AI (Platform: SQL Server)

Pass the prompt with OWOR schema, status values and desired columns. The AI delivers an initial SELECT draft.

Step 2 — Test in SQL Server Management Studio

Execute query directly against the B1 database. If there are error messages about unknown columns or incorrect syntax, the specific error scenario will be sent back to the AI: „Error message: Invalid column name ‚OrderStatus‘ - the field is called ‚Status‘. Please correct.“

Step 3 - Crystal Formula for conditional formatting

Crystal Reports Visual Basic formula: If DueDate < Today and Status = „R‚ then red, otherwise no colour. Field name: {Command.DueDate}, {Command.Status}.‘

Step 4 - Apply in Crystal Reports

Insert query as a command object in Crystal Reports, store formula in the conditional formatting of the field.

This workflow works iteratively. Each iteration builds on a concrete error message or test result – not on assumptions.

What AI cannot replace

Two things remain outside the scope of AI:

Knowledge of status values and codings. Ob OWOR.Status L or „Completed“ has another meaning – the developer needs to know or look this up. AI is guessing here. The production order lifecycle in SAP Business One is documented: P (Planned) → R (Released) → L (Completed); Cancelled is C. This coding should be included as context in any prompt that processes OWOR data.

Plausibility check of the results. A query that runs syntactically but returns factually incorrect data (e.g., due to a missing filter on deleted records or a wrong JOIN) can only be found by someone who knows what the result should look like. AI does not check business logic.

Print Layout Designer or Crystal Reports?

Anyone for simple receipts and standard financial reports, Reporting tool When searching, Crystal Reports isn't necessarily required. The print layout designer integrated into SAP Business One offers hundreds of pre-built templates and allows for customisation without external tools. Multiple versions of the same layout can be managed in parallel and assigned depending on the user.

Crystal Reports is useful when the requirements go beyond what the print layout designer can achieve: complex group structures, calculated fields across multiple tables, dynamic colouring based on status values, or multi-tenant data sources.

AI assistants Crystal Reports depending on context

AI assistants are useful in Crystal Reports development for SAP Business One when the correct context is passed. The B1 schema with correct table names, field names, and status values must be explicitly included in the prompt. Without this context, AI produces plausible-sounding but incorrect SQL. With this context, the iteration effort is measurably reduced.

The critical stumbling blocks are known: hallucinated field names, incorrect NULL handling depending on the database platform, faulty join logic. Those who are aware of these failure modes and systematically test against the database use AI as an efficient accelerator – not as an error-free source.

Crystal Reports for AI

Crystal Reports on AI

Anyone developing their own reports in SAP Business One quickly encounters the same problem: The B1 database schema is extensive, and Crystal Reports has...
AI in the company

Why companies are hesitant about AI in ERP

Artificial intelligence in the ERP context raises high expectations, as significant productivity gains, far-reaching automation and more informed decisions are on the horizon. Nevertheless ...
Predictive maintenance

Predictive maintenance: how to turn SMEs into smart factories

In today's intelligent world, the ability to solve problems before they even arise is no longer a futuristic scenario, but ...
RPA

RPA in the ERP environment: increasing efficiency through digital process assistants

Many ERP systems run processes on a daily basis that are necessary but do not add value. Employees spend valuable time processing orders ...
Generative AI in ERP

Generative AI in ERP: How LLMs are changing the role of ERP systems

With the advent of generative AI and large language models (LLMs), the role of ERP systems is changing fundamentally. Instead of ...
ERP FUTURE

Preparing the ERP future with APIs and microservices

Many medium-sized companies are still working with ERP monoliths that have grown over the years. The modules of these systems are closely ...
Wird geladen …