Skip to content

Purchase Return (Internal)

Send goods back to a supplier. Finalising takes the quantity out of stock and lowers the supplier’s balance, but it leaves a balance that finance still has to close, by contra against the supplier’s invoices or by a settlement when the supplier refunds cash.

Overview

The Purchase Return (Internal) applet records goods going back to a supplier. Finalising one does three things at once: it takes the returned quantity out of stock at the chosen location, posts Dr Creditor / Cr Purchase Return so the supplier’s balance falls, and leaves a positive ARAP balance that finance closes by contra against the supplier’s invoices or by a settlement when the supplier refunds cash. Warehouse and procurement staff create it, usually by pulling lines from the original purchase invoice or GRN; finance closes it.

Engine document type INTERNAL_PURCHASE_RETURN, amount signum +1, quantity signum −1. It is the stock-moving counterpart of the Purchase Debit Note (Internal), which has the same amount sign but never touches stock.

Where it fits

PositionDocument / appletWhy
ModulePurchasing, Inventory, Financial Accounting, E-InvoiceStock out, GL posting, and an e-Invoice purchase document type.
UpstreamPurchase Invoice (Internal), Purchase Invoice No Stock In (Internal), Purchase GRN (Internal)The Search tab (Search By Supplier / By Invoice / By GRN / By Purchase Invoice No Stock In) copies their lines, links the documents, and — with WARN_EXCESS_RETURN_QUANTITY on — caps the return quantity at the source line.
Upstream (knock-off)Purchase Order (Internal)The create screen’s KO For tab.
DownstreamPayment Voucher (Internal), the Contra and Settlement tabsClose the return’s ARAP balance.
DownstreamPurchase Refund Note (Internal)Cash refund from the supplier recorded as its own document.
DownstreamCreditor ReportShows the return’s balance against the supplier.
DownstreamMy E-Invoice AdminINTERNAL_PURCHASE_RETURN is in the e-Invoice purchase-document set.
IntercompanySales Return (Internal)Intercompany processing pairs INTERNAL_PURCHASE_RETURN → INTERNAL_SALES_RETURN (and the reverse); the Intercompany menu is the manual confirmation queue.
ExternalPurchase Return Supplier Access (Internal)Supplier-facing view.

Screens and menus

MenuRouteWhat it is
Purchase Returnpurchase-returnListing, create, edit. Bulk FINAL, DISCARD, VOID, SINGLE/MULTIPLE PRINT and SELF-BILLED (sets einvoice_self_billed).
Line Itemsline-itemsCross-document line grid (Edit Item with Item Details, Costing Details, Issue Link, Related Documents).
File Exportfile-exportDownload the filtered listing. Hidden when HIDE_FILE_EXPORT_MENU is on and the user lacks SHOW_FILE_EXPORT_MENU — but no screen of this applet offers that switch (see Applet settings), so in practice the menu is governed by the permission alone.
IntercompanyintercompanyManual intercompany transaction queue.
Audit Trailaudit-trailChange log.
Settingssettings/…Application Settings, Default Selection, Printable Format Settings, Return Reasons Settings, Branch Settings, Workflow Settings, Webhook, Feature Visibility, Client Side Permission, Role Pricing Scheme Link, Permission Wizard / Set / User / Team / Role Permission, Release Notes, Applet Log.
Personalizationpersonalization/…Per-user Default Selection and Sidebar.

There is no File Import menu in this applet (the backend importer exists; the UI does not expose it).

Advanced filtering options
Advanced Search.
File Export options
File Export.

Create screen

Tabs: Search, Main Details, Account, Lines, KO For (hidden by HIDE_KO_FOR_TAB), Delivery Details, Settlement, Department Hdr, Contra. CREATE saves a DRAFT.

