Packing Order Applet (Internal)
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 any 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, 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: its amount and quantity signums are both zero. Stock moves only when a coiling process instance is finalised, and that movement carries no cost (see Lifecycle and effects).
Where it fits
| Direction | Document / applet | Link |
|---|---|---|
| Upstream (knock-off source, backend-registered) | Sales Order (Internal) | /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-outbound-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 | Stock reservation held against the sales order | /applets/inventory-workflow/stock-reservation-applet/ |
| Downstream | None. No document type lists INTERNAL_PACKING_ORDER as its previous document (GenericDocumentTypeHandler.java, checked at backend commit c4a3545d7c) |
Screens and menus
The sidebar (models/menu-items.ts) has nine work menus and six settings menus. The applet opens on Operator Queue (the empty route redirects there, app.routing.ts).
| 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 bl_mrp_pick_pack_queue rows created when a packing order is finalised. 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 bl_mrp_job_order_hdr (Job Order No, date, item, container qty and measure, UOM, status, completion date, remarks). |
| 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 (checked at commit 3d1d4e6); it is a plain listing of INTERNAL_SALES_ORDER headers. |
| Packing Containers | packing | Register of drums and reels (bl_mrp_container_size): drum type, flange, barrel, inner width, clearance, volume. |
| Scrap & Short | scrap | Listing of bin locks with lock_type = SCRAP (item, bin header and line code, container qty, base qty). Rows are created from the Operator Queue tab of a packing order, not here. |
The packing order edit form has these tabs (packing-order-edit.component.html): 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 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 (line-item-create.component.html): 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.
No screenshot of this applet is held in the wiki (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 (TntErpPermissions.java L3596–3635) | 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 (TntMrpPermissions.java: API_TNT_DM_MRP_PICK_PACK_QUEUE_*, …_PROCESS_INSTANCE_*, …_PROCESS_INSTANCE_WORK_LOG_*, …_JOB_ORDER_HDR_READ) | same | The operator queue, coiling and container screens call the mrp/ controllers, which check these. |
| Company, branch, location | Organisation | Header fields; DEFAULT_LOCATION is taken from the branch’s MAIN_LOCATION. |
A Doc Flow Config row per company, source document → INTERNAL_PACKING_ORDER, enabled | Organisation › Company › Doc Flow (table bl_fi_comp_gendoc_flow_config) | Without it no “KO For …” tab appears. |
| 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. |
| Machines, process types and process templates | Process Maintenance | Required by the coiling menus only. |
A workflow process for INTERNAL_PACKING_ORDER (optional) | Settings › Workflow Settings here; processes are designed in Workflow Design | When set, its FINAL_STATUS_GUID gates the Final button. |
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 (projects/shared-utilities/modules/settings/feature-visibility, which writes the HIDE_* / ENABLE_* keys this applet reads), and the shared Client Side Permission screen (which grants the SHOW_* codes). Anyone who can open Settings can change the master values; Personal Default Selection is per login.
| Setting | Where set | What it controls | Default |
|---|---|---|---|
DEFAULT_BRANCH | Default Selection (label Default Branch), Personal Default Selection | Branch pre-filled on a new packing order | null |
DEFAULT_LOCATION | Default Selection (Default Location), Personal Default Selection | Location pre-filled; when a branch is picked the form patches it from the branch’s MAIN_LOCATION (default-settings.component.ts L70–72) | null |
DEFAULT_COMPANY | Default Selection — no control; patched from the chosen branch (L69) | Company on new documents | null |
DEFAULT_PROCESS_GUID | Default Selection (Default Coiling Process Type, a process-type dropdown) | Process type pre-selected when the Auto Coil Supervisor creates or edits a process instance (personal value first, then master — supervisor-pi-create.component.ts L77) | null |
HIDE_GENDOC_FINAL_BUTTON, HIDE_GENDOC_VOID_BUTTON, HIDE_GENDOC_DISCARD_BUTTON | Feature Visibility | Hide the Final / Void / Discard buttons on the document; a user holding the matching SHOW_GENDOC_*_BUTTON client-side permission sees them anyway (packing-order-edit.component.ts L137–138, L294) | not set |
HIDE_ARAP_BAL, HIDE_ARAP_CONTRA, HIDE_ARAP_DOC_OPEN, HIDE_ARAP_PNS, HIDE_ARAP_SETTLEMENT | Feature Visibility | Hide the ARAP columns on the listing unless the user holds the matching SHOW_ARAP_* permission (packing-order-listing.component.ts L248–392) | not set |
HIDE_CLIENT_DOC_TYPE, HIDE_CLIENT_DOC_1…5, HIDE_SERVER_DOC_*, HIDE_DESCRIPTION, HIDE_DELIVERY_LOCATION | Feature Visibility | Hide the corresponding listing columns / header fields | not set |
ENABLE_BRANCH_FILTER, ENABLE_FILTER_BY_TODAYS_TXN | Feature Visibility | Listing filters by the user’s branch / today’s transactions | not set |
ENABLE_AUTO_POPUP | Feature Visibility | After Final, open the print pop-up (packing-order-edit.component.ts L245) | not set |
WORKFLOW_PROCESS_GUID | written by Workflow Settings | The workflow process applied to new documents | none |
Keys read at runtime that no screen in this applet writes: SALES_RETURN_WITH_PAYMENT — if it is set on this applet, Final is refused client-side unless the ARAP balance is zero (packing-order-edit.component.ts L232–238), a check copied from the Sales Return applet; on a zero-signum document the balance is always zero, so the check is inert unless the key is set by hand. DEFAULT_PROCESS_TYPE_CODE is declared in the Default Selection form but has no control in the template and is not read by any screen — model-only, not documented as a setting.
Application Settings (field-settings) does nothing. The menu opens an applet-local FieldConfigurationComponent whose template is eight unbound toggles (Unit Discount, SST/VAT/GST, WHT, Blanket Order; Segment, G/L Dimension, Profit Center, Project) and a Save button with no handler; the component class is empty (field-configuration.component.ts, .html, checked at commit 3d1d4e6). Nothing is persisted and nothing reads it.
Document behaviour settings
| Setting | Where | Effect |
|---|---|---|
| Knock-off tabs | Organisation › Company › Doc Flow (bl_fi_comp_gendoc_flow_config) | On opening Add line, the applet loads the flow rows whose target is INTERNAL_PACKING_ORDER and shows KO For Sales Order if the INTERNAL_SALES_ORDER row 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 (line-item-create.component.ts L120–145). The INTERNAL_SALES_QUOTATION branch is commented out. |
| Workflow Settings | Settings › Workflow Settings | Company ↔ workflow process for INTERNAL_PACKING_ORDER; the process’s FINAL_STATUS_GUID must equal the document’s current status for the Final button to show (packing-order-edit.component.ts L129, L298). |
| 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 (printable-format-constants.ts) — a copied name, harmless as long as nothing else uses it. |
| Return Reasons Settings | Settings › Return Reasons Settings | Maintains reason code / name rows in bl_svc_return_reason (svc/return-reasons). The header component loads them into a drop-down option list (main-details.component.ts L541–557) but the header template renders no reason field, so the reasons are not used anywhere in this applet (checked at commit 3d1d4e6). |
| Email Template | Settings › Email Template | Notification templates for the document (shared NotificationTemplateService). |
Settings in other applets that control this applet
| Setting | Where it is set | Effect here |
|---|---|---|
Doc Flow Config (source → INTERNAL_PACKING_ORDER) | Organisation applet | Which knock-off tabs exist (above). |
| Stock reservation against the sales order | Stock Reservation applet | Supervisor approval sets the reservation link and header to RELEASED. |
| Process types, templates, machines | Process Maintenance applet | Drop-downs on the coiling screens. |
Feature visibility / permissions
- Route guard. Seven of the nine work menus (Manual Packing, Auto Coil Supervisor, Packing Request, Job Order, Urgent Sales Order, Packing Containers, Scrap & Short) require the client-side permission
SHOW_SUPERVISOR_VIEW; the guard also passes when the user holds the server permissionTNT_API_DOC_INTERNAL_PACKING_ORDER_READ_TGT_GUID,TNT_TENANT_ADMINorTNT_TENANT_OWNER(permission-gaurd.tsL56–61). Operator Queue and Auto Coil Operator are unguarded. - Client-side codes read by the applet:
SHOW_SUPERVISOR_VIEW,SHOW_GENDOC_FINAL_BUTTON,SHOW_GENDOC_VOID_BUTTON,SHOW_GENDOC_DISCARD_BUTTON,SHOW_ARAP_BAL,SHOW_ARAP_CONTRA,SHOW_ARAP_DOC_OPEN,SHOW_ARAP_PNS,SHOW_ARAP_SETTLEMENT,SHOW_COSTING_DETAILS,SHOW_DOC_NO_BRANCH,SHOW_DOC_NO_COMPANY,SHOW_DOC_NO_TENANT,SHOW_CLIENT_DOC_TYPE,SHOW_TRANSACTION_DATE,SHOW_SALES_AGENT,SHOW_DESCRIPTION,SHOW_QTY_BASE,SHOW_QTY_UOM,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. The registry defines only two codes forinternalPackingOrderApplet—SHOW_SUPERVISOR_VIEWandSHOW_OPERATOR_VIEW(2 ACTIVE rows inbl_applet_client_side_perm_dfn, queried 2026-09-15) — andSHOW_OPERATOR_VIEWis defined but read by nothing in this applet (theClientpermission map inapp.component.tsL227 holdsSHOW_SUPERVISOR_VIEWalone). Every other code in the list is compared against the loaded permission store (packing-order-listing.component.tsL180, L248;packing-order-edit.component.tsL137;add-line-item.component.tsL123) but has no definition row, so the Client Side Permission screen cannot grant it and the check can never be true; wherever the matchingHIDE_*setting is on, that column or button is hidden for everyone, administrators included (P-0396, the P-0256 class). - Server-side: the four document permissions above; the
mrp/endpoints checkAPI_TNT_DM_MRP_*permissions built per target (TntMrpPermissions.java).
Fields
Packing order — Main Details
| Field | Meaning | Required | Notes |
|---|---|---|---|
| Document type | Server document type | fixed | Always INTERNAL_PACKING_ORDER (applet-constants.ts). |
| Doc No (Branch / Company / Tenant) | Running numbers | generated | Each column can be hidden by SHOW_DOC_NO_*. |
| Transaction Date, Due Date | Header dates | Transaction Date | |
| Reference, Remarks, Tracking ID | Free text | no | |
| Client Document type, Client Doc 1–5 No | Client-side classification and references | no | Hidden by HIDE_CLIENT_DOC_*. |
| Workflow Status, Workflow Resolution | Read-only workflow state | — | Only when a workflow process is set. |
| Created / Modified By, Date | Audit | — | Read-only. |
Packing order — Delivery Details
| Field | Meaning | Required |
|---|---|---|
| Delivery Branch, Delivery Location | Where the packed goods are delivered from | no |
| Delivery Type | Free classification | no |
| Tracking ID | Carrier reference | no |
Packing order — Lines (Item Details › Main)
| Field | Meaning | Notes |
|---|---|---|
| Item Code, Item Name | The item to pack | From Search Item or knock-off. |
| Quantity Base, Quantity by UOM, UOM to Base Ratio | Quantity to pack | Quantity Base becomes the queue row’s base_qty and qty_balance at Final. |
| Packing Container, Packing Container: Drum Type | Which container size the line is packed on; drum type WOOD or STEEL | From the Packing Containers register. |
| Sales Order No., Jobsheet No., Delivery Order No. | Source document numbers | Filled by knock-off. Purchase Order / Invoice / Quotation / Requisition No. fields also render from the shared line template but no purchase knock-off exists here. |
| Unit Price STD / Transaction / Net (by UOM, incl./excl. tax), Unit Discount, Discount Amount, STD Amount, Tax Amount, SST/GST/VAT, WHT, Txn Amount, Amount Net | Pricing block of the shared line template | Carried but not posted; amount signum 0. |
| Remarks, eInvoice Code | Free text |
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.
Operator queue row (Operator Queue › Main Details)
| Field | Meaning |
|---|---|
| Packing Order Number, Line Running Number, Job Order No. | Which document line this row packs |
| Item Code, Item Name, UOM | |
| Required Quantity, Packed Quantity | base_qty and what the operator records |
| Priority, Packing Status | Status is the PackingStatusEnum value |
| Estimated Packing Date | est_packing_date |
| Acceptance Criteria, Acceptance Deviation | Tolerance carried from the FI queue row |
| Packing Container, Coiling Direction, Start Length Marking, End Length Marking | Coil-specific; markings are saved as bl_inv_bin_marking rows |
Packing container (bl_mrp_container_size)
| Field | Meaning |
|---|---|
| Drum Type | WOOD or STEEL (packing-create.component.ts L51) |
| Flange x, Barrel y, Inner width z, Min. clearance from outer w | Dimensions, each with a UOM |
| Volume / Volume Capacity | Stored; the backend also computes it for cable reels (MRPContainerSizeService.calculateCableReelVolume L38) |
Lifecycle and effects
Posting proof (backend commit c4a3545d7c).
| Item | Value | Where |
|---|---|---|
| Server document type | INTERNAL_PACKING_ORDER | ServerDocTypes.java L68 |
| Amount signum | 0 | ServerDocTypes.java L68; InternalPackingOrderDataConsistencyObject.java L16 (correctAmountSignum = ZERO, checked on create and update) |
| Quantity signum | 0 | InternalPackingOrderDataConsistencyObject.java L17, filled onto every line |
| Dr/Cr equation | none — no entry in JournalPostingTypeHandler.java | |
| GL precedence | not applicable | |
| Stock processor | none for the document | |
| Previous-document connector | INTERNAL_SALES_ORDER only | GenericDocumentTypeHandler.java L196–199 |
| VOID reverses | nothing on the ledgers; the UI sets posting_status = VOID (packing-order-edit.component.ts L313) and does not touch the queue |
What Final does. onFinal puts posting_status = FINAL (packing-order-edit.component.ts L220–240). On success, the effect postToFiPickPackQueue$ maps every line to a bl_fi_pick_pack_queue row (gendoc-to-ppq.mapper.ts: qty_balance = base_qty = quantity_base, priority and running number null) through POST …/pick-pack-queues/ad-hoc/backoffice-ep (FinancialPickPackQueueController.java L107), then postToMRPPickPackQueue$ calls POST mrp/mrp-pick-pack-queues/insert-mrp-picking-queue/backoffice-ep, which copies each FI row into bl_mrp_pick_pack_queue and deletes the FI row (MRPPickPackQueueService.java L66–95). That is the whole meaning of Final here: the lines enter the Operator Queue. Nothing else is written.
Operator step. Saving a queue row (operator-queue.effects.ts L24–69) puts the bl_mrp_pick_pack_queue row and sets the packing order line’s packing_status to PENDING_APPROVAL. Length markings are created and updated as bl_inv_bin_marking rows (L163–246).
Supervisor approval (packing order › Operator Queue tab › Approve; queue.effects.ts):
cutBins$(L40–95): for each marking, loads the bin, and if the marked quantity is less than the bin line’s quantity, reduces the bin line and creates a new bin line for the packed quantity; if it exceeds it, throws “Packing Quantity exceeds bin’s quantity” — a client-side error, not a backend rejection.createPackedBins$(L96–119): onebl_fi_packing_order_packed_binsrow per new bin line, withpacked_container_qtyandpacked_base_qty. Note the row’spacking_order_hdr_guidis set to the queue row’s guid, not the packing order header’s (L104).reservationRelease$(L124–160): reads the sales order behind the queue row, finds its bin-reservation links and sets them and the stock reservation header toRELEASED.supervisorApproval$(L165–210): sets the line’spacking_status = APPROVEDand callsPUT mrp/mrp-pick-pack-queues/update-qty-balance/backoffice-epwithqty_balance − awaiting_approval; the backendcheckAndUpdatePPQAndGenDoc(MRPPickPackQueueService.javaL102–165) then updates the packing status on the connected generic document header and lines.
Reject sets the line’s packing_status = REJECTED (L221–240). Scrap from the same tab posts a bl_inv_bin_lock with lock_type = SCRAP, server_doc_type = INTERNAL_PACKING_ORDER and the line guid (scrap-create.component.ts L140–147, queue.effects.ts L252); that is what the Scrap & Short menu lists.
Packing statuses are PackingStatusEnum: IN_QUEUE, PLANNED, IN_PROGRESS, ON_HOLD, COMPLETED, PENDING_APPROVAL, APPROVED, REJECTED, INCOMPLETE, PENDING_STOCK. The applet’s own filter list uses INCOMPLETE, PENDING_APPROVAL, COMPLETED, REJECTED (applet-constants.ts).
No approval engine. The generic approval engine covers only PO / PR / Stock Requisition; here “approval” is the supervisor’s Approve button above and, on the coiling screens, the work-log approval_status (PENDING, APPROVED, REJECTED, REWORK) set through PUT mrp/mrp-process-instance-work-log/update-approval-status/{guid} (ProcessInstanceWorkLogService.java L39–47). Neither uses Approval Settings.
Coiling process instances (Auto Coil Supervisor / Operator). The supervisor creates a bl_mrp_process_instance_hdr with instance_type = PACKING and process_status = PLANNED, input items (bins, locked with a bl_inv_bin_lock) 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). Final on the supervisor screen puts posting_status = POSTED, process_status = FINAL and then calls GET mrp/mrp-process-instances/backoffice-ep/update-inventory-from-process-instance/{guid} (supervisor-coiling.effects.ts L22–60; MrpProcessInstanceController.java L191–204). The backend writes one bl_inv_txn_line per INPUT line (quantity signum −1) and per OUTPUT line (+1) and queues InventoryTxnLineToCurrentStockBalanceProcessor for each (MrpProcessInstanceService.java L68–98, L117–160). Every such line is written with amount_txn = 0 (L149). The coil that leaves stock leaves at the running moving average; the coil that enters stock enters at zero value — the same defect as P-0255 for Stock Conversion, and the only place this applet moves stock.
Packing Request. Save writes mrp_request_status_exists and mrp_request_remarks onto the sales order line and puts the sales order (production-request.effects.ts L23–39). Nothing else changes.
Container register. Create / delete bl_mrp_container_size rows. The backend additionally exposes POST mrp/bl-mrp-container-sizes/insert-for-cable-reel/backoffice-ep (computes the reel volume) and GET …/get-drum-recommendation-for-coils (recommends a reel for an item, cable length, diameter and drum type — MRPContainerSizeService.java L38–52); the applet’s packing-container screens call only create and delete (packing-controller effects, checked at commit 3d1d4e6).
Related applets
- Sales Order (Internal) — the backend-registered previous document; its lines are knocked off here and its reservation is released on approval.
- Job Sheet (Internal), Outbound Delivery Order (Internal), Sales Invoice (Internal) — knock-off tabs when their Doc Flow row is enabled.
- 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.
- 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 | The route guard requires SHOW_SUPERVISOR_VIEW (or the document READ server permission / tenant admin). A 2026-02-16 commit fixed a case where the permission was granted but the sidebar still hid the menu. | Grant SHOW_SUPERVISOR_VIEW under Settings › Client Side Permission (the row exists — it is one of the two defined for this applet) or the server READ permission. |
| 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. |
| Final button not shown | A workflow process is set and the document is not at the process’s FINAL_STATUS_GUID; or HIDE_GENDOC_FINAL_BUTTON is on without SHOW_GENDOC_FINAL_BUTTON | Move the workflow status, or adjust Feature Visibility / client-side permission. |
| “ARAP balance must be 0 for finalization” | SALES_RETURN_WITH_PAYMENT is set on this applet (copied logic) | Remove the key; a packing order has no ARAP. |
| Approve fails with “Packing Quantity exceeds bin’s quantity” | A length marking’s qty_limit is larger than the bin line it points at | Correct the marking or pick another bin. Client-side check, so nothing was written. |
| Reserved bins listed for the wrong customer | Fixed 2025-11-20: the reserved-bin listing is now filtered to the packing order’s entity | Update the applet. |
Stock reservation stays ACTIVE after packing | Release runs only from the supervisor Approve path (reservationRelease$), added 2025-12-03; the operator’s Save does not release | Approve from the Operator Queue tab of the packing order. |
| Finished coil shows zero cost in Stock Balance; component cost rises | Process-instance finalisation writes amount_txn = 0 (MrpProcessInstanceService.java L149) | Reset the item’s moving average after finalisation; no setting changes this. |
| Application Settings saves nothing | The screen is unbound (see Applet settings) | Use Feature Visibility and Client Side Permission for column and button visibility. |
Related documentation
- Manufacturing Module
- Manufacturing applets
- No user guide covers this applet yet.