Parsware
All articles

Parsware Platform

A report in Persian

A report in Persian has two parts. Its words read right to left because of how the page is drawn. Its digits and dates are Persian because of who reads it: the same report prints 4,200.00 and 2026/09/29 for one reader and ۴٬۲۰۰٫۰۰ and ۷ مهر ۱۴۰۵ for another.

The report بدهی مشتریان in the Shell: a Persian title on the right, four invoices with Jalali dates and amounts in Persian digits, next to the title "A report in Persian"

A report in Persian has two parts, and they come from different places.

  • The words read right to left. That is part of the drawing: the title, the headings and the order of the columns are what you lay out on the page.
  • The digits and dates are Persian. That depends on the reader: ۴٬۲۰۰٫۰۰ rather than 4,200.00, and ۷ مهر ۱۴۰۵ rather than 2026/09/29. The report doesn't decide it. The settings of whoever opens it do.

This article makes بدهی مشتریان ("customers' debts"), the report from article 146 laid out for a Persian reader. It uses the same saved query, Invoices still owed, with their customer, in the Main solution. We added one column to that query, the invoice's Created On, so the report has a date to print.

1. The report

Under Reports, press New. We gave it the Display name بدهی مشتریان and the Logical name new_owedfa. A display name can be in any language, and the logical name stays in Latin letters. It has one dataset, owed, over the same saved query, with Record field empty.

Press Design, add a Report page from Insert, and point its Row (repeater) at owed, as in article 137.

2. Type the title

Select the title and type it in Persian. We wrote بدهی مشتریان، تا امروز. ("Customers' debts, to date."). When you finish typing, the designer sees Persian words and sets the text Right to left, aligned to the right:

The report designer with the title selected: on the canvas it reads بدهی مشتریان، تا امروز. at the right of its box, and in the Graphic tab Align right and Right to left are both highlighted

The direction matters as much as the alignment. Without it the words are still in order, but the full stop at the end of the sentence ends up on the right, which is where a Persian sentence begins.

3. Columns from the right

A Persian reader starts at the right, so the first column goes there. From right to left we drew فاکتور (invoice), مشتری (customer), تاریخ ثبت (date raised) and مبلغ (amount). Each heading turned right to left as we typed it.

The cells under them are bound, to row.par_name, row.customer.par_name, row.created_at_utc with Format date, and row.par_amount with Format number. A bound cell has no words for the designer to read, so it can't tell which way the cell runs. Set Right to left yourself, next to the alignment buttons:

The Customer cell selected in the repeating row; in the Graphic tab its text is just "Text", and Align right and Right to left are set by hand

The amount column is the last one, on the left edge, and keeps the left alignment it was drawn with.

4. A page number in Persian

The report page comes with a page number in English, concat('Page ', pageNumber, ' of ', pageCount). Select it, press Write code (the </> button), and write the Persian:

The Code page for the page number's What it shows: concat('صفحهٔ ', format(pageNumber, 'integer'), ' از ', format(pageCount, 'integer'))

concat puts a number in the text exactly as it is stored, so pageNumber on its own would print as 1, even for a Persian reader. format(pageNumber, 'integer') writes it the reader's way, the same as a cell whose Format is set.

We did the same for the total in the footer:

concat('جمع کل: ', format(sum(owed, 'par_amount'), 'number'))

Then we set both texts Right to left, and saved.

5. Preview it as you

Press Report. The preview follows your own language and calendar. We were working in English, so the Persian words read right to left, and the numbers and dates come out in Latin digits and the Gregorian calendar:

The Report preview in English: the Persian title and headings, the page number صفحهٔ 1 از 1, and four invoices with dates 2026/09/29 and amounts such as 4,200.00, under the toolbar's 1 page(s), Template JSON and Print / PDF

6. Preview it as a Persian reader

Open Appearance settings (the gear at the top of the window), and on Calendar choose Persian:

Appearance settings, Calendar tab: Calendar set to Persian, with the date formats below it

Then choose فارسی from the language menu, and preview the report again. We didn't change the report:

The Report preview with the window in Persian: the same report with dates reading ۷ مهر ۱۴۰۵, amounts such as ۴٬۲۰۰٫۰۰, the page number صفحهٔ ۱ از ۱, and the toolbar reading ۱ صفحه, JSON قالب and چاپ / PDF

The dates are Jalali, written the way Persian date format in that same tab says. The amounts and the page number are in Persian digits. The invoice references and the customers' names are Latin and stay as they are, inside right-to-left columns.

7. In the app

We put بدهی مشتریان on the rail of the Billing app, next to Money owed. Each reader sets the language and the calendar in the Shell, in the same two places, and the report prints for each of them in their own:

The Billing app in the Shell, in Persian, with بدهی مشتریان open: the report in Jalali dates and Persian digits, the total جمع کل: ۷٬۸۹۰٫۵۰ at the foot of the page, and the toolbar's page counter reading صفحهٔ ۱ از ۱

One report serves both readers. A reader who works in English opens the same page and sees 7,890.50. There isn't a setting yet for a report to print Persian digits to a reader who works in English.

What we fixed

Building this turned up five problems, now fixed:

  • A right-to-left text printed left to right. The designer marked the Persian title right to left, but the setting was lost when the report was saved, so the page printed it left to right. Every right-to-left text in every report was affected. The full stop sat on the wrong side, and so would a number or a Latin code at the end of a line.
  • The preview ignored your language and calendar. It always drew English digits and Gregorian dates, and the report only changed once it was opened in an app. The preview now uses the same settings the Shell does.
  • In Persian or Arabic, the preview cut off the right of the page, and its page count, Template JSON and Print / PDF were in English. The page now sits on its sheet, and the words are translated.
  • The Shell's page counter used Latin digits above a report in Persian ones.
  • The text box in the Graphic tab showed a Persian title backwards, with the full stop on the wrong end. It now reads in the direction of what is typed into it.

Try it

Make a report with a Persian title and a date column, and preview it. Then set Calendar to Persian, switch the language to فارسی, and preview it again.

Next: moving work from Dev to Test to Prod.