Skip to content

Configuration

Almost every “the invoice did not post” or “the picker is empty” case in this module comes from one of five things: a supplier with the wrong AR/AP type, a company missing a default GL code, a knock-off row that was never configured, an item that is not a stock item, or the wrong document in the receiving pair. This page sets those up in dependency order and names the symptom each gap produces.

The order below is a dependency order, not a rule the product enforces. Out of sequence simply means you meet the failures later — usually at the first FINAL on a purchase invoice.

1. Suppliers — and the one field that decides where the money posts

WhatWhereWhy
The supplier recordSupplierEvery purchase document names a supplier entity. It must exist before the requisition, not after
Its AR/AP type — AP_TRADE or AP_OTHERSupplier → MainThis decides the creditor account. AP_TRADE resolves to the company’s CREDITOR default, AP_OTHER to CREDITOR_NON_TRADE. A supplier set up with the wrong type posts to the wrong account, silently, on every invoice
Credit termsSupplier → Credit Term ListingOffered on the purchase invoice, which stores them only when Purchaser is filled. No due date is written — the invoice has none — and nothing enforces a limit: these are records for your buyers, not rules
Self-billed e-Invoice flag, TIN and identitySupplierRead by the purchase documents that can submit self-billed e-Invoices
Supplier Login — the link from a portal login to this supplierSupplier → Supplier LoginThe prerequisite for every supplier-access applet. Without it the supplier signs in and sees nothing
Symptom to recognise: a purchase invoice goes FINAL but has no journal, and its posting job failed with MISSING_DEFAULT_GL_CODE: CREDITOR (or …: CREDITOR_NON_TRADE). The message names the code the supplier’s AR/AP type resolved to, and the company has no default for it. Either the type is wrong on the supplier or the default is missing in §3.

2. Items — and the link that decides whether stock moves at all

WhatWhereWhy
The document item you put on a purchase lineDoc Item MaintenanceThe line’s item
Its link to an inventory itemDoc Item MaintenanceThis is the switch. Only lines whose item resolves to an inventory item reach the stock ledger. A basic item with no link is linked for you the first time it posts. A service item, or an alias that points at no inventory item, on a purchase invoice posts the money and moves nothing — no error
The stock-keeping record and its tracking typeInventory Item Maintenance; the tracking type is the Sub Item Type on the Doc Item Maintenance create screenSerial, batch or bin tracking decides which sub-tabs appear on every purchase line. It is chosen when the item is created and locks at the item’s first save, so decide it then
Purchase prices per supplierDoc Item Maintenance → the item’s price per supplier; PricebookWhere the unit price on a purchase order line comes from; you can override it on the line
The Consignment Item flagDoc Item MaintenanceOnly flagged items appear in the consignment GRN and GIN item search
GL code on the item, for non-stock spendDoc Item MaintenanceA line whose item carries a GL code posts there instead of the company PURCHASE default — how rent lands in rent and not in purchases

3. Company default GL codes — every posting resolves against these

Set under Chart of Account → Companies → Default GL Codes. A missing code never stops FINAL: it shows up afterwards, in the journal — as a failed posting for the supplier codes, and as a journal that posts wrong for the purchase and tax codes.

Default GL codeNeeded byIf it is missing
CREDITOR / CREDITOR_NON_TRADEEvery document that credits or debits a supplier — invoice, both notes, return, refund note, payment voucher, consignment GINFINAL succeeds; the posting job fails afterwards with MISSING_DEFAULT_GL_CODE: CREDITOR and the document sits FINAL with no journal — Error Checking › Trace Document → Resolve
PURCHASEInvoice and No Stock In invoice lines without their own GL code; debit and credit notesNo message at all, and the journal still posts. The line is left out and the supplier’s creditor line is built from what remains: a RM 1,060 supplier invoice (RM 1,000 of laptops, RM 60 SST) posts as debit input tax RM 60, credit trade creditors RM 60. Purchases are RM 1,000 short, and once you pay the supplier RM 1,060, trade creditors carries a RM 1,000 debit. How you would notice: the payable GL account stops agreeing with the creditor ageing; the supplier statement and ageing are built from documents and look right, and Trace Document finds nothing because a journal exists. Only a supplier with no AR/AP type fails loudly — no creditor line, TOTAL_DEBITS_AND_TOTAL_CREDITS_NOT_BALANCES
INPUT_TAXAny purchase line carrying taxThe same: the tax line is left out and trade creditors takes it. On the invoice above, debit purchases RM 1,000, credit trade creditors RM 1,000; the RM 60 you can claim back is in no GL account, and after payment trade creditors carries a RM 60 debit
PURCHASE_RETURNPurchase returns and negative linesThe same, on the return. (PURCHASE_DISCOUNT is not read when the journal is built.) Before go-live, check that every purchase, return and tax code has a company default, or every item its own
INVENTORY_NOT_INVOICED, CREDITOR_NOT_INVOICEDOnly the GRN Stock In → No Stock In pairGRN Stock In: the document goes FINAL and the stock is posted, and only the journal job fails — the receipt is in stock with no accrual behind it. No Stock In invoice: FINAL succeeds too; its posting job fails with MISSING_DEFAULT_GL_CODE naming the code, and the invoice sits FINAL with no journal
CONSIGNMENT_STOCK, CONSIGNMENT_LIABILITYConsignment GRN, Consignment Return, Consignment BillingFINAL succeeds at both ends of the consignment cycle and the posting job fails afterwards: MISSING_DEFAULT_GL_CODE: CONSIGNMENT_LIABILITY (or CONSIGNMENT_STOCK on the billing), or NO_JOURNAL_CREATED on a GRN whose stock lines found no code at all. The document sits FINAL with no journal. A GL code on the line is ignored for these types
FOREX_GAIN, FOREX_LOSS, SETTLEMENT_CHARGESSettlement differences and bank charges on a payment voucherNothing fails at FINAL. With no SETTLEMENT_CHARGES code the charge line is left out and the supplier’s line absorbs it, so the journal posts with the bank charge in trade creditors. With no FOREX_GAIN / FOREX_LOSS code, the gain or loss — written when a foreign-currency invoice is knocked off against its payment — has no line and no forex journal is written; Ledger And Journal › Error Checking › Missing Journal Forex Gain Loss is where it shows
Which GL code an ordinary purchase line lands in is resolved in this order: the GL code on the line, then on the document header, then the item’s company link for purchases, then the company PURCHASE default. Tax lines always use INPUT_TAX. For the consignment types and GRN Stock In the line’s own code is skipped and resolution starts at the header.