The Search tab is the recommended starting point. Its sub-tabs are Search By Supplier, Search By Invoice, Search By GRN (HIDE_SEARCH_BY_GRN), Search By Purchase Invoice No Stock In (shown only with SHOW_SEARCH_BY_PURCHASE_INVOICE_NO_STOCK_IN). There is no Search By Serial Number: it was taken out of the build, so find a serialised unit’s invoice first and search by that. Selecting a source line copies it, creates a document link and — with WARN_EXCESS_RETURN_QUANTITY — refuses a return quantity above the source line’s quantity (Total return quantity is greater that the invoice qty). With the switch off the screen lets a line exceed what was received on the source line, so leave it on unless you deliberately return goods beyond one invoice. Add All returns every remaining line.

A line pulled from an invoice or GRN also brings that source line’s delivery branch and location — where the goods were received. That is where the return takes them out of stock, whatever the header’s Location says (see Lifecycle and effects).

Screenshot withdrawn; a recapture from a demo tenant is on the list.

Search tab — Search By Invoice
Search By Invoice.
Search tab — invoice selected
Invoice selected, lines ready to return.
Main Details tab
Main Details — branch, location, purchaser, credit terms, reason, reference, remarks.

Screenshot withdrawn; a recapture from a demo tenant is on the list.

Line Items tab — select item
Lines — items and return quantities.

Edit screen

Header buttons SAVE, FINAL, DISCARD, VOID, and CLONE, which is always shown (HIDE_CLONE_BUTTON is read but nothing applies it) and creates a new draft from this return, waiting up to about six seconds for it to appear. Tabs, ordered by Default Selection → Details Tab Ordering: Search, Main Details, E-Invoice, Account, Lines, ARAP, Delivery Details, Settlement, Department Hdr, Trace Document, Contra, Doc Link, Export, Attachments.

E-Invoice tab
E-Invoice — submission type, document number and supplier e-Invoice identity.
Settlement tab
Settlement — total settlement, document open amount and ARAP balance.
ARAP tab
ARAP — contra and outstanding amounts.
Attachments tab
Attachments.
Export tab
Export — pick a printable format (typically a debit-note layout) and download the PDF.

Configuration

Before you can use it

PrerequisiteWhereWhy
Company, branch, locationOrganisationBranch and location are required. Stock is deducted at each line’s delivery location when it has one, otherwise at the line’s location; lines pulled from an invoice or GRN carry the source line’s delivery location. Use a dedicated returns location if you want returned stock separated, and set it as the return’s Delivery Location so every line follows it.
Supplier entitySupplierThe AR/AP object type selects CREDITOR or CREDITOR_NON_TRADE. A supplier not linked to the branch is rejected (Supplier not linked to branch) when ENABLE_BRANCH_FILTER is on.
Stock on hand at the locationInventory Item Maintenance and the receiving documentsFINAL validates stock balance per item, batch, bin and serial at the location each line takes stock from (its delivery location when set); There’s not enough stock for item … stops it.
Company default GL codesChart of Account → company GL-code linksCREDITOR / CREDITOR_NON_TRADE (mandatory), PURCHASE_RETURN for lines without their own GL code, INPUT_TAX.
Items with purchase-return GL linksDoc Item MaintenanceLine GL code: header GL code → item-company PURCHASE_RETURN link → company default.
Return reasonsThis applet → Settings → Return Reasons Settings (Reason Code, Reason Name)The Reason field on Main Details.
Tax codesTax ConfigurationLine tax and WHT.
Cashbook / settlement methodsCashbookOnly for Settlement-tab refunds. A settlement method with no cashbook, or a cashbook with no GL code, does not stop FINAL: the journal posting that runs after it fails (MISSING_CASHBOOK / MISSING_GL_CODE: STL_MTHD) and the return is FINAL with no journal.
Fiscal period openLedger And JournalFINAL refused in a locked period.
Workflow (optional)Settings → Workflow Settings (Process Code, Server Doc Type, Company) and WORKFLOW_PROCESS_GUIDAttaches a workflow process and status to new documents.
e-Invoice setupMy E-Invoice AdminOnly if returns must be submitted; skip flags on document, branch or supplier bypass it.
PermissionsPermission Wizard / Set, Client Side PermissionServer-side create / read / update / delete on INTERNAL_PURCHASE_RETURN with targets.

