diff --git a/Update Item Tracking - Posted Item/Readme.md b/Update Item Tracking - Posted Item/Readme.md index 8b13789..223d94e 100644 --- a/Update Item Tracking - Posted Item/Readme.md +++ b/Update Item Tracking - Posted Item/Readme.md @@ -1 +1,11 @@ +# Update Item Tracking - Posted Item +This extension can be used by companies that need to assign a Tracking Code to an existing Item. The new Tracking Code must require a mandatory Lot No. A defined Lot No. will be assigned to all Item entries. + +## What this extension includes: + +- A new Report (80110) Update Item Tracking - Posted Item. + +## What you will need to do for this extension to work + +- Run this report and fill necessary perameters. Report will update ony one Item. diff --git a/Update Item Tracking - Posted Item/app.json b/Update Item Tracking - Posted Item/app.json new file mode 100644 index 0000000..e1ad3ab --- /dev/null +++ b/Update Item Tracking - Posted Item/app.json @@ -0,0 +1,39 @@ +{ + "id": "ac0c87be-2178-48cf-a94a-b7d324c50c43", + "name": "PrintVis Update Item Tracking Posted Item", + "publisher": "PrintVis A/S", + "version": "1.0.0.0", + "brief": "", + "description": "This extension can be used to add a Tracking Code to selected Item even the Item has open entries.", + "privacyStatement": "", + "EULA": "", + "help": "", + "url": "", + "logo": "", + "dependencies": [ + { + "id": "5452f323-059e-499a-9753-5d2c07eef904", + "name": "PrintVis", + "publisher": "PrintVis A/S", + "version": "26.0.182.0" + } + ], + "screenshots": [], + "platform": "1.0.0.0", + "application": "26.0.0.0", + "idRanges": [ + { + "from": 80100, + "to": 89999 + } + ], + "resourceExposurePolicy": { + "allowDebugging": true, + "allowDownloadingSource": true, + "includeSourceInSymbolFile": true + }, + "runtime": "15.2", + "features": [ + "NoImplicitWith" + ] +} \ No newline at end of file diff --git a/Update Item Tracking - Posted Item/src/UpdateItemTracking.Report.al b/Update Item Tracking - Posted Item/src/UpdateItemTracking.Report.al new file mode 100644 index 0000000..9c49905 --- /dev/null +++ b/Update Item Tracking - Posted Item/src/UpdateItemTracking.Report.al @@ -0,0 +1,119 @@ +report 80110 "Update Item Tracking" +{ + UsageCategory = ReportsAndAnalysis; + ApplicationArea = All; + ProcessingOnly = true; + Caption = 'Update Item Tracking - Posted Item'; + Permissions = tabledata Item = RM, + tabledata "Item Ledger Entry" = RM, + tabledata "Warehouse Entry" = RM; + + dataset + { + dataitem(Item; Item) + { + RequestFilterFields = "No."; + trigger OnAfterGetRecord() + begin + if ItemNumber = 1 then + Error(ErrorItemQuantityLbl) + else begin + // Checking + Item.TestField("Item Tracking Code", ''); + ItemLedgerEntry.SetRange("Item No.", Item."No."); + ItemLedgerEntry.SetFilter("Lot No.", '<>%1', ''); + if not ItemLedgerEntry.IsEmpty then begin + ItemLedgerEntry.FindFirst(); + ItemLedgerEntry.TestField("Lot No.", ''); + end; + ItemLedgerEntry.SetRange("Lot No."); + if ItemLedgerEntry.FindSet() then + repeat + if ItemLedgerEntry."Invoiced Quantity" <> ItemLedgerEntry.Quantity then + ItemLedgerEntry.TestField(ItemLedgerEntry."Invoiced Quantity", ItemLedgerEntry.Quantity); + until ItemLedgerEntry.Next() = 0; + + ItemJournalLine.SetRange("Item No.", Item."No."); + if not ItemJournalLine.IsEmpty then + ItemJournalLine.TestField("Item No.", ''); + + PVSJobCostingJournalLine.SetRange("Item No.", Item."No."); + if not PVSJobCostingJournalLine.IsEmpty then + PVSJobCostingJournalLine.TestField("Item No.", ''); + + TransferLines.SetRange("Item No.", Item."No."); + if not TransferLines.IsEmpty then + TransferLines.TestField("Item No.", ''); + + // Update data + if ItemLedgerEntry.FindSet() then + repeat + ItemLedgerEntry."Lot No." := OldEntriesLotNo; + ItemLedgerEntry.Modify(false); + until ItemLedgerEntry.Next() = 0; + + WarehouseEntry.SetRange("Item No.", Item."No."); + if not WarehouseEntry.IsEmpty then + WarehouseEntry.ModifyAll("Lot No.", OldEntriesLotNo); + + Item."Item Tracking Code" := NewItemTrackingCode; + Item.Modify(false); + Commit(); + end; + ItemNumber := ItemNumber + 1; + end; + } + } + + requestpage + { + layout + { + area(Content) + { + group(GroupName) + { + field(NewItemTrackingCode; NewItemTrackingCode) + { + Caption = 'New Item Tracking Code'; + ApplicationArea = All; + TableRelation = "Item Tracking Code".Code; + ToolTip = 'New Item Tracking Code'; + ShowMandatory = true; + } + field(OldEntriesLotNo; OldEntriesLotNo) + { + Caption = 'Old Entries Lot No.'; + ApplicationArea = All; + ToolTip = 'Lot No. for all old Item entries'; + ShowMandatory = true; + } + } + } + } + } + + trigger OnPreReport() + begin + ItemLedgerEntry.SetCurrentKey("Item No.", "Posting Date"); + WarehouseEntry.SetCurrentKey("Item No.", "Bin Code", "Location Code", "Variant Code", "Unit of Measure Code", "Lot No.", "Serial No.", "Entry Type", Dedicated, "Package No.", "Bin Type Code", "SIFT Bucket No."); + ItemNumber := 0; + if NewItemTrackingCode = '' then + Error(ErrorNewItemTrackingEmptyLbl); + if OldEntriesLotNo = '' then + Error(ErrorLotNoEmptyLbl); + end; + + var + ItemLedgerEntry: Record "Item Ledger Entry"; + WarehouseEntry: Record "Warehouse Entry"; + TransferLines: Record "Transfer Line"; + ItemJournalLine: Record "Item Journal Line"; + PVSJobCostingJournalLine: Record "PVS Job Costing Journal Line"; + NewItemTrackingCode: Code[10]; + OldEntriesLotNo: Code[50]; + ItemNumber: Integer; + ErrorItemQuantityLbl: Label 'You can update only one Item.'; + ErrorNewItemTrackingEmptyLbl: Label 'New Item Tracking Code can not be empty.'; + ErrorLotNoEmptyLbl: Label 'Old Entries Lot No. can not be empty.'; +} \ No newline at end of file