From 55215552593dd2f759a71f1531ab09ee2e706936 Mon Sep 17 00:00:00 2001 From: Chethan Thopaiah Date: Sun, 17 May 2026 18:45:08 +0200 Subject: [PATCH 1/5] [Subcontracting] Bug 634911: Fix factbox UX issues - captions, DecimalPlaces, singular/plural Fix UX issues in two Subcontracting factbox pages: Transfer Line Factbox (page 99001501): - Change singular caption 'Production Component' to plural 'Production Components' to match the count shown and align with the sibling Purchase Line Factbox. Routing Info Factbox (page 99001502): - Rename 'Order Quantity' to 'Purch. Order Qty.' to clarify it is the purchase order quantity. - Apply Title Case to 'Quantity Received' and 'Quantity Invoiced' captions and their matching tooltips. - Change DecimalPlaces from 0:5 to 0:0 on the three integer line-count fields 'Transfer Order Lines', 'Return Transfer Order Lines', and 'Components'. The decimal quantity fields above keep DecimalPlaces 0:5. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../Process/Pages/SubcRoutingInfoFactbox.Page.al | 16 ++++++++-------- .../Pages/SubcTransferLineFactbox.Page.al | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Apps/W1/Subcontracting/App/src/Process/Pages/SubcRoutingInfoFactbox.Page.al b/src/Apps/W1/Subcontracting/App/src/Process/Pages/SubcRoutingInfoFactbox.Page.al index b8a7a4ae3e..4c4ca16cc8 100644 --- a/src/Apps/W1/Subcontracting/App/src/Process/Pages/SubcRoutingInfoFactbox.Page.al +++ b/src/Apps/W1/Subcontracting/App/src/Process/Pages/SubcRoutingInfoFactbox.Page.al @@ -30,7 +30,7 @@ page 99001502 "Subc. Routing Info Factbox" field(ShowQtyInSubcontractingOrder; SubcRoutingFactboxMgmt.GetPurchOrderQtyFromRoutingLine(Rec)) { AutoFormatType = 0; - Caption = 'Order Quantity'; + Caption = 'Purch. Order Qty.'; DecimalPlaces = 0 : 5; ToolTip = 'Specifies the dependent Quantity in Subcontracting Orders of this Prod. Order Routing Line.'; trigger OnDrillDown() @@ -41,9 +41,9 @@ page 99001502 "Subc. Routing Info Factbox" field(ShowQtyShippedRequest; SubcRoutingFactboxMgmt.GetPurchReceiptQtyFromRoutingLine(Rec)) { AutoFormatType = 0; - Caption = 'Quantity received'; + Caption = 'Quantity Received'; DecimalPlaces = 0 : 5; - ToolTip = 'Specifies the dependent Quantity received in Subcontracting Receipts of this Prod. Order Routing Line.'; + ToolTip = 'Specifies the dependent Quantity Received in Subcontracting Receipts of this Prod. Order Routing Line.'; trigger OnDrillDown() begin ShowPurchaseReceipts(); @@ -52,9 +52,9 @@ page 99001502 "Subc. Routing Info Factbox" field(ShowQtyInvoicedRequest; SubcRoutingFactboxMgmt.GetPurchInvoicedQtyFromRoutingLine(Rec)) { AutoFormatType = 0; - Caption = 'Quantity invoiced'; + Caption = 'Quantity Invoiced'; DecimalPlaces = 0 : 5; - ToolTip = 'Specifies the dependent Quantity invoiced in Subcontracting Invoices of this Prod. Order Routing Line.'; + ToolTip = 'Specifies the dependent Quantity Invoiced in Subcontracting Invoices of this Prod. Order Routing Line.'; trigger OnDrillDown() begin ShowPurchaseInvoices(); @@ -64,7 +64,7 @@ page 99001502 "Subc. Routing Info Factbox" { AutoFormatType = 0; Caption = 'Transfer Order Lines'; - DecimalPlaces = 0 : 5; + DecimalPlaces = 0 : 0; ToolTip = 'Specifies the number of transfer order lines assigned to this routing line.'; trigger OnDrillDown() begin @@ -75,7 +75,7 @@ page 99001502 "Subc. Routing Info Factbox" { AutoFormatType = 0; Caption = 'Return Transfer Order Lines'; - DecimalPlaces = 0 : 5; + DecimalPlaces = 0 : 0; ToolTip = 'Specifies the number of Return transfer order lines assigned to this routing line.'; trigger OnDrillDown() begin @@ -86,7 +86,7 @@ page 99001502 "Subc. Routing Info Factbox" { AutoFormatType = 0; Caption = 'Components'; - DecimalPlaces = 0 : 5; + DecimalPlaces = 0 : 0; ToolTip = 'Specifies the number of components linked to this routing line.'; trigger OnDrillDown() begin diff --git a/src/Apps/W1/Subcontracting/App/src/Process/Pages/SubcTransferLineFactbox.Page.al b/src/Apps/W1/Subcontracting/App/src/Process/Pages/SubcTransferLineFactbox.Page.al index c59fa2ffc0..7f234a3cd3 100644 --- a/src/Apps/W1/Subcontracting/App/src/Process/Pages/SubcTransferLineFactbox.Page.al +++ b/src/Apps/W1/Subcontracting/App/src/Process/Pages/SubcTransferLineFactbox.Page.al @@ -47,7 +47,7 @@ page 99001501 "Subc. Transfer Line Factbox" } field(ShowProdOrderComponents; GetNoOfProductionComponents(Rec)) { - Caption = 'Production Component'; + Caption = 'Production Components'; ToolTip = 'Specifies the dependent Production Components of this Subcontracting Transfer Order.'; trigger OnDrillDown() From 44fe8ad8ab5e57082ef7b28c66476030e3c57818 Mon Sep 17 00:00:00 2001 From: Chethan Thopaiah Date: Sun, 17 May 2026 18:58:28 +0200 Subject: [PATCH 2/5] [Subcontracting] Bug 634911: Use Integer return type for count procedures Follow-up to the previous caption/DecimalPlaces fix. The three integer line-count fields on the Routing Info Factbox were calling procedures typed as Decimal that only ever returned Record.Count(), which required DecimalPlaces = 0:0 on the page to avoid showing '0.00000' for an integer count. Tighten the return type of both procedures to Integer to match what they actually return, and drop the now-redundant DecimalPlaces and AutoFormatType properties from the page fields: - SubcPurchFactboxMgmt.ShowTransferOrdersAndReturnOrder: Decimal -> Integer (also make implicit 'exit' statements explicit as 'exit(0)') - SubcRoutingFactboxMgmt.GetNoOfLinkedComponentsFromRouting: Decimal -> Integer - SubcRoutingInfoFactbox.Page: drop AutoFormatType=0 from the three integer-count fields (AutoFormatType has no effect on Integer fields) All callers of both procedures are within the Subcontracting app; no external consumers are affected. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../Codeunits/SubcPurchFactboxMgmt.Codeunit.al | 18 +++++++++--------- .../SubcRoutingFactboxMgmt.Codeunit.al | 2 +- .../Pages/SubcRoutingInfoFactbox.Page.al | 6 ------ 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcPurchFactboxMgmt.Codeunit.al b/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcPurchFactboxMgmt.Codeunit.al index c21c0e3454..915f773469 100644 --- a/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcPurchFactboxMgmt.Codeunit.al +++ b/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcPurchFactboxMgmt.Codeunit.al @@ -221,7 +221,7 @@ codeunit 99001560 "Subc. Purch. Factbox Mgmt." /// When true, opens the transfer order page; when false, only populates the temp table. /// When true, filters to return transfer orders; when false, filters to outbound transfer orders. /// The number of transfer lines linked to the given record. - procedure ShowTransferOrdersAndReturnOrder(RecRelatedVariant: Variant; LookUpPage: Boolean; IsReturn: Boolean): Decimal + procedure ShowTransferOrdersAndReturnOrder(RecRelatedVariant: Variant; LookUpPage: Boolean; IsReturn: Boolean): Integer var ProdOrderComponent: Record "Prod. Order Component"; ProdOrderLine: Record "Prod. Order Line"; @@ -236,7 +236,7 @@ codeunit 99001560 "Subc. Purch. Factbox Mgmt." NoOfTransferHeaders: Integer; begin if not RecRelatedVariant.IsRecord() then - exit; + exit(0); DataTypeManagement.GetRecordRef(RecRelatedVariant, RecRef); ProductionOrder.SetLoadFields("No.", "Source Type"); @@ -246,9 +246,9 @@ codeunit 99001560 "Subc. Purch. Factbox Mgmt." begin RecRef.SetTable(ProdOrderComponent); if not ProductionOrder.Get(ProdOrderComponent.Status, ProdOrderComponent."Prod. Order No.") then - exit; + exit(0); if not ProdOrderLine.Get(ProdOrderComponent.Status, ProdOrderComponent."Prod. Order No.", ProdOrderComponent."Prod. Order Line No.") then - exit; + exit(0); GetProdOrderRtngLineFromProdOrderComp(ProdOrderRoutingLine, ProdOrderComponent); end; @@ -256,23 +256,23 @@ codeunit 99001560 "Subc. Purch. Factbox Mgmt." begin RecRef.SetTable(PurchaseLine); if not ProductionOrder.Get("Production Order Status"::Released, PurchaseLine."Prod. Order No.") then - exit; + exit(0); GetProdOrderRtngLineFromPurchaseLine(ProdOrderRoutingLine, PurchaseLine); if ProductionOrder."Source Type" <> "Prod. Order Source Type"::Family then if not ProdOrderLine.Get(ProdOrderRoutingLine.Status, PurchaseLine."Prod. Order No.", PurchaseLine."Prod. Order Line No.") then - exit; + exit(0); end; Database::"Prod. Order Routing Line": begin RecRef.SetTable(ProdOrderRoutingLine); if not ProductionOrder.Get(ProdOrderRoutingLine.Status, ProdOrderRoutingLine."Prod. Order No.") then - exit; + exit(0); if ProductionOrder."Source Type" <> "Prod. Order Source Type"::Family then if not ProdOrderLine.Get(ProdOrderRoutingLine.Status, ProdOrderRoutingLine."Prod. Order No.", ProdOrderRoutingLine."Routing Reference No.") then - exit; + exit(0); end; else - exit; + exit(0); end; TransferLine.SetCurrentKey("Prod. Order No.", "Prod. Order Line No.", "Routing Reference No.", "Routing No.", "Operation No."); diff --git a/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcRoutingFactboxMgmt.Codeunit.al b/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcRoutingFactboxMgmt.Codeunit.al index 9f809da45d..6d772bc74f 100644 --- a/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcRoutingFactboxMgmt.Codeunit.al +++ b/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcRoutingFactboxMgmt.Codeunit.al @@ -216,7 +216,7 @@ codeunit 99001561 "Subc. Routing Factbox Mgmt." /// /// The production order routing line to count linked components for. /// The count of matching production order components, or 0 if the routing link code is empty. - procedure GetNoOfLinkedComponentsFromRouting(ProdOrderRoutingLine: Record "Prod. Order Routing Line"): Decimal + procedure GetNoOfLinkedComponentsFromRouting(ProdOrderRoutingLine: Record "Prod. Order Routing Line"): Integer var ProdOrderComponent: Record "Prod. Order Component"; begin diff --git a/src/Apps/W1/Subcontracting/App/src/Process/Pages/SubcRoutingInfoFactbox.Page.al b/src/Apps/W1/Subcontracting/App/src/Process/Pages/SubcRoutingInfoFactbox.Page.al index 4c4ca16cc8..ebe1809606 100644 --- a/src/Apps/W1/Subcontracting/App/src/Process/Pages/SubcRoutingInfoFactbox.Page.al +++ b/src/Apps/W1/Subcontracting/App/src/Process/Pages/SubcRoutingInfoFactbox.Page.al @@ -62,9 +62,7 @@ page 99001502 "Subc. Routing Info Factbox" } field(ShowNoOfTransferOrdersFromProdOrderComp; SubcPurchFactboxMgmt.ShowTransferOrdersAndReturnOrder(Rec, false, false)) { - AutoFormatType = 0; Caption = 'Transfer Order Lines'; - DecimalPlaces = 0 : 0; ToolTip = 'Specifies the number of transfer order lines assigned to this routing line.'; trigger OnDrillDown() begin @@ -73,9 +71,7 @@ page 99001502 "Subc. Routing Info Factbox" } field(ShowNoOfReturnTransferOrdersFromProdOrderComp; SubcPurchFactboxMgmt.ShowTransferOrdersAndReturnOrder(Rec, false, true)) { - AutoFormatType = 0; Caption = 'Return Transfer Order Lines'; - DecimalPlaces = 0 : 0; ToolTip = 'Specifies the number of Return transfer order lines assigned to this routing line.'; trigger OnDrillDown() begin @@ -84,9 +80,7 @@ page 99001502 "Subc. Routing Info Factbox" } field(ShowNoOfLinkedComp; SubcRoutingFactboxMgmt.GetNoOfLinkedComponentsFromRouting(Rec)) { - AutoFormatType = 0; Caption = 'Components'; - DecimalPlaces = 0 : 0; ToolTip = 'Specifies the number of components linked to this routing line.'; trigger OnDrillDown() begin From e4a2ae90fbb9d92e680c6539de6f01321f25d5d3 Mon Sep 17 00:00:00 2001 From: Chethan Thopaiah Date: Mon, 18 May 2026 16:32:24 +0200 Subject: [PATCH 3/5] Align factbox numbers to drilldown info --- .../SubcProdOFactboxMgmt.Codeunit.al | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcProdOFactboxMgmt.Codeunit.al b/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcProdOFactboxMgmt.Codeunit.al index e8f9440f25..47a136d43a 100644 --- a/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcProdOFactboxMgmt.Codeunit.al +++ b/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcProdOFactboxMgmt.Codeunit.al @@ -51,11 +51,7 @@ codeunit 99001559 "Subc. ProdO. Factbox Mgmt." begin if not SetProdOrderInformationByVariant(RecRelatedVariant, ProdOrderNo, ProdOrderLineNo, RoutingNo, OperationNo) then exit; - ProdOrderRoutingLine.SetRange(Status, ProdOrderRoutingLine.Status::Released); - ProdOrderRoutingLine.SetRange("Prod. Order No.", ProdOrderNo); - ProdOrderRoutingLine.SetRange("Routing Reference No.", ProdOrderLineNo); - ProdOrderRoutingLine.SetRange("Routing No.", RoutingNo); - ProdOrderRoutingLine.SetRange("Operation No.", OperationNo); + SetFilterProductionOrderRouting(ProdOrderRoutingLine, ProdOrderNo, ProdOrderLineNo, RoutingNo, OperationNo); ProdOrderRoutingLine.FindFirst(); ProdOrderRouting.SetTableView(ProdOrderRoutingLine); ProdOrderRouting.Editable := false; @@ -77,12 +73,17 @@ codeunit 99001559 "Subc. ProdO. Factbox Mgmt." begin if not SetProdOrderInformationByVariant(RecRelatedVariant, ProdOrderNo, ProdOrderLineNo, RoutingNo, OperationNo) then exit; + SetFilterProductionOrderRouting(ProdOrderRoutingLine, ProdOrderNo, ProdOrderLineNo, RoutingNo, OperationNo); + exit(ProdOrderRoutingLine.Count()); + end; + + local procedure SetFilterProductionOrderRouting(var ProdOrderRoutingLine: Record "Prod. Order Routing Line"; ProdOrderNo: Code[20]; ProdOrderLineNo: Integer; RoutingNo: Code[20]; OperationNo: Code[10]): Boolean + begin ProdOrderRoutingLine.SetRange(Status, ProdOrderRoutingLine.Status::Released); ProdOrderRoutingLine.SetRange("Prod. Order No.", ProdOrderNo); ProdOrderRoutingLine.SetRange("Routing Reference No.", ProdOrderLineNo); ProdOrderRoutingLine.SetRange("Routing No.", RoutingNo); ProdOrderRoutingLine.SetRange("Operation No.", OperationNo); - exit(ProdOrderRoutingLine.Count()); end; /// @@ -92,7 +93,6 @@ codeunit 99001559 "Subc. ProdO. Factbox Mgmt." procedure ShowProductionOrderComponents(RecRelatedVariant: Variant) var ProdOrderComponent: Record "Prod. Order Component"; - ProdOrderRoutingLine: Record "Prod. Order Routing Line"; PageManagement: Codeunit "Page Management"; OperationNo: Code[10]; ProdOrderNo: Code[20]; @@ -101,17 +101,7 @@ codeunit 99001559 "Subc. ProdO. Factbox Mgmt." begin if not SetProdOrderInformationByVariant(RecRelatedVariant, ProdOrderNo, ProdOrderLineNo, RoutingNo, OperationNo) then exit; - ProdOrderRoutingLine.SetRange(Status, ProdOrderRoutingLine.Status::Released); - ProdOrderRoutingLine.SetRange("Prod. Order No.", ProdOrderNo); - ProdOrderRoutingLine.SetRange("Routing Reference No.", ProdOrderLineNo); - ProdOrderRoutingLine.SetRange("Routing No.", RoutingNo); - ProdOrderRoutingLine.SetRange("Operation No.", OperationNo); - if ProdOrderRoutingLine.FindFirst() then - ProdOrderComponent.SetRange("Routing Link Code", ProdOrderRoutingLine."Routing Link Code"); - - ProdOrderComponent.SetRange(Status, ProdOrderComponent.Status::Released); - ProdOrderComponent.SetRange("Prod. Order No.", ProdOrderNo); - ProdOrderComponent.SetRange("Prod. Order Line No.", ProdOrderLineNo); + SetFilterProductionOrderComponents(ProdOrderComponent, ProdOrderNo, ProdOrderLineNo, RoutingNo, OperationNo); PageManagement.PageRun(ProdOrderComponent); end; @@ -131,10 +121,25 @@ codeunit 99001559 "Subc. ProdO. Factbox Mgmt." if not SetProdOrderInformationByVariant(RecRelatedVariant, ProdOrderNo, ProdOrderLineNo, RoutingNo, OperationNo) then exit(0); + SetFilterProductionOrderComponents(ProdOrderComponent, ProdOrderNo, ProdOrderLineNo, RoutingNo, OperationNo); + exit(ProdOrderComponent.Count()); + end; + + local procedure SetFilterProductionOrderComponents(var ProdOrderComponent: Record "Prod. Order Component"; ProdOrderNo: Code[20]; ProdOrderLineNo: Integer; RoutingNo: Code[20]; OperationNo: Code[10]) + var + ProdOrderRoutingLine: Record "Prod. Order Routing Line"; + begin + ProdOrderRoutingLine.SetRange(Status, ProdOrderRoutingLine.Status::Released); + ProdOrderRoutingLine.SetRange("Prod. Order No.", ProdOrderNo); + ProdOrderRoutingLine.SetRange("Routing Reference No.", ProdOrderLineNo); + ProdOrderRoutingLine.SetRange("Routing No.", RoutingNo); + ProdOrderRoutingLine.SetRange("Operation No.", OperationNo); + if ProdOrderRoutingLine.FindFirst() then + ProdOrderComponent.SetRange("Routing Link Code", ProdOrderRoutingLine."Routing Link Code"); + ProdOrderComponent.SetRange(Status, ProdOrderComponent.Status::Released); ProdOrderComponent.SetRange("Prod. Order No.", ProdOrderNo); ProdOrderComponent.SetRange("Prod. Order Line No.", ProdOrderLineNo); - exit(ProdOrderComponent.Count()); end; local procedure SetProdOrderInformationByVariant(RecRelatedVariant: Variant; var ProdOrderNo: Code[20]; var ProdOrderLineNo: Integer; var RoutingNo: Code[20]; var OperationNo: Code[10]): Boolean From f0fe96b4402d6350e6749b1caab6aa927f1ea5ac Mon Sep 17 00:00:00 2001 From: Chethan Thopaiah <41570277+ChethanT@users.noreply.github.com> Date: Tue, 19 May 2026 11:12:34 +0200 Subject: [PATCH 4/5] Apply suggestion from @github-actions[bot] Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../App/src/Process/Codeunits/SubcProdOFactboxMgmt.Codeunit.al | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcProdOFactboxMgmt.Codeunit.al b/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcProdOFactboxMgmt.Codeunit.al index 47a136d43a..4f9803b422 100644 --- a/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcProdOFactboxMgmt.Codeunit.al +++ b/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcProdOFactboxMgmt.Codeunit.al @@ -77,7 +77,7 @@ codeunit 99001559 "Subc. ProdO. Factbox Mgmt." exit(ProdOrderRoutingLine.Count()); end; - local procedure SetFilterProductionOrderRouting(var ProdOrderRoutingLine: Record "Prod. Order Routing Line"; ProdOrderNo: Code[20]; ProdOrderLineNo: Integer; RoutingNo: Code[20]; OperationNo: Code[10]): Boolean +local procedure SetFilterProductionOrderRouting(var ProdOrderRoutingLine: Record "Prod. Order Routing Line"; ProdOrderNo: Code[20]; ProdOrderLineNo: Integer; RoutingNo: Code[20]; OperationNo: Code[10]) begin ProdOrderRoutingLine.SetRange(Status, ProdOrderRoutingLine.Status::Released); ProdOrderRoutingLine.SetRange("Prod. Order No.", ProdOrderNo); From da84d81c171af5529b330625f81666fa903ae6b2 Mon Sep 17 00:00:00 2001 From: Chethan Thopaiah Date: Wed, 20 May 2026 14:41:17 +0200 Subject: [PATCH 5/5] Add SetLoadFields to SetFilterProductionOrderComponents Only the Routing Link Code field is needed from ProdOrderRoutingLine. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../App/src/Process/Codeunits/SubcProdOFactboxMgmt.Codeunit.al | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcProdOFactboxMgmt.Codeunit.al b/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcProdOFactboxMgmt.Codeunit.al index 4f9803b422..ca8cb4d5ed 100644 --- a/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcProdOFactboxMgmt.Codeunit.al +++ b/src/Apps/W1/Subcontracting/App/src/Process/Codeunits/SubcProdOFactboxMgmt.Codeunit.al @@ -129,6 +129,7 @@ local procedure SetFilterProductionOrderRouting(var ProdOrderRoutingLine: Record var ProdOrderRoutingLine: Record "Prod. Order Routing Line"; begin + ProdOrderRoutingLine.SetLoadFields("Routing Link Code"); ProdOrderRoutingLine.SetRange(Status, ProdOrderRoutingLine.Status::Released); ProdOrderRoutingLine.SetRange("Prod. Order No.", ProdOrderNo); ProdOrderRoutingLine.SetRange("Routing Reference No.", ProdOrderLineNo);