From fb4e06fd9ae0b7f711b80330ec83b391945caae8 Mon Sep 17 00:00:00 2001 From: Mahesh Sharma Date: Mon, 27 Jul 2026 09:13:44 +0530 Subject: [PATCH] Initial commit: 644092. --- .../Codeunit/SubcontractingPost.Codeunit.al | 39 +++++++++++++++++-- .../src/Table/AppliedDeliveryChallan.Table.al | 25 ++++++++++++ .../src/Table/DeliveryChallanLine.Table.al | 4 ++ .../src/Table/SubOrderCompListVend.Table.al | 2 + 4 files changed, 67 insertions(+), 3 deletions(-) diff --git a/src/Apps/IN/INGST/app/GSTSubcontracting/src/Codeunit/SubcontractingPost.Codeunit.al b/src/Apps/IN/INGST/app/GSTSubcontracting/src/Codeunit/SubcontractingPost.Codeunit.al index 41f5e0829aa..399a2632d45 100644 --- a/src/Apps/IN/INGST/app/GSTSubcontracting/src/Codeunit/SubcontractingPost.Codeunit.al +++ b/src/Apps/IN/INGST/app/GSTSubcontracting/src/Codeunit/SubcontractingPost.Codeunit.al @@ -701,6 +701,7 @@ codeunit 18466 "Subcontracting Post" ItemJnlLine.Validate(Quantity, Abs(OldReservEntry."Qty. to Invoice (Base)")); end else begin ItemJnlLine.Validate(Quantity, RemQtytoPost); + RemQtytoPost := 0; Completed := true; end else @@ -709,6 +710,7 @@ codeunit 18466 "Subcontracting Post" ItemJnlLine.Validate(Quantity, ItemLedgerEntry."Remaining Quantity"); end else begin ItemJnlLine.Validate(Quantity, RemQtytoPost); + RemQtytoPost := 0; Completed := true; end; @@ -792,6 +794,9 @@ codeunit 18466 "Subcontracting Post" end; until (ItemLedgerEntry.Next() = 0) or Completed; + if RemQtytoPost <> 0 then + Error(NotEnoughInvtoryErr); + AppliedDeliveryChallan."Qty. to Consume" := 0; AppliedDeliveryChallan.Modify(); @@ -1558,14 +1563,21 @@ codeunit 18466 "Subcontracting Post" AppDelChallan: Record "Applied Delivery Challan") var CopyItemLedgerEntry: Record "Item Ledger Entry"; + DeliveryChallanLine: Record "Delivery Challan Line"; IsHandled: Boolean; AvailableQty: Decimal; + VariantCode: Code[10]; begin IsHandled := false; OnBeforeGetApplicationLines(ProdOrderComp, SubOrderCompVend, ItemLedgerEntry, TotalQtyToPost, AppDelChallan, IsHandled); if IsHandled then exit; + if DeliveryChallanLine.Get(AppDelChallan."Applied Delivery Challan No.", AppDelChallan."App. Delivery Challan Line No.") then + VariantCode := DeliveryChallanLine."Variant Code" + else + VariantCode := SubOrderCompVend."Variant Code"; + ItemLedgerEntry.Reset(); if AppDelChallan."Applies-to Entry" = 0 then begin ItemLedgerEntry.SetCurrentKey("Order Type", "Order No.", "Order Line No.", "Prod. Order Comp. Line No.", "Entry Type", "Location Code"); @@ -1575,6 +1587,9 @@ codeunit 18466 "Subcontracting Post" ItemLedgerEntry.SetRange("Prod. Order Comp. Line No.", ProdOrderComp."Line No."); ItemLedgerEntry.SetRange("Entry Type", ItemLedgerEntry."Entry Type"::Transfer); ItemLedgerEntry.SetRange("Location Code", SubOrderCompVend."Vendor Location"); + ItemLedgerEntry.SetRange(Open, true); + ItemLedgerEntry.SetRange(Positive, true); + ItemLedgerEntry.SetFilter("Remaining Quantity", '>0'); CopyItemLedgerEntry.Copy(ItemLedgerEntry); if CopyItemLedgerEntry.FindSet() then begin @@ -1590,6 +1605,9 @@ codeunit 18466 "Subcontracting Post" ItemLedgerEntry.SetRange("Item No.", ProdOrderComp."Item No."); ItemLedgerEntry.SetRange("Entry Type", ItemLedgerEntry."Entry Type"::Transfer); ItemLedgerEntry.SetRange("Location Code", SubOrderCompVend."Vendor Location"); + ItemLedgerEntry.SetRange(Open, true); + ItemLedgerEntry.SetRange(Positive, true); + ItemLedgerEntry.SetFilter("Remaining Quantity", '>0'); CopyItemLedgerEntry.Reset(); CopyItemLedgerEntry.Copy(ItemLedgerEntry); @@ -1605,14 +1623,29 @@ codeunit 18466 "Subcontracting Post" end else begin ItemLedgerEntry.Reset(); ItemLedgerEntry.SetCurrentKey("Entry Type", "Location Code", "External Document No.", "Item No."); + ItemLedgerEntry.SetRange("Entry No.", AppDelChallan."Applies-to Entry"); ItemLedgerEntry.SetRange("Entry Type", ItemLedgerEntry."Entry Type"::Transfer); ItemLedgerEntry.SetRange("Location Code", SubOrderCompVend."Vendor Location"); - ItemLedgerEntry.SetRange("Order Type", ItemLedgerEntry."Order Type"::Production); - ItemLedgerEntry.SetRange("Order No.", AppDelChallan."Production Order No."); - ItemLedgerEntry.SetRange("Order Line No.", AppDelChallan."Production Order Line No."); ItemLedgerEntry.SetRange("External Document No.", AppDelChallan."Applied Delivery Challan No."); ItemLedgerEntry.SetRange("Item No.", AppDelChallan."Item No."); + ItemLedgerEntry.SetRange("Variant Code", VariantCode); ItemLedgerEntry.SetRange(Open, true); + ItemLedgerEntry.SetRange(Positive, true); + ItemLedgerEntry.SetFilter("Remaining Quantity", '>0'); + + // Fallback to re-resolve from the selected challan line when stored entry becomes stale. + if not ItemLedgerEntry.FindFirst() then begin + ItemLedgerEntry.Reset(); + ItemLedgerEntry.SetCurrentKey("Entry Type", "Location Code", "External Document No.", "Item No."); + ItemLedgerEntry.SetRange("Entry Type", ItemLedgerEntry."Entry Type"::Transfer); + ItemLedgerEntry.SetRange("Location Code", SubOrderCompVend."Vendor Location"); + ItemLedgerEntry.SetRange("External Document No.", AppDelChallan."Applied Delivery Challan No."); + ItemLedgerEntry.SetRange("Item No.", AppDelChallan."Item No."); + ItemLedgerEntry.SetRange("Variant Code", VariantCode); + ItemLedgerEntry.SetRange(Open, true); + ItemLedgerEntry.SetRange(Positive, true); + ItemLedgerEntry.SetFilter("Remaining Quantity", '>0'); + end; end; end; diff --git a/src/Apps/IN/INGST/app/GSTSubcontracting/src/Table/AppliedDeliveryChallan.Table.al b/src/Apps/IN/INGST/app/GSTSubcontracting/src/Table/AppliedDeliveryChallan.Table.al index ca14141dfb3..6b96c619f9a 100644 --- a/src/Apps/IN/INGST/app/GSTSubcontracting/src/Table/AppliedDeliveryChallan.Table.al +++ b/src/Apps/IN/INGST/app/GSTSubcontracting/src/Table/AppliedDeliveryChallan.Table.al @@ -43,6 +43,7 @@ table 18466 "Applied Delivery Challan" var DeliveryChallanLine1: Record "Delivery Challan Line"; ItemLedgerEntry: Record "Item Ledger Entry"; + SubOrderCompListVend: Record "Sub Order Comp. List Vend"; DeliveryChallanLineList: Page "Delivery Challan Line"; begin DeliveryChallanLine.Reset(); @@ -50,6 +51,14 @@ table 18466 "Applied Delivery Challan" DeliveryChallanLine.SetRange("Document Line No.", "Document Line No."); DeliveryChallanLine.SetRange("Parent Item No.", "Parent Item No."); DeliveryChallanLine.SetRange("Item No.", "Item No."); + SubOrderCompListVend.Reset(); + SubOrderCompListVend.SetRange("Document No.", "Document No."); + SubOrderCompListVend.SetRange("Document Line No.", "Document Line No."); + SubOrderCompListVend.SetRange("Parent Item No.", "Parent Item No."); + SubOrderCompListVend.SetRange("Line No.", "Line No."); + SubOrderCompListVend.SetRange("Item No.", "Item No."); + if SubOrderCompListVend.FindFirst() then + DeliveryChallanLine.SetRange("Variant Code", SubOrderCompListVend."Variant Code"); DeliveryChallanLine.SetFilter("Remaining Quantity", '<>0'); DeliveryChallanLineList.SetTableView(DeliveryChallanLine); DeliveryChallanLineList.LookupMode := true; @@ -71,6 +80,10 @@ table 18466 "Applied Delivery Challan" ItemLedgerEntry.SetRange("Order Line No.", DeliveryChallanLine1."Production Order Line No."); ItemLedgerEntry.SetRange("External Document No.", DeliveryChallanLine1."Delivery Challan No."); ItemLedgerEntry.SetRange("Item No.", "Item No."); + ItemLedgerEntry.SetRange("Variant Code", DeliveryChallanLine1."Variant Code"); + ItemLedgerEntry.SetRange(Open, true); + ItemLedgerEntry.SetRange(Positive, true); + ItemLedgerEntry.SetFilter("Remaining Quantity", '>0'); if ItemLedgerEntry.FindFirst() then "Applies-to Entry" := ItemLedgerEntry."Entry No." else @@ -282,6 +295,10 @@ table 18466 "Applied Delivery Challan" ItemLedgerEntry.SetRange("Order Line No.", DeliveryChallanLine."Production Order Line No."); ItemLedgerEntry.SetRange("External Document No.", DeliveryChallanLine."Delivery Challan No."); ItemLedgerEntry.SetRange("Item No.", "Item No."); + ItemLedgerEntry.SetRange("Variant Code", DeliveryChallanLine."Variant Code"); + ItemLedgerEntry.SetRange(Open, true); + ItemLedgerEntry.SetRange(Positive, true); + ItemLedgerEntry.SetFilter("Remaining Quantity", '>0'); if ItemLedgerEntry.FindFirst() then "Applies-to Entry" := ItemLedgerEntry."Entry No." else @@ -309,6 +326,10 @@ table 18466 "Applied Delivery Challan" ItemLedgerEntry.SetRange("Order Line No.", DeliveryChallanLine."Production Order Line No."); ItemLedgerEntry.SetRange("External Document No.", DeliveryChallanLine."Delivery Challan No."); ItemLedgerEntry.SetRange("Item No.", "Item No."); + ItemLedgerEntry.SetRange("Variant Code", DeliveryChallanLine."Variant Code"); + ItemLedgerEntry.SetRange(Open, true); + ItemLedgerEntry.SetRange(Positive, true); + ItemLedgerEntry.SetFilter("Remaining Quantity", '>0'); if ItemLedgerEntry.FindFirst() then "Applies-to Entry" := ItemLedgerEntry."Entry No." else @@ -337,6 +358,10 @@ table 18466 "Applied Delivery Challan" ItemLedgerEntry.SetRange("Order Line No.", DeliveryChallanLine."Production Order Line No."); ItemLedgerEntry.SetRange("External Document No.", DeliveryChallanLine."Delivery Challan No."); ItemLedgerEntry.SetRange("Item No.", "Item No."); + ItemLedgerEntry.SetRange("Variant Code", DeliveryChallanLine."Variant Code"); + ItemLedgerEntry.SetRange(Open, true); + ItemLedgerEntry.SetRange(Positive, true); + ItemLedgerEntry.SetFilter("Remaining Quantity", '>0'); if ItemLedgerEntry.FindFirst() then "Applies-to Entry" := ItemLedgerEntry."Entry No." else diff --git a/src/Apps/IN/INGST/app/GSTSubcontracting/src/Table/DeliveryChallanLine.Table.al b/src/Apps/IN/INGST/app/GSTSubcontracting/src/Table/DeliveryChallanLine.Table.al index da852cd6d7f..d4a75892775 100644 --- a/src/Apps/IN/INGST/app/GSTSubcontracting/src/Table/DeliveryChallanLine.Table.al +++ b/src/Apps/IN/INGST/app/GSTSubcontracting/src/Table/DeliveryChallanLine.Table.al @@ -310,6 +310,10 @@ table 18469 "Delivery Challan Line" "Location Code" = field("Vendor Location"), "External Document No." = field("Delivery Challan No."), "Item No." = field("Item No."), + "Variant Code" = field("Variant Code"), + "Order No." = field("Production Order No."), + "Order Line No." = field("Production Order Line No."), + "Prod. Order Comp. Line No." = field("Prod. Order Comp. Line No."), "Subcon Order No." = field("Document No."))); Caption = 'Remaining Quantity'; DecimalPlaces = 0 : 3; diff --git a/src/Apps/IN/INGST/app/GSTSubcontracting/src/Table/SubOrderCompListVend.Table.al b/src/Apps/IN/INGST/app/GSTSubcontracting/src/Table/SubOrderCompListVend.Table.al index 6e12dc2ac94..102d84d105d 100644 --- a/src/Apps/IN/INGST/app/GSTSubcontracting/src/Table/SubOrderCompListVend.Table.al +++ b/src/Apps/IN/INGST/app/GSTSubcontracting/src/Table/SubOrderCompListVend.Table.al @@ -450,6 +450,7 @@ table 18478 "Sub Order Comp. List Vend" DeliveryChallanLine.SetCurrentKey("Delivery Challan No.", "Item No."); DeliveryChallanLine.SetRange("Delivery Challan No.", DeliveryChallanHeader."No."); DeliveryChallanLine.SetRange("Item No.", "Item No."); + DeliveryChallanLine.SetRange("Variant Code", "Variant Code"); if DeliveryChallanLine.FindFirst() then begin DeliveryChallanLine.CalcFields("Remaining Quantity"); if (DeliveryChallanLine."Remaining Quantity" < @@ -463,6 +464,7 @@ table 18478 "Sub Order Comp. List Vend" ItemLedgerEntry.SetRange("Location Code", DeliveryChallanLine."Vendor Location"); ItemLedgerEntry.SetRange("External Document No.", DeliveryChallanLine."Delivery Challan No."); ItemLedgerEntry.SetRange("Item No.", "Item No."); + ItemLedgerEntry.SetRange("Variant Code", "Variant Code"); if ItemLedgerEntry.FindFirst() then "Applies-to Entry" := ItemLedgerEntry."Entry No." else