Home Customisation

A new report,
before lunch.

Every ERP claims to be flexible. This page shows you the actual mechanism, in the actual syntax, including where it stops. Judge it for yourself — that is why the code is here rather than a diagram of a code.

9 kinds of definition No restart Real files, not illustrations

1. The idea

In most business software, the things you see — a screen, a report, a chart, an approval route — are written in the programming language the product is built in. Changing one means a developer, a build, a test cycle and a release window. That is why "add a column" costs three weeks.

In ZakERP those things are declarations instead: short text files that describe what you want rather than how to fetch it. The engine reads them at runtime. Save the file, refresh the browser, and the change is live — nothing is compiled, nothing is restarted, and nobody using the system is logged out while it happens.

Why "nobody is logged out" is a real claim and not marketing. Changing the Java the engine itself is made of does require reloading the application, and that does end everyone's session. Definitions are different in kind: they are data the running engine reads. That is the whole point of the split — the things you change often were deliberately put on the side of the line that costs nothing to change.

2. Nine kinds of file

Together these cover almost everything a company asks for after go-live.

.screen

A record screen — list, form, fields, validation rules, buttons and permissions.

.search

A report: columns, filters, a period bar, sorting, export and email.

.chart

A chart with its own filters and date range.

.dash

A dashboard composing charts and KPI tiles.

.workflow

An approval flow: states, levels, actions, notifications.

.calendar

A calendar with layers drawn from different sources.

.modal

A dialog, such as the leave application form.

.home

A role's home page: KPI tiles, columns and widgets.

.card

A printed ID card, laid out in millimetres.

A standard installation ships 88 screens, 77 reports, 24 charts, 5 dashboards, 8 approval workflows and 17 print templates — all written this way. The product is its own best evidence that the mechanism is enough to build a real ERP with.

3. A report

This is a complete, working report definition. Not an extract — the whole file.

lateArrivals.search
search lateArrivals
    table   zAttendance
    select  "zactive = '1'"
    order   xdate desc
    rows    31
    search
    paginate
    export

    columns xstaff, xdate, xintime, xouttime, xstatus
    headers "Staff","Date","In","Out","Status"

    daterange xdate
        caption "Period"
        default month
    end daterange

    filter xstatus
        caption "Status"
        pick "Late,Late & Early Leave"
    end filter
end search
  • A period bar with Today, This Week, This Month, Last Month, This Year, All time and a custom range — opening on the current month.
  • A keyword box and a status filter that combine with the period.
  • Sortable headings and paging that survive as you move between pages.
  • Export to CSV, Excel and PDF of exactly what is on screen.
  • A place in the menu, visible only to the roles you allow.

Twenty lines. No SQL joins to hand-write for the paging, no export code, no email code, no permission check to remember. Those come from the engine, which is why they behave identically on all 77 reports.

4. A chart

The same idea, for a picture. This one is taken verbatim from the shipped product.

headcountByDept.chart
chart headcountByDept
    type    column
    table   zPdmst
    select  "left(xstaff,4)='EID-' and xdeptname<>''"
    x       "xdeptname"
    series  "count(*)" "Employees"
    order   "2 desc"
    rows    30
    height  380
    zoom
    export
    daterange xdatejoin "Joined"

    filter xempstatus
        caption "Status"
        pick "select distinct xempstatus from zPdmst order by 1"
    end filter
end chart

Seventeen lines produce an interactive column chart with a zoom control, an export, a date range on the joining date and a status filter whose options come from the data itself. Name it in a .dash file and it becomes a panel on a dashboard; name it in a .home file and it becomes a widget on somebody's home page. The chart is defined once.

5. An ID card

This is the example that usually settles the argument, because it is the kind of thing people expect to need a designer and a developer for. It is a printed employee badge — double-sided, in millimetres, with bleed and safe margins for the print shop.

employeeId.card
card employeeId
    caption "Employee ID Card"
    table   zPdmst   key xstaff
    size    cr80                 // 54 x 85.6 mm, ISO/IEC 7810
    bleed   3mm                  // trim allowance for the printer
    margin  1.5mm                // safe area
    corner  3mm

    front
        logo    "logo_front.png"  width 40mm
        photo   xphoto  size 26x30mm  frame #A9861F 1.4pt
        line    xstaff        style code
        line    xname         style name
        line    xdesignation  style title
        footer  "Holder's Signature" "HR Signature"
    end front

    back
        pair    "Issue Date"   xdatejoin  format "dd-MMMM-yyyy"
        pair    "Blood Group"  xbloodgroup
        qr      stored xqrCode  size 36mm
        heading "If found please return to:"
        company phone, website, address
    end back
end card
  • Print-ready PDFs at the right physical size, with bleed, for a commercial printer.
  • Batch printing for a whole department, from the employee list.
  • A self-verifying QR code — scanning a badge opens a page that confirms whether it is genuine.
  • Company details pulled from your own settings, so a change of phone number does not mean re-laying-out the card.

6. An approval chain

Approval routes are the thing companies change most often and the thing most systems make hardest to change. Here they are split in two, deliberately.

The mechanism — a file
leaveApproval.workflow
state review
    caption "Approval"
    lock
    levels
    notify "[Leave] "+xapp_no+" awaiting you"
    action Approve transition to approved
    action Return  transition to returned  note required
    action Cancel  transition to cancelled note required
end state
The route — rows in a table
Level 1 · Supervisor Level 2 · Head of Department Level 3 · Head of HR Level 4 · Managing Director

Edited on the Approval Matrix screen. Each level carries a condition, so a level that does not apply to a particular applicant is skipped — and the skip is written to the history. Four different routes through one ladder, as data.

The single word levels in that file is what says "walk the configured ladder". Adding a fifth level, giving a level a stand-in for the holiday season, or changing which manager signs are all data edits: no file changes, no developer, no release.

7. Without typing anything

You do not have to write these files. The built-in Customisation Studio is a point-and-click builder that writes them for you: add a field to a screen, build a report, make a chart, compose a dashboard.

It also does the parts people forget — it shows you what a change will do before it does it, keeps versions so a change can be rolled back, and exports a set of changes as a bundle you can import on another server. That is what makes "test it first" practical rather than aspirational.

Who actually does this in practice. Not developers, and not everybody. It is typically one or two people — often the person who already builds the company's spreadsheets. Give them a day's training and most requests stop being requests.

8. Getting it live safely

Fast to change and safe to change are different problems. The recommended path:

  1. Build it on a test installation

    The same product, on any spare machine, restored from a copy of your database.

  2. Confirm it does what you meant

    Against real data, not three invented rows. This is where most surprises surface, and they are cheap there.

  3. Export it as a bundle and import it on the live server

    A copy, not a retype — which removes the class of mistake where the live version differs from the tested one by a typo.

  4. Refresh the browser

    That is the deployment. No restart, no maintenance window, nobody logged out.

9. Where it stops

Any vendor who tells you their configuration layer can do everything is describing a product they have not pushed hard. Here is the honest boundary.

Configuration — hours

  • New reports, charts and dashboards
  • New fields and new screens
  • Validation rules and mandatory fields
  • Approval routes, levels and stand-ins
  • Document numbering, menus, roles and access
  • Home pages, printed cards and PDF layouts

Development — quoted work

  • A genuinely new module with its own logic
  • Integration with an outside system's API
  • A new kind of calculation the engine has no concept of
  • Changes to the engine itself — which do need a restart

The useful question to ask any vendor is not "can it be customised" — everyone says yes. It is "show me the last change you made for a customer, and tell me how long it took." We will answer that on a call, with the file open.