Table 1001 Job Task
- App
- Base Application
- Namespace
- Microsoft.Projects.Project.Job
- Versions
- 17-28
Fields, 75Keys, 3Procedures, 27Events, 24Obsolete, 1
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Projects/Project/Job/JobTask.Table.al2012 lines, Copyright (c) Microsoft Corporation. MIT
// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace Microsoft.Projects.Project.Job;
using Microsoft.Bank.BankAccount;
using Microsoft.CRM.BusinessRelation;
using Microsoft.CRM.Contact;
using Microsoft.Finance.Currency;
using Microsoft.Finance.Dimension;
using Microsoft.Foundation.Address;
using Microsoft.Foundation.PaymentTerms;
using Microsoft.Foundation.Reporting;
using Microsoft.Integration.Dataverse;
using Microsoft.Inventory.Location;
using Microsoft.Pricing.Calculation;
using Microsoft.Pricing.PriceList;
using Microsoft.Pricing.Source;
using Microsoft.Projects.Project.Ledger;
using Microsoft.Projects.Project.Planning;
using Microsoft.Projects.Project.WIP;
using Microsoft.Purchases.Document;
using Microsoft.Purchases.History;
using Microsoft.Sales.Customer;
using Microsoft.Sales.Document;
using Microsoft.Utilities;
using Microsoft.Warehouse.Structure;
using System.Globalization;
using System.Utilities;
table 1001 "Job Task"
{
Caption = 'Project Task';
DrillDownPageID = "Job Task Lines";
LookupPageID = "Job Task Lines";
DataClassification = CustomerContent;
fields
{
field(1; "Job No."; Code[20])
{
Caption = 'Project No.';
ToolTip = 'Specifies the number of the related project.';
Editable = false;
NotBlank = true;
TableRelation = Job;
}
field(2; "Job Task No."; Code[20])
{
Caption = 'Project Task No.';
ToolTip = 'Specifies the number of the related project task.';
NotBlank = true;
trigger OnValidate()
var
Job: Record Job;
Customer: Record Customer;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeValidateJobTaskNo(Rec, xRec, CurrFieldNo, IsHandled);
if IsHandled then
exit;
if "Job Task No." = '' then
exit;
Job.Get("Job No.");
Job.TestField("Bill-to Customer No.");
Customer.Get(Job."Bill-to Customer No.");
"Job Posting Group" := Job."Job Posting Group";
end;
}
field(3; Description; Text[100])
{
Caption = 'Description';
ToolTip = 'Specifies a description of the project task. You can enter anything that is meaningful in describing the task. The description is copied and used in descriptions on the project planning line.';
}
field(4; "Job Task Type"; Enum "Job Task Type")
{
Caption = 'Project Task Type';
ToolTip = 'Specifies the purpose of the account. Newly created accounts are automatically assigned the Posting account type, but you can change this. Choose the field to select one of the following five options:';
trigger OnValidate()
begin
if (xRec."Job Task Type" = "Job Task Type"::Posting) and
("Job Task Type" <> "Job Task Type"::Posting)
then begin
if JobLedgEntriesExist() then
Error(CannotChangeAssociatedEntriesErr, FieldCaption("Job Task Type"), TableCaption);
if JobPlanningLinesExist() then
Error(CannotChangeAssociatedEntriesErr, FieldCaption("Job Task Type"), TableCaption);
if JobAssignedResourcesExist() then
Error(CannotChangeTypeAssignedResourcesErr, FieldCaption("Job Task Type"), TableCaption);
ClearCustomerData();
end;
if "Job Task Type" <> "Job Task Type"::Posting then begin
"Job Posting Group" := '';
if "WIP-Total" = "WIP-Total"::Excluded then
"WIP-Total" := "WIP-Total"::" ";
end;
Totaling := '';
if (xRec."Job Task Type" <> "Job Task Type"::Posting) and ("Job Task Type" = "Job Task Type"::Posting) then
InitCustomer();
end;
}
field(6; "WIP-Total"; Option)
{
Caption = 'WIP-Total';
ToolTip = 'Specifies the project tasks you want to group together when calculating Work In Process (WIP) and Recognition.';
OptionCaption = ' ,Total,Excluded';
OptionMembers = " ",Total,Excluded;
trigger OnValidate()
var
Job: Record Job;
begin
case "WIP-Total" of
"WIP-Total"::Total:
begin
Job.Get("Job No.");
"WIP Method" := Job."WIP Method";
end;
"WIP-Total"::Excluded:
begin
TestField("Job Task Type", "Job Task Type"::Posting);
"WIP Method" := ''
end;
else
"WIP Method" := ''
end;
end;
}
field(7; "Job Posting Group"; Code[20])
{
Caption = 'Project Posting Group';
ToolTip = 'Specifies the project posting group of the task.';
TableRelation = "Job Posting Group";
trigger OnValidate()
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeValidateJobPostingGroup(Rec, xRec, CurrFieldNo, IsHandled);
if IsHandled then
exit;
if "Job Posting Group" <> '' then
TestField("Job Task Type", "Job Task Type"::Posting);
end;
}
field(9; "WIP Method"; Code[20])
{
Caption = 'WIP Method';
ToolTip = 'Specifies the name of the Work in Process calculation method that is associated with a project. The value in this field comes from the WIP method specified on the project card.';
TableRelation = "Job WIP Method".Code where(Valid = const(true));
trigger OnValidate()
begin
if "WIP Method" <> '' then
TestField("WIP-Total", "WIP-Total"::Total);
end;
}
field(10; "Schedule (Total Cost)"; Decimal)
{
AutoFormatType = 1;
AutoFormatExpression = Rec."Invoice Currency Code";
BlankZero = true;
CalcFormula = sum("Job Planning Line"."Total Cost (LCY)" where("Job No." = field("Job No."),
"Job Task No." = field("Job Task No."),
"Job Task No." = field(filter(Totaling)),
"Schedule Line" = const(true),
"Planning Date" = field("Planning Date Filter")));
Caption = 'Budget (Total Cost)';
Editable = false;
FieldClass = FlowField;
}
field(11; "Schedule (Total Price)"; Decimal)
{
AutoFormatType = 1;
AutoFormatExpression = Rec."Invoice Currency Code";
BlankZero = true;
CalcFormula = sum("Job Planning Line"."Line Amount (LCY)" where("Job No." = field("Job No."),
"Job Task No." = field("Job Task No."),
"Job Task No." = field(filter(Totaling)),
"Schedule Line" = const(true),
"Planning Date" = field("Planning Date Filter")));
Caption = 'Budget (Total Price)';
Editable = false;
FieldClass = FlowField;
}
field(12; "Usage (Total Cost)"; Decimal)
{
AutoFormatType = 1;
AutoFormatExpression = Rec."Invoice Currency Code";
BlankZero = true;
CalcFormula = sum("Job Ledger Entry"."Total Cost (LCY)" where("Job No." = field("Job No."),
"Job Task No." = field("Job Task No."),
"Job Task No." = field(filter(Totaling)),
"Entry Type" = const(Usage),
"Posting Date" = field("Posting Date Filter")));
Caption = 'Actual (Total Cost)';
Editable = false;
FieldClass = FlowField;
}
field(13; "Usage (Total Price)"; Decimal)
{
AutoFormatType = 1;
AutoFormatExpression = Rec."Invoice Currency Code";
BlankZero = true;
CalcFormula = sum("Job Ledger Entry"."Line Amount (LCY)" where("Job No." = field("Job No."),
"Job Task No." = field("Job Task No."),
"Job Task No." = field(filter(Totaling)),
"Entry Type" = const(Usage),
"Posting Date" = field("Posting Date Filter")));
Caption = 'Actual (Total Price)';
Editable = false;
FieldClass = FlowField;
}
field(14; "Contract (Total Cost)"; Decimal)
{
AutoFormatType = 1;
AutoFormatExpression = Rec."Invoice Currency Code";
BlankZero = true;
CalcFormula = sum("Job Planning Line"."Total Cost (LCY)" where("Job No." = field("Job No."),
"Job Task No." = field("Job Task No."),
"Job Task No." = field(filter(Totaling)),
"Contract Line" = const(true),
"Planning Date" = field("Planning Date Filter")));
Caption = 'Billable (Total Cost)';
Editable = false;
FieldClass = FlowField;
}
field(15; "Contract (Total Price)"; Decimal)
{
AutoFormatType = 1;
AutoFormatExpression = Rec."Invoice Currency Code";
BlankZero = true;
CalcFormula = sum("Job Planning Line"."Line Amount (LCY)" where("Job No." = field("Job No."),
"Job Task No." = field("Job Task No."),
"Job Task No." = field(filter(Totaling)),
"Contract Line" = const(true),
"Planning Date" = field("Planning Date Filter")));
Caption = 'Billable (Total Price)';
Editable = false;
FieldClass = FlowField;
}
field(16; "Contract (Invoiced Price)"; Decimal)
{
AutoFormatType = 1;
AutoFormatExpression = Rec."Invoice Currency Code";
BlankZero = true;
CalcFormula = - sum("Job Ledger Entry"."Line Amount (LCY)" where("Job No." = field("Job No."),
"Job Task No." = field("Job Task No."),
"Job Task No." = field(filter(Totaling)),
"Entry Type" = const(Sale),
"Posting Date" = field("Posting Date Filter")));
Caption = 'Invoiced (Total Price)';
Editable = false;
FieldClass = FlowField;
}
field(17; "Contract (Invoiced Cost)"; Decimal)
{
AutoFormatType = 1;
AutoFormatExpression = Rec."Invoice Currency Code";
BlankZero = true;
CalcFormula = - sum("Job Ledger Entry"."Total Cost (LCY)" where("Job No." = field("Job No."),
"Job Task No." = field("Job Task No."),
"Job Task No." = field(filter(Totaling)),
"Entry Type" = const(Sale),
"Posting Date" = field("Posting Date Filter")));
Caption = 'Invoiced (Total Cost)';
Editable = false;
FieldClass = FlowField;
}
field(19; "Posting Date Filter"; Date)
{
Caption = 'Posting Date Filter';
FieldClass = FlowFilter;
}
field(20; "Planning Date Filter"; Date)
{
Caption = 'Planning Date Filter';
FieldClass = FlowFilter;
}
field(21; Totaling; Text[250])
{
Caption = 'Totaling';
ToolTip = 'Specifies an interval or a list of project task numbers.';
TableRelation = "Job Task"."Job Task No." where("Job No." = field("Job No."));
ValidateTableRelation = false;
trigger OnValidate()
begin
if Totaling <> '' then
if not ("Job Task Type" in ["Job Task Type"::Total, "Job Task Type"::"End-Total"]) then
FieldError("Job Task Type");
Validate("WIP-Total");
CalcFields(
"Schedule (Total Cost)",
"Schedule (Total Price)",
"Usage (Total Cost)",
"Usage (Total Price)",
"Contract (Total Cost)",
"Contract (Total Price)",
"Contract (Invoiced Price)",
"Contract (Invoiced Cost)");
end;
}
field(22; "New Page"; Boolean)
{
Caption = 'New Page';
ToolTip = 'Specifies whether you want a new page to start immediately after this project task when you print the project tasks. To start a new page after this project task, select the New Page check box.';
}
field(23; "No. of Blank Lines"; Integer)
{
BlankZero = true;
Caption = 'No. of Blank Lines';
ToolTip = 'Specifies the number of blank lines that you want inserted before this project task in reports that shows project tasks.';
MinValue = 0;
}
field(24; Indentation; Integer)
{
Caption = 'Indentation';
MinValue = 0;
}
field(30; "Location Code"; Code[10])
{
Caption = 'Location Code';
ToolTip = 'Specifies the location code of the task.';
TableRelation = Location where("Use As In-Transit" = const(false));
DataClassification = CustomerContent;
trigger OnValidate()
begin
if ("Location Code" <> xRec."Location Code") then
MessageIfJobPlanningLineExist(FieldCaption("Location Code"));
SetDefaultBin();
end;
}
field(31; "Bin Code"; Code[20])
{
Caption = 'Bin Code';
ToolTip = 'Specifies a bin code for specific location of the task.';
TableRelation = Bin.Code where("Location Code" = field("Location Code"));
DataClassification = CustomerContent;
trigger OnValidate()
begin
if ("Bin Code" <> xRec."Bin Code") then
MessageIfJobPlanningLineExist(FieldCaption("Bin Code"));
end;
}
field(34; "Recognized Sales Amount"; Decimal)
{
AutoFormatType = 1;
AutoFormatExpression = Rec."Invoice Currency Code";
BlankZero = true;
Caption = 'Recognized Sales Amount';
Editable = false;
}
field(37; "Recognized Costs Amount"; Decimal)
{
AutoFormatType = 1;
AutoFormatExpression = Rec."Invoice Currency Code";
BlankZero = true;
Caption = 'Recognized Costs Amount';
Editable = false;
}
field(41; "Language Code"; Code[10])
{
Caption = 'Language Code';
ToolTip = 'Specifies the language to be used on printouts for this project.';
TableRelation = Language;
DataClassification = CustomerContent;
}
field(56; "Recognized Sales G/L Amount"; Decimal)
{
AutoFormatType = 1;
AutoFormatExpression = Rec."Invoice Currency Code";
BlankZero = true;
Caption = 'Recognized Sales G/L Amount';
Editable = false;
}
field(57; "Recognized Costs G/L Amount"; Decimal)
{
AutoFormatType = 1;
AutoFormatExpression = Rec."Invoice Currency Code";
BlankZero = true;
Caption = 'Recognized Costs G/L Amount';
Editable = false;
}
field(60; "Global Dimension 1 Code"; Code[20])
{
CaptionClass = '1,1,1';
Caption = 'Global Dimension 1 Code';
ToolTip = 'Specifies the code for the global dimension that is linked to the record or entry for analysis purposes. Two global dimensions, typically for the company''s most important activities, are available on all cards, documents, reports, and lists.';
TableRelation = "Dimension Value".Code where("Global Dimension No." = const(1),
Blocked = const(false));
trigger OnValidate()
begin
Rec.ValidateShortcutDimCode(1, "Global Dimension 1 Code");
end;
}
field(61; "Global Dimension 2 Code"; Code[20])
{
CaptionClass = '1,1,2';
Caption = 'Global Dimension 2 Code';
ToolTip = 'Specifies the code for the global dimension that is linked to the record or entry for analysis purposes. Two global dimensions, typically for the company''s most important activities, are available on all cards, documents, reports, and lists.';
TableRelation = "Dimension Value".Code where("Global Dimension No." = const(2),
Blocked = const(false));
trigger OnValidate()
begin
Rec.ValidateShortcutDimCode(2, "Global Dimension 2 Code");
end;
}
field(62; "Outstanding Orders"; Decimal)
{
AutoFormatType = 1;
AutoFormatExpression = '';
AccessByPermission = TableData "Purch. Rcpt. Header" = R;
CalcFormula = sum("Purchase Line"."Outstanding Amt. Ex. VAT (LCY)" where("Document Type" = const(Order),
"Job No." = field("Job No."),
"Job Task No." = field("Job Task No."),
"Job Task No." = field(filter(Totaling))));
Caption = 'Outstanding Orders';
ToolTip = 'Specifies the sum of outstanding orders, in local currency, for this project task. The value of the Outstanding Amount (LCY) field is used for entries in the Purchase Line table of document type Order to calculate and update the contents of this field.';
FieldClass = FlowField;
}
field(63; "Amt. Rcd. Not Invoiced"; Decimal)
{
AutoFormatType = 1;
AutoFormatExpression = '';
AccessByPermission = TableData "Purch. Rcpt. Header" = R;
CalcFormula = sum("Purchase Line"."A. Rcd. Not Inv. Ex. VAT (LCY)" where("Document Type" = const(Order),
"Job No." = field("Job No."),
"Job Task No." = field("Job Task No."),
"Job Task No." = field(filter(Totaling))));
Caption = 'Amt. Rcd. Not Invoiced';
ToolTip = 'Specifies the sum for items that have been received but have not yet been invoiced. The value in the Amt. Rcd. Not Invoiced (LCY) field is used for entries in the Purchase Line table of document type Order to calculate and update the contents of this field.';
FieldClass = FlowField;
}
field(64; "Remaining (Total Cost)"; Decimal)
{
AutoFormatType = 1;
AutoFormatExpression = '';
BlankZero = true;
CalcFormula = sum("Job Planning Line"."Remaining Total Cost (LCY)" where("Job No." = field("Job No."),
"Job Task No." = field("Job Task No."),
"Job Task No." = field(filter(Totaling)),
"Schedule Line" = const(true),
"Planning Date" = field("Planning Date Filter")));
Caption = 'Remaining (Total Cost)';
Editable = false;
FieldClass = FlowField;
}
field(65; "Remaining (Total Price)"; Decimal)
{
AutoFormatType = 1;
AutoFormatExpression = '';
BlankZero = true;
CalcFormula = sum("Job Planning Line"."Remaining Line Amount (LCY)" where("Job No." = field("Job No."),
"Job Task No." = field("Job Task No."),
"Job Task No." = field(filter(Totaling)),
"Schedule Line" = const(true),
"Planning Date" = field("Planning Date Filter")));
Caption = 'Remaining (Total Price)';
Editable = false;
FieldClass = FlowField;
}
field(66; "Start Date"; Date)
{
CalcFormula = min("Job Planning Line"."Planning Date" where("Job No." = field("Job No."),
"Job Task No." = field("Job Task No.")));
Caption = 'Start Date';
ToolTip = 'Specifies the start date for the project task. The date is based on the date on the related project planning line.';
Editable = false;
FieldClass = FlowField;
}
field(67; "End Date"; Date)
{
CalcFormula = max("Job Planning Line"."Planning Date" where("Job No." = field("Job No."),
"Job Task No." = field("Job Task No.")));
Caption = 'End Date';
ToolTip = 'Specifies the end date for the project task. The date is based on the date on the related project planning line.';
Editable = false;
FieldClass = FlowField;
}
field(70; "Bill-to Customer No."; Code[20])
{
Caption = 'Bill-to Customer No.';
ToolTip = 'Specifies the number of the customer who pays for the project.';
TableRelation = Customer;
DataClassification = CustomerContent;
trigger OnValidate()
begin
if "Bill-to Customer No." <> '' then
TestField("Job Task Type", "Job Task Type"::Posting);
BillToCustomerNoUpdated(Rec, xRec);
end;
}
field(71; "Bill-to Name"; Text[100])
{
Caption = 'Bill-to Name';
ToolTip = 'Specifies the name of the customer who pays for the project.';
TableRelation = Customer.Name;
ValidateTableRelation = false;
DataClassification = CustomerContent;
trigger OnLookup()
var
Customer: Record Customer;
begin
if "Bill-to Customer No." <> '' then
Customer.Get("Bill-to Customer No.");
if Customer.SelectCustomer(Customer) then begin
xRec := Rec;
"Bill-to Name" := Customer.Name;
Validate("Bill-to Customer No.", Customer."No.");
end;
end;
trigger OnValidate()
var
Customer: Record Customer;
begin
if ShouldSearchForCustomerByName("Bill-to Customer No.") then
Validate("Bill-to Customer No.", Customer.GetCustNo("Bill-to Name"));
end;
}
field(72; "Bill-to Address"; Text[100])
{
Caption = 'Bill-to Address';
ToolTip = 'Specifies the address of the customer to whom you will send the invoice.';
DataClassification = CustomerContent;
}
field(73; "Bill-to Address 2"; Text[50])
{
Caption = 'Bill-to Address 2';
ToolTip = 'Specifies an additional line of the address.';
DataClassification = CustomerContent;
}
field(74; "Bill-to City"; Text[30])
{
Caption = 'Bill-to City';
ToolTip = 'Specifies the city of the address.';
DataClassification = CustomerContent;
TableRelation = if ("Bill-to Country/Region Code" = const('')) "Post Code".City
else
if ("Bill-to Country/Region Code" = filter(<> '')) "Post Code".City where("Country/Region Code" = field("Bill-to Country/Region Code"));
ValidateTableRelation = false;
trigger OnLookup()
begin
#pragma warning disable AA0139
PostCode.LookupPostCode("Bill-to City", "Bill-to Post Code", "Bill-to County", "Bill-to Country/Region Code");
#pragma warning restore AA0139
end;
trigger OnValidate()
var
begin
PostCode.ValidateCity(
"Bill-to City", "Bill-to Post Code", "Bill-to County", "Bill-to Country/Region Code",
(CurrFieldNo <> 0) and GuiAllowed() and (not GetHideValidationDialog()));
end;
}
field(75; "Bill-to County"; Text[30])
{
CaptionClass = '5,3,' + "Bill-to Country/Region Code";
Caption = 'Bill-to County';
ToolTip = 'Specifies the county code of the customer''s billing address.';
DataClassification = CustomerContent;
}
field(76; "Bill-to Post Code"; Code[20])
{
Caption = 'Bill-to Post Code';
ToolTip = 'Specifies the postal code of the customer who pays for the project.';
TableRelation = if ("Bill-to Country/Region Code" = const('')) "Post Code"
else
if ("Bill-to Country/Region Code" = filter(<> '')) "Post Code" where("Country/Region Code" = field("Bill-to Country/Region Code"));
ValidateTableRelation = false;
DataClassification = CustomerContent;
trigger OnLookup()
begin
#pragma warning disable AA0139
PostCode.LookupPostCode("Bill-to City", "Bill-to Post Code", "Bill-to County", "Bill-to Country/Region Code");
#pragma warning restore AA0139
end;
trigger OnValidate()
begin
PostCode.ValidatePostCode(
"Bill-to City", "Bill-to Post Code", "Bill-to County", "Bill-to Country/Region Code",
(CurrFieldNo <> 0) and GuiAllowed() and (not GetHideValidationDialog()));
end;
}
field(77; "Bill-to Country/Region Code"; Code[10])
{
Caption = 'Bill-to Country/Region Code';
ToolTip = 'Specifies the country/region code of the customer''s billing address.';
Editable = true;
TableRelation = "Country/Region";
DataClassification = CustomerContent;
trigger OnValidate()
begin
#pragma warning disable AA0139
PostCode.CheckClearPostCodeCityCounty(
"Bill-to City", "Bill-to Post Code", "Bill-to County", "Bill-to Country/Region Code", xRec."Bill-to Country/Region Code");
#pragma warning restore AA0139
end;
}
field(78; "Bill-to Name 2"; Text[50])
{
Caption = 'Bill-to Name 2';
DataClassification = CustomerContent;
ToolTip = 'Specifies an additional part of the name of the customer who pays for the project.';
}
field(79; "Bill-to Contact No."; Code[20])
{
AccessByPermission = TableData Contact = R;
Caption = 'Bill-to Contact No.';
ToolTip = 'Specifies the number of the contact person at the customer''s billing address.';
DataClassification = CustomerContent;
TableRelation = Contact."No.";
trigger OnLookup()
begin
BilltoContactLookup();
end;
trigger OnValidate()
begin
if ("Bill-to Contact No." <> xRec."Bill-to Contact No.") and
(xRec."Bill-to Contact No." <> '')
then
if ("Bill-to Contact No." = '') and ("Bill-to Customer No." = '') then begin
Init();
Validate(Description, xRec.Description);
end;
if ("Bill-to Customer No." <> '') and ("Bill-to Contact No." <> '') then begin
Cont.Get("Bill-to Contact No.");
if ContBusinessRelation.FindByRelation(ContBusinessRelation."Link to Table"::Customer, "Bill-to Customer No.") then
if ContBusinessRelation."Contact No." <> Cont."Company No." then
Error(ContactBusRelDiffCompErr, Cont."No.", Cont.Name, "Bill-to Customer No.");
end;
UpdateBillToCust("Bill-to Contact No.");
end;
}
field(80; "Bill-to Contact"; Text[100])
{
Caption = 'Bill-to Contact';
ToolTip = 'Specifies the name of the contact person at the customer who pays for the project.';
DataClassification = CustomerContent;
}
field(90; "Sell-to Customer No."; Code[20])
{
Caption = 'Sell-to Customer No.';
ToolTip = 'Specifies the number of the customer who will receive the products and be billed by default for the project task.';
TableRelation = Customer;
DataClassification = CustomerContent;
trigger OnValidate()
begin
if "Sell-to Customer No." <> '' then
TestField("Job Task Type", "Job Task Type"::Posting);
SellToCustomerNoUpdated(Rec, xRec);
end;
}
field(91; "Sell-to Customer Name"; Text[100])
{
Caption = 'Sell-to Customer Name';
ToolTip = 'Specifies the name of the customer who will receive the products and be billed by default.';
TableRelation = Customer.Name;
ValidateTableRelation = false;
DataClassification = CustomerContent;
trigger OnLookup()
var
CustomerName: Text;
begin
CustomerName := "Sell-to Customer Name";
LookupSellToCustomerName(CustomerName);
"Sell-to Customer Name" := CopyStr(CustomerName, 1, MaxStrLen("Sell-to Customer Name"));
end;
trigger OnValidate()
var
Customer: Record Customer;
LookupStateManager: Codeunit "Lookup State Manager";
begin
if LookupStateManager.IsRecordSaved() then
LookupStateManager.ClearSavedRecord();
if LookupStateManager.IsRecordSaved() then begin
Customer := LookupStateManager.GetSavedRecord();
if Customer."No." <> '' then begin
LookupStateManager.ClearSavedRecord();
Validate("Sell-to Customer No.", Customer."No.");
exit;
end;
end;
if ShouldSearchForCustomerByName("Sell-to Customer No.") then
Validate("Sell-to Customer No.", Customer.GetCustNo("Sell-to Customer Name"));
end;
}
field(92; "Sell-to Customer Name 2"; Text[50])
{
Caption = 'Sell-to Customer Name 2';
DataClassification = CustomerContent;
ToolTip = 'Specifies an additional part of the name of the customer who will receive the products and be billed by default.';
}
field(93; "Sell-to Address"; Text[100])
{
Caption = 'Sell-to Address';
ToolTip = 'Specifies the address where the customer is located.';
DataClassification = CustomerContent;
}
field(94; "Sell-to Address 2"; Text[50])
{
Caption = 'Sell-to Address 2';
ToolTip = 'Specifies additional address information.';
DataClassification = CustomerContent;
}
field(95; "Sell-to City"; Text[30])
{
Caption = 'Sell-to City';
ToolTip = 'Specifies the city of the customer on the sales document.';
TableRelation = if ("Sell-to Country/Region Code" = const('')) "Post Code".City
else
if ("Sell-to Country/Region Code" = filter(<> '')) "Post Code".City where("Country/Region Code" = field("Sell-to Country/Region Code"));
ValidateTableRelation = false;
DataClassification = CustomerContent;
trigger OnLookup()
begin
#pragma warning disable AA0139
PostCode.LookupPostCode("Sell-to City", "Sell-to Post Code", "Sell-to County", "Sell-to Country/Region Code");
#pragma warning restore AA0139
end;
trigger OnValidate()
begin
PostCode.ValidateCity(
"Sell-to City", "Sell-to Post Code", "Sell-to County", "Sell-to Country/Region Code",
(CurrFieldNo <> 0) and GuiAllowed() and (not GetHideValidationDialog()));
end;
}
field(96; "Sell-to Contact"; Text[100])
{
Caption = 'Sell-to Contact';
ToolTip = 'Specifies the name of the person to contact at the customer.';
DataClassification = CustomerContent;
}
field(97; "Sell-to Post Code"; Code[20])
{
Caption = 'Sell-to Post Code';
ToolTip = 'Specifies the postal code.';
TableRelation = if ("Sell-to Country/Region Code" = const('')) "Post Code"
else
if ("Sell-to Country/Region Code" = filter(<> '')) "Post Code" where("Country/Region Code" = field("Sell-to Country/Region Code"));
ValidateTableRelation = false;
DataClassification = CustomerContent;
}
field(98; "Sell-to County"; Text[30])
{
CaptionClass = '5,2,' + "Sell-to Country/Region Code";
Caption = 'Sell-to County';
ToolTip = 'Specifies the state, province or county of the address.';
DataClassification = CustomerContent;
}
field(99; "Sell-to Country/Region Code"; Code[10])
{
Caption = 'Sell-to Country/Region Code';
ToolTip = 'Specifies the country or region of the address.';
TableRelation = "Country/Region";
DataClassification = CustomerContent;
}
field(100; "Sell-to Contact No."; Code[20])
{
Caption = 'Sell-to Contact No.';
ToolTip = 'Specifies the number of the contact person that the sales document will be sent to.';
TableRelation = Contact;
DataClassification = CustomerContent;
trigger OnLookup()
begin
SelltoContactLookup();
end;
trigger OnValidate()
var
Contact: Record Contact;
ContactBusinessRelation: Record "Contact Business Relation";
begin
if ("Sell-to Contact No." <> xRec."Sell-to Contact No.") and
(xRec."Sell-to Contact No." <> '')
then
if ("Sell-to Contact No." = '') and ("Sell-to Customer No." = '') then begin
Init();
Validate(Description, xRec.Description);
end;
if ("Sell-to Customer No." <> '') and ("Sell-to Contact No." <> '') then begin
Contact.SetLoadFields(Name, "Company No.");
Contact.Get("Sell-to Contact No.");
if ContactBusinessRelation.FindByRelation(ContactBusinessRelation."Link to Table"::Customer, "Sell-to Customer No.") then
if ContactBusinessRelation."Contact No." <> Contact."Company No." then
Error(ContactBusRelDiffCompErr, Contact."No.", Contact.Name, "Sell-to Customer No.");
end;
if ("Sell-to Contact No." <> xRec."Sell-to Contact No.") then
UpdateSellToCust("Sell-to Contact No.");
UpdateShipToContact();
end;
}
field(110; "Ship-to Code"; Code[10])
{
Caption = 'Ship-to Code';
ToolTip = 'Specifies the code for another shipment address than the customer''s own address, which is entered by default.';
TableRelation = "Ship-to Address".Code where("Customer No." = field("Sell-to Customer No."));
DataClassification = CustomerContent;
trigger OnValidate()
begin
ShipToCodeValidate();
end;
}
field(111; "Ship-to Name"; Text[100])
{
Caption = 'Ship-to Name';
ToolTip = 'Specifies the name that products on the sales document will be shipped to.';
DataClassification = CustomerContent;
}
field(112; "Ship-to Name 2"; Text[50])
{
Caption = 'Ship-to Name 2';
ToolTip = 'Specifies an additional part of the name that products on the sales document will be shipped to.';
DataClassification = CustomerContent;
}
field(113; "Ship-to Address"; Text[100])
{
Caption = 'Ship-to Address';
ToolTip = 'Specifies the address that products on the sales document will be shipped to.';
DataClassification = CustomerContent;
}
field(114; "Ship-to Address 2"; Text[50])
{
Caption = 'Ship-to Address 2';
ToolTip = 'Specifies additional address information.';
DataClassification = CustomerContent;
}
field(115; "Ship-to City"; Text[30])
{
Caption = 'Ship-to City';
ToolTip = 'Specifies the city of the customer on the sales document.';
TableRelation = if ("Ship-to Country/Region Code" = const('')) "Post Code".City
else
if ("Ship-to Country/Region Code" = filter(<> '')) "Post Code".City where("Country/Region Code" = field("Ship-to Country/Region Code"));
ValidateTableRelation = false;
DataClassification = CustomerContent;
trigger OnLookup()
begin
#pragma warning disable AA0139
PostCode.LookupPostCode("Ship-to City", "Ship-to Post Code", "Ship-to County", "Ship-to Country/Region Code");
#pragma warning restore AA0139
end;
trigger OnValidate()
begin
PostCode.ValidateCity(
"Ship-to City", "Ship-to Post Code", "Ship-to County", "Ship-to Country/Region Code",
(CurrFieldNo <> 0) and GuiAllowed() and (not GetHideValidationDialog()));
end;
}
field(116; "Ship-to Contact"; Text[100])
{
Caption = 'Ship-to Contact';
ToolTip = 'Specifies the name of the contact person at the address that products on the sales document will be shipped to.';
DataClassification = CustomerContent;
}
field(117; "Ship-to Post Code"; Code[20])
{
Caption = 'Ship-to Post Code';
ToolTip = 'Specifies the postal code.';
TableRelation = if ("Ship-to Country/Region Code" = const('')) "Post Code"
else
if ("Ship-to Country/Region Code" = filter(<> '')) "Post Code" where("Country/Region Code" = field("Ship-to Country/Region Code"));
ValidateTableRelation = false;
DataClassification = CustomerContent;
trigger OnValidate()
begin
PostCode.ValidatePostCode(
"Ship-to City", "Ship-to Post Code", "Ship-to County", "Ship-to Country/Region Code",
(CurrFieldNo <> 0) and GuiAllowed() and (not GetHideValidationDialog()));
end;
}
field(118; "Ship-to County"; Text[30])
{
CaptionClass = '5,4,' + "Ship-to Country/Region Code";
Caption = 'Ship-to County';
ToolTip = 'Specifies the state, province or county of the address.';
DataClassification = CustomerContent;
}
field(119; "Ship-to Country/Region Code"; Code[10])
{
Caption = 'Ship-to Country/Region Code';
ToolTip = 'Specifies the customer''s country/region.';
TableRelation = "Country/Region";
DataClassification = CustomerContent;
}
field(130; "External Document No."; Code[35])
{
Caption = 'External Document No.';
DataClassification = CustomerContent;
trigger OnValidate()
begin
if "External Document No." <> '' then
TestField("Job Task Type", "Job Task Type"::Posting);
end;
}
field(131; "Payment Method Code"; Code[10])
{
Caption = 'Payment Method Code';
TableRelation = "Payment Method";
DataClassification = CustomerContent;
}
field(132; "Payment Terms Code"; Code[10])
{
Caption = 'Payment Terms Code';
TableRelation = "Payment Terms";
DataClassification = CustomerContent;
}
field(133; "Your Reference"; Text[35])
{
Caption = 'Your Reference';
DataClassification = CustomerContent;
trigger OnValidate()
begin
if "Your Reference" <> '' then
TestField("Job Task Type", "Job Task Type"::Posting);
end;
}
field(134; "Price Calculation Method"; Enum "Price Calculation Method")
{
Caption = 'Price Calculation Method';
ToolTip = 'Specifies the default method of the unit price calculation.';
DataClassification = CustomerContent;
trigger OnValidate()
var
PriceCalculationMgt: Codeunit "Price Calculation Mgt.";
PriceType: Enum "Price Type";
begin
if "Price Calculation Method" <> "Price Calculation Method"::" " then
PriceCalculationMgt.VerifyMethodImplemented("Price Calculation Method", PriceType::Sale);
end;
}
field(140; "Invoice Currency Code"; Code[10])
{
Caption = 'Invoice Currency Code';
ToolTip = 'Specifies the currency code you want to apply when creating invoices for a project. By default, the invoice currency code for a project is based on what currency code is defined on the customer card.';
TableRelation = Currency;
DataClassification = CustomerContent;
}
#if not CLEANSCHEMA28
field(721; "Coupled to Dataverse"; Boolean)
{
FieldClass = FlowField;
Caption = 'Coupled to Field Service';
Editable = false;
CalcFormula = exist("CRM Integration Record" where("Integration ID" = field(SystemId), "Table ID" = const(Database::"Job Task")));
ObsoleteReason = 'Field Service is moved to Field Service Integration app.';
ObsoleteState = Removed;
ObsoleteTag = '28.0';
}
#endif
}
keys
{
key(Key1; "Job No.", "Job Task No.")
{
Clustered = true;
}
key(Key2; "Job Task No.")
{
}
key(Key3; SystemCreatedAt)
{
}
}
fieldgroups
{
fieldgroup(DropDown; "Job No.", "Job Task No.", Description, "Job Task Type")
{
}
fieldgroup(Brick; "Job Task No.", Description)
{
}
}
trigger OnDelete()
var
JobPlanningLine: Record "Job Planning Line";
JobWIPTotal: Record "Job WIP Total";
JobTaskDim: Record "Job Task Dimension";
JobAssignedResource: Record "Job Assigned Resource";
begin
if JobLedgEntriesExist() then
Error(CannotDeleteAssociatedEntriesErr, TableCaption);
JobPlanningLine.SetCurrentKey("Job No.", "Job Task No.");
JobPlanningLine.SetRange("Job No.", "Job No.");
JobPlanningLine.SetRange("Job Task No.", "Job Task No.");
if CalledFromHeader then
JobPlanningLine.SuspendDeletionCheck(true);
JobPlanningLine.DeleteAll(true);
JobWIPTotal.DeleteEntriesForJobTask(Rec);
JobTaskDim.SetRange("Job No.", "Job No.");
JobTaskDim.SetRange("Job Task No.", "Job Task No.");
if not JobTaskDim.IsEmpty() then
JobTaskDim.DeleteAll();
JobAssignedResource.SetRange("Job No.", "Job No.");
JobAssignedResource.SetRange("Job Task No.", "Job Task No.");
JobAssignedResource.DeleteAll();
CalcFields("Schedule (Total Cost)", "Usage (Total Cost)");
Job.UpdateOverBudgetValue("Job No.", true, "Usage (Total Cost)");
Job.UpdateOverBudgetValue("Job No.", false, "Schedule (Total Cost)");
end;
trigger OnInsert()
var
Job: Record Job;
Customer: Record Customer;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeOnInsert(Rec, IsHandled);
if IsHandled then
exit;
LockTable();
Job.Get("Job No.");
if Job.Blocked = Job.Blocked::All then
Job.TestBlocked();
Job.TestField("Bill-to Customer No.");
Customer.Get(Job."Bill-to Customer No.");
DimMgt.InsertJobTaskDim("Job No.", "Job Task No.", "Global Dimension 1 Code", "Global Dimension 2 Code");
InitCustomer();
InitLocation(Job);
CalcFields("Schedule (Total Cost)", "Usage (Total Cost)");
Job.UpdateOverBudgetValue("Job No.", true, "Usage (Total Cost)");
Job.UpdateOverBudgetValue("Job No.", false, "Schedule (Total Cost)");
OnAfterOnInsert(Rec, xRec);
end;
trigger OnModify()
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeOnModify(Rec, xRec, IsHandled);
if IsHandled then
exit;
CalcFields("Schedule (Total Cost)", "Usage (Total Cost)");
Job.UpdateOverBudgetValue("Job No.", true, "Usage (Total Cost)");
Job.UpdateOverBudgetValue("Job No.", false, "Schedule (Total Cost)");
end;
var
Job: Record Job;
Location: Record Location;
PostCode: Record "Post Code";
Cust: Record Customer;
Cont: Record Contact;
ContBusinessRelation: Record "Contact Business Relation";
DimMgt: Codeunit DimensionManagement;
HideValidationDialog: Boolean;
CalledFromHeader: Boolean;
CannotDeleteAssociatedEntriesErr: Label 'You cannot delete %1 because one or more entries are associated.', Comment = '%1=The project task table name.';
CannotChangeAssociatedEntriesErr: Label 'You cannot change %1 because one or more entries are associated with this %2.', Comment = '%1 = The field name you are trying to change; %2 = The project task table name.';
CannotChangeTypeAssignedResourcesErr: Label 'You cannot change %1 because one or more assigned resources exist for this %2.', Comment = '%1 = The field name you are trying to change (Project Task Type); %2 = The project task table name.';
PlanningLinesNotUpdatedMsg: Label 'You have changed %1 on the project task, but it has not been changed on the existing project planning lines.', Comment = '%1 = a Field Caption like Location Code';
AssociatedEntriesExistErr: Label 'You cannot change %1 because one or more entries are associated with this %2.', Comment = '%1 = Name of field used in the error; %2 = The name of the Project Task table';
ContactBusRelErr: Label 'Contact %1 %2 is not related to customer %3.', Comment = '%1 = The contact number; %2 = The contact''s name; %3 = The Bill-To Customer Number associated with this job task';
ContactBusRelMissingErr: Label 'Contact %1 %2 is not related to a customer.', Comment = '%1 = The contact number; %2 = The contact''s name';
ContactBusRelDiffCompErr: Label 'Contact %1 %2 is related to a different company than customer %3.', Comment = '%1 = The contact number; %2 = The contact''s name; %3 = The Bill-To Customer Number associated with this job task';
UpdatePlanningLinesManuallyMsg: Label 'You must update the existing project planning lines manually.';
SplitMessageTxt: Label '%1\%2', Comment = 'Some message text 1.\Some message text 2.', Locked = true;
ConfirmChangeQst: Label 'Do you want to change %1?', Comment = '%1 = a Field Caption like Currency Code';
BillToCustomerTxt: Label 'Bill-to Customer';
SellToCustomerTxt: Label 'Sell-to Customer';
UpdateCostPricesOnRelatedLinesQst: Label 'You have changed a customer. Prices and costs needs to be updated on a related lines.\\Do you want to update related lines?';
procedure CalcEACTotalCost(): Decimal
begin
if "Job No." <> Job."No." then
if not Job.Get("Job No.") then
exit(0);
if Job."Apply Usage Link" then
exit("Usage (Total Cost)" + "Remaining (Total Cost)");
exit(0);
end;
procedure CalcEACTotalPrice(): Decimal
begin
if "Job No." <> Job."No." then
if not Job.Get("Job No.") then
exit(0);
if Job."Apply Usage Link" then
exit("Usage (Total Price)" + "Remaining (Total Price)");
exit(0);
end;
local procedure JobLedgEntriesExist() Result: Boolean
var
JobLedgerEntry: Record "Job Ledger Entry";
begin
JobLedgerEntry.SetCurrentKey("Job No.", "Job Task No.");
JobLedgerEntry.SetRange("Job No.", "Job No.");
JobLedgerEntry.SetRange("Job Task No.", "Job Task No.");
OnJobLedgEntriesExistOnAfterSetFilter(Rec, JobLedgerEntry);
Result := not JobLedgerEntry.IsEmpty();
end;
local procedure JobPlanningLinesExist() Result: Boolean
var
JobPlanningLine: Record "Job Planning Line";
begin
JobPlanningLine.SetRange("Job No.", "Job No.");
JobPlanningLine.SetRange("Job Task No.", "Job Task No.");
Result := not JobPlanningLine.IsEmpty();
end;
local procedure JobAssignedResourcesExist() Result: Boolean
var
JobAssignedResource: Record "Job Assigned Resource";
begin
JobAssignedResource.SetRange("Job No.", "Job No.");
JobAssignedResource.SetRange("Job Task No.", "Job Task No.");
Result := not JobAssignedResource.IsEmpty();
end;
procedure Caption(): Text
var
JobForCaption: Record Job;
Result: Text;
IsHandled: Boolean;
begin
Result := '';
IsHandled := false;
OnBeforeCaption(Rec, IsHandled, Result);
if IsHandled then
exit(Result);
JobForCaption.SetLoadFields("No.", Description);
if not JobForCaption.Get("Job No.") then
exit('');
exit(StrSubstNo('%1 %2 %3 %4',
JobForCaption."No.",
JobForCaption.Description,
"Job Task No.",
Description));
end;
procedure InitWIPFields()
var
JobWIPTotal: Record "Job WIP Total";
begin
JobWIPTotal.SetRange("Job No.", "Job No.");
JobWIPTotal.SetRange("Job Task No.", "Job Task No.");
JobWIPTotal.SetRange("Posted to G/L", false);
JobWIPTotal.DeleteAll(true);
"Recognized Sales Amount" := 0;
"Recognized Costs Amount" := 0;
OnInitWIPFieldsOnBeforeModify(Rec);
Modify();
end;
procedure ToPriceSource(var PriceSource: Record "Price Source"; PriceType: Enum "Price Type")
begin
PriceSource.Init();
PriceSource."Price Type" := PriceType;
PriceSource.Validate("Source Type", PriceSource."Source Type"::"Job Task");
PriceSource.Validate("Parent Source No.", "Job No.");
PriceSource.Validate("Source No.", "Job Task No.");
end;
procedure ValidateShortcutDimCode(FieldNumber: Integer; var ShortcutDimCode: Code[20])
var
JobTask2: Record "Job Task";
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeValidateShortcutDimCode(Rec, xRec, FieldNumber, ShortcutDimCode, JobTask2, IsHandled);
if not IsHandled then begin
DimMgt.ValidateDimValueCode(FieldNumber, ShortcutDimCode);
if JobTask2.Get("Job No.", "Job Task No.") then begin
DimMgt.SaveJobTaskDim("Job No.", "Job Task No.", FieldNumber, ShortcutDimCode);
Modify();
end else
DimMgt.SaveJobTaskTempDim(FieldNumber, ShortcutDimCode);
end;
OnAfterValidateShortcutDimCode(Rec, xRec, FieldNumber, ShortcutDimCode);
end;
procedure ClearTempDim()
begin
DimMgt.DeleteJobTaskTempDim();
end;
procedure ApplyPurchaseLineFilters(var PurchLine: Record "Purchase Line"; JobNo: Code[20]; JobTaskNo: Code[20])
begin
PurchLine.SetCurrentKey("Document Type", "Job No.", "Job Task No.");
PurchLine.SetRange("Document Type", PurchLine."Document Type"::Order);
PurchLine.SetRange("Job No.", JobNo);
if "Job Task Type" in ["Job Task Type"::Total, "Job Task Type"::"End-Total"] then
PurchLine.SetFilter("Job Task No.", Totaling)
else
PurchLine.SetRange("Job Task No.", JobTaskNo);
OnAfterApplyPurchaseLineFilters(Rec, PurchLine);
end;
local procedure SetDefaultBin()
begin
"Bin Code" := '';
if "Location Code" = '' then
exit;
GetLocation("Location Code");
if not Location."Bin Mandatory" then
exit;
if Location."To-Job Bin Code" <> '' then
"Bin Code" := Location."To-Job Bin Code";
end;
local procedure GetLocation(LocationCode: Code[10])
begin
if Location.Code <> LocationCode then
Location.Get(LocationCode);
end;
local procedure MessageIfJobPlanningLineExist(ChangedFieldName: Text)
var
MessageText: Text;
begin
if JobPlanningLineExist() then begin
MessageText := StrSubstNo(PlanningLinesNotUpdatedMsg, ChangedFieldName);
MessageText := StrSubstNo(SplitMessageTxt, MessageText, UpdatePlanningLinesManuallyMsg);
Message(MessageText);
end;
end;
procedure JobPlanningLineExist() Result: Boolean
var
JobPlanningLine: Record "Job Planning Line";
begin
JobPlanningLine.SetRange("Job No.", "Job No.");
JobPlanningLine.SetRange("Job Task No.", "Job Task No.");
JobPlanningLine.SetRange(Type, JobPlanningLine.Type::Item);
Result := not JobPlanningLine.IsEmpty();
end;
procedure SalesJobLedgEntryExist() Result: Boolean
var
JobLedgerEntry: Record "Job Ledger Entry";
begin
JobLedgerEntry.SetRange("Job No.", "Job No.");
JobLedgerEntry.SetRange("Job Task No.", "Job Task No.");
JobLedgerEntry.SetRange("Entry Type", JobLedgerEntry."Entry Type"::Sale);
Result := not JobLedgerEntry.IsEmpty();
end;
procedure SalesLineExist() Result: Boolean
var
SalesLine: Record "Sales Line";
begin
if "Job No." = '' then
exit(false);
SalesLine.SetRange("Job No.", "Job No.");
SalesLine.SetRange("Job Task No.", "Job Task No.");
Result := not SalesLine.IsEmpty();
end;
local procedure InitLocation(Job: Record Job)
begin
"Location Code" := Job."Location Code";
"Bin Code" := Job."Bin Code";
end;
local procedure InitCustomer()
begin
if not Job.Get("Job No.") then
exit;
if Job."Task Billing Method" = Job."Task Billing Method"::"One customer" then
exit;
if "Job Task Type" <> "Job Task Type"::Posting then
exit;
SetHideValidationDialog(true);
if Job."Sell-to Customer No." <> '' then
Validate("Sell-to Customer No.", Job."Sell-to Customer No.");
if (Job."Sell-to Customer No." <> Job."Bill-to Customer No.") and (Job."Bill-to Customer No." <> '') then
Validate("Bill-to Customer No.", Job."Bill-to Customer No.");
end;
local procedure ClearCustomerData()
begin
if not Job.Get("Job No.") then
exit;
if Job."Task Billing Method" = Job."Task Billing Method"::"One customer" then
exit;
SetHideValidationDialog(true);
if "Sell-to Customer No." <> '' then
Validate("Sell-to Customer No.", '');
if ("Sell-to Customer No." <> "Bill-to Customer No.") and ("Bill-to Customer No." <> '') then
Validate("Bill-to Customer No.", '');
end;
local procedure BillToCustomerNoUpdated(var JobTask: Record "Job Task"; var xJobTask: Record "Job Task")
var
BillToCustomer: Record Customer;
begin
OnBeforeBillToCustomerNoUpdated(JobTask, xJobTask, CurrFieldNo);
CheckBillToCustomerAssosEntriesExist(JobTask, xJobTask);
if (xJobTask."Bill-to Customer No." <> '') and (not GetHideValidationDialog()) and GuiAllowed() then
if not Confirm(ConfirmChangeQst, false, BillToCustomerTxt) then begin
JobTask."Bill-to Customer No." := xJobTask."Bill-to Customer No.";
JobTask."Bill-to Name" := xJobTask."Bill-to Name";
exit;
end;
// Set sell-to first if it hasn't been set yet.
if (JobTask."Sell-to Customer No." = '') and (JobTask."Bill-to Customer No." <> '') then
Validate("Sell-to Customer No.", JobTask."Bill-to Customer No.");
if JobTask."Bill-to Customer No." <> '' then begin
BillToCustomer.Get(JobTask."Bill-to Customer No.");
JobTask."Bill-to Name" := BillToCustomer.Name;
JobTask."Bill-to Name 2" := BillToCustomer."Name 2";
JobTask."Bill-to Address" := BillToCustomer.Address;
JobTask."Bill-to Address 2" := BillToCustomer."Address 2";
JobTask."Bill-to City" := BillToCustomer.City;
JobTask."Bill-to Post Code" := BillToCustomer."Post Code";
JobTask."Bill-to County" := BillToCustomer.County;
JobTask."Bill-to Country/Region Code" := BillToCustomer."Country/Region Code";
JobTask."Payment Method Code" := BillToCustomer."Payment Method Code";
JobTask."Payment Terms Code" := BillToCustomer."Payment Terms Code";
Job.Get("Job No.");
if Job."Bill-to Customer No." = BillToCustomer."No." then
"Invoice Currency Code" := Job."Invoice Currency Code"
else
"Invoice Currency Code" := BillToCustomer."Currency Code";
JobTask."Language Code" := BillToCustomer."Language Code";
OnBillToCustomerNoUpdatedOnAfterCopyFieldsFromBillToCustomer(JobTask, xJobTask, Job, BillToCustomer);
GetCustomerContact(JobTask."Bill-to Customer No.", JobTask."Bill-to Contact No.", JobTask."Bill-to Contact");
CreateDefaultJobTaskDimensionsFromCustomer(JobTask."Bill-to Customer No.");
end else begin
JobTask."Bill-to Name" := '';
JobTask."Bill-to Name 2" := '';
JobTask."Bill-to Address" := '';
JobTask."Bill-to Address 2" := '';
JobTask."Bill-to City" := '';
JobTask."Bill-to Post Code" := '';
JobTask."Bill-to County" := '';
JobTask."Bill-to Country/Region Code" := '';
JobTask."Language Code" := '';
JobTask."Bill-to Contact" := '';
JobTask."Bill-to Contact No." := '';
JobTask."Payment Method Code" := '';
JobTask."Payment Terms Code" := '';
end;
if (xJobTask."Bill-to Customer No." <> '') and (JobTask."Bill-to Customer No." <> xJobTask."Bill-to Customer No.") then
UpdateCostPricesOnRelatedJobPlanningLines(JobTask);
OnAfterBillToCustomerNoUpdated(JobTask, xJobTask, BillToCustomer, CurrFieldNo);
end;
local procedure UpdateCostPricesOnRelatedJobPlanningLines(var JobTask: Record "Job Task")
var
JobPlanningLine: Record "Job Planning Line";
ConfirmManagement: Codeunit "Confirm Management";
ConfirmResult: Boolean;
IsHandled: Boolean;
begin
JobPlanningLine.SetRange("Job No.", JobTask."Job No.");
JobPlanningLine.SetRange("Job Task No.", JobTask."Job Task No.");
JobPlanningLine.SetFilter(Type, '<>%1', JobPlanningLine.Type::Text);
JobPlanningLine.SetFilter("No.", '<>%1', '');
if JobPlanningLine.IsEmpty() then
exit;
IsHandled := false;
OnUpdateCostPricesOnRelatedJobPlanningLinesOnBeforeConfirmUpdate(JobTask, ConfirmResult, IsHandled);
if not IsHandled then
ConfirmResult := ConfirmManagement.GetResponseOrDefault(UpdateCostPricesOnRelatedLinesQst, true);
if not ConfirmResult then
exit;
JobTask.Modify(true);
JobPlanningLine.FindSet(true);
repeat
JobPlanningLine."Line Amount" := 0;
JobPlanningLine.UpdateAllAmounts();
JobPlanningLine.Modify(true);
until JobPlanningLine.Next() = 0;
end;
local procedure CreateDefaultJobTaskDimensionsFromCustomer(BillToCustomerNo: Code[20])
var
JobTaskDim: Record "Job Task Dimension";
CustDefaultDimension: Record "Default Dimension";
TempJobDefaultDimension: Record "Default Dimension" temporary;
begin
JobTaskDim.SetRange("Job No.", Rec."Job No.");
JobTaskDim.SetRange("Job Task No.", Rec."Job Task No.");
if JobTaskDim.FindSet() then
repeat
TempJobDefaultDimension.Init();
TempJobDefaultDimension."Table ID" := Database::"Job Task";
TempJobDefaultDimension."No." := Rec."Job Task No.";
TempJobDefaultDimension."Dimension Code" := JobTaskDim."Dimension Code";
TempJobDefaultDimension."Dimension Value Code" := JobTaskDim."Dimension Value Code";
TempJobDefaultDimension.Insert();
until JobTaskDim.Next() = 0;
CustDefaultDimension.SetRange("Table ID", Database::Customer);
CustDefaultDimension.SetRange("No.", BillToCustomerNo);
if CustDefaultDimension.FindSet() then
repeat
if TempJobDefaultDimension.Get(Database::"Job Task", Rec."Job Task No.", CustDefaultDimension."Dimension Code") then begin
// Override existing dimension with customer dimension
TempJobDefaultDimension."Dimension Value Code" := CustDefaultDimension."Dimension Value Code";
TempJobDefaultDimension.Modify();
end else begin
TempJobDefaultDimension.Init();
TempJobDefaultDimension.TransferFields(CustDefaultDimension);
TempJobDefaultDimension."Table ID" := Database::"Job Task";
TempJobDefaultDimension."No." := Rec."Job Task No.";
TempJobDefaultDimension.Insert();
end;
until CustDefaultDimension.Next() = 0;
if not JobTaskDim.IsEmpty() then
JobTaskDim.DeleteAll();
DimMgt.InsertJobTaskDim(TempJobDefaultDimension, Rec."Job No.", Rec."Job Task No.", Rec."Global Dimension 1 Code", Rec."Global Dimension 2 Code");
end;
procedure ShouldSearchForCustomerByName(CustomerNo: Code[20]): Boolean
var
Customer: Record Customer;
begin
if CustomerNo = '' then
exit(true);
if not Customer.Get(CustomerNo) then
exit(true);
exit(not Customer."Disable Search by Name");
end;
local procedure SellToCustomerNoUpdated(var JobTask: Record "Job Task"; var xJobTask: Record "Job Task")
var
SellToCustomer: Record Customer;
begin
OnBeforeSellToCustomerNoUpdated(JobTask, xJobTask, CurrFieldNo);
if JobTask."Sell-to Customer No." <> '' then begin
SellToCustomer.Get(JobTask."Sell-to Customer No.");
SellToCustomer.CheckBlockedCustOnDocs(SellToCustomer, Enum::"Sales Document Type"::Order, false, false);
end;
CheckSellToCustomerAssosEntriesExist(JobTask, xJobTask);
if (xJobTask."Sell-to Customer No." <> '') and (not GetHideValidationDialog()) and GuiAllowed() then
if not Confirm(ConfirmChangeQst, false, SellToCustomerTxt) then begin
JobTask."Sell-to Customer No." := xJobTask."Sell-to Customer No.";
JobTask."Sell-to Customer Name" := xJobTask."Sell-to Customer Name";
exit;
end;
if JobTask."Sell-to Customer No." <> '' then begin
SellToCustomer.Get(JobTask."Sell-to Customer No.");
JobTask."Sell-to Customer Name" := SellToCustomer.Name;
JobTask."Sell-to Customer Name 2" := SellToCustomer."Name 2";
JobTask."Sell-to Address" := SellToCustomer.Address;
JobTask."Sell-to Address 2" := SellToCustomer."Address 2";
JobTask."Sell-to City" := SellToCustomer.City;
JobTask."Sell-to Post Code" := SellToCustomer."Post Code";
JobTask."Sell-to County" := SellToCustomer.County;
JobTask."Sell-to Country/Region Code" := SellToCustomer."Country/Region Code";
UpdateSellToContact(JobTask."Sell-to Customer No.");
end else begin
JobTask."Sell-to Customer Name" := '';
JobTask."Sell-to Customer Name 2" := '';
JobTask."Sell-to Address" := '';
JobTask."Sell-to Address 2" := '';
JobTask."Sell-to City" := '';
JobTask."Sell-to Post Code" := '';
JobTask."Sell-to County" := '';
JobTask."Sell-to Country/Region Code" := '';
JobTask."Sell-to Contact" := '';
JobTask."Sell-to Contact No." := '';
end;
if SellToCustomer."Bill-to Customer No." <> '' then
JobTask.Validate("Bill-to Customer No.", SellToCustomer."Bill-to Customer No.")
else
JobTask.Validate("Bill-to Customer No.", Rec."Sell-to Customer No.");
if
(xJobTask.ShipToNameEqualsSellToName() and xJobTask.ShipToAddressEqualsSellToAddress()) or
((xJobTask."Ship-to Code" <> '') and (xJobTask."Sell-to Customer No." <> JobTask."Sell-to Customer No."))
then
JobTask.SyncShipToWithSellTo();
OnAfterSellToCustomerNoUpdated(JobTask, xJobTask, SellToCustomer);
end;
protected procedure UpdateSellToContact(CustomerNo: Code[20])
begin
GetCustomerContact(CustomerNo, Rec."Sell-to Contact No.", Rec."Sell-to Contact");
end;
local procedure GetCustomerContact(CustomerNo: Code[20]; var ContactNo: Code[20]; var Contact: Text[100])
var
ContBusRel: Record "Contact Business Relation";
begin
if Cust.Get(CustomerNo) then begin
if Cust."Primary Contact No." <> '' then
ContactNo := Cust."Primary Contact No."
else begin
ContBusRel.Reset();
ContBusRel.SetCurrentKey("Link to Table", "No.");
ContBusRel.SetRange("Link to Table", ContBusRel."Link to Table"::Customer);
ContBusRel.SetRange("No.", CustomerNo);
if ContBusRel.FindFirst() then
ContactNo := ContBusRel."Contact No.";
end;
Contact := Cust.Contact;
end;
end;
local procedure CheckBillToCustomerAssosEntriesExist(var JobTask: Record "Job Task"; var xJobTask: Record "Job Task")
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCheckBillToCustomerAssosEntriesExist(JobTask, xJobTask, IsHandled);
if IsHandled then
exit;
if (JobTask."Bill-to Customer No." = '') or (JobTask."Bill-to Customer No." <> xJobTask."Bill-to Customer No.") then begin
if JobTask.SalesJobLedgEntryExist() then
Error(AssociatedEntriesExistErr, JobTask.FieldCaption("Bill-to Customer No."), JobTask.TableCaption);
if JobTask.SalesLineExist() then
Error(AssociatedEntriesExistErr, JobTask.FieldCaption("Bill-to Customer No."), JobTask.TableCaption);
end;
end;
local procedure CheckSellToCustomerAssosEntriesExist(var JobTask: Record "Job Task"; var xJobTask: Record "Job Task")
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCheckSellToCustomerAssosEntriesExist(JobTask, xJobTask, IsHandled);
if IsHandled then
exit;
if (JobTask."Sell-to Customer No." = '') or (JobTask."Sell-to Customer No." <> xJobTask."Sell-to Customer No.") then
if JobTask.SalesJobLedgEntryExist() then
Error(AssociatedEntriesExistErr, JobTask.FieldCaption("Sell-to Customer No."), JobTask.TableCaption);
end;
procedure BilltoContactLookup(): Boolean
var
ContactNo: Code[20];
begin
ContactNo := ContactLookup("Bill-to Customer No.", "Bill-to Contact No.");
if ContactNo <> '' then
Validate("Bill-to Contact No.", ContactNo);
exit(ContactNo <> '');
end;
local procedure ContactLookup(CustomerNo: Code[20]; ContactNo: Code[20]): Code[20]
begin
if (CustomerNo <> '') and Cont.Get(ContactNo) then
Cont.SetRange("Company No.", Cont."Company No.")
else
if Cust.Get(CustomerNo) then begin
if ContBusinessRelation.FindByRelation(ContBusinessRelation."Link to Table"::Customer, CustomerNo) then
Cont.SetRange("Company No.", ContBusinessRelation."Contact No.");
end else
Cont.SetFilter("Company No.", '<>%1', '''');
if ContactNo <> '' then
if Cont.Get(ContactNo) then;
if Page.RunModal(0, Cont) = Action::LookupOK then
exit(Cont."No.");
exit('');
end;
procedure LookupSellToCustomerName(var CustomerName: Text): Boolean
var
Customer: Record Customer;
LookupStateManager: Codeunit "Lookup State Manager";
RecVariant: Variant;
SearchCustomerName: Text;
begin
SearchCustomerName := CustomerName;
Customer.SetFilter("Date Filter", GetFilter("Posting Date Filter"));
if "Sell-to Customer No." <> '' then
Customer.Get("Sell-to Customer No.");
if Customer.SelectCustomer(Customer) then begin
if Rec."Sell-to Customer Name" = Customer.Name then
CustomerName := SearchCustomerName
else
CustomerName := Customer.Name;
RecVariant := Customer;
LookupStateManager.SaveRecord(RecVariant);
exit(true);
end;
end;
procedure SelltoCustomerNoOnAfterValidate(var JobTask: Record "Job Task"; var xJobTask: Record "Job Task")
begin
if JobTask.GetFilter("Sell-to Customer No.") = xJobTask."Sell-to Customer No." then
if JobTask."Sell-to Customer No." <> xJobTask."Sell-to Customer No." then
JobTask.SetRange("Sell-to Customer No.");
end;
local procedure UpdateBillToCust(ContactNo: Code[20])
begin
if Cont.Get(ContactNo) then begin
"Bill-to Contact No." := Cont."No.";
if Cont.Type = Cont.Type::Person then
"Bill-to Contact" := Cont.Name
else
if Cust.Get("Bill-to Customer No.") then
"Bill-to Contact" := Cust.Contact
else
"Bill-to Contact" := '';
end else begin
"Bill-to Contact" := '';
exit;
end;
if ContBusinessRelation.FindByContact(ContBusinessRelation."Link to Table"::Customer, Cont."Company No.") then begin
if "Bill-to Customer No." = '' then
Validate("Bill-to Customer No.", ContBusinessRelation."No.")
else
if "Bill-to Customer No." <> ContBusinessRelation."No." then
Error(ContactBusRelErr, Cont."No.", Cont.Name, "Bill-to Customer No.");
end else
Error(ContactBusRelMissingErr, Cont."No.", Cont.Name);
end;
local procedure ShipToCodeValidate()
var
ShipToAddress: Record "Ship-to Address";
begin
if not ((xRec."Ship-to Code" <> Rec."Ship-to Code") and (Rec."Ship-to Code" <> '')) then
exit;
if not ShipToAddress.Get(Rec."Sell-to Customer No.", Rec."Ship-to Code") then
exit;
Rec."Ship-to Name" := ShipToAddress.Name;
Rec."Ship-to Name 2" := ShipToAddress."Name 2";
Rec."Ship-to Address" := ShipToAddress.Address;
Rec."Ship-to Address 2" := ShipToAddress."Address 2";
Rec."Ship-to City" := ShipToAddress.City;
Rec."Ship-to County" := ShipToAddress.County;
Rec."Ship-to Post Code" := ShipToAddress."Post Code";
Rec."Ship-to Country/Region Code" := ShipToAddress."Country/Region Code";
Rec."Ship-to Contact" := ShipToAddress.Contact;
OnAfterShipToCodeValidate(Rec, ShipToAddress);
end;
local procedure UpdateSellToCust(ContactNo: Code[20])
var
Customer: Record Customer;
Contact: Record Contact;
ContactBusinessRelation: Record "Contact Business Relation";
ContactBusinessRelationFound: Boolean;
begin
if not Contact.Get(ContactNo) then begin
"Sell-to Contact" := '';
exit;
end;
"Sell-to Contact No." := Contact."No.";
if Contact.Type = Contact.Type::Person then
ContactBusinessRelationFound := ContactBusinessRelation.FindByContact(ContactBusinessRelation."Link to Table"::Customer, Contact."No.");
if not ContactBusinessRelationFound then
ContactBusinessRelationFound := ContactBusinessRelation.FindByContact(ContactBusinessRelation."Link to Table"::Customer, Contact."Company No.");
if not ContactBusinessRelationFound then
Error(ContactBusRelMissingErr, Contact."No.", Contact.Name);
CheckCustomerContactRelation(Contact, "Sell-to Customer No.", ContactBusinessRelation."No.");
if "Sell-to Customer No." = '' then
Validate("Sell-to Customer No.", ContactBusinessRelation."No.");
UpdateSellToCustomerContact(Customer, Contact);
if ("Sell-to Customer No." = "Bill-to Customer No.") or ("Bill-to Customer No." = '') then
Validate("Bill-to Contact No.", "Sell-to Contact No.");
end;
local procedure CheckCustomerContactRelation(Contact: Record Contact; CustomerNo: Code[20]; ContBusinessRelationNo: Code[20])
begin
if (CustomerNo <> '') and (CustomerNo <> ContBusinessRelationNo) then
Error(ContactBusRelErr, Contact."No.", Contact.Name, CustomerNo);
end;
local procedure UpdateSellToCustomerContact(Customer: Record Customer; Contact: Record Contact)
begin
if (Contact.Type = Contact.Type::Company) and Customer.Get("Sell-to Customer No.") then
"Sell-to Contact" := Customer.Contact
else
if Contact.Type = Contact.Type::Company then
"Sell-to Contact" := ''
else
"Sell-to Contact" := Contact.Name;
end;
local procedure UpdateShipToContact()
begin
if not (CurrFieldNo in [FieldNo("Sell-to Contact"), FieldNo("Sell-to Contact No.")]) then
exit;
Validate("Ship-to Contact", "Sell-to Contact");
end;
procedure SelltoContactLookup(): Boolean
var
ContactNo: Code[20];
begin
ContactNo := ContactLookup("Sell-to Customer No.", "Sell-to Contact No.");
if ContactNo <> '' then
Validate("Sell-to Contact No.", ContactNo);
exit(ContactNo <> '');
end;
procedure ShipToNameEqualsSellToName(): Boolean
begin
exit(
(Rec."Ship-to Name" = Rec."Sell-to Customer Name") and
(Rec."Ship-to Name 2" = Rec."Sell-to Customer Name 2")
);
end;
procedure BillToAddressEqualsSellToAddress(): Boolean
begin
if ("Sell-to Address" = "Bill-to Address") and
("Sell-to Address 2" = "Bill-to Address 2") and
("Sell-to City" = "Bill-to City") and
("Sell-to County" = "Bill-to County") and
("Sell-to Post Code" = "Bill-to Post Code") and
("Sell-to Country/Region Code" = "Bill-to Country/Region Code") and
("Sell-to Contact No." = "Bill-to Contact No.") and
("Sell-to Contact" = "Bill-to Contact")
then
exit(true);
exit(false);
end;
procedure ShipToAddressEqualsSellToAddress() Result: Boolean
begin
Result :=
("Sell-to Address" = "Ship-to Address") and
("Sell-to Address 2" = "Ship-to Address 2") and
("Sell-to City" = "Ship-to City") and
("Sell-to County" = "Ship-to County") and
("Sell-to Post Code" = "Ship-to Post Code") and
("Sell-to Country/Region Code" = "Ship-to Country/Region Code") and
("Sell-to Contact" = "Ship-to Contact");
OnAfterShipToAddressEqualsSellToAddress(Rec, Result);
end;
procedure SyncShipToWithSellTo()
begin
Rec."Ship-to Name" := Rec."Sell-to Customer Name";
Rec."Ship-to Name 2" := Rec."Sell-to Customer Name 2";
Rec."Ship-to Address" := Rec."Sell-to Address";
Rec."Ship-to Address 2" := Rec."Sell-to Address 2";
Rec."Ship-to City" := Rec."Sell-to City";
Rec."Ship-to County" := Rec."Sell-to County";
Rec."Ship-to Post Code" := Rec."Sell-to Post Code";
Rec."Ship-to Country/Region Code" := Rec."Sell-to Country/Region Code";
Rec."Ship-to Contact" := Rec."Sell-to Contact";
Rec."Ship-to Code" := '';
OnAfterSyncShipToWithSellTo(Rec);
end;
procedure JobLedgEntryExist() Result: Boolean
var
JobLedgerEntry: Record "Job Ledger Entry";
begin
JobLedgerEntry.SetRange("Job No.", "Job No.");
JobLedgerEntry.SetRange("Job Task No.", "Job Task No.");
Result := not JobLedgerEntry.IsEmpty();
end;
procedure JobPlanLineExist() Result: Boolean
var
JobPlanningLine: Record "Job Planning Line";
begin
JobPlanningLine.Init();
JobPlanningLine.SetRange("Job No.", "Job No.");
JobPlanningLine.SetRange("Job Task No.", "Job Task No.");
Result := not JobPlanningLine.IsEmpty();
end;
procedure SendProfile(var DocumentSendingProfile: Record "Document Sending Profile")
var
ReportSelections: Record "Report Selections";
ReportDistributionMgt: Codeunit "Report Distribution Management";
begin
DocumentSendingProfile.Send(
ReportSelections.Usage::"Job Task Quote".AsInteger(), Rec, "Job Task No.", "Bill-to Customer No.",
ReportDistributionMgt.GetFullDocumentTypeText(Rec), FieldNo("Bill-to Customer No."), FieldNo("Job Task No."));
end;
procedure SetHideValidationDialog(NewHideValidationDialog: Boolean)
begin
HideValidationDialog := NewHideValidationDialog;
end;
procedure GetHideValidationDialog(): Boolean
begin
exit(HideValidationDialog);
end;
procedure SuspendDeletionCheck(Suspend: Boolean)
begin
CalledFromHeader := Suspend;
end;
[IntegrationEvent(false, false)]
local procedure OnAfterApplyPurchaseLineFilters(var JobTask: Record "Job Task"; var PurchaseLine: Record "Purchase Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterValidateShortcutDimCode(var JobTask: Record "Job Task"; var xJobTask: Record "Job Task"; FieldNumber: Integer; var ShortcutDimCode: Code[20])
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterOnInsert(var JobTask: Record "Job Task"; var xJobTask: Record "Job Task")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeOnInsert(var JobTask: Record "Job Task"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeOnModify(var JobTask: Record "Job Task"; xJobTask: Record "Job Task"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeValidateJobTaskNo(var JobTask: Record "Job Task"; var xJobTask: Record "Job Task"; FieldNumber: Integer; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeValidateJobPostingGroup(var JobTask: Record "Job Task"; xJobTask: Record "Job Task"; CallingFieldNo: Integer; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeValidateShortcutDimCode(var JobTask: Record "Job Task"; var xJobTask: Record "Job Task"; FieldNumber: Integer; var ShortcutDimCode: Code[20]; JobTask2: Record "Job Task"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInitWIPFieldsOnBeforeModify(var JobTask: Record "Job Task")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnJobLedgEntriesExistOnAfterSetFilter(var JobTask: Record "Job Task"; var JobLedgerEntry: Record "Job Ledger Entry")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCaption(JobTask: Record "Job Task"; var IsHandled: Boolean; var Result: Text)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterShipToAddressEqualsSellToAddress(var JobTask: Record "Job Task"; var Result: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterSyncShipToWithSellTo(var JobTask: Record "Job Task")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnUpdateCostPricesOnRelatedJobPlanningLinesOnBeforeConfirmUpdate(var JobTask: Record "Job Task"; var ConfirmResult: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCheckSellToCustomerAssosEntriesExist(var JobTask: Record "Job Task"; xJobTask: Record "Job Task"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCheckBillToCustomerAssosEntriesExist(var JobTask: Record "Job Task"; xJobTask: Record "Job Task"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeSellToCustomerNoUpdated(var JobTask: Record "Job Task"; var xJobTask: Record "Job Task"; CallingFieldNo: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterSellToCustomerNoUpdated(var JobTask: Record "Job Task"; xJobTask: Record "Job Task"; var SellToCustomer: Record Customer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterShipToCodeValidate(var JobTask: Record "Job Task"; var ShipToAddress: Record "Ship-to Address")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeBillToCustomerNoUpdated(var JobTask: Record "Job Task"; xJobTask: Record "Job Task"; CallingFieldNo: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBillToCustomerNoUpdatedOnAfterCopyFieldsFromBillToCustomer(var JobTask: Record "Job Task"; xJobTask: Record "Job Task"; var Job: Record Job; var BillToCustomer: Record Customer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterBillToCustomerNoUpdated(var JobTask: Record "Job Task"; xJobTask: Record "Job Task"; var BillToCustomer: Record Customer; CallingFieldNo: Integer)
begin
end;
}