Hi, Readers.
Yesterday a friend asked me a question, is it possible to check whether selected records have the same value in a field?
For example, on the Posted Sales Invoices page, users select several records and choose the new action to do some processing. If the customers of the selected invoices are all the same customer, the operation will be processed normally. If the customers of the selected invoice are not the same, and contains two or more, an error will be prompted. In other word, the customer must be same value on all lines you selected.
This is a very interesting question, but not very difficult. So in this post, I will share two easy ways to do it, hope this will help.
Test Video:
Method1:
Key Point
・SetFilter(“Sell-to Customer No.”, ‘<>%1’, “Sell-to Customer No.”);
・if not IsEmpty then
・Error
pageextension 50134 PostedSalesInvoices extends "Posted Sales Invoices"
{
actions
{
addafter(Print)
{
action(IsSame)
{
Caption = 'Is Same?';
Promoted = true;
PromotedCategory = Process;
PromotedIsBig = true;
PromotedOnly = true;
Image = Calculate;
ApplicationArea = All;
trigger OnAction()
var
SalesInvoiceHeaderRec: Record "Sales Invoice Header";
begin
CurrPage.SetSelectionFilter(SalesInvoiceHeaderRec);
if SalesInvoiceHeaderRec.FindSet() then
CheckDistinctCustomerNo(SalesInvoiceHeaderRec);
end;
}
}
}
local procedure CheckDistinctCustomerNo(var SalesInvoiceHeader: Record "Sales Invoice Header")
var
begin
SalesInvoiceHeader.SetFilter("Sell-to Customer No.", '<>%1', SalesInvoiceHeader."Sell-to Customer No.");
if not SalesInvoiceHeader.IsEmpty then
Error(DistinctCustomerErr)
else
Message('OK');
SalesInvoiceHeader.SetRange("Sell-to Customer No.");
end;
var
DistinctCustomerErr: Label 'The customer must be same value on all lines you selected.';
}
Method2:
Key Point
・Count Before SetRange
・Count After SetRange
・If CountBefore <> CountAfter then
・Error
pageextension 50134 PostedSalesInvoices extends "Posted Sales Invoices"
{
actions
{
addafter(Print)
{
action(IsSame)
{
Caption = 'Is Same?';
Promoted = true;
PromotedCategory = Process;
PromotedIsBig = true;
PromotedOnly = true;
Image = Calculate;
ApplicationArea = All;
trigger OnAction()
var
SalesInvoiceHeaderRec: Record "Sales Invoice Header";
begin
CurrPage.SetSelectionFilter(SalesInvoiceHeaderRec);
if SalesInvoiceHeaderRec.FindSet() then
CheckDistinctCustomerNo(SalesInvoiceHeaderRec);
end;
}
}
}
local procedure CheckDistinctCustomerNo(var SalesInvoiceHeader: Record "Sales Invoice Header")
var
CountBefore: Integer;
CountAfter: Integer;
begin
Clear(CountBefore);
Clear(CountAfter);
CountBefore := SalesInvoiceHeader.Count;
SalesInvoiceHeader.SetRange("Sell-to Customer No.", SalesInvoiceHeader."Sell-to Customer No.");
CountAfter := SalesInvoiceHeader.Count;
if CountBefore <> CountAfter then
Error(DistinctCustomerErr)
else
Message('OK');
SalesInvoiceHeader.SetRange("Sell-to Customer No.");
end;
var
DistinctCustomerErr: Label 'The customer must be same value on all lines you selected.';
}
END
Hope this will help you.
Thanks for reading.
ZHU
コメント