4. Tax codes, currencies and the bank

WhatWhereWhy
Input tax codesTax ConfigurationThe tax column on every purchase line. GadgetSphere is SST-registered; the code your supplier charges goes on the line
Exchange ratesForexA purchase order or invoice in USD needs a rate. A foreign-currency document is finalised as a base-currency shadow that carries the posting; CANNOT_EDIT_CURRENCY_RATE locks the rate to the fetched value
Cashbooks and settlement methodsCashbook; the document applets’ Branch SettingsEach settlement method is linked to a cashbook whose GL code is the credit side of a payment. A method with no cashbook does not stop the voucher at FINAL: the voucher goes FINAL and its posting job then fails with MISSING_CASHBOOK: STL_MTHD, leaving it with no journal

5. Companies, branches, locations — and the knock-off rows

WhatWhereIf it is wrong
Companies, branches, locationsOrganizationBranch and location are the only unconditionally required header fields on a purchase invoice
The branch default locationOrganizationThe last fallback when a purchase line names no location. Stock booked by an invoice with no line location lands here
Knock Off Configuration — one row per source → target document pairOrganization → Company → Knock Off ConfigDecides whether FINAL creates open-queue rows for that pair. No Purchase Requisition → Purchase Order row means finalised requisitions that no order can find; no Consignment Purchase Order → Consignment GRN row means the consignment GRN’s KO For tab is empty
Fiscal period locksOrganizationA transaction date in a month locked at LOCK_TXN or LOCK_ALL rejects the document at FINAL; LOCK_GL stops manual journals only. Consignment GRNs are not exempt
The company’s e-Invoice statusOrganizationOnce ENABLED, the purchase invoice’s own screen hides VOID, but the listing’s VOID still voids an ordinary purchase invoice (a self-billed one is refused either way) — so decide whether your correction path is a void or a credit or debit note, and tell the team which
Symptom to recognise: an empty KO For picker on a document whose source is definitely FINAL. Check the Knock Off Configuration row for that pair before checking anything else. The queue is only written where the configuration says so, and a document finalised before the row existed can be repaired by support through the missing-queue data-fix endpoint.

6. Decide the receiving pair, once, for the whole company

This is a configuration decision even though it does not look like one.

If your flow isThe stock arrives onAnd the other document
Purchase Order → Purchase GRN → Purchase Invoicethe purchase invoicethe GRN records the receipt and moves nothing
Purchase Order → Purchase GRN Stock In → Purchase Invoice No Stock Inthe GRN Stock Inthe invoice books only the money and clears the accrual

Pick one. Choose the second pair if you need goods available for sale before the supplier’s bill arrives, and map the two accrual codes in §3 first. Never use a GRN Stock In and a stock-booking purchase invoice for the same goods; never use a plain GRN and a No Stock In invoice. Both mistakes are silent. Then give the applets for the pair you did not choose to nobody.

7. Approvals — optional, and only on two documents here

Skip this section on a first implementation. Nothing in the module requires anyone’s sign-off until you build it, and building it changes nothing about what a document can do.

