Dynamics 365 Business Central: Use a default quantity of 1 for all types on documents – Customization

Dynamics 365 Business Central

Today I would like to briefly talk about the problem I saw in the Business Central forum yesterday morning, Purchase Invoice – Setting Default Value when type is “Fixed Asset” on new line. This is related to the default Quantity of the Purchase line.
As you might know, sales and purchase documents can contain different types of lines, such as G/L Account, Item, Resource, or Fixed Asset.

As of now, the default quantity setting of 1 is only valid for Item type and G/L Account type. Other types, such as Fixed Asset, do not have this function.

We have discussed the following two topics before:

PS: Default Item Quantity is only available in Sales Documents.

So if you need other types to be available as well, this will need to be customized. As for how to customize, we can first look at the standard approach of Sales Documents.

table 37 “Sales Line” ->  field(6; “No.”; Code[20]) -> trigger OnValidate():

CopyFromGLAccount:

SetDefaultGLAccountQuantity:

The empty type, that is, Comment, does not allow the input of quantity. In addition, if you want to distinguish these types, you can add this logic in each CopyFromxxx function.

For example, in the following example, I first added three settings in Sales & Receivables Setup.

Then add logic to each event.

A simple test:

Test video:

Of course, if you only want to write a one-time process, you can also add it directly to the field’s OnAfterValidate (Field Extension) trigger. Let’s look at the processing in the purchase document, there is code in the standard purchasing logic that affects this.

Let’s try using the OnAfterValidate (Field Extension) trigger, for example,
Add fields:

Add logic:

Test:

Test video:

Very simple, give it a try!!!😁

Source code: Github (Please note that the source code is for reference only, you can improve it according to your own needs)

tableextension 50112 SalesReceivablesSetupExt extends "Sales & Receivables Setup"
{
    fields
    {
        field(50000; "Default Resource Quantity"; Boolean)
        {
            Caption = 'Default Resource Quantity';
            ToolTip = 'Specifies that Quantity is set to 1 on lines of type Resource.';
            DataClassification = CustomerContent;
        }
        field(50001; "Default Fixed Asset Quantity"; Boolean)
        {
            Caption = 'Default Fixed Asset Quantity';
            ToolTip = 'Specifies that Quantity is set to 1 on lines of type Fixed Asset.';
            DataClassification = CustomerContent;
        }
        field(50002; "Default Charge (Item) Quantity"; Boolean)
        {
            Caption = 'Default Charge (Item) Quantity';
            ToolTip = 'Specifies that Quantity is set to 1 on lines of type Charge (Item).';
            DataClassification = CustomerContent;
        }
    }
}

pageextension 50112 SalesReceivablesSetupExt extends "Sales & Receivables Setup"
{
    layout
    {
        addafter(DefaultGLAccountQuantity)
        {
            field("Default Resource Quantity"; Rec."Default Resource Quantity")
            {
                ApplicationArea = All;
                ToolTip = 'Specifies that Quantity is set to 1 on lines of type Resource.';
            }
            field("Default Fixed Asset Quantity"; Rec."Default Fixed Asset Quantity")
            {
                ApplicationArea = All;
                ToolTip = 'Specifies that Quantity is set to 1 on lines of type Fixed Asset.';
            }
            field("Default Charge (Item) Quantity"; Rec."Default Charge (Item) Quantity")
            {
                ApplicationArea = All;
                ToolTip = 'Specifies that Quantity is set to 1 on lines of type Charge (Item).';
            }
        }
    }
}

