From 6ddc4bf070df0e573747748cb87013733d5094e3 Mon Sep 17 00:00:00 2001
From: insightworks007 <226571004+insightworks007@users.noreply.github.com>
Date: Tue, 2 Dec 2025 16:37:42 -0700
Subject: [PATCH 1/2] 5638, AB#614485, changed setup page so that assembly is
not in the production group
---
.../Setup/Setup/QltyManagementSetup.Page.al | 22 ++++++++++++-------
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/src/Apps/W1/Quality Management/app/src/Setup/Setup/QltyManagementSetup.Page.al b/src/Apps/W1/Quality Management/app/src/Setup/Setup/QltyManagementSetup.Page.al
index e6d24a8a5c..8b9c191021 100644
--- a/src/Apps/W1/Quality Management/app/src/Setup/Setup/QltyManagementSetup.Page.al
+++ b/src/Apps/W1/Quality Management/app/src/Setup/Setup/QltyManagementSetup.Page.al
@@ -184,6 +184,19 @@ page 20400 "Qlty. Management Setup"
}
}
}
+ group(SettingsForAssembly)
+ {
+ Caption = 'Assembly';
+ InstructionalText = 'Default assembly related settings are configured in this group.';
+ field("Assembly Trigger"; Rec."Assembly Trigger")
+ {
+ Caption = 'Assembly - Create Test';
+ ApplicationArea = Assembly;
+ ShowCaption = true;
+ AboutTitle = 'Assembly related trigger';
+ AboutText = 'Optionally choose an assembly-related trigger to try and create a test.';
+ }
+ }
group(SettingsForProduction)
{
Caption = 'Production';
@@ -212,14 +225,7 @@ page 20400 "Qlty. Management Setup"
AboutTitle = 'Auto Output Configuration';
AboutText = 'Provides granular options for when a test should be created automatically during the production process.';
}
- field("Assembly Trigger"; Rec."Assembly Trigger")
- {
- Caption = 'Assembly - Create Test';
- ApplicationArea = Assembly;
- ShowCaption = true;
- AboutTitle = 'Assembly related trigger';
- AboutText = 'Optionally choose an assembly-related trigger to try and create a test.';
- }
+
field(ChooseCreateNewRule_Production; 'Click here to create a new generation rule...')
{
ShowCaption = false;
From b31ab485725bf87a54ae4ac49a18f4bd15e44c25 Mon Sep 17 00:00:00 2001
From: insightworks007 <226571004+insightworks007@users.noreply.github.com>
Date: Tue, 16 Dec 2025 17:51:32 -0700
Subject: [PATCH 2/2] Added new wizard for assembly.
---
.../QltyInTestGeneratRules.Page.al | 58 +-
.../QltyInspectionTestCreate.Codeunit.al | 1 +
.../Assembly/QltyAsmGenRuleWizard.Page.al | 589 ++++++++++++++++++
.../QltyProdGenRuleWizard.Page.al | 286 +--------
.../QltyEntryInspector.PermissionSet.al | 1 +
.../Permissions/QltyGeneral.PermissionSet.al | 1 +
.../QltyMngmntObjects.PermissionSet.al | 1 +
.../Setup/Setup/QltyManagementSetup.Page.al | 99 +--
8 files changed, 732 insertions(+), 304 deletions(-)
create mode 100644 src/Apps/W1/Quality Management/app/src/Integration/Assembly/QltyAsmGenRuleWizard.Page.al
diff --git a/src/Apps/W1/Quality Management/app/src/Configuration/GenerationRule/QltyInTestGeneratRules.Page.al b/src/Apps/W1/Quality Management/app/src/Configuration/GenerationRule/QltyInTestGeneratRules.Page.al
index 6bd9ca62ec..80231fbdf4 100644
--- a/src/Apps/W1/Quality Management/app/src/Configuration/GenerationRule/QltyInTestGeneratRules.Page.al
+++ b/src/Apps/W1/Quality Management/app/src/Configuration/GenerationRule/QltyInTestGeneratRules.Page.al
@@ -179,9 +179,29 @@ page 20405 "Qlty. In. Test Generat. Rules"
actionref(CreateNewGenerationRuleForProdWizard_Promoted; CreateNewGenerationRuleForProdWizard)
{
}
+ actionref(CreateNewGenerationRuleForAsmWizard_Promoted; CreateNewGenerationRuleForAsmWizard)
+ {
+ }
}
area(Processing)
{
+ action(CreateNewGenerationRuleForAsmWizard)
+ {
+ Caption = 'Create Assembly Rule';
+ ToolTip = 'Specifies to create a rule for assembly.';
+ Image = Receipt;
+ ApplicationArea = Assembly;
+
+ trigger OnAction()
+ var
+ NewQltyInTestGenerationRule: Record "Qlty. In. Test Generation Rule";
+ RecQltyAsmGenRuleWizard: Page "Qlty. Asm. Gen. Rule Wizard";
+ begin
+ NewQltyInTestGenerationRule.CopyFilters(Rec);
+ RecQltyAsmGenRuleWizard.RunModalWithGenerationRule(NewQltyInTestGenerationRule);
+ CurrPage.Update(false);
+ end;
+ }
action(CreateNewGenerationRuleForProdWizard)
{
Caption = 'Create Production Rule';
@@ -191,9 +211,11 @@ page 20405 "Qlty. In. Test Generat. Rules"
trigger OnAction()
var
+ NewQltyInTestGenerationRule: Record "Qlty. In. Test Generation Rule";
RecQltyProdGenRuleWizard: Page "Qlty. Prod. Gen. Rule Wizard";
begin
- RecQltyProdGenRuleWizard.RunModalWithGenerationRule(Rec);
+ NewQltyInTestGenerationRule.CopyFilters(Rec);
+ RecQltyProdGenRuleWizard.RunModalWithGenerationRule(NewQltyInTestGenerationRule);
CurrPage.Update(false);
end;
}
@@ -221,6 +243,30 @@ page 20405 "Qlty. In. Test Generat. Rules"
Rec.SetRange("Entry No.");
end;
}
+ action(EditGenerationRuleForAsmWizard)
+ {
+ ApplicationArea = Assembly;
+ Caption = 'Edit Assembly Rule';
+ ToolTip = 'Edit a Rule for assembly.';
+ Image = Receipt;
+ Scope = Repeater;
+ Visible = ShowEditWizardAssemblyRule;
+
+ trigger OnAction()
+ var
+ QltyAsmGenRuleWizard: Page "Qlty. Asm. Gen. Rule Wizard";
+ PreviousEntryNo: Integer;
+ begin
+ PreviousEntryNo := Rec."Entry No.";
+ QltyAsmGenRuleWizard.RunModalWithGenerationRule(Rec);
+
+ CurrPage.Update(false);
+ Rec.Reset();
+ Rec.SetRange("Entry No.", PreviousEntryNo);
+ if Rec.FindSet() then;
+ Rec.SetRange("Entry No.");
+ end;
+ }
action(CreateNewGenerationRuleForRecWizard)
{
Caption = 'Create Receiving Rule';
@@ -230,9 +276,11 @@ page 20405 "Qlty. In. Test Generat. Rules"
trigger OnAction()
var
+ NewQltyInTestGenerationRule: Record "Qlty. In. Test Generation Rule";
QltyRecGenRuleWizard: Page "Qlty. Rec. Gen. Rule Wizard";
begin
- QltyRecGenRuleWizard.RunModalWithGenerationRule(Rec);
+ NewQltyInTestGenerationRule.CopyFilters(Rec);
+ QltyRecGenRuleWizard.RunModalWithGenerationRule(NewQltyInTestGenerationRule);
CurrPage.Update(false);
end;
}
@@ -271,6 +319,7 @@ page 20405 "Qlty. In. Test Generat. Rules"
var
RecQltyWhseGenRuleWizard: Page "Qlty. Whse. Gen. Rule Wizard";
begin
+ Rec.Init();
RecQltyWhseGenRuleWizard.RunModalWithGenerationRule(Rec);
CurrPage.Update(false);
end;
@@ -360,6 +409,7 @@ page 20405 "Qlty. In. Test Generat. Rules"
ShowEditWizardMovementRule: Boolean;
ShowEditWizardReceivingRule: Boolean;
ShowEditWizardProductionRule: Boolean;
+ ShowEditWizardAssemblyRule: Boolean;
TemplateCode: Code[20];
ShowAssemblyTrigger: Boolean;
ShowProductionTrigger: Boolean;
@@ -453,6 +503,7 @@ page 20405 "Qlty. In. Test Generat. Rules"
ShowEditWizardProductionRule := true;
ShowEditWizardReceivingRule := true;
ShowEditWizardMovementRule := true;
+ ShowEditWizardAssemblyRule := true;
EditAssemblyTrigger := true;
EditProductionTrigger := true;
EditPurchaseTrigger := true;
@@ -474,7 +525,7 @@ page 20405 "Qlty. In. Test Generat. Rules"
case KnownOrInferredIntent of
Rec.Intent::Assembly:
begin
- ShowEditWizardProductionRule := true;
+ ShowEditWizardAssemblyRule := true;
EditAssemblyTrigger := true;
AssemblyStyle := Format(RowStyle::Standard);
end;
@@ -521,6 +572,7 @@ page 20405 "Qlty. In. Test Generat. Rules"
begin
ShowEditWizardReceivingRule := false;
ShowEditWizardProductionRule := false;
+ ShowEditWizardAssemblyRule := false;
ShowEditWizardMovementRule := false;
EditProductionTrigger := false;
EditAssemblyTrigger := false;
diff --git a/src/Apps/W1/Quality Management/app/src/Document/QltyInspectionTestCreate.Codeunit.al b/src/Apps/W1/Quality Management/app/src/Document/QltyInspectionTestCreate.Codeunit.al
index a597f5a206..45a4d82f15 100644
--- a/src/Apps/W1/Quality Management/app/src/Document/QltyInspectionTestCreate.Codeunit.al
+++ b/src/Apps/W1/Quality Management/app/src/Document/QltyInspectionTestCreate.Codeunit.al
@@ -366,6 +366,7 @@ codeunit 20404 "Qlty. Inspection Test - Create"
if GuiAllowed() then
if (not PreventShowingGeneratedTestEvenIfConfigured) and
+ (QltyInspectionTestHeader."No." <> '') and
((QltyManagementSetup."Show Test Behavior" = QltyManagementSetup."Show Test Behavior"::"Automatic and manually created tests") or
(IsManualCreation and (QltyManagementSetup."Show Test Behavior" = QltyManagementSetup."Show Test Behavior"::"Only manually created tests")))
then
diff --git a/src/Apps/W1/Quality Management/app/src/Integration/Assembly/QltyAsmGenRuleWizard.Page.al b/src/Apps/W1/Quality Management/app/src/Integration/Assembly/QltyAsmGenRuleWizard.Page.al
new file mode 100644
index 0000000000..de4935b56f
--- /dev/null
+++ b/src/Apps/W1/Quality Management/app/src/Integration/Assembly/QltyAsmGenRuleWizard.Page.al
@@ -0,0 +1,589 @@
+// ------------------------------------------------------------------------------------------------
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License. See License.txt in the project root for license information.
+// ------------------------------------------------------------------------------------------------
+namespace Microsoft.QualityManagement.Integration.Manufacturing;
+
+using Microsoft.Assembly.History;
+using Microsoft.Inventory.Item;
+using Microsoft.Manufacturing.Document;
+using Microsoft.QualityManagement.Configuration.GenerationRule;
+using Microsoft.QualityManagement.Configuration.Template;
+using Microsoft.QualityManagement.Integration.Assembly;
+using Microsoft.QualityManagement.Setup.Setup;
+using Microsoft.QualityManagement.Utilities;
+
+page 20464 "Qlty. Asm. Gen. Rule Wizard"
+{
+ Caption = 'Quality Management - Assembly Quality Test Generation Rule Wizard';
+ PageType = NavigatePage;
+ UsageCategory = None;
+ ApplicationArea = Assembly;
+ SourceTable = "Qlty. Management Setup";
+
+ layout
+ {
+ area(Content)
+ {
+ group(SettingsFor_iStepWhichTemplate)
+ {
+ Caption = ' ';
+ ShowCaption = false;
+ Visible = (StepWhichTemplateCounter = CurrentStepCounter);
+
+ group(SettingsFor_iStepWhichTemplate_Instruction1)
+ {
+ InstructionalText = 'Define a rule for lot or serial related tests when products are assembled.';
+ Caption = ' ';
+ ShowCaption = false;
+ }
+ group(SettingsFor_iStepWhichTemplate_Instruction2)
+ {
+ InstructionalText = 'Which Quality Inspection template do you want to use?';
+ Caption = ' ';
+ ShowCaption = false;
+ }
+ field(ChoosechooseTemplate; TemplateCode)
+ {
+ ApplicationArea = All;
+ Caption = 'Choose Template';
+ ToolTip = 'Specifies which Quality Inspection template do you want to use?';
+ ShowMandatory = true;
+
+ trigger OnAssistEdit()
+ begin
+ QltyFilterHelpers.AssistEditQltyInspectionTemplate(TemplateCode);
+ end;
+ }
+ }
+
+ group(SettingsFor_iStepWhichAssemblyOrder)
+ {
+ ShowCaption = false;
+ InstructionalText = 'A test should be created for an assembly order when these filters match. You can choose other fields on the last step.';
+ Visible = (StepWhichAssemblyOrderCounter = CurrentStepCounter);
+
+ field(ChoosechooseAssemblyLocation; LocationCodeFilter)
+ {
+ ApplicationArea = All;
+ Caption = 'Location';
+ ToolTip = 'Specifies a location filter';
+
+ trigger OnAssistEdit()
+ begin
+ QltyFilterHelpers.AssistEditLocation(LocationCodeFilter);
+ end;
+
+ trigger OnValidate()
+ begin
+ if not UpdateFullTextRuleStringsFromFilters() then
+ Error(LocationFilterErr, GetLastErrorText());
+ end;
+ }
+ field(ToBinCodeFilter; ToBinCodeFilter)
+ {
+ ApplicationArea = All;
+ Caption = 'To Bin';
+ ToolTip = 'Specifies a destination bin.';
+
+ trigger OnAssistEdit()
+ begin
+ QltyFilterHelpers.AssistEditBin(LocationCodeFilter, '', ToBinCodeFilter);
+ end;
+
+ trigger OnValidate()
+ begin
+ if not UpdateFullTextRuleStringsFromFilters() then
+ Error(ToBinFilterErr, GetLastErrorText());
+ end;
+ }
+ field(ChooseAssemblyDescriptionPattern; DescriptionPattern)
+ {
+ ApplicationArea = All;
+ Caption = 'Description';
+ ToolTip = 'Specifies a filter for description';
+
+ trigger OnValidate()
+ begin
+ UpdateFullTextRuleStringsFromFilters();
+ end;
+ }
+ field(ChooseadvancedAssembly; 'Click here to choose advanced fields...')
+ {
+ ApplicationArea = All;
+ ShowCaption = false;
+
+ trigger OnDrillDown()
+ begin
+ UpdateFullTextRuleStringsFromFilters();
+ AssistEditFullPostedAssemblyHeaderFilter();
+ UpdateTableVariablesFromRecordFilters();
+ end;
+ }
+ }
+ group(SettingsFor_iStepWhichItem)
+ {
+ Caption = ' ';
+ ShowCaption = false;
+ InstructionalText = 'Does it matter which items? You can optionally limit this to only items that match this criteria.';
+ Visible = (StepWhichItemFilterCounter = CurrentStepCounter);
+
+ field(ChooseItemNoFilter; ItemNoFilter)
+ {
+ ApplicationArea = All;
+ Caption = 'Specific Item';
+ ToolTip = 'Specifies a specific Item';
+
+ trigger OnAssistEdit()
+ begin
+ QltyFilterHelpers.AssistEditItemNo(ItemNoFilter);
+ end;
+
+ trigger OnValidate()
+ begin
+ if not UpdateFullTextRuleStringsFromFilters() then
+ Error(ItemFilterErr, GetLastErrorText());
+ end;
+ }
+ field(ChooseCategoryCodeFilter; CategoryCodeFilter)
+ {
+ ApplicationArea = All;
+ Caption = 'Category';
+ ToolTip = 'Specifies a specific Category';
+
+ trigger OnAssistEdit()
+ begin
+ QltyFilterHelpers.AssistEditItemCategory(CategoryCodeFilter);
+ end;
+
+ trigger OnValidate()
+ begin
+ if not UpdateFullTextRuleStringsFromFilters() then
+ Error(ItemCategoryFilterErr, GetLastErrorText());
+ end;
+ }
+ field(ChooseInventoryPostingGroupCode; InventoryPostingGroupCode)
+ {
+ ApplicationArea = All;
+ Caption = 'Inventory Posting Group';
+ ToolTip = 'Specifies a Inventory Posting Group';
+
+ trigger OnAssistEdit()
+ begin
+ QltyFilterHelpers.AssistEditInventoryPostingGroup(InventoryPostingGroupCode);
+ end;
+
+ trigger OnValidate()
+ begin
+ if not UpdateFullTextRuleStringsFromFilters() then
+ Error(InventoryPostingGroupErr, GetLastErrorText());
+ end;
+ }
+ field(Chooseadvanced_item; 'Click here to choose advanced fields...')
+ {
+ ApplicationArea = All;
+ ShowCaption = false;
+
+ trigger OnDrillDown()
+ begin
+ UpdateFullTextRuleStringsFromFilters();
+ AssistEditFullItemFilter();
+ UpdateTableVariablesFromRecordFilters();
+ end;
+ }
+ }
+ group(SettingsFor_iStepDone)
+ {
+ Caption = ' ';
+ InstructionalText = '';
+ ShowCaption = false;
+ Visible = (StepDoneCounter = CurrentStepCounter);
+
+ group(SettingsFor_iStepDone_Instruction1)
+ {
+ Caption = ' ';
+ InstructionalText = 'We have a Test Generation Rule ready. Click ''Finish'' to save this to the system.';
+ ShowCaption = false;
+ }
+ group(SettingsFor_iStepDone_Instruction2)
+ {
+ Caption = ' ';
+ InstructionalText = 'Please review and set any additional filters you may need, for example if you want to limit this to specific items.';
+ ShowCaption = false;
+ }
+ group(SettingsForWrapAssemblyOrderRule)
+ {
+ ShowCaption = false;
+ field(ChoosePostedAssemblyOrderRuleFilter; PostedAssemblyOrderRuleFilter)
+ {
+ ApplicationArea = All;
+ Caption = 'Filters';
+ ToolTip = 'Specifies additional filters you may need to review and set.';
+ MultiLine = true;
+
+ trigger OnAssistEdit()
+ begin
+ AssistEditFullPostedAssemblyHeaderFilter();
+ end;
+ }
+ }
+ field(ChooseFilters_Item; ItemRuleFilter)
+ {
+ ApplicationArea = All;
+ Caption = 'Item Filter';
+ ToolTip = 'Specifies additional filters you may need to review and set.';
+ MultiLine = true;
+
+ trigger OnAssistEdit()
+ begin
+ AssistEditFullItemFilter();
+ end;
+ }
+ group(SettingsForbAutomaticallyCreateTest)
+ {
+ ShowCaption = false;
+ InstructionalText = 'Do you want to automatically create tests when these are produced? This will set the activation trigger for this rule and set the default trigger value for test generation rules of this record type.';
+
+ group(SettingsForAutoAssemblyTriggerWrapper)
+ {
+ ShowCaption = false;
+
+ field(ChooseAutomaticallyCreateAssemblyTest; QltyAssemblyTrigger)
+ {
+ ApplicationArea = All;
+ Caption = 'Automatically Create Test';
+ ToolTip = 'Specifies whether to automatically create a test when product is produced.';
+ }
+ }
+ }
+ }
+ }
+ }
+
+ actions
+ {
+ area(Processing)
+ {
+ action(Back)
+ {
+ Caption = 'Back';
+ ToolTip = 'Back';
+ Enabled = IsBackEnabledd;
+ Image = PreviousRecord;
+ InFooterBar = true;
+
+ trigger OnAction();
+ begin
+ BackAction();
+ end;
+ }
+ action(Next)
+ {
+ Caption = 'Next';
+ ToolTip = 'Next';
+ Enabled = IsNextEnabledd;
+ Image = NextRecord;
+ InFooterBar = true;
+
+ trigger OnAction();
+ begin
+ NextAction();
+ end;
+ }
+ action(Finish)
+ {
+ Caption = 'Finish';
+ ToolTip = 'Finish';
+ Enabled = IsFinishEnabledd;
+ Image = Approve;
+ InFooterBar = true;
+
+ trigger OnAction();
+ begin
+ FinishAction();
+ end;
+ }
+ }
+ }
+
+ var
+ QltyManagementSetup: Record "Qlty. Management Setup";
+ TempItem: Record "Item" temporary;
+ TempQltyInTestGenerationRule: Record "Qlty. In. Test Generation Rule" temporary;
+ TempPostedAssemblyHeader: Record "Posted Assembly Header" temporary;
+ QltyFilterHelpers: Codeunit "Qlty. Filter Helpers";
+ CurrentStepCounter: Integer;
+ LocationCodeFilter: Code[20];
+ TemplateCode: Code[20];
+ SpecificNoFilter: Code[20];
+ WorkCenterNo: Code[20];
+ FromBinCodeFilter: Code[20];
+ ToBinCodeFilter: Code[20];
+ OperationNo: Code[20];
+ DescriptionPattern: Text[100];
+ ItemNoFilter: Code[20];
+ CategoryCodeFilter: Code[20];
+ InventoryPostingGroupCode: Code[20];
+ QltyAssemblyTrigger: Enum "Qlty. Assembly Trigger";
+ ProdOrderRoutingLineRuleFilter: Text[400];
+ PostedAssemblyOrderRuleFilter: Text[400];
+ ItemRuleFilter: Text[400];
+ IsBackEnabledd: Boolean;
+ IsNextEnabledd: Boolean;
+ IsFinishEnabledd: Boolean;
+ IsMovingForward: Boolean;
+ IsMovingBackward: Boolean;
+ StepWhichTemplateCounter: Integer;
+ StepWhichItemFilterCounter: Integer;
+ StepWhichAssemblyOrderCounter: Integer;
+ StepDoneCounter: Integer;
+ MaxStep: Integer;
+ LocationFilterErr: Label 'This Location filter needs an adjustment. Location codes are no more than 10 characters. %1', Comment = '%1 = Text of the original error message';
+ FromBinFilterErr: Label 'This From Bin filter needs an adjustment. %1', Comment = '%1 = Text of the original error message';
+ ToBinFilterErr: Label 'This To Bin filter needs an adjustment. %1', Comment = '%1 = Text of the original error message';
+ RoutingNoFilterErr: Label 'This Routing No. filter needs an adjustment. %1', Comment = '%1 = Text of the original error message';
+ OperationNoErr: Label 'This Operation No. filter needs an adjustment. Operation Nos. are no more than 10 characters. %1', Comment = '%1 = Text of the original error message';
+ MachineNoFilterErr: Label 'This Machine No. filter needs an adjustment. %1', Comment = '%1 = Text of the original error message';
+ ItemFilterErr: Label 'This Item filter needs an adjustment. %1', Comment = '%1 = Text of the original error message';
+ ItemCategoryFilterErr: Label 'This Item Category filter needs an adjustment. %1', Comment = '%1 = Text of the original error message';
+ InventoryPostingGroupErr: Label 'This Inventory Posting Group filter needs an adjustment. %1', Comment = '%1 = Text of the original error message';
+ YouMustChooseATemplateFirstMsg: Label 'Please choose a template before proceeding.';
+ WorkCenterNoErr: Label 'This Work Center No. filter needs an adjustment. %1', Comment = '%1 = Text of the original error message';
+ RuleAlreadyThereQst: Label 'You already have at least one rule with these same conditions. Are you sure you want to proceed?';
+ FilterLengthErr: Label 'This filter is too long and must be less than %1 characters.', Comment = '%1=filter string maximum length';
+
+ trigger OnInit();
+ begin
+ QltyManagementSetup.Get();
+ StepWhichTemplateCounter := 1;
+ StepWhichAssemblyOrderCounter := 2;
+ StepWhichItemFilterCounter := 3;
+ StepDoneCounter := 4;
+
+ InitializeDefaultValues();
+
+ MaxStep := StepDoneCounter;
+ end;
+
+ trigger OnOpenPage();
+ begin
+ ChangeToStep(StepWhichTemplateCounter);
+ Commit();
+ end;
+
+ ///
+ /// Intended to help initialize default values.
+ ///
+ local procedure InitializeDefaultValues()
+ begin
+ InitializeDefaultTemplate();
+ end;
+
+ local procedure InitializeDefaultTemplate()
+ var
+ QltyInspectionTemplateHdr: Record "Qlty. Inspection Template Hdr.";
+ begin
+ if TemplateCode <> '' then
+ exit;
+
+ QltyInspectionTemplateHdr.SetCurrentKey(SystemModifiedAt);
+ QltyInspectionTemplateHdr.Ascending(false);
+ if QltyInspectionTemplateHdr.FindFirst() then
+ TemplateCode := QltyInspectionTemplateHdr.Code;
+ end;
+
+ local procedure ChangeToStep(Step: Integer);
+ begin
+ if Step < 1 then
+ Step := 1;
+
+ if Step > MaxStep then
+ Step := MaxStep;
+
+ IsMovingForward := Step > CurrentStepCounter;
+ IsMovingBackward := Step < CurrentStepCounter;
+
+ if IsMovingForward then
+ LeavingStepMovingForward(CurrentStepCounter, Step);
+
+ case Step of
+ StepWhichTemplateCounter:
+ begin
+ IsBackEnabledd := false;
+ IsNextEnabledd := true;
+ IsFinishEnabledd := false;
+ end;
+ StepWhichAssemblyOrderCounter:
+ begin
+ IsBackEnabledd := true;
+ IsNextEnabledd := true;
+ IsFinishEnabledd := false;
+ end;
+ StepWhichItemFilterCounter:
+ begin
+ IsBackEnabledd := true;
+ IsNextEnabledd := true;
+ IsFinishEnabledd := false;
+ end;
+ StepDoneCounter:
+ begin
+ IsBackEnabledd := true;
+ IsNextEnabledd := false;
+ IsFinishEnabledd := true;
+ UpdateFullTextRuleStringsFromFilters();
+ end;
+ end;
+
+ CurrentStepCounter := Step;
+
+ CurrPage.Update(true);
+ end;
+
+ local procedure LeavingStepMovingForward(LeavingThisStep: Integer; var MovingToThisStep: Integer);
+ var
+ QltyInspectionTemplateHdr: Record "Qlty. Inspection Template Hdr.";
+ begin
+ if LeavingThisStep = StepWhichTemplateCounter then
+ if not QltyInspectionTemplateHdr.Get(TemplateCode) then begin
+ Message(YouMustChooseATemplateFirstMsg);
+ MovingToThisStep := StepWhichTemplateCounter;
+ end;
+ end;
+
+ local procedure AssistEditFullItemFilter()
+ begin
+ TempQltyInTestGenerationRule."Item Filter" := ItemRuleFilter;
+ if TempQltyInTestGenerationRule.AssistEditConditionItemFilter() then begin
+ ItemRuleFilter := TempQltyInTestGenerationRule."Item Filter";
+
+ TempItem.SetView(ItemRuleFilter);
+ UpdateTableVariablesFromRecordFilters();
+ CleanUpWhereClause();
+ end;
+ end;
+
+ local procedure AssistEditFullPostedAssemblyHeaderFilter()
+ begin
+ TempQltyInTestGenerationRule."Source Table No." := Database::"Posted Assembly Header";
+ TempQltyInTestGenerationRule."Condition Filter" := PostedAssemblyOrderRuleFilter;
+
+ if TempQltyInTestGenerationRule.AssistEditConditionTableFilter() then begin
+ PostedAssemblyOrderRuleFilter := TempQltyInTestGenerationRule."Condition Filter";
+
+ TempPostedAssemblyHeader.SetView(PostedAssemblyOrderRuleFilter);
+ UpdateTableVariablesFromRecordFilters();
+ CleanUpWhereClause();
+ end;
+ end;
+
+ local procedure CleanUpWhereClause()
+ begin
+ PostedAssemblyOrderRuleFilter := QltyFilterHelpers.CleanUpWhereClause400(PostedAssemblyOrderRuleFilter);
+ ItemRuleFilter := QltyFilterHelpers.CleanUpWhereClause400(ItemRuleFilter);
+ end;
+
+ local procedure BackAction();
+ begin
+ CurrPage.Update(true);
+ ChangeToStep(CurrentStepCounter - 1);
+ end;
+
+ local procedure NextAction();
+
+ begin
+ CurrPage.Update(true);
+ ChangeToStep(CurrentStepCounter + 1);
+ end;
+
+ local procedure FinishAction();
+ var
+ QltyInTestGenerationRule: Record "Qlty. In. Test Generation Rule";
+ ExistingQltyInTestGenerationRule: Record "Qlty. In. Test Generation Rule";
+ begin
+ if not QltyInTestGenerationRule.Get(TempQltyInTestGenerationRule.RecordId()) then begin
+ QltyInTestGenerationRule.Init();
+ QltyInTestGenerationRule.SetEntryNo();
+ QltyInTestGenerationRule.UpdateSortOrder();
+ QltyInTestGenerationRule.Insert();
+ end;
+ QltyInTestGenerationRule.Validate("Template Code", TemplateCode);
+ QltyManagementSetup.Get();
+ QltyInTestGenerationRule."Source Table No." := Database::"Posted Assembly Header";
+ QltyInTestGenerationRule.Intent := QltyInTestGenerationRule.Intent::Assembly;
+ QltyInTestGenerationRule."Condition Filter" := PostedAssemblyOrderRuleFilter;
+ QltyInTestGenerationRule.SetIntentAndDefaultTriggerValuesFromSetup();
+ QltyInTestGenerationRule."Assembly Trigger" := QltyAssemblyTrigger;
+ QltyManagementSetup."Assembly Trigger" := QltyAssemblyTrigger;
+ if QltyManagementSetup.Modify(false) then;
+ QltyInTestGenerationRule."Item Filter" := ItemRuleFilter;
+ QltyInTestGenerationRule.Modify();
+
+ ExistingQltyInTestGenerationRule.SetRange("Template Code", QltyInTestGenerationRule."Template Code");
+ ExistingQltyInTestGenerationRule.SetRange("Source Table No.", QltyInTestGenerationRule."Source Table No.");
+ ExistingQltyInTestGenerationRule.SetRange("Condition Filter", QltyInTestGenerationRule."Condition Filter");
+ ExistingQltyInTestGenerationRule.SetRange("Item Filter", QltyInTestGenerationRule."Item Filter");
+ if ExistingQltyInTestGenerationRule.Count() > 1 then
+ if not Confirm(RuleAlreadyThereQst) then
+ Error('');
+
+ CurrPage.Close();
+ end;
+
+ ///
+ /// Start the wizard using this generation rule as a pre-requisite.
+ /// Use this to edit an existing rule.
+ /// You can also use it to start a new rule with a default template by supplying a template filter.
+ ///
+ ///
+ ///
+ procedure RunModalWithGenerationRule(var QltyInTestGenerationRule: Record "Qlty. In. Test Generation Rule"): Action
+ begin
+ TempQltyInTestGenerationRule := QltyInTestGenerationRule;
+ Clear(TempPostedAssemblyHeader);
+ Clear(TempItem);
+
+ if QltyInTestGenerationRule."Source Table No." = Database::"Posted Assembly Header" then begin
+ TempPostedAssemblyHeader.SetView(TempQltyInTestGenerationRule."Condition Filter");
+ end;
+
+ TempItem.SetView(TempQltyInTestGenerationRule."Item Filter");
+ UpdateTableVariablesFromRecordFilters();
+
+ TemplateCode := QltyInTestGenerationRule.GetTemplateCodeFromRecordOrFilter(false);
+ UpdateFullTextRuleStringsFromFilters();
+
+ exit(CurrPage.RunModal());
+ end;
+
+ [TryFunction]
+ local procedure UpdateFullTextRuleStringsFromFilters()
+ begin
+ TempPostedAssemblyHeader.SetFilter("Location Code", LocationCodeFilter);
+ TempPostedAssemblyHeader.SetFilter(Description, DescriptionPattern);
+ PostedAssemblyOrderRuleFilter := CopyStr(QltyFilterHelpers.CleanUpWhereClause400(TempPostedAssemblyHeader.GetView(true)), 1, MaxStrLen(TempQltyInTestGenerationRule."Condition Filter"));
+
+ TempItem.SetFilter("No.", ItemNoFilter);
+ TempItem.SetFilter("Item Category Code", CategoryCodeFilter);
+ TempItem.SetFilter("Inventory Posting Group", InventoryPostingGroupCode);
+
+ ItemRuleFilter := CopyStr(QltyFilterHelpers.CleanUpWhereClause400(TempItem.GetView(true)), 1, MaxStrLen(TempQltyInTestGenerationRule."Item Filter"));
+ CleanUpWhereClause();
+
+ if StrLen(QltyFilterHelpers.CleanUpWhereClause400(TempPostedAssemblyHeader.GetView(true))) > MaxStrLen(TempQltyInTestGenerationRule."Condition Filter") then
+ Error(FilterLengthErr, MaxStrLen(TempQltyInTestGenerationRule."Condition Filter"));
+
+ if StrLen(QltyFilterHelpers.CleanUpWhereClause400(TempItem.GetView(true))) > MaxStrLen(TempQltyInTestGenerationRule."Item Filter") then
+ Error(FilterLengthErr, MaxStrLen(TempQltyInTestGenerationRule."Item Filter"));
+ end;
+
+ local procedure UpdateTableVariablesFromRecordFilters()
+ begin
+ LocationCodeFilter := CopyStr(TempPostedAssemblyHeader.GetFilter("Location Code"), 1, MaxStrLen(LocationCodeFilter));
+ DescriptionPattern := CopyStr(TempPostedAssemblyHeader.GetFilter(Description), 1, MaxStrLen(DescriptionPattern));
+ ToBinCodeFilter := CopyStr(TempPostedAssemblyHeader.GetFilter("Bin Code"), 1, MaxStrLen(ToBinCodeFilter));
+
+ ItemNoFilter := CopyStr(TempItem.GetFilter("No."), 1, MaxStrLen(ItemNoFilter));
+ CategoryCodeFilter := CopyStr(TempItem.GetFilter("Item Category Code"), 1, MaxStrLen(CategoryCodeFilter));
+ InventoryPostingGroupCode := CopyStr(TempItem.GetFilter("Inventory Posting Group"), 1, MaxStrLen(InventoryPostingGroupCode));
+ end;
+}
diff --git a/src/Apps/W1/Quality Management/app/src/Integration/Manufacturing/QltyProdGenRuleWizard.Page.al b/src/Apps/W1/Quality Management/app/src/Integration/Manufacturing/QltyProdGenRuleWizard.Page.al
index 91367bfaac..8fd588f4f6 100644
--- a/src/Apps/W1/Quality Management/app/src/Integration/Manufacturing/QltyProdGenRuleWizard.Page.al
+++ b/src/Apps/W1/Quality Management/app/src/Integration/Manufacturing/QltyProdGenRuleWizard.Page.al
@@ -15,10 +15,10 @@ using Microsoft.QualityManagement.Utilities;
page 20462 "Qlty. Prod. Gen. Rule Wizard"
{
- Caption = 'Quality Management - Production and Assembly Quality Test Generation Rule Wizard';
+ Caption = 'Quality Management - Production Quality Test Generation Rule Wizard';
PageType = NavigatePage;
UsageCategory = None;
- ApplicationArea = QualityManagement;
+ ApplicationArea = Manufacturing;
SourceTable = "Qlty. Management Setup";
layout
@@ -56,38 +56,6 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
end;
}
}
- group(SettingsFor_iStepAssemblyOrProduction)
- {
- Caption = ' ';
- ShowCaption = false;
- Visible = (StepAssemblyOrProductionCounter = CurrentStepCounter);
- InstructionalText = 'Choose whether this is for production orders or assembly orders.';
-
- field(ChoosechooseProductionOrder; IsProductionOrder)
- {
- ApplicationArea = Manufacturing;
- Caption = 'Production Orders';
- ToolTip = 'Specifies to create a test generation rule for Production Orders';
-
- trigger OnValidate()
- begin
- if IsProductionOrder then
- IsAssemblyOrder := false;
- end;
- }
- field(ChoosechooseAssemblyOrder; IsAssemblyOrder)
- {
- ApplicationArea = Assembly;
- Caption = 'Assembly Orders';
- ToolTip = 'Specifies to create a test generation rule for Assembly Orders';
-
- trigger OnValidate()
- begin
- if IsAssemblyOrder then
- IsProductionOrder := false;
- end;
- }
- }
group(SettingsFor_iStepWhichProdOrderRoutingLine)
{
Caption = ' ';
@@ -248,70 +216,6 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
end;
}
}
- group(SettingsFor_iStepWhichAssemblyOrder)
- {
- ShowCaption = false;
- InstructionalText = 'A test should be created for an assembly order when these filters match. You can choose other fields on the last step.';
- Visible = (StepWhichAssemblyOrderCounter = CurrentStepCounter);
-
- field(ChoosechooseAssemblyLocation; LocationCodeFilter)
- {
- ApplicationArea = All;
- Caption = 'Location';
- ToolTip = 'Specifies a location filter';
-
- trigger OnAssistEdit()
- begin
- QltyFilterHelpers.AssistEditLocation(LocationCodeFilter);
- end;
-
- trigger OnValidate()
- begin
- if not UpdateFullTextRuleStringsFromFilters() then
- Error(LocationFilterErr, GetLastErrorText());
- end;
- }
- field(ToBinCodeFilter; ToBinCodeFilter)
- {
- ApplicationArea = All;
- Caption = 'To Bin';
- ToolTip = 'Specifies a destination bin.';
-
- trigger OnAssistEdit()
- begin
- QltyFilterHelpers.AssistEditBin(LocationCodeFilter, '', ToBinCodeFilter);
- end;
-
- trigger OnValidate()
- begin
- if not UpdateFullTextRuleStringsFromFilters() then
- Error(ToBinFilterErr, GetLastErrorText());
- end;
- }
- field(ChooseAssemblyDescriptionPattern; DescriptionPattern)
- {
- ApplicationArea = All;
- Caption = 'Description';
- ToolTip = 'Specifies a filter for description';
-
- trigger OnValidate()
- begin
- UpdateFullTextRuleStringsFromFilters();
- end;
- }
- field(ChooseadvancedAssembly; 'Click here to choose advanced fields...')
- {
- ApplicationArea = All;
- ShowCaption = false;
-
- trigger OnDrillDown()
- begin
- UpdateFullTextRuleStringsFromFilters();
- AssistEditFullPostedAssemblyHeaderFilter();
- UpdateTableVariablesFromRecordFilters();
- end;
- }
- }
group(SettingsFor_iStepWhichItem)
{
Caption = ' ';
@@ -404,7 +308,6 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
}
group(SettingsForWrapProdOrderRoutingLineRule)
{
- Visible = IsProductionOrder;
ShowCaption = false;
field(ChooseProdOrderRoutingLineRuleFilter; ProdOrderRoutingLineRuleFilter)
@@ -420,24 +323,6 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
end;
}
}
- group(SettingsForWrapAssemblyOrderRule)
- {
- Visible = IsAssemblyOrder;
- ShowCaption = false;
-
- field(ChoosePostedAssemblyOrderRuleFilter; PostedAssemblyOrderRuleFilter)
- {
- ApplicationArea = All;
- Caption = 'Filters';
- ToolTip = 'Specifies additional filters you may need to review and set.';
- MultiLine = true;
-
- trigger OnAssistEdit()
- begin
- AssistEditFullPostedAssemblyHeaderFilter();
- end;
- }
- }
field(ChooseFilters_Item; ItemRuleFilter)
{
ApplicationArea = All;
@@ -450,14 +335,13 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
AssistEditFullItemFilter();
end;
}
- group(SettingsForbAutomaticallyCreateTest)
+ group(SettingsForAutomaticallyCreateTest)
{
ShowCaption = false;
InstructionalText = 'Do you want to automatically create tests when these are produced? This will set the activation trigger for this rule and set the default trigger value for test generation rules of this record type.';
group(SettingsForAutoProductionTriggerWrapper)
{
- Visible = IsProductionOrder;
ShowCaption = false;
field(ChooseeAutomaticallyCreateProductionTest; QltyProductionTrigger)
@@ -467,18 +351,6 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
ToolTip = 'Specifies whether to automatically create a test when product is produced.';
}
}
- group(SettingsForAutoAssemblyProductionTriggerWrapper)
- {
- Visible = IsAssemblyOrder;
- ShowCaption = false;
-
- field(ChooseeAutomaticallyCreateAssemblyTest; QltyAssemblyTrigger)
- {
- ApplicationArea = All;
- Caption = 'Automatically Create Test';
- ToolTip = 'Specifies whether to automatically create a test when product is produced.';
- }
- }
}
}
}
@@ -535,7 +407,6 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
TempProdOrderRoutingLine: Record "Prod. Order Routing Line" temporary;
TempItem: Record "Item" temporary;
TempQltyInTestGenerationRule: Record "Qlty. In. Test Generation Rule" temporary;
- TempPostedAssemblyHeader: Record "Posted Assembly Header" temporary;
QltyFilterHelpers: Codeunit "Qlty. Filter Helpers";
CurrentStepCounter: Integer;
LocationCodeFilter: Code[20];
@@ -551,7 +422,6 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
CategoryCodeFilter: Code[20];
InventoryPostingGroupCode: Code[20];
QltyProductionTrigger: Enum "Qlty. Production Trigger";
- QltyAssemblyTrigger: Enum "Qlty. Assembly Trigger";
ProdOrderRoutingLineRuleFilter: Text[400];
PostedAssemblyOrderRuleFilter: Text[400];
ItemRuleFilter: Text[400];
@@ -560,13 +430,9 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
IsFinishEnabledd: Boolean;
IsMovingForward: Boolean;
IsMovingBackward: Boolean;
- IsAssemblyOrder: Boolean;
- IsProductionOrder: Boolean;
StepWhichTemplateCounter: Integer;
StepWhichLineCounter: Integer;
StepWhichItemFilterCounter: Integer;
- StepAssemblyOrProductionCounter: Integer;
- StepWhichAssemblyOrderCounter: Integer;
StepDoneCounter: Integer;
MaxStep: Integer;
LocationFilterErr: Label 'This Location filter needs an adjustment. Location codes are no more than 10 characters. %1', Comment = '%1 = Text of the original error message';
@@ -587,11 +453,9 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
begin
QltyManagementSetup.Get();
StepWhichTemplateCounter := 1;
- StepAssemblyOrProductionCounter := 2;
- StepWhichLineCounter := 3;
- StepWhichAssemblyOrderCounter := 4;
- StepWhichItemFilterCounter := 5;
- StepDoneCounter := 6;
+ StepWhichLineCounter := 2;
+ StepWhichItemFilterCounter := 3;
+ StepDoneCounter := 4;
InitializeDefaultValues();
@@ -610,8 +474,6 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
local procedure InitializeDefaultValues()
begin
InitializeDefaultTemplate();
- if not IsProductionOrder and not IsAssemblyOrder then
- IsProductionOrder := true;
end;
local procedure InitializeDefaultTemplate()
@@ -641,9 +503,6 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
if IsMovingForward then
LeavingStepMovingForward(CurrentStepCounter, Step);
- if IsMovingBackward then
- LeavingStepMovingBackward(CurrentStepCounter, Step);
-
case Step of
StepWhichTemplateCounter:
begin
@@ -651,24 +510,12 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
IsNextEnabledd := true;
IsFinishEnabledd := false;
end;
- StepAssemblyOrProductionCounter:
- begin
- IsBackEnabledd := true;
- IsNextEnabledd := true;
- IsFinishEnabledd := false;
- end;
StepWhichLineCounter:
begin
IsBackEnabledd := true;
IsNextEnabledd := true;
IsFinishEnabledd := false;
end;
- StepWhichAssemblyOrderCounter:
- begin
- IsBackEnabledd := true;
- IsNextEnabledd := true;
- IsFinishEnabledd := false;
- end;
StepWhichItemFilterCounter:
begin
IsBackEnabledd := true;
@@ -694,34 +541,17 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
QltyInspectionTemplateHdr: Record "Qlty. Inspection Template Hdr.";
begin
if LeavingThisStep = StepWhichTemplateCounter then
- if MovingToThisStep = StepAssemblyOrProductionCounter then
+ if MovingToThisStep = StepWhichLineCounter then begin
if not QltyInspectionTemplateHdr.Get(TemplateCode) then begin
Message(YouMustChooseATemplateFirstMsg);
MovingToThisStep := StepWhichTemplateCounter;
end;
- if LeavingThisStep = StepAssemblyOrProductionCounter then
- if IsProductionOrder then begin
- MovingToThisStep := StepWhichLineCounter;
QltyProductionTrigger := QltyManagementSetup."Production Trigger";
- end else begin
- MovingToThisStep := StepWhichAssemblyOrderCounter;
- QltyAssemblyTrigger := QltyManagementSetup."Assembly Trigger";
end;
if LeavingThisStep = StepWhichLineCounter then
MovingToThisStep := StepWhichItemFilterCounter;
end;
- local procedure LeavingStepMovingBackward(LeavingThisStep: Integer; var MovingToThisStep: Integer)
- begin
- if LeavingThisStep = StepWhichItemFilterCounter then
- if IsProductionOrder then
- MovingToThisStep := StepWhichLineCounter
- else
- MovingToThisStep := StepWhichAssemblyOrderCounter;
- if LeavingThisStep = StepWhichAssemblyOrderCounter then
- MovingToThisStep := StepAssemblyOrProductionCounter;
- end;
-
local procedure AssistEditFullProdOrderRoutingLineFilter()
begin
TempQltyInTestGenerationRule."Source Table No." := Database::"Prod. Order Routing Line";
@@ -748,26 +578,9 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
end;
end;
- local procedure AssistEditFullPostedAssemblyHeaderFilter()
- begin
- TempQltyInTestGenerationRule."Source Table No." := Database::"Posted Assembly Header";
- TempQltyInTestGenerationRule."Condition Filter" := PostedAssemblyOrderRuleFilter;
-
- if TempQltyInTestGenerationRule.AssistEditConditionTableFilter() then begin
- PostedAssemblyOrderRuleFilter := TempQltyInTestGenerationRule."Condition Filter";
-
- TempPostedAssemblyHeader.SetView(PostedAssemblyOrderRuleFilter);
- UpdateTableVariablesFromRecordFilters();
- CleanUpWhereClause();
- end;
- end;
-
local procedure CleanUpWhereClause()
begin
- if IsProductionOrder then
- ProdOrderRoutingLineRuleFilter := QltyFilterHelpers.CleanUpWhereClause400(ProdOrderRoutingLineRuleFilter);
- if IsAssemblyOrder then
- PostedAssemblyOrderRuleFilter := QltyFilterHelpers.CleanUpWhereClause400(PostedAssemblyOrderRuleFilter);
+ ProdOrderRoutingLineRuleFilter := QltyFilterHelpers.CleanUpWhereClause400(ProdOrderRoutingLineRuleFilter);
ItemRuleFilter := QltyFilterHelpers.CleanUpWhereClause400(ItemRuleFilter);
end;
@@ -797,22 +610,13 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
end;
QltyInTestGenerationRule.Validate("Template Code", TemplateCode);
QltyManagementSetup.Get();
- if IsProductionOrder then begin
- QltyInTestGenerationRule."Source Table No." := Database::"Prod. Order Routing Line";
- QltyInTestGenerationRule.Intent := QltyInTestGenerationRule.Intent::Production;
- QltyInTestGenerationRule."Condition Filter" := ProdOrderRoutingLineRuleFilter;
- QltyInTestGenerationRule.SetIntentAndDefaultTriggerValuesFromSetup();
- QltyInTestGenerationRule."Production Trigger" := QltyProductionTrigger;
-
- QltyManagementSetup."Production Trigger" := QltyProductionTrigger;
- end else begin
- QltyInTestGenerationRule."Source Table No." := Database::"Posted Assembly Header";
- QltyInTestGenerationRule.Intent := QltyInTestGenerationRule.Intent::Assembly;
- QltyInTestGenerationRule."Condition Filter" := PostedAssemblyOrderRuleFilter;
- QltyInTestGenerationRule.SetIntentAndDefaultTriggerValuesFromSetup();
- QltyInTestGenerationRule."Assembly Trigger" := QltyAssemblyTrigger;
- QltyManagementSetup."Assembly Trigger" := QltyAssemblyTrigger;
- end;
+ QltyInTestGenerationRule."Source Table No." := Database::"Prod. Order Routing Line";
+ QltyInTestGenerationRule.Intent := QltyInTestGenerationRule.Intent::Production;
+ QltyInTestGenerationRule."Condition Filter" := ProdOrderRoutingLineRuleFilter;
+ QltyInTestGenerationRule.SetIntentAndDefaultTriggerValuesFromSetup();
+ QltyInTestGenerationRule."Production Trigger" := QltyProductionTrigger;
+
+ QltyManagementSetup."Production Trigger" := QltyProductionTrigger;
if QltyManagementSetup.Modify(false) then;
QltyInTestGenerationRule."Item Filter" := ItemRuleFilter;
QltyInTestGenerationRule.Modify();
@@ -839,19 +643,10 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
begin
TempQltyInTestGenerationRule := QltyInTestGenerationRule;
Clear(TempProdOrderRoutingLine);
- Clear(TempPostedAssemblyHeader);
Clear(TempItem);
- if QltyInTestGenerationRule."Source Table No." = Database::"Prod. Order Routing Line" then begin
+ if QltyInTestGenerationRule."Source Table No." = Database::"Prod. Order Routing Line" then
TempProdOrderRoutingLine.SetView(TempQltyInTestGenerationRule."Condition Filter");
- IsProductionOrder := true;
- IsAssemblyOrder := false;
- end;
- if QltyInTestGenerationRule."Source Table No." = Database::"Posted Assembly Header" then begin
- TempPostedAssemblyHeader.SetView(TempQltyInTestGenerationRule."Condition Filter");
- IsAssemblyOrder := true;
- IsProductionOrder := false;
- end;
TempItem.SetView(TempQltyInTestGenerationRule."Item Filter");
UpdateTableVariablesFromRecordFilters();
@@ -865,21 +660,15 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
[TryFunction]
local procedure UpdateFullTextRuleStringsFromFilters()
begin
- if IsProductionOrder then begin
- TempProdOrderRoutingLine.SetFilter("Location Code", LocationCodeFilter);
- TempProdOrderRoutingLine.SetFilter("Routing No.", RoutingNoFilter);
- TempProdOrderRoutingLine.SetFilter("Work Center No.", WorkCenterNo);
- TempProdOrderRoutingLine.SetFilter("No.", SpecificNoFilter);
- TempProdOrderRoutingLine.SetFilter("From-Production Bin Code", FromBinCodeFilter);
- TempProdOrderRoutingLine.SetFilter("To-Production Bin Code", ToBinCodeFilter);
- TempProdOrderRoutingLine.SetFilter("Operation No.", OperationNo);
- TempProdOrderRoutingLine.SetFilter("Description", DescriptionPattern);
- ProdOrderRoutingLineRuleFilter := CopyStr(QltyFilterHelpers.CleanUpWhereClause400(TempProdOrderRoutingLine.GetView(true)), 1, MaxStrLen(TempQltyInTestGenerationRule."Condition Filter"));
- end else begin
- TempPostedAssemblyHeader.SetFilter("Location Code", LocationCodeFilter);
- TempPostedAssemblyHeader.SetFilter(Description, DescriptionPattern);
- PostedAssemblyOrderRuleFilter := CopyStr(QltyFilterHelpers.CleanUpWhereClause400(TempPostedAssemblyHeader.GetView(true)), 1, MaxStrLen(TempQltyInTestGenerationRule."Condition Filter"));
- end;
+ TempProdOrderRoutingLine.SetFilter("Location Code", LocationCodeFilter);
+ TempProdOrderRoutingLine.SetFilter("Routing No.", RoutingNoFilter);
+ TempProdOrderRoutingLine.SetFilter("Work Center No.", WorkCenterNo);
+ TempProdOrderRoutingLine.SetFilter("No.", SpecificNoFilter);
+ TempProdOrderRoutingLine.SetFilter("From-Production Bin Code", FromBinCodeFilter);
+ TempProdOrderRoutingLine.SetFilter("To-Production Bin Code", ToBinCodeFilter);
+ TempProdOrderRoutingLine.SetFilter("Operation No.", OperationNo);
+ TempProdOrderRoutingLine.SetFilter("Description", DescriptionPattern);
+ ProdOrderRoutingLineRuleFilter := CopyStr(QltyFilterHelpers.CleanUpWhereClause400(TempProdOrderRoutingLine.GetView(true)), 1, MaxStrLen(TempQltyInTestGenerationRule."Condition Filter"));
TempItem.SetFilter("No.", ItemNoFilter);
TempItem.SetFilter("Item Category Code", CategoryCodeFilter);
@@ -891,29 +680,20 @@ page 20462 "Qlty. Prod. Gen. Rule Wizard"
if StrLen(QltyFilterHelpers.CleanUpWhereClause400(TempProdOrderRoutingLine.GetView(true))) > MaxStrLen(TempQltyInTestGenerationRule."Condition Filter") then
Error(FilterLengthErr, MaxStrLen(TempQltyInTestGenerationRule."Condition Filter"));
- if StrLen(QltyFilterHelpers.CleanUpWhereClause400(TempPostedAssemblyHeader.GetView(true))) > MaxStrLen(TempQltyInTestGenerationRule."Condition Filter") then
- Error(FilterLengthErr, MaxStrLen(TempQltyInTestGenerationRule."Condition Filter"));
-
if StrLen(QltyFilterHelpers.CleanUpWhereClause400(TempItem.GetView(true))) > MaxStrLen(TempQltyInTestGenerationRule."Item Filter") then
Error(FilterLengthErr, MaxStrLen(TempQltyInTestGenerationRule."Item Filter"));
end;
local procedure UpdateTableVariablesFromRecordFilters()
begin
- if IsProductionOrder then begin
- LocationCodeFilter := CopyStr(TempProdOrderRoutingLine.GetFilter("Location Code"), 1, MaxStrLen(LocationCodeFilter));
- RoutingNoFilter := CopyStr(TempProdOrderRoutingLine.GetFilter("Routing No."), 1, MaxStrLen(RoutingNoFilter));
- WorkCenterNo := CopyStr(TempProdOrderRoutingLine.GetFilter("Work Center No."), 1, MaxStrLen(WorkCenterNo));
- SpecificNoFilter := CopyStr(TempProdOrderRoutingLine.GetFilter("No."), 1, MaxStrLen(SpecificNoFilter));
- FromBinCodeFilter := CopyStr(TempProdOrderRoutingLine.GetFilter("From-Production Bin Code"), 1, MaxStrLen(FromBinCodeFilter));
- ToBinCodeFilter := CopyStr(TempProdOrderRoutingLine.GetFilter("To-Production Bin Code"), 1, MaxStrLen(ToBinCodeFilter));
- OperationNo := CopyStr(TempProdOrderRoutingLine.GetFilter("Operation No."), 1, MaxStrLen(OperationNo));
- DescriptionPattern := CopyStr(TempProdOrderRoutingLine.GetFilter("Description"), 1, MaxStrLen(DescriptionPattern));
- end else begin
- LocationCodeFilter := CopyStr(TempPostedAssemblyHeader.GetFilter("Location Code"), 1, MaxStrLen(LocationCodeFilter));
- DescriptionPattern := CopyStr(TempPostedAssemblyHeader.GetFilter(Description), 1, MaxStrLen(DescriptionPattern));
- ToBinCodeFilter := CopyStr(TempPostedAssemblyHeader.GetFilter("Bin Code"), 1, MaxStrLen(ToBinCodeFilter));
- end;
+ LocationCodeFilter := CopyStr(TempProdOrderRoutingLine.GetFilter("Location Code"), 1, MaxStrLen(LocationCodeFilter));
+ RoutingNoFilter := CopyStr(TempProdOrderRoutingLine.GetFilter("Routing No."), 1, MaxStrLen(RoutingNoFilter));
+ WorkCenterNo := CopyStr(TempProdOrderRoutingLine.GetFilter("Work Center No."), 1, MaxStrLen(WorkCenterNo));
+ SpecificNoFilter := CopyStr(TempProdOrderRoutingLine.GetFilter("No."), 1, MaxStrLen(SpecificNoFilter));
+ FromBinCodeFilter := CopyStr(TempProdOrderRoutingLine.GetFilter("From-Production Bin Code"), 1, MaxStrLen(FromBinCodeFilter));
+ ToBinCodeFilter := CopyStr(TempProdOrderRoutingLine.GetFilter("To-Production Bin Code"), 1, MaxStrLen(ToBinCodeFilter));
+ OperationNo := CopyStr(TempProdOrderRoutingLine.GetFilter("Operation No."), 1, MaxStrLen(OperationNo));
+ DescriptionPattern := CopyStr(TempProdOrderRoutingLine.GetFilter("Description"), 1, MaxStrLen(DescriptionPattern));
ItemNoFilter := CopyStr(TempItem.GetFilter("No."), 1, MaxStrLen(ItemNoFilter));
CategoryCodeFilter := CopyStr(TempItem.GetFilter("Item Category Code"), 1, MaxStrLen(CategoryCodeFilter));
diff --git a/src/Apps/W1/Quality Management/app/src/Permissions/QltyEntryInspector.PermissionSet.al b/src/Apps/W1/Quality Management/app/src/Permissions/QltyEntryInspector.PermissionSet.al
index c21211e9ff..0c6c6e6dde 100644
--- a/src/Apps/W1/Quality Management/app/src/Permissions/QltyEntryInspector.PermissionSet.al
+++ b/src/Apps/W1/Quality Management/app/src/Permissions/QltyEntryInspector.PermissionSet.al
@@ -110,6 +110,7 @@ permissionset 20404 QltyEntryInspector
page "Qlty. Management Setup" = X,
page "Qlty. Most Recent Picture" = X,
page "Qlty. Prod. Gen. Rule Wizard" = X,
+ page "Qlty. Asm. Gen. Rule Wizard" = X,
page "Qlty. Rec. Gen. Rule Wizard" = X,
page "Qlty. Related Transfer Orders" = X,
page "Qlty. Report Selection" = X,
diff --git a/src/Apps/W1/Quality Management/app/src/Permissions/QltyGeneral.PermissionSet.al b/src/Apps/W1/Quality Management/app/src/Permissions/QltyGeneral.PermissionSet.al
index 225838ab0d..cedca57eb6 100644
--- a/src/Apps/W1/Quality Management/app/src/Permissions/QltyGeneral.PermissionSet.al
+++ b/src/Apps/W1/Quality Management/app/src/Permissions/QltyGeneral.PermissionSet.al
@@ -108,6 +108,7 @@ permissionset 20403 QltyGeneral
page "Qlty. Management Setup" = X,
page "Qlty. Most Recent Picture" = X,
page "Qlty. Prod. Gen. Rule Wizard" = X,
+ page "Qlty. Asm. Gen. Rule Wizard" = X,
page "Qlty. Rec. Gen. Rule Wizard" = X,
page "Qlty. Related Transfer Orders" = X,
page "Qlty. Report Selection" = X,
diff --git a/src/Apps/W1/Quality Management/app/src/Permissions/QltyMngmntObjects.PermissionSet.al b/src/Apps/W1/Quality Management/app/src/Permissions/QltyMngmntObjects.PermissionSet.al
index 0d76530577..56673082f4 100644
--- a/src/Apps/W1/Quality Management/app/src/Permissions/QltyMngmntObjects.PermissionSet.al
+++ b/src/Apps/W1/Quality Management/app/src/Permissions/QltyMngmntObjects.PermissionSet.al
@@ -106,6 +106,7 @@ permissionset 20406 "QltyMngmnt - Objects"
page "Qlty. Management Setup" = X,
page "Qlty. Most Recent Picture" = X,
page "Qlty. Prod. Gen. Rule Wizard" = X,
+ page "Qlty. Asm. Gen. Rule Wizard" = X,
page "Qlty. Rec. Gen. Rule Wizard" = X,
page "Qlty. Related Transfer Orders" = X,
page "Qlty. Report Selection" = X,
diff --git a/src/Apps/W1/Quality Management/app/src/Setup/Setup/QltyManagementSetup.Page.al b/src/Apps/W1/Quality Management/app/src/Setup/Setup/QltyManagementSetup.Page.al
index 8b9c191021..55a4668986 100644
--- a/src/Apps/W1/Quality Management/app/src/Setup/Setup/QltyManagementSetup.Page.al
+++ b/src/Apps/W1/Quality Management/app/src/Setup/Setup/QltyManagementSetup.Page.al
@@ -187,7 +187,6 @@ page 20400 "Qlty. Management Setup"
group(SettingsForAssembly)
{
Caption = 'Assembly';
- InstructionalText = 'Default assembly related settings are configured in this group.';
field("Assembly Trigger"; Rec."Assembly Trigger")
{
Caption = 'Assembly - Create Test';
@@ -196,60 +195,64 @@ page 20400 "Qlty. Management Setup"
AboutTitle = 'Assembly related trigger';
AboutText = 'Optionally choose an assembly-related trigger to try and create a test.';
}
+ field(ChooseCreateNewRule_Assembly; 'Click here to create a new generation rule...')
+ {
+ ShowCaption = false;
+ ApplicationArea = Assembly;
+
+ trigger OnDrillDown()
+ var
+ QltyAsmGenRuleWizard: Page "Qlty. Asm. Gen. Rule Wizard";
+ begin
+ CurrPage.Update(true);
+ QltyAsmGenRuleWizard.RunModal();
+ CurrPage.Update(false);
+ end;
+ }
}
group(SettingsForProduction)
{
Caption = 'Production';
- InstructionalText = 'Production related settings are configured in this group. For example, you can choose to automatically create tests when output is created.';
-
- group(SettingsForProductionAutomation)
+ field("Production Trigger"; Rec."Production Trigger")
{
- Caption = 'Automation';
- InstructionalText = 'Define the default automation settings for test generation rules related to production output. Different triggers can be changed on the test generation rules.';
- AboutTitle = 'Production Related Automation Settings';
- AboutText = 'Production related settings are configured in this group. You can choose to automatically create tests when output is created, whether or not to update the source, and other automatic features.';
-
- field("Production Trigger"; Rec."Production Trigger")
- {
- Caption = 'Production - Create Test';
- ApplicationArea = Manufacturing;
- ShowCaption = true;
- AboutTitle = 'Production related trigger';
- AboutText = 'Optionally choose a production-related trigger to try and create a test.';
- }
- field("Auto Output Configuration"; Rec."Auto Output Configuration")
- {
- Caption = 'Auto Output Configuration';
- ApplicationArea = Manufacturing;
- ShowCaption = true;
- AboutTitle = 'Auto Output Configuration';
- AboutText = 'Provides granular options for when a test should be created automatically during the production process.';
- }
+ Caption = 'Production - Create Test';
+ ApplicationArea = Manufacturing;
+ ShowCaption = true;
+ AboutTitle = 'Production related trigger';
+ AboutText = 'Optionally choose a production-related trigger to try and create a test.';
+ }
+ field("Auto Output Configuration"; Rec."Auto Output Configuration")
+ {
+ Caption = 'Auto Output Configuration';
+ ApplicationArea = Manufacturing;
+ ShowCaption = true;
+ AboutTitle = 'Auto Output Configuration';
+ AboutText = 'Provides granular options for when a test should be created automatically during the production process.';
+ }
- field(ChooseCreateNewRule_Production; 'Click here to create a new generation rule...')
- {
- ShowCaption = false;
- ApplicationArea = Assembly, Manufacturing;
+ field(ChooseCreateNewRule_Production; 'Click here to create a new generation rule...')
+ {
+ ShowCaption = false;
+ ApplicationArea = Manufacturing;
- trigger OnDrillDown()
- var
- QltyProdGenRuleWizard: Page "Qlty. Prod. Gen. Rule Wizard";
- begin
- CurrPage.Update(true);
- QltyProdGenRuleWizard.RunModal();
- CurrPage.Update(false);
- end;
- }
- field("Production Update Control"; Rec."Production Update Control")
- {
- ApplicationArea = Manufacturing;
- ShowCaption = true;
- Caption = 'Control Source';
- Importance = Additional;
- Visible = false;
- AboutTitle = 'When to update on production related changes.';
- AboutText = 'Set to "Update when Source Changes" to alter source information as the source record changes (for example, such as when a Production Order changes status to Finished). Set to "Do Not Update" to prevent updating the original source that created the test.';
- }
+ trigger OnDrillDown()
+ var
+ QltyProdGenRuleWizard: Page "Qlty. Prod. Gen. Rule Wizard";
+ begin
+ CurrPage.Update(true);
+ QltyProdGenRuleWizard.RunModal();
+ CurrPage.Update(false);
+ end;
+ }
+ field("Production Update Control"; Rec."Production Update Control")
+ {
+ ApplicationArea = Manufacturing;
+ ShowCaption = true;
+ Caption = 'Control Source';
+ Importance = Additional;
+ Visible = false;
+ AboutTitle = 'When to update on production related changes.';
+ AboutText = 'Set to "Update when Source Changes" to alter source information as the source record changes (for example, such as when a Production Order changes status to Finished). Set to "Do Not Update" to prevent updating the original source that created the test.';
}
}
group(SettingsForInventory)