Applet settings

Settings → Default Selection:

SettingWhat it controlsDefaultEffect when changedWho can change it
DEFAULT_BRANCH, DEFAULT_LOCATION (derived DEFAULT_COMPANY)Branch and location pre-selected on new returns.noneNew returns open with them; personal defaults override.Tenant admin with the applet’s Settings menu
DEFAULT_PURCHASE_RETURN_PRICING_OPTION — “Purchase Return Pricing Option”The price a line added by hand starts with: LAST_PURCHASE_PRICE (the net unit price on this company’s latest purchase invoice line for the item, by transaction date — the lookup does not check the invoice’s posting status, so a later draft or voided invoice can supply the price; read the pre-filled price before you save), MA_COST (the moving-average cost recorded on that same invoice line) or PURCHASE_INVOICE_PRICE. None does not mean the user chooses per line: it hands the decision to the supplier’s own return-pricing option, then the company’s, and falls back to LAST_PURCHASE_PRICE if neither is set.noneApplies only when a line is first added by hand; editing a line never re-prices it, and the price stays editable. If no purchase invoice for the item is found, nothing is filled and you type the price. PURCHASE_INVOICE_PRICE fills nothing on this path, because a hand-added line has no invoice to take a price from. Lines brought in through the invoice search ignore this setting and carry the invoice line’s own price.Same
PURCHASE_RETURN_PRICE_FILTER_BY_SUPPLIERWhen looking up the last purchase price or moving-average cost for a hand-added line, restrict to invoices of the same supplier.on (unset = filter)Off: any supplier’s last price is used.Same
DATE_TXN_LOGIC — “Transaction Date Logic”Which date becomes the transaction date at FINAL: USE_FINAL (Finalized Date), USE_CREATED, USE_UPDATED, USE_DATE_TXN (keep the keyed date).ADJUSTED (stored default; behaves as keyed date)Sent with the FINAL request; only applies when the header’s use transaction date flag is off.Same
PURCHASE_RETURN_DETAILS_TAB_ORDERDrag-and-drop order of the 14 edit tabs.code orderRe-orders for everyone.Same
Default Selection settings
Settings → Default Selection.

Settings → Application Settings (shared field-configuration screen; toggles labelled by key, default off). Keys this applet reads:

Nine of them have no switch on that screen for this applet: HIDE_FILE_EXPORT_MENU, HIDE_CURRENCY, HIDE_BASE_CURRENCY, HIDE_CREDIT_TERMS, HIDE_REFERENCE, HIDE_REMARKS, MANDATORY_REMARKS_FIELD, and the two price-column hides on the source-line grids, HIDE_PRICE_LISTING and HIDE_RETURN_PRICE_LISTING. The first seven’s switches are drawn only for a differently spelled applet code that no installed applet carries; the two price hides sit in the screen’s Search section, which it does not draw for this applet at all. So you will look for them in vain. Five of the nine — the currency, base currency, credit terms, reference and remarks hides — can still be set from the gear on Main Details, which appears once Enable Inline Applet Config is on (an owner or admin changes the tenant-wide value there). HIDE_FILE_EXPORT_MENU, MANDATORY_REMARKS_FIELD and the two price hides cannot be set from this applet at all: control File Export with the SHOW_FILE_EXPORT_MENU permission, make remarks a working rule rather than a field rule, and accept that the source-line grids show prices to anyone who can open the search — no gear on those grids offers the hides either.