tableextension 50113 PurchasesPayablesSetupExt extends "Purchases & Payables Setup"
{
    fields
    {
        field(50000; "Default Resource Quantity"; Boolean)
        {
            Caption = 'Default Resource Quantity';
            ToolTip = 'Specifies that Quantity is set to 1 on lines of type Resource.';
            DataClassification = CustomerContent;
        }
        field(50001; "Default Fixed Asset Quantity"; Boolean)
        {
            Caption = 'Default Fixed Asset Quantity';
            ToolTip = 'Specifies that Quantity is set to 1 on lines of type Fixed Asset.';
            DataClassification = CustomerContent;
        }
        field(50002; "Default Charge (Item) Quantity"; Boolean)
        {
            Caption = 'Default Charge (Item) Quantity';
            ToolTip = 'Specifies that Quantity is set to 1 on lines of type Charge (Item).';
            DataClassification = CustomerContent;
        }
    }
}

pageextension 50113 PurchasesPayablesSetupExt extends "Purchases & Payables Setup"
{
    layout
    {
        addafter(DefaultGLAccountQuantity)
        {
            field("Default Resource Quantity"; Rec."Default Resource Quantity")
            {
                ApplicationArea = All;
                ToolTip = 'Specifies that Quantity is set to 1 on lines of type Resource.';
            }
            field("Default Fixed Asset Quantity"; Rec."Default Fixed Asset Quantity")
            {
                ApplicationArea = All;
                ToolTip = 'Specifies that Quantity is set to 1 on lines of type Fixed Asset.';
            }
            field("Default Charge (Item) Quantity"; Rec."Default Charge (Item) Quantity")
            {
                ApplicationArea = All;
                ToolTip = 'Specifies that Quantity is set to 1 on lines of type Charge (Item).';
            }
        }
    }
}

codeunit 50112 DefaultQuantityHandler
{
    //Sales
    [EventSubscriber(ObjectType::Table, Database::"Sales Line", OnAfterAssignResourceValues, '', false, false)]
    local procedure "SalesLine_OnAfterAssignResourceValues"(var SalesLine: Record "Sales Line")
    var
        SalesReceivablesSetup: Record "Sales & Receivables Setup";
    begin
        if SalesReceivablesSetup.Get() then
            if SalesReceivablesSetup."Default Resource Quantity" then
                SalesLine.Validate(Quantity, 1);
    end;

    [EventSubscriber(ObjectType::Table, Database::"Sales Line", OnAfterAssignFixedAssetValues, '', false, false)]
    local procedure "SalesLine_OnAfterAssignFixedAssetValues"(var SalesLine: Record "Sales Line")
    var
        SalesReceivablesSetup: Record "Sales & Receivables Setup";
    begin
        if SalesReceivablesSetup.Get() then
            if SalesReceivablesSetup."Default Charge (Item) Quantity" then
                SalesLine.Validate(Quantity, 1);
    end;

    [EventSubscriber(ObjectType::Table, Database::"Sales Line", OnAfterAssignItemChargeValues, '', false, false)]
    local procedure "SalesLine_OnAfterAssignItemChargeValues"(var SalesLine: Record "Sales Line")
    var
        SalesReceivablesSetup: Record "Sales & Receivables Setup";
    begin
        if SalesReceivablesSetup.Get() then
            if SalesReceivablesSetup."Default Fixed Asset Quantity" then
                SalesLine.Validate(Quantity, 1);
    end;

    //Purchase
    [EventSubscriber(ObjectType::Table, Database::"Purchase Line", OnAfterValidateEvent, "No.", false, false)]
    local procedure SetDefaultQuantity(var Rec: Record "Purchase Line")
    var
        PurchasesPayablesSetup: Record "Purchases & Payables Setup";
    begin
        if PurchasesPayablesSetup.Get() then begin
            if (PurchasesPayablesSetup."Default Resource Quantity") or (PurchasesPayablesSetup."Default Fixed Asset Quantity") or (PurchasesPayablesSetup."Default Charge (Item) Quantity") then
                Rec.Validate(Quantity, 1);
        end;
    end;
}

PS:
1. Business Central 2021 wave 2 (BC19): Default line type in the sales and purchase documents (Document Default Line Type)

2. Dynamics 365 Business Central: How to set default Account type in General Journals (Customization)

END

Hope this will help.

Thanks for reading.

ZHU

コメント

Copied title and URL