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;
}2. Dynamics 365 Business Central: How to set default Account type in General Journals (Customization)
END
Hope this will help.
Thanks for reading.
ZHU




コメント