GroupKeysWhat they control
ListingDEFAULT_POSTING_STATUS, DEFAULT_STATUS, DEFAULT_TRANSACTION_DATE, SORT_ORDER, FUZZY_SEARCH_COLUMNS, DISABLE_GEN_DOC_LISTING, PRINTABLE, ENABLE_AUTO_POPUPDefault filters, sort, fuzzy search, default printable format, PDF pop-up on FINAL. In the document the pop-up opens when the save that precedes the posting succeeds, so it can open even when FINAL is then refused — check the posting status, not the PDF.
Menus and buttonsHIDE_FILE_EXPORT_MENU, HIDE_GENDOC_FINAL_BUTTON, HIDE_GENDOC_VOID_BUTTON, HIDE_GENDOC_DISCARD_BUTTON, HIDE_GENDOC_SAVE_BUTTONRestored per user by SHOW_FILE_EXPORT_MENU, SHOW_GENDOC_FINAL_BUTTON, SHOW_GENDOC_VOID_BUTTON, SHOW_GENDOC_DISCARD_BUTTON.
Search tabHIDE_SEARCH_BY_SUPPLIER, HIDE_SEARCH_BY_GRN, SHOW_SEARCH_BY_PURCHASE_INVOICE_NO_STOCK_IN, SHOW_INVOICES_FROM, HIDE_PRICE_LISTING, HIDE_RETURN_PRICE_LISTING, WARN_EXCESS_RETURN_QUANTITYWhich search sub-tabs appear, how far back invoices are listed, whether price columns show in the source-line grids (the two price hides have no switch in this applet — see above), and whether over-returning is blocked.
Header fieldsHIDE_SERVER_DOC_1..3, HIDE_CLIENT_DOC_TYPE, HIDE_CLIENT_DOC_1..5, HIDE_LOCATION, HIDE_CREDIT_TERMS, HIDE_REASON, HIDE_REFERENCE, HIDE_REMARKS, MANDATORY_REMARKS_FIELD, HIDE_CURRENCY, HIDE_BASE_CURRENCY, SHOW_FOREX_DATA_SOURCE, CANNOT_EDIT_CURRENCY_RATE, HIDE_CREATED_BY_DETAILS, HIDE_EXTERNAL_QUOTATION, HIDE_EXTERNAL_ORDER, HIDE_EXTERNAL_DELIVERY_ORDER, HIDE_EXTERNAL_INVOICE, HIDE_EXTERNAL_OTHERS, ENABLE_EMPLOYEE_LOGIN_AUTO_DETECTION, WORKFLOW_PROCESS_GUID, DEFAULT_CURRENCY, DEFAULT_DECIMAL_PRECISIONMain Details visibility; mandatory remarks; purchaser auto-fill; workflow attached to new documents. HIDE_SERVER_DOC_1..3 act on Main Details only: the listing names them in its code but never applies them, so its Doc No (Tenant / Company / Branch) columns stay visible whatever they are set to.
Account tabENABLE_SELECT_MODE, ENABLE_BRANCH_FILTER, HIDE_SUPPLIER_CODE, HIDE_PHONE_NUMBER, HIDE_EMAIL, HIDE_SIC_CODE_AND_BUSINESS_ACTIVITY_DESCRIPTION, HIDE_E_INVOICE_TABSupplier picker (create/edit inline needs ALLOW_TO_CREATE_EDIT_ACCOUNT) and supplier sub-tabs.
LinesHIDE_QTY_BASE, HIDE_QTY_UOM, HIDE_UOM_TO_BASE_RATIO, HIDE_UNIT_PRICE_STD_*, HIDE_UNIT_PRICE_NET_*, HIDE_UNIT_PRICE_TXN, HIDE_UNIT_PRICE_TXN_UOM_INCL_TAX, HIDE_UNIT_DISCOUNT, HIDE_UNIT_DISCOUNT_UOM_EXCL_TAX, HIDE_AMOUNT_STD_EXCL_TAX, HIDE_DISCOUNT_AMOUNT_EXCL_TAX, HIDE_AMOUNT_NET_EXCL_TAX, HIDE_AMOUNT_TXN, HIDE_SST_VAT_GST_AMOUNT, HIDE_TOTAL_SST_VAT_GST_AMOUNT, HIDE_TOTAL_TXN_AMOUNT, HIDE_TAX_CONFIG_SELECTION, HIDE_WHT_CONFIG_SELECTION, HIDE_COSTING_DETAILS, HIDE_PRICING_DETAILS, HIDE_DELIVERY_DETAILS, HIDE_DELIVERY_INSTRUCTION, HIDE_ISSUE_LINK, HIDE_RELATED_DOCUMENTS, HIDE_BATCH_NUMBER, HIDE_BATCH_EXPIRY_DATE, HIDE_BATCH_ISSUE_DATE, HIDE_BIN_NUMBER, HIDE_SERIAL_NUMBER, HIDE_DEPARTMENT, ENABLE_EDITING_UNIT_PRICE_STD, DISABLE_EDITING_AMOUNT_TXN, ENABLE_ITEM_NAME_MAX_LIMIT + ITEM_NAME_MAX_LIMIT, DISABLE_ITEM_LISTING, SHOW_ITEM_STOCK_BALANCELine grid columns and sub-panels; stock balance column in the item picker.
Delivery / settlement / tabsHIDE_DELIVERY_DETAILS_TAB, HIDE_DELIVERY_BRANCH, HIDE_DELIVERY_LOCATION, HIDE_SETTLEMENT_TAB, ENABLE_EDIT_SETTLEMENT_DATE, HIDE_KO_FOR_TAB, HIDE_DEPARTMENT_HDR_TAB, HIDE_ARAP_PNS, HIDE_ARAP_SETTLEMENT, HIDE_ARAP_DOC_OPEN, HIDE_ARAP_CONTRA, HIDE_ARAP_BALTab and ARAP-figure visibility; settlement date editable.
LayoutVERTICAL_ORIENTATION, DEFAULT_ORIENTATIONTabs vs stacked panels.
Application Settings — Gen Doc Listing
Application Settings — Gen Doc Listing group.
Application Settings — Search Invoices
Application Settings — Search Invoices group (the Search-tab keys above).
Application Settings — Main Details
Application Settings — Main Details group.

Document behaviour settings

BehaviourWhere it is setNotes
Return pricingDEFAULT_PURCHASE_RETURN_PRICING_OPTION, PURCHASE_RETURN_PRICE_FILTER_BY_SUPPLIER.Lines pulled from an invoice carry the invoice price; a known rounding case (unit price × quantity ≠ invoice line amount) can make Add All post a few sen less than the invoice — check the total against the source.
Over-return guardWARN_EXCESS_RETURN_QUANTITY.Blocks a return line whose quantity (plus serials already selected) exceeds the source line, on the Search tab’s listings. Off, nothing on the screen caps the quantity.
Transaction dateDATE_TXN_LOGIC.See Default Selection.
Return reasonsSettings → Return Reasons Settings — Reason Code, Reason Name.Feeds the Reason field; hide with HIDE_REASON. The list is the tenant’s shared service return-reason list, not one kept for this applet, so editing or removing a reason here changes it for every screen that uses that list.
PrintablesPrintable Format Settings; PRINTABLE; Branch Settings → Printable Format.The Export tab and bulk print; the usual layout is a debit note to the supplier.
WorkflowWorkflow Settings + WORKFLOW_PROCESS_GUID.New documents get the process; status and resolution shown on Main Details.
e-InvoiceE-Invoice tab; SELF-BILLED bulk action; skip flags.A purchase return is submitted to LHDN only as a Self-billed Credit Note (type 12), and only when its self-billed flag is set; without the flag it maps to no e-Invoice type. SELF-BILLED on a DRAFT only sets the flag; on a FINAL return it also queues the return for submission and is refused unless the company’s e-Invoice status is Enabled. Use it when the supplier does not issue e-Invoices. (Its success message says Self Billed Invoice.)
Email templatesNot available in this applet (no Email Template settings page).
File importNot exposed in this applet’s UI.
WebhooksSettings → Webhook.
Return Reasons Settings
Settings → Return Reasons Settings.

Screenshot withdrawn; a recapture from a demo tenant is on the list.

Workflow Settings
Settings → Workflow Settings — company workflow link (Process Code, Server Doc Type, Company).

Branch settings

