Packing Order Applet (Internal)
This page is for the packing operator and the packing supervisor, and for whoever sets up the Doc Flow and permissions they need. The applet runs the packing desk of the manufacturing module: a packing order lists what is to be packed, usually knocked off from a sales order, and finalising it puts every line in the operator queue for packers to record and a supervisor to approve. The order itself posts no journal and moves no stock; approval cuts the bin and releases the whole reservation held for the sales order, not just the packed share. Its own packing status never reaches Completed; read the lines and the queue balances instead.
Your job, and the screen for it
| The job | Screen or tab | Read |
|---|---|---|
| Raise a packing order from a sales order — knock off rather than search items, and do not abandon the draft, because adding the line already counts it as packed on the sales order | Manual Packing › create, Add line › KO For Sales Order | Packing order — lines |
| Send the order to the packers — if Final reports a queue failure, no line reaches the Operator Queue and none can be re-queued | Final on the packing order | What Final does |
| Record what was packed — enter the running total, not this batch, and re-enter it after adding a marking, which overwrites it | Operator Queue › Main Details (Packed Quantity, Machine) and Markings | Operator step |
| Approve or reject a packed line — Approve needs a length marking and an acceptance criterion first; one approval releases the sales order’s whole reservation | The packing order’s Operator Queue tab › Approve or Reject | Supervisor approval |
| Set scrap aside — a scrap lock is not a write-off; the material stays in stock at full cost until adjusted out | Scrap on the packing order’s Operator Queue tab; totals on Scrap & Short | Screens and menus |
| Set up knock-off and supervisor access | A Doc Flow row to the packing order in Organisation › Company › Doc Flow; the supervisor-view permission (SHOW_SUPERVISOR_VIEW) under Settings › Client Side Permission | Before you can use it; Who can change what |
Overview
The Packing Order Applet (Internal) is the packing desk of the manufacturing module. A packing order is an internal document (INTERNAL_PACKING_ORDER) whose lines are the items and quantities to be packed, usually knocked off from a finalised sales order. Finalising the order pushes every line into an operator queue; a packing operator records what was packed, from which bins, with which length markings, and a supervisor approves or rejects each line. Approval cuts the physical bin, records the packed bins, releases the stock reservation held for the sales order and settles the queue balance.
The applet also carries a coiling variant of the shop-floor process-instance and work-log screens found in the Manufacturing Operations Applet (menus Auto Coil Operator and Auto Coil Supervisor), a packing container register of drums and reels with a drum recommendation on every packing line, a scrap register, and read-only views of job orders, production requests and sales orders. The vocabulary of those screens — drum types, coiling direction, length markings, cable diameter — is that of a cable manufacturer, and ships to every tenant as is.
The packing order document itself neither posts a journal nor moves stock: every line carries amount signum 0 and quantity signum 0. Stock moves only when a coiling process instance is finalised, and that movement carries no cost (see Lifecycle and effects).
What it will not do. A packing order’s own packing status never reaches COMPLETED — the backend test that would set it cannot pass on a value read from the queue table (the arithmetic is under Supervisor approval). Read completion from the line statuses and the queue balances, not from the header.
Where it fits
| Direction | Document / applet | Link |
|---|---|---|
| Upstream (knock-off source, backend-registered) | Sales Order (Internal) — the only previous-document type the backend registers for a packing order | /applets/sales-workflow/internal-sales-order-applet/ |
| Upstream (knock-off tabs, UI only — see Configuration) | Job Sheet (Internal), Outbound Delivery Order (Internal), Sales Invoice (Internal) | /applets/sales-workflow/internal-jobsheet-applet/ · /applets/sales-workflow/internal-delivery-order-applet/ · /applets/sales-workflow/internal-sales-invoice-applet/ |
| Same data, other desk | Job orders and production requests are created in the Production Planning and Monitoring Applet; here they are listed | /applets/manufacturing/production-planning-and-monitoring-applet/ |
| Same screens, other desk | Process instances and work logs (the coiling menus reuse them with instance_type = PACKING) | /applets/manufacturing/manufacturing-operation-applet/ |
| Master data consumed | Machines, process types and process templates | /applets/manufacturing/process-maintenance-applet/ |
| Released on approval | The stock reservation held against the sales order — the whole reservation header, not the packed bin’s share (see Supervisor approval) | /applets/inventory-workflow/stock-reservation-applet/ |
| The queue it writes | The manufacturing side of the pick/pack queue — the Operator Queue; this applet’s Final is the only screen that fills it. It is one of seven queues that all describe “work waiting on a document” — the index is on the warehouse page, Which queue am I looking at? | /applets/inventory-workflow/warehouse-management-applet/ |
| Downstream | None. No document can be created from a packing order |
Screens and menus
The sidebar has nine work menus and six settings menus. The applet opens on Operator Queue.
| Menu | Route | What it is |
|---|---|---|
| Manual Packing | internal-packing-order | The packing order document: listing, create, edit. The name says “manual” because lines can be added by item search as well as by knock-off. |
| Operator Queue | operator-queue | The queue rows created when a packing order is finalised, newest first. Operator screen: Main Details, Input Bins, Markings. |
| Auto Coil Operator | operator-coiling | The operator process-instance screen (initial check, input items, output items, work logs) for process instances of type PACKING. |
| Auto Coil Supervisor | supervisor-coiling | Create and edit those process instances, approve work logs, set priority, finalise. |
| Packing Request | packing-request | Sales order lines with their production-request status; the same Production Request screen as in Production Planning and Monitoring. |
| Job Order | job-order | Read-only listing of manufacturing job orders. |
| Urgent Sales Order | urgent-sales-order | A sales order listing with the standard sales order columns. No urgency flag, filter or sort was found in the component or its effects; it is a plain listing of INTERNAL_SALES_ORDER headers. |
| Packing Containers | packing | Register of drums and reels: drum type, flange, barrel, inner width, clearance, volume — and, invisibly, the inventory item each one is linked to (see Fields › Packing container). |
| Scrap & Short | scrap | Listing of bin locks with lock_type = SCRAP. Rows are created from the Operator Queue tab of a packing order, not here. A lock is not a write-off — the scrapped material stays in stock at full cost until somebody adjusts it out, and this listing is the only place that total appears; Best practice 10: take the scrap out of stock yourself says who does it, when, and how they check. |
The packing order edit form has these tabs: Main Details · Account · Delivery Details · Department Hdr · Lines · Contra · Payment · ARAP · Doc Link · Attachments · E-Invoice · Export · Search · Trace Document · Operator Queue. The last tab is specific to this applet: it lists the queue rows of this order and is where the supervisor edits a row’s priority, estimated date, machine and acceptance criterion, and approves, rejects or scraps a line. Account, Payment, ARAP and E-Invoice come with the shared document scaffold; with both signums at zero the ARAP balance of a packing order is always zero.
Adding a line opens a tab group: Search Item, then KO For Sales Order, KO For Jobsheet, KO For Delivery Order and KO For Sales Invoice, each shown only when enabled (see Document behaviour settings). “KO By …” and “Copy Quotation Item” tabs exist in the template but are commented out; there is no quotation knock-off.
Settings menus: Application Settings (field-settings), Default Selection, Printable Format Settings, Return Reasons Settings, Workflow Settings, Email Template, plus the shared Feature Visibility, Client Side Permission, Permission Wizard / Set, User, Team and Role Permission, and Webhook screens. Personalisation: Default Selection (personal) and Sidebar.
This page is illustrated in words only: static/images/internal-packing-order-applet/ is empty.
Configuration
Before you can use it
| Prerequisite | Where | Why |
|---|---|---|
Applet installed; server-side permissions TNT_API_DOC_INTERNAL_PACKING_ORDER_{CREATE,READ,UPDATE,DELETE}_TGT_GUID granted | Tenant Admin, then Settings › Server Side Permissions here | Every document call is checked against these four. |
MRP server-side permissions for the queue, packed bins, container sizes, process instances and work logs (API_TNT_DM_MRP_PICK_PACK_QUEUE_*, …_PROCESS_INSTANCE_*, …_PROCESS_INSTANCE_WORK_LOG_*, …_JOB_ORDER_HDR_READ, and the container-size family whose read code is spelt API_MRP_COINTAINER_SIZE_API_MRP_COINTAINER_SIZE_READ) | same | The operator queue, coiling, container and recommendation screens check these — and API_TNT_DM_FI_PICK_PACK_QUEUE_CREATE, because Final writes the finance-side queue first. |
| Company, branch, location | Organisation | All three are required on the header before Save (checked in the browser only); the default location is the branch’s main location. |
A Doc Flow Config row per company, source document → INTERNAL_PACKING_ORDER, enabled | Organisation › Company › Doc Flow | Without it no “KO For …” tab appears, and a packing order can only be built by item search — which leaves the sales order’s packed quantity untouched. |
| Finalised sales orders with lines to pack; optionally a stock reservation against them | Sales Order (Internal), Stock Reservation | Knock-off source; the reservation is what approval releases. |
| Containers linked to an inventory item, which only the API can do | Packing container below | The line’s Packing Container picker and the drum recommendation both ignore a container with no linked item. Do not edit a linked container on its edit screen: saving clears the link (Packing container). |
| Machines, process types and process templates | Process Maintenance | Required by the coiling menus only; the operator’s Machine drop-down lists machines of prodsys_type = Packing. |
A workflow process for INTERNAL_PACKING_ORDER (optional) | Settings › Workflow Settings links it to the company; Settings › Application Settings › Workflow Selection picks it and the Final status; processes are designed in Workflow Design | A new packing order starts on that process. With a Final status (FINAL_STATUS_GUID) set, the Final button shows only when the order’s saved workflow status equals it. |
Applet settings
Settings live in four places: Default Selection (applet-local component, master settings), Personal Default Selection (applet-local, per user), the shared Feature Visibility screen, which writes the HIDE_* / ENABLE_* keys this applet reads, and the shared Client Side Permission screen, which grants the SHOW_* codes. The hide toggles do what How settings are stored and who they apply to says they do and are not listed here; the one thing to know is under Who can change what — the registry defines only two SHOW_* codes for this applet, so a hidden button or column stays hidden for everyone. The settings below change what the applet will let you do.
| Setting | What changes | Default when never saved | Advisory or hard |
|---|---|---|---|
DEFAULT_BRANCH, DEFAULT_LOCATION, DEFAULT_COMPANY — Default Selection and Personal Default Selection | Pre-fill the new packing order’s header. Picking a branch patches the location from the branch’s MAIN_LOCATION and the company from the branch; the personal value wins over the master. | null — the header opens empty and Save is refused until all three are chosen | field required in the browser; the backend does not check |
DEFAULT_PROCESS_GUID and DEFAULT_PROCESS_TYPE_CODE — Default Selection, one drop-down (Default Coiling Process Type) writes both | Pre-select the process type when the Auto Coil Supervisor creates or edits a process instance, personal value first, then master | null — a new process instance opens with no process type | advisory |
ENABLE_AUTO_POPUP — Feature Visibility | Opens the print pop-up the moment Final is pressed, in the same handler as the dispatch and before the server has answered — a Final the backend refuses still gets its pop-up. | not set (off) | advisory |
ENABLE_BRANCH_FILTER — Feature Visibility | On the KO For Sales Order tab, switches the add-to-order path to one selected row at a time with a customer-to-branch check that stops the line with “Customer not linked to branch”. Off, every selected row is added with no such check. | not set (off) | hard in the browser — the line is not added |
On the screen and doing nothing
- Application Settings (
field-settings) — opens the shared document-settings screen every document applet uses, with its hundreds of controls (the eight-toggle local screen whose Save did nothing is no longer routed). Its Workflow Selection panel is read here — seeWORKFLOW_PROCESS_GUIDbelow; its other controls have not been checked against this applet, so treat a toggle there as doing nothing until you have seen it work. Column and button visibility is Feature Visibility’s job. - Return Reasons Settings — maintains a list of return reasons that nothing in this applet uses: the header has no reason field.
SALES_RETURN_WITH_PAYMENT— read at Final, where it refuses Final unless the ARAP balance is zero; on a zero-signum document the balance is always zero, so the key cannot change the outcome. No settings screen in this applet writes it (it belongs to the sales-return and refund-note family, which is where the read-path check finds every writer).WORKFLOW_PROCESS_GUIDis not dead: the Workflow Selection panel of Application Settings writes it, a new packing order starts on that process and its Starting Status, and the Final status chosen beside it is the Final-button gate described under Document behaviour settings.
Document behaviour settings
| Setting | Where | Effect |
|---|---|---|
| Knock-off tabs | Organisation › Company › Doc Flow | On opening Add line, the applet shows KO For Sales Order if the flow from INTERNAL_SALES_ORDER is enabled, KO For Jobsheet for INTERNAL_JOBSHEET, KO For Delivery Order for INTERNAL_OUTBOUND_DELIVERY_ORDER, KO For Sales Invoice for INTERNAL_SALES_INVOICE. Sales quotations are never offered. Only the sales-order tab keeps a running packed quantity on its source line (see Lines). |
| Workflow Settings | Settings › Workflow Settings | Company ↔ workflow process links for INTERNAL_PACKING_ORDER, the processes Application Settings › Workflow Selection offers. The Final status chosen there (FINAL_STATUS_GUID, an applet setting, not part of the process) must equal the workflow status saved on the order for the Final button to show; finalising does not change that status — see Workflow Design: the one real gate. |
| Printable Format Settings | Settings › Printable Format Settings | Printable layouts for INTERNAL_PACKING_ORDER. The applet-settings key it stores the chosen format under is named INTERNAL_PACKING_ORDER_APPLET_EXT_CODE_PRINTABLE_FORMAT_GUID_INTERNAL_PURCHASE_RETURN — a copied name, and harmless. |
Email Template is the shared email-template screen and behaves as on every document applet.
Settings in other applets that control this applet
Two things set elsewhere decide what happens here, and both are above: the Doc Flow rows in the Organisation applet decide which knock-off tabs exist, and a stock reservation raised in the Stock Reservation applet is what supervisor approval releases — as a whole header, on the first line approved. Process types, templates and machines from Process Maintenance populate drop-downs and change no behaviour.
Who can change what
- Client-side permissions this applet defines. Exactly two.
SHOW_SUPERVISOR_VIEWis the one that matters: seven of the nine work menus (Manual Packing, Auto Coil Supervisor, Packing Request, Job Order, Urgent Sales Order, Packing Containers, Scrap & Short) require it — or the server permissionTNT_API_DOC_INTERNAL_PACKING_ORDER_READ_TGT_GUID,TNT_TENANT_ADMINorTNT_TENANT_OWNER. Operator Queue and Auto Coil Operator are open to everyone with the applet. - Dead permission code.
SHOW_OPERATOR_VIEWis defined ACTIVE and does nothing here, nor in the Manufacturing Operations applet — granting it changes nothing. - Codes the applet compares but cannot be granted. The listing, edit form and line form test some thirty further
SHOW_*codes —SHOW_GENDOC_FINAL_BUTTON,SHOW_GENDOC_VOID_BUTTON,SHOW_GENDOC_DISCARD_BUTTON, theSHOW_ARAP_*set,SHOW_COSTING_DETAILS,SHOW_DOC_NO_*,SHOW_CLIENT_DOC_TYPE,SHOW_TRANSACTION_DATE,SHOW_SALES_AGENT,SHOW_DESCRIPTION,SHOW_QTY_*,SHOW_UOM_TO_BASE_RATIO, theSHOW_UNIT_PRICE_*/SHOW_UNIT_DISCOUNT*/SHOW_AMOUNT_*line-column codes,SHOW_LAST_PURCHASE_PRICE,SHOW_TAX_CONFIG_SELECTION,SHOW_WHT_CONFIG_SELECTION. None of them is defined, so the Client Side Permission screen cannot grant them and the check can never be true; wherever the matchingHIDE_*setting is on, that column or button is hidden for everyone, administrators included. - Server-side: the four document permissions above; the
mrp/endpoints checkAPI_TNT_DM_MRP_*permissions built per target; the finance-side queue insert at Final checksAPI_TNT_DM_FI_PICK_PACK_QUEUE_CREATE.
Fields
Every editor in this applet except one seeds its save from the row it loaded and changes only the fields on the form, which matters because the backend has no partial update — a save is a whole-row replace built from every declared column. The document editor sends the whole document from the draft store; the operator’s and the supervisor’s queue editors spread the loaded queue row and patch two and six fields respectively; the length-marking update spreads the loaded marking; the bin cut and the production request load the whole record and put it back. The exception is the Packing Containers edit screen, and it is in its own table below.
Packing order — header and delivery details
The header is the shared document scaffold: document type (fixed to INTERNAL_PACKING_ORDER), branch / company / tenant running numbers, transaction and due dates, reference, remarks, tracking ID, client document type and references, workflow status and resolution when a process is set, and the audit fields. Delivery Details takes a delivery branch, location, type and tracking ID, carries no validation, and feeds nothing downstream — the queue rows take their branch and location from each line. Two header fields do something the screen does not show:
| Field | What the screen does not say |
|---|---|
| Company, Branch, Location | Required before Save, in the browser only; pre-filled from Default Selection, with location and company patched from the chosen branch. After Final the selectors and dates are disabled and Reference stays editable. |
| Due Date | Changing it on an existing order appends an entry to every line’s revision_history_json — edited date, the line’s packing status and the new due date — when the last recorded due date differs; a line with no history gets its first entry. That is the only revision history the document keeps, and it is per line. |
Packing order — lines
A line is the shared line template — item, quantities (base, by UOM, ratio), the pricing block (STD / transaction / net unit prices, discounts, tax, WHT, amounts), remarks, e-invoice code — plus this applet’s own Packing Container, Drum Type, an Accept Recommendation button and the source document numbers a knock-off fills. Purchase Order / Invoice / Quotation / Requisition No. fields also render, from the shared template, and no purchase knock-off exists here. Line tabs: Batch Number, Bin Number, Serial Number (scan / import), Costing Details (behind SHOW_COSTING_DETAILS), Pricing Details, Delivery Details, Delivery Instruction, Department, Doc Link, Issue Link. The pricing block is carried and posts nothing (amount signum 0).
| Field | What the screen does not say |
|---|---|
| Quantity Base | Becomes the queue row’s base_qty and its opening qty_balance at Final — the number the operator’s Required Quantity shows and the number approval subtracts from. |
| Packing Qty on the KO For Sales Order tab | Checked in the browser against the sales-order line’s quantity minus what is already counted as packed (“Packing Qty should not be greater than Order qty”). Adding the line raises the sales-order line’s packed quantity at once, while the packing order is still an unsaved draft; only Discard and Void bring it back down (see Lifecycle). Abandon the draft and the sales order stays counted as partly packed. |
| Packing Container | A picker over the container-size register that lists every row but adds only a row linked to an inventory item. The line stores that item’s GUID in container_inv_item_guid and its name in item_property_json.packing_container_name — which is what the operator’s screen later resolves back to a container. |
| Drum Type and Accept Recommendation | Drum Type is not a line column; it is one of four inputs to a live recommendation — the item’s inventory item, the widest selected bin, the packing quantity and the drum type — asked of GET mrp/bl-mrp-container-sizes/get-drum-recommendation-for-coils on every change. Accept Recommendation copies the answer into Packing Container. “Container has no linked packaging item” means the recommended row has no inv_item_guid. How the recommendation is computed is under Packing container. |
| Sales Order No., Jobsheet No., Delivery Order No. | Filled by knock-off, and the sales-order one is the only link the queue and the approval path use to find the reservation. |
Operator queue row (Operator Queue › Main Details)
The operator’s screen shows the packing order number, line running number, item code and name, UOM, required quantity, priority, estimated packing date, acceptance criterion and deviation, packing status and packing container, and lets the operator change exactly two things: Packed Quantity and Machine. The supervisor’s copy of the same form on the packing order’s Operator Queue tab additionally edits priority, estimated packing date, acceptance criterion and deviation.
| Field | What the screen does not say |
|---|---|
Packed Quantity (awaiting_approval) | The cumulative quantity packed for this line, not this session’s. Approval computes the new balance as required quantity minus this figure, so a second batch must be entered as the running total. Creating a length marking overwrites it with that marking’s quantity, not the sum of markings — correct the total by hand before Save. Saving with a changed value sets the packing-order line to PENDING_APPROVAL; saving with it unchanged only re-saves the queue row. |
| Priority, Estimated Packing Date | Read-only here; set by the supervisor on the packing order’s Operator Queue tab. Both are null on every row Final creates. The estimated date is a range filter on the queue query. |
| Acceptance Criteria, Acceptance Deviation | Read-only here; set by the supervisor. EXACT and ACCEPTANCE +ve (inf) error force the deviation to 0 and disable it. The criterion is what decides whether the whole order is packed (see Supervisor approval) — and every row Final creates has no criterion, which is the case that makes approval fail. |
| Machine | A drop-down of machines with prodsys_type = Packing; stored on the queue row, read by no report or process in this applet. |
| Packing Container | Resolved by the packing line’s container_inv_item_guid → the first container-size row with that inv_item_guid, shown as name – drum type (x X y X z). Blank means the line was saved without a container or the container’s item link has since been cleared. |
Packing container
The register form takes Flange x, Barrel y, Inner width z and Min. clearance from outer w (each with a UOM defaulting to mm), Volume (cm³), and a Drum Type of STEEL or WOOD, defaulting to STEEL.
| Field | What the screen does not say |
|---|---|
| Volume | Recomputed in the browser whenever x, y or w changes, as π/4 · ((x − 2w)² − y²) · z in mm³, divided by 1,000 and rounded to a whole cm³; it stays editable, and whatever is shown is saved. |
Linked inventory item (inv_item_guid) | The column the line picker and the recommendation require, and no control on either screen sets it — Create and Edit send eleven dimension, UOM, volume and drum-type values and never this one. No backend code sets it either. Rows that carry it were written through the API. |
| Edit (the Packing Containers edit screen) | Saving an edit clears the container’s link to its inventory item under “Packing has been updated”. Editing a container’s dimensions therefore removes it from every line’s picker and from the recommendation until the link is restored through the API. |
| What the recommendation returns | The container of the requested drum type whose Volume is the smallest value ≥ (diameter)² × length, where the diameter is the inventory item’s width (falling back to the widest selected bin) and the length is the packing quantity. There is no π/4 and no unit conversion in that product, while the screen stores Volume in rounded cm³ — so a sensible answer depends on the item’s width and the packing quantity being in units whose product is comparable with cm³. Check a recommendation against a drum you know fits before relying on it. |
Lifecycle and effects
What posting does.
| Item | Value |
|---|---|
| Document type | INTERNAL_PACKING_ORDER |
| Amounts and quantities | Zero on every line — a packing order moves no money and no stock |
| Journal | none |
| Stock | none for the document; the coiling screens are the only place this applet moves stock (below) |
| Previous document | INTERNAL_SALES_ORDER only |
| VOID reverses | nothing on the ledgers, and does not touch the queue; it brings the sales-order line’s packed quantity back down (below) |
What Final does
Final saves the document first and then finalises it — a separate step, where the server validates the document, sets it FINAL and starts the main posting job. With nothing to post, that job has no work to do for this document.
On success the applet does the work that gives Final its meaning here, in two steps of its own:
- Every line is put on the finance-side pick/pack queue with its full quantity as the balance, one request per line, all in parallel.
- Those rows are then moved to the manufacturing queue. The lines are now in the Operator Queue, and nothing else has been written.
Step 2 runs only when every line succeeded in step 1. If any line fails, the applet shows “Failed to post to Fi Pick Pack Queue” and stops there: the lines that did succeed stay on the finance-side queue and none of them reaches the Operator Queue. The document is already FINAL, Final cannot be pressed again, and no screen re-queues a line or moves the waiting ones on.
Which jobs run, and which do not
Nothing here needs scheduling: every job below runs in response to a user action.
| Job | Runs for this applet |
|---|---|
| The main posting job | Yes, at every Final — and has nothing to post for a document with no money and no stock. |
| The stock-balance update | Only when a coiling process instance is finalised: once for each input and output line. Never for a packing order. |
| The pick/pack void job | Not for this document. It acts only on voided sales orders; voiding a packing order leaves its queue rows exactly as they were. |
| The manufacturing process finalisation job | Never from here. A coiling instance’s Final writes its stock lines through a separate server action, and leaves its input bins locked (Coiling process instances). |
Operator step
Saving a queue row saves the packed quantity; if it changed, the packing-order line’s packing status becomes PENDING_APPROVAL. Length markings record the bin, a direction, an offset and the marked quantity, and each one saves the queue row. The operator’s Save does not release anything.
Supervisor approval
The approval path below is described from the code rather than from documents that have been through it, so treat it as untested ground: reconcile the first packing order you approve against the bins by hand.
From the packing order › Operator Queue tab › Approve:
Cutting the bins happens only when the row has at least one length marking — Approve on a row with no markings does nothing at all, and says nothing. For each marking, a marked quantity larger than the bin line stops with “Packing Quantity exceeds bin’s quantity” (checked in the browser; nothing written); an exact match keeps the bin line whole; otherwise the bin line is reduced and a new bin line is created for the packed quantity.
Recording the packed bins: one packed-bin record per packed bin line — recorded against the queue row, not the packing order.
Releasing the reservation runs alongside step 4 and is invisible. It takes the sales order behind the packing order’s first link, looks for a bin reservation on the first bin of the queue row’s line for that sales order, releases the first one it finds and then marks the whole stock reservation it belongs to RELEASED, which takes the reservation’s full quantity off the reserved figure.
One approved line releases the entire reservation, whatever else it covered — but only that one bin link: the reservation’s other bin links stay RESERVED and keep coming off their bins’ available quantity. When that first bin carries no reservation for the sales order — including when there is no reservation at all — or the packing order’s first link is not to the sales order, it fails with no message, and the success toast from step 4 shows regardless.
Approving the line sets its packing status to
APPROVEDand writes the queue balance as required quantity minus packed quantity. The server then re-derives the packing status of the line and the header itself, overwriting theAPPROVED:- balance not zero → header and line
IN_PROGRESS; - balance zero → the line becomes
COMPLETED, and the header becomesCOMPLETEDonly if every queue row of the document passes the completion test — which, as the product stands, it never does. With no acceptance criterion (every row Final creates has none) the test fails with an error; withEXACTit answers no; with a variation it answers yes only when the deviation is at least the whole required quantity.
- balance not zero → header and line
So the realistic outcomes of a full approval are: criterion unset — the balance is written, then a general error shows and the line keeps APPROVED; criterion set — the line reads COMPLETED, the header IN_PROGRESS, for ever. APPROVED is therefore the status of a line whose approval errored.
Reject sets the line’s packing status to REJECTED and touches nothing else. Scrap from the same tab locks the bin as scrap against the packing-order line; that is what the Scrap & Short menu lists.
Packing statuses are IN_QUEUE, PLANNED, IN_PROGRESS, ON_HOLD, COMPLETED, PENDING_APPROVAL, APPROVED, REJECTED, INCOMPLETE, PENDING_STOCK. The applet sets PENDING_APPROVAL, APPROVED and REJECTED; the server sets IN_PROGRESS and COMPLETED; the listing filter offers INCOMPLETE, PENDING_APPROVAL, COMPLETED, REJECTED, so a line at IN_PROGRESS or APPROVED can only be found by clearing the filter.
No approval engine. The generic approval engine runs its full loop only for Purchase Order and Purchase Requisition (Stock Requisition has settings but no submit step, a known gap); here “approval” is the supervisor’s Approve button above and, on the coiling screens, the work-log approval status (PENDING, APPROVED, REJECTED, REWORK). Neither uses Approval Settings.
Discard and Void, and the sales order behind them
A FINAL or VOID document cannot be discarded. Both Discard and Void bring the sales-order line’s packed quantity back down, because knock-off raised it. The two paths disagree with each other and with knock-off:
- Discard takes the first discarded document only, adds up the quantity of all its lines, and subtracts that total from the sales-order line behind its first link. A multi-select discard from the listing corrects one document; a multi-line packing order takes every line’s quantity off one sales-order line; a draft that was never knocked off has no link and nothing is corrected.
- Void takes the first link, finds the one packing line it points at, and subtracts that line’s quantity from its sales-order line — one line per void, whatever the document held.
- Knock-off added the base quantity at the moment the line was picked, before any save.
A sales order’s “already packed” figure is therefore only right for single-line packing orders that were saved and then voided one at a time. So when a knock-off refuses a quantity that nothing has packed, the figure it checks is the sales-order line’s quantity minus its packed quantity, and the shortfall is a draft somebody abandoned or a multi-line order that was discarded.
Coiling process instances (Auto Coil Supervisor / Operator)
The supervisor creates a packing process instance, status PLANNED, with input items (bins, which are locked) and output items (the Default Item / default coiling item); the operator posts work logs (shift date and type, machine, length produced, length discrepancy, line speed, OD start/mid/end, in/out die, heater temperature, time consumed). This is the only place this applet moves stock.
Final on the supervisor screen takes a shorter route than a job’s FINAL in Manufacturing Operations. It saves the instance as FINAL and POSTED through the ordinary instance update, then calls a second server action that writes the stock lines at once — every input line out, every output line in — and queues one stock-balance update for each.
The two calls are separate. If the second fails, the instance already reads FINAL and POSTED, Final is greyed out, and no stock has moved; and the server action moves the stock again each time it is called, so it must not simply be re-run. Check Stock Balance after every coiling Final, and take a mismatch to your BigLedger contact. The manufacturing finalisation job never runs for it, so two things that job does on a job’s FINAL do not happen here: no next stage is set READY, and the locks on the input bins are not released, so they keep coming off those bins’ Base Qty.
That last part is a known defect, which BigLedger is tracking: Final should release those locks. Until it is fixed, write down each coiling instance’s input bins before you press Final, then report them to your BigLedger contact.
Each line is written with an amount of zero, which costing ignores, so the coil that enters comes in at the unit cost it already carries at that location — zero if it has never been costed there — and no cost passes from the input coil (A manufactured item shows RM 0 cost).
Packing Request and the container register
Packing Request. Save writes the request flag and remarks onto the one sales-order line. Nothing else changes.
Container register. The Packing Containers screens create, edit and delete containers — the edit being the one that clears the inventory-item link, above. The line form asks for a recommendation on every change of its inputs.
Related applets
- Sales Order (Internal) — the backend-registered previous document; its lines are knocked off here, its
packing_order_qtyis kept by this applet, and its reservation is released on approval. - Job Sheet (Internal), Delivery Order (Internal), Sales Invoice (Internal) — knock-off tabs when their Doc Flow row is enabled.
- Warehouse Management Applet — carries the index of every pick/pack queue; this applet writes the manufacturing-side one.
- Production Planning and Monitoring Applet — creates the job orders and production requests this applet lists.
- Manufacturing Operations Applet — the same process-instance and work-log screens for non-packing instances.
- Process Maintenance Applet — machines, process types, templates.
- Stock Reservation Applet — what approval releases, as a whole header.
- Stock Balance Applet — where the zero-value coil movements land.
- Organisation Applet — Doc Flow Config, branches, locations.
- Workflow Design Applet — the process referenced by Workflow Settings.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| A user sees only Operator Queue and Auto Coil Operator; Manual Packing and the other menus are missing | Those menus require SHOW_SUPERVISOR_VIEW (or the document READ server permission / tenant admin). | Grant SHOW_SUPERVISOR_VIEW under Settings › Client Side Permission (it is one of the two defined for this applet) or the server READ permission. If it is granted and the menus are still hidden, update the applet. |
| No “KO For …” tab when adding a line | No enabled Doc Flow row from that source document to INTERNAL_PACKING_ORDER for the document’s company | Organisation › Company › Doc Flow. |
| “Packing Qty should not be greater than Order qty” although nothing has been packed | The sales-order line’s packed quantity was raised by a knock-off whose packing order was never saved, or by a multi-line order that was discarded | Correct the packed quantity on the sales-order line through the API; no screen edits it. |
| Final button not shown | A Final status (FINAL_STATUS_GUID) is set on the applet and the order’s saved workflow status is a different one; or HIDE_GENDOC_FINAL_BUTTON is on without SHOW_GENDOC_FINAL_BUTTON | Move the workflow status and save the order, or clear the Final status, or adjust Feature Visibility / client-side permission. |
| Final shows “Failed to post to Fi Pick Pack Queue” and the Operator Queue stays empty for this order | At least one line failed the first queue step, so step 2 ran for no line; the lines that succeeded wait on the finance-side queue | The lines cannot be re-queued from any screen; void the order and re-create it, or add the queue rows through the API. |
| The Packing Container picker lists containers but Add does nothing | The selected container has no linked inventory item, which no screen sets — usually because the container was edited on the Packing Containers screen | Restore the link through the API; do not edit a container from the screen once it is linked. |
| Approve does nothing — no toast, no change | The queue row has no length markings; the approval chain starts from the markings | Have the operator create at least one marking, then approve. |
| Approve fails with “Packing Quantity exceeds bin’s quantity” | A length marking’s quantity is larger than the bin line it points at | Correct the marking or pick another bin. Browser-side check, so nothing was written. |
Approve shows a general error, the line reads APPROVED, the queue balance is 0 and the packing order’s status has not moved | The balance was written and the completion test then failed on the row’s empty acceptance criterion | Set an acceptance criterion on the row from the Operator Queue tab before approving; the line will then read COMPLETED. The header will still not. |
A packing order never shows COMPLETED | The header’s completion test cannot pass as the product stands | Read completion from the lines and the queue balances. |
| Reserved bins listed for the wrong customer | An older version did not filter the reserved-bin listing to the packing order’s customer | Update the applet. |
Stock reservation stays ACTIVE after packing | Release runs only from the supervisor Approve path, and fails silently when the queue line’s first bin carries no reservation for the sales order (or there is none), or the packing order’s first link is not to the sales order | Approve from the Operator Queue tab of the packing order; release by hand in the Stock Reservation applet. |
| A whole reservation is released after one line is approved | Approval marks the reservation released as a whole on the first approved line, while its other bin links stay reserved | Check the remaining bin links in the Stock Reservation applet before re-reserving; raise one reservation per sales-order line if lines are packed at different times. |
| Finished coil shows zero cost in Stock Balance | The coil had never been costed at that location, and finalisation carries no cost from the input coil | A manufactured item shows RM 0 cost; no setting changes this. |
| A toggle in Application Settings changes nothing | Application Settings is the shared document-settings screen; only its Workflow Selection panel (WORKFLOW_PROCESS_GUID) is known to be read by this applet (see On the screen and doing nothing) | Use Feature Visibility and Client Side Permission for column and button visibility; use Workflow Selection for the starting process. |
Related documentation
- Manufacturing Module
- Manufacturing applets
- Which queue am I looking at? — the seven queues, on the warehouse page
- How settings are stored and who they apply to
- No user guide covers this applet yet; the closest job page is Use cases: the packing floor working a queue.