Setup taskWhereWhat it actually does
Approval Setting for INTERNAL_PURCHASE_ORDER or INTERNAL_PURCHASE_REQUISITIONThe Purchase Order or Purchase Requisition applet → Settings → Approval SettingsNames the submitter designation and the levels. Each level’s Min Approval Amount decides whether that level is required for a given document amount
Branch Designation and the employees under it, each with an approval levelSame applets → Settings → Branch DesignationThis is where approvers actually come from. The setting names none
Employees with a job title matching the submitter designation, and an e-mailEmployeeThe submitter’s designation is resolved from their job title; approvers are e-mailed and see their queue only if their login has an employee record under the same e-mail
Approval Monitor rule PR → PO, Is Document Conversion RequiredPurchase Order → Settings → Approval MonitorRefuses to submit an order for approval unless it was built from a requisition. Applies at submit, not at FINAL

Three submit-time errors stop a submission: the submitter designation has no branch-designation row, no approver is linked to it, or fewer approver levels exist than the setting requires. Once submitted, completion sets FINAL; a pending request never blocks a manual FINAL. Full setup in Document Approvals.

8. Printable formats

Each document applet’s Settings → Printable Format Settings needs a default template before the Export tab or the listing’s print buttons do anything; without one the button is disabled or the applet reports No Default Printable Selected. Set it for the purchase order at minimum — it is the document you send to a supplier.

9. The supplier’s window, if you use it

  1. Invite the supplier’s user from the Supplier applet’s Supplier Login tab. The link is written when they follow the e-mailed invitation, together with the applet catalogues and roles the invitation carried. Invitation links do not expire.
  2. Grant that login the supplier-access applets it should see — the Purchase Order, GRN, Invoice, Credit Note and Return Supplier Access applets, the Blanket Purchase Order Supplier Access applet, or Supplier Delivery Order.
  3. Only FINAL documents appear in the read-only applets (returns at any status). A draft order is invisible to the supplier until it is finalised.

10. Permissions — your only control

There is no approval on a receipt, an invoice, a payment, a return or either note. Decide deliberately who holds:

  • Finalise on Purchase Invoice — the right to book stock and create a liability. This is the control that “three-way matching” would have been. Give it to the people who check the supplier’s paper, and to nobody who keys orders.
  • Finalise on Purchase Order — the right to commit the company to a supplier. If a spending threshold matters, this permission enforces it; the approval engine does not.
  • Finalise on Payment Voucher — money leaving the bank.
  • Finalise on Purchase Return and Purchase Debit Note — the right to reduce a supplier’s balance.
  • Edit the currency rate (EDIT_CURRENCY_RATE) — on foreign-currency purchases.
  • The SHOW_* client-side permissions that reopen hidden menus, cost columns and the VOID button per user. Several purchasing applets check permissions that are not seeded in the registry, so a HIDE_* setting on those is all-or-nothing; the applet pages say which.

Separate the three roles: the person who orders, the person who receives, and the person who books the bill. The knock-off chain records who did each step; it does not stop one person doing all three.

What success looks like

Fifteen minutes, one order, five checks — the same run as the Standard Procurement Workflow:

  1. Raise a purchase order for 10 units to branch GS-KV-01 and finalise it. The lines appear in the Purchase Order Queue.
  2. Receive it on the document your receiving pair uses and finalise. On the standard pair, Stock Availability shows the 10 as GRN quantity and the balance is unchanged; on the Stock In pair the balance is +10 and a journal exists debiting INVENTORY_NOT_INVOICED.
  3. Open the invoice applet for your pair, knock the receipt off on KO For, finalise. The Posting tab shows Journal posted, and Inventory posted on the standard pair.
  4. The order’s queue row is gone; the supplier shows the invoice as outstanding in the Creditor Report.
  5. Pay it on a Payment Voucher with one payment line, contra the invoice, finalise. The supplier’s balance is nil and the cashbook has one transaction line.

If step 3 stops with MISSING_DEFAULT_GL_CODE, the code named in the message is missing from §3.

Common mistakes

MistakeSymptom
Supplier’s AR/AP type wrongInvoices post to the wrong creditor account, or fail with MISSING_DEFAULT_GL_CODE: CREDITOR_NON_TRADE
A default GL code missingThe first document that needs it goes FINAL with no journal, and its posting job fails naming the code (a GRN Stock In still posts its stock). The document’s Posting tab and Trace Document show it
No Knock Off Configuration row for a pairThe downstream KO For picker is empty although the source is FINAL
Document item is a service, or an alias that points at no inventory item (an unlinked basic item is linked for you at posting)The invoice posts the money; stock never moves; no error
A GRN Stock In and a stock-booking purchase invoice for the same goodsEvery receipt counted twice
Tax captured on both documents of the Stock In pairThe two accrual accounts never clear by exactly the tax amount
Expecting approval to stop an orderIt does not. Whoever holds the finalise permission can post it, request pending or not
Consignment GL codes not mappedThe consignment GRN and the billing both go FINAL with no journal; the posting job fails naming the code. Financial Report › Error Checking › Trace Document on it reports Missing Journal, and Resolve repeats the message until the codes are mapped
Item created without serial trackingThe item screen locks the Sub Item Type from the item’s first save, so serial tracking cannot be switched on later from there; the fix is a new item code with the right tracking
Supplier Login not linkedThe supplier signs in to an empty portal