Sub-tabWhat it controls
Branch DetailsRead-only Branch Name / Code / Company; Sales Agent (default purchaser); Rounding Five Cent + rounding item; Group Discount Item.
Default Settlement MethodPre-selected settlement method on the Settlement tab.
Item Category FilterItem categories offered at this branch.
Menu ListSidebar menus per branch.
Pricing SchemeBranch pricing schemes.
Printable FormatBranch default printable format.

Feature visibility / permissions

Server-side: INTERNAL_PURCHASE_RETURN create / read / update / delete with targets. A role scoped to one branch must also carry the branch target, or the listing filter shows every branch (a 2026 support case).

Client-side permissions seeded for this applet:

GroupPermission codes
Buttons / menusSHOW_GENDOC_FINAL_BUTTON (seeded); SHOW_GENDOC_DISCARD_BUTTON, SHOW_GENDOC_VOID_BUTTON, SHOW_FILE_EXPORT_MENU are checked in code but not seeded — ask BigLedger to add them to this applet’s permission list if you need them; Client Side Permission only grants codes already on it.
HeaderSHOW_DOC_NO_TENANT, SHOW_DOC_NO_COMPANY, SHOW_DOC_NO_BRANCH, SHOW_TRANSACTION_DATE, SHOW_CLIENT_DOC_TYPE, SHOW_CLIENT_DOC_1..5
Lines and pricingSHOW_QTY_BASE, SHOW_QTY_UOM, SHOW_UOM_TO_BASE_RATIO, the SHOW_UNIT_PRICE_* set, SHOW_UNIT_DISCOUNT, SHOW_UNIT_DISCOUNT_UOM_EXCL_TAX, SHOW_DISCOUNT_AMOUNT_EXCL_TAX, SHOW_AMOUNT_STD_EXCL_TAX, SHOW_AMOUNT_NET_EXCL_TAX, SHOW_AMOUNT_TXN, SHOW_AMOUNT_TXN_MAIN_LISTING, SHOW_TOTAL_TXN_AMOUNT, SHOW_TOTAL_SST_VAT_GST_AMOUNT, SHOW_TAX_CONFIG_SELECTION, SHOW_WHT_CONFIG_SELECTION, SHOW_LAST_PURCHASE_PRICE, SHOW_COSTING_DETAILS
AccountALLOW_TO_CREATE_EDIT_ACCOUNT
Also checked in code, not seededSHOW_SERIAL_NUMBER, SHOW_ARAP_PNS, SHOW_ARAP_SETTLEMENT, SHOW_ARAP_DOC_OPEN, SHOW_ARAP_CONTRA, SHOW_ARAP_BAL, EXCLUDE_ACCOUNT_CODE_ITEM_TYPE_AT_ITEM_SEARCH

Fields

Main Details

FieldMeaningRequiredNotes / validation
Branch, LocationBranch and the header location.YesA line takes stock out of its own delivery location when it has one, and only otherwise out of this location; stock balance is validated where the stock actually leaves.
CompanyOwning company.SystemFollows the branch you pick, and changes with it. It decides whose company running number the return draws at FINAL, so a return raised under the wrong branch lands in the wrong company’s sequence.
PurchaserResponsible employee.NoAuto-fill with ENABLE_EMPLOYEE_LOGIN_AUTO_DETECTION; branch default Sales Agent.
Doc No (Tenant / Company / Branch)Running numbers.SystemNot given at the same moment. The tenant number is drawn when the return is first saved; the company and branch numbers only when it is made FINAL, from the company and branch it has then. A draft therefore has a tenant number and blank company and branch numbers — that is expected, not a fault. Which of the three show is per SHOW_DOC_NO_*.
Transaction DateReturn date.YesMay be replaced at FINAL per DATE_TXN_LOGIC; must be in an open fiscal period.
Credit TermsSupplier terms.NoThe list is the supplier’s own credit terms from its record, and the field stays locked for a supplier that has none. The choice is stored on the return’s copy of the supplier details.
ReasonReturn reason from Return Reasons Settings.NoHIDE_REASON.
Reference, RemarksFree text.Remarks with MANDATORY_REMARKS_FIELD
Currency, Base Currency, Currency Rate, Forex SourceDocument currency.Currency yesReturns keep the source invoice’s currency; rate locked by CANNOT_EDIT_CURRENCY_RATE.
Client Doc Type, Client Doc 1–5; External Quotation / Order / Delivery Order / Invoice / OthersReferences.NoClient Doc Type and Client Doc 1–5 are read-only on this screen and appear only on a return you open, not on a new one; saving keeps whatever is already stored. The five External references are the ones you type. They are hidden until you switch their Hide setting off in Field Settings — the switches start on.
Workflow Status, Workflow ResolutionWorkflow fields.SystemShown when a workflow is attached.

Account

FieldMeaningRequiredNotes
SupplierEntity flagged as supplier.Yes at FINALCopied from the source document when the Search tab is used.
Entity branch, Bill To, Ship To, e-Invoice identitySupplier details.NoA copy of the supplier’s details kept on the return; the server fills it only when it arrives empty and never refreshes it, so editing the supplier afterwards does not change it. If the return is e-invoiced, the supplier block of the e-invoice is built from the supplier record at that moment, not from this copy — so correct identity details on the supplier, not here.

Lines

FieldMeaningRequiredNotes / validation
ItemReturned item.YesCopied from the source line with a document link.
Quantity (return qty)Units going back.YesPlease Enter a valid Return Qty; capped by the source line with WARN_EXCESS_RETURN_QUANTITY; FINAL checks stock where the line takes it from.
Serial number, batch, binStock identifiers.When the item is serialised / batchedPlease Select Serial Number; the batch must exist at the return location. Missing serials are not highlighted in older builds.
Unit price, discounts, amountsValue of the return.Yes for non-GL itemsPriced by the pricing option; standard price editable with ENABLE_EDITING_UNIT_PRICE_STD.
Tax code / %, WHT code / %Taxes.NoTax posts to INPUT_TAX.
GL codeLine GL override.NoWins over every mapping. A line with a GL code posts there. A goods line without one posts to the document’s own GL code if one was set on it, then to the item’s GL code for returns in that company, and failing both to the company’s default for returns. An override does not follow later changes to either mapping.

A line’s Segment, Dimension, Profit Centre and Project, its delivery details and instruction, and its remarks are optional. On the journal, a line tag left blank takes the header’s value from Department Hdr, and the line’s branch falls back to the header branch the same way — so set a tag on the header when it is true for the whole return, and on a line only where that line differs.

Settlement, Contra, Delivery Details, Department Hdr

TabFieldsNotes
SettlementSettlement method (cashbook), amount, date, remarks.Supplier refund received; date editable with ENABLE_EDIT_SETTLEMENT_DATE; total settlement, document open and ARAP balance shown.
ContraTarget purchase invoice, amount, date.Offsets the return against the supplier’s outstanding invoices.
Delivery DetailsDelivery branch, delivery location, address.Once set, the branch and location can be replaced but not cleared — a blank keeps the previous value.
Department HdrSegment, Dimension, Profit Centre, Project.Header defaults for the journal.

Lifecycle and effects

StatusMeaningAllowed next
DRAFTEditable; no stock, journal or ARAP.FINAL, DISCARDED
FINALPosted; stock out, journal written, ARAP open.VOID
VOIDReversed; stock restored, reverse journal, void_reason stored.none
DISCARDEDAbandoned draft.none

On FINAL the backend refuses an already-FINAL document; validates the forex rate; validates serial, batch and bin quantities and the stock balance at each line’s delivery location, or its location when it has none (There’s not enough stock for item …); refuses a locked fiscal period; applies DATE_TXN_LOGIC; creates a base-currency shadow for foreign-currency returns; posts stock out (quantity signum −1, valued at the line amount); fills ARAP (arap_pns_amount = +amount); writes the journal; and queues the generic-document, message-template and (unless skipped) e-Invoice processors. Intercompany rules may queue a mirror Sales Return for manual confirmation.

Journal per line (amount signum +1, PURCHASE handler, return lines use PNS_RETURN):

AccountDrCrSource of GL code
Creditor (CREDITOR / CREDITOR_NON_TRADE)Net of all linesCompany default for the supplier’s AR/AP type — mandatory.
Purchase return (PURCHASE_RETURN)Line net amountHeader GL code → item-company PURCHASE_RETURN link → company default PURCHASE_RETURN.
Input tax (INPUT_TAX)Line tax amountCompany default INPUT_TAX.
Settlement method (cashbook GL)Refund amountCashbook of the settlement item (Settlement tab).

Stock: quantity × −1 at each line’s delivery location, else the line’s location, else the header’s; the inventory transaction is visible on Trace Document.

What a return does to the moving average. A purchase return takes its own value out of the item’s moving-average pool, not the current average. Say you hold 10 units at a moving average of RM 100 (RM 1,000). Return 2 at RM 100 each and 8 units remain at RM 100. Return 2 at RM 0 and RM 1,000 is spread over 8 units: the average jumps to RM 125. Return 2 at RM 150 each and RM 700 is left over 8: it falls to RM 87.50. So the return price re-prices the stock you keep. MA_COST is the neutral choice when the average has not moved since the purchase; a zero or guessed price changes the cost of every later sale of that item. FINAL asks you to confirm any zero-priced line for exactly this reason.

On VOID the void processor posts the reverse journal and stock movement, removes the document from the e-Invoice queue and from historical aging. VOID is refused while a later document is linked to this return through an active document link, and the message names it (… already been linked with the following documents: …); void that document first. Contra and settlement entries are not document links, so they are not what this check reads.

Related applets

Troubleshooting

SymptomCauseFix
There’s not enough stock for item … on FINALThe location the line takes stock from — its delivery location, which a line pulled from an invoice copies from that invoice line — holds less than the return quantity, or the batch does not exist there.Open the line’s Delivery Details and check the location; set it (or the header Delivery Location, which CREATE copies to every line) to where the stock is, or transfer stock first; check batch / bin there.
batch number for this item does not exist at this locationBatch chosen from the invoice but stock sits in another location.Same as above.
Return quantity refused: Total return quantity is greater that the invoice qtyWARN_EXCESS_RETURN_QUANTITY and the source line is already partly returned.Return the remaining quantity only; check earlier returns on Doc Link.
Cannot find this year’s invoice or item in Search By InvoiceThe listing window (SHOW_INVOICES_FROM) or the supplier filter excludes it; or the invoice is not FINAL.Widen the window, confirm supplier and status.
An item deleted from an earlier draft return does not reappear in SearchOlder build kept the link after deletion.Update the applet (fixed 2026).
Location resets after selecting the supplierOlder build.Update the applet (fixed 2026 to keep the location).
Add All total is a few sen below the invoiceLine recomputed as unit price × quantity instead of the invoice line amount (open issue).Adjust the line amount to the invoice line before FINAL.
Serial-number tab not highlighted although serials are missingOlder build.Update the applet (fixed mid-2026); FINAL still refuses with a serial-quantity error.
FINAL asks Are you sure you want to create Purchase Return with 0 price?A line has a zero unit price or amount, usually because the pricing option found no price.Cancel and key the price. A zero-priced return leaves the stock’s value behind on fewer units and raises the moving average of what remains (see What a return does to the moving average).
Warehouse role sees every branch in the listing filterServer-side permission target not restricted to the branch.Fix the role’s target in Permission Set / Wizard.
Need to change details after FINALFINAL locks the document.VOID and re-create.
Intercompany mirror lands in the wrong location / quantityBranch intercompany configuration maps to a different location.Review the branch intercompany rule; a 2026 fix corrected location and quantity mapping.
Supplier not linked to branchENABLE_BRANCH_FILTER on and the supplier is not assigned to the branch.Link the supplier to the branch in the Supplier applet.
MISSING_DEFAULT_GL_CODE: CREDITORNo company default creditor GL.Add it in Chart of Account.

Related documentation

Last updated on