Page 1015 Job Planning Lines Part
- App
- Base Application
- Namespace
- Microsoft.Projects.Project.Planning
- Versions
- 24-28
- Source table
- 1003
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Projects/Project/Planning/JobPlanningLinesPart.Page.al980 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.Planning;
using Microsoft.Foundation.ExtendedText;
using Microsoft.Inventory.Availability;
using Microsoft.Inventory.BOM;
using Microsoft.Inventory.Item;
using Microsoft.Inventory.Location;
using Microsoft.Pricing.Calculation;
using Microsoft.Projects.Project.Job;
using Microsoft.Projects.Project.Journal;
using System.Email;
using System.Security.User;
page 1015 "Job Planning Lines Part"
{
AutoSplitKey = true;
Caption = 'Project Planning Lines';
DataCaptionExpression = Rec.Caption();
PageType = ListPart;
SourceTable = "Job Planning Line";
layout
{
area(content)
{
repeater(Control1)
{
ShowCaption = false;
field("Job No."; Rec."Job No.")
{
ApplicationArea = All;
Visible = false;
}
field("Job Task No."; Rec."Job Task No.")
{
ApplicationArea = All;
Visible = JobTaskNoVisible;
}
field("Line Type"; Rec."Line Type")
{
ApplicationArea = Jobs;
}
field("Usage Link"; Rec."Usage Link")
{
ApplicationArea = Jobs;
Visible = false;
trigger OnValidate()
begin
UsageLinkOnAfterValidate();
end;
}
field("Planning Date"; Rec."Planning Date")
{
ApplicationArea = Jobs;
Editable = PlanningDateEditable;
trigger OnValidate()
begin
PlanningDateOnAfterValidate();
end;
}
field("Planned Delivery Date"; Rec."Planned Delivery Date")
{
ApplicationArea = Jobs;
}
field("Currency Date"; Rec."Currency Date")
{
ApplicationArea = Jobs;
Editable = CurrencyDateEditable;
Visible = false;
}
field("Document No."; Rec."Document No.")
{
ApplicationArea = Jobs;
Editable = DocumentNoEditable;
}
field("Line No."; Rec."Line No.")
{
ApplicationArea = Jobs;
Visible = false;
}
field(Type; Rec.Type)
{
ApplicationArea = Jobs;
Editable = TypeEditable;
trigger OnValidate()
begin
NoOnAfterValidate();
end;
}
field("No."; Rec."No.")
{
ApplicationArea = Jobs;
Editable = NoEditable;
trigger OnValidate()
var
Item: Record "Item";
begin
NoOnAfterValidate();
if Rec."Variant Code" = '' then
VariantCodeMandatory := Item.IsVariantMandatory(Rec.Type = Rec.Type::Item, Rec."No.");
end;
}
field(Description; Rec.Description)
{
ApplicationArea = Jobs;
Editable = DescriptionEditable;
}
field("Description 2"; Rec."Description 2")
{
ApplicationArea = Jobs;
Visible = false;
}
field("Price Calculation Method"; Rec."Price Calculation Method")
{
Visible = ExtendedPriceEnabled;
ApplicationArea = Basic, Suite;
}
field("Cost Calculation Method"; Rec."Cost Calculation Method")
{
Visible = ExtendedPriceEnabled;
ApplicationArea = Basic, Suite;
}
field("Gen. Bus. Posting Group"; Rec."Gen. Bus. Posting Group")
{
ApplicationArea = Jobs;
Visible = false;
}
field("Gen. Prod. Posting Group"; Rec."Gen. Prod. Posting Group")
{
ApplicationArea = Jobs;
Visible = false;
}
field("Variant Code"; Rec."Variant Code")
{
ApplicationArea = Planning;
Editable = VariantCodeEditable;
Visible = false;
ShowMandatory = VariantCodeMandatory;
trigger OnValidate()
var
Item: Record "Item";
begin
VariantCodeOnAfterValidate();
if Rec."Variant Code" = '' then
VariantCodeMandatory := Item.IsVariantMandatory(Rec.Type = Rec.Type::Item, Rec."No.");
end;
}
field("Location Code"; Rec."Location Code")
{
ApplicationArea = Location;
Editable = LocationCodeEditable;
Visible = false;
trigger OnValidate()
begin
LocationCodeOnAfterValidate();
end;
}
field("Bin Code"; Rec."Bin Code")
{
ApplicationArea = Warehouse;
Editable = BinCodeEditable;
Visible = false;
trigger OnValidate()
begin
BinCodeOnAfterValidate();
end;
}
field("Work Type Code"; Rec."Work Type Code")
{
ApplicationArea = Jobs;
Editable = WorkTypeCodeEditable;
Visible = false;
}
field("Unit of Measure Code"; Rec."Unit of Measure Code")
{
ApplicationArea = Jobs;
Editable = UnitOfMeasureCodeEditable;
Visible = false;
trigger OnValidate()
begin
UnitofMeasureCodeOnAfterValidate();
end;
}
field(ReserveName; Rec.Reserve)
{
ApplicationArea = Reservation;
Visible = false;
trigger OnValidate()
begin
ReserveOnAfterValidate();
end;
}
field(Quantity; Rec.Quantity)
{
ApplicationArea = Jobs;
trigger OnValidate()
begin
QuantityOnAfterValidate();
end;
}
field("Qty. to Assemble"; Rec."Qty. to Assemble")
{
ApplicationArea = Assembly;
BlankZero = true;
Visible = true;
trigger OnDrillDown()
begin
Rec.ShowAsmToJobPlanningLines();
end;
trigger OnValidate()
begin
QtyToAsmOnAfterValidate();
end;
}
field("Reserved Quantity"; Rec."Reserved Quantity")
{
ApplicationArea = Reservation;
Visible = false;
}
field("Quantity (Base)"; Rec."Quantity (Base)")
{
ApplicationArea = Jobs;
ToolTip = 'Specifies the quantity expressed in the base units of measure.';
Visible = false;
}
field("Remaining Qty."; Rec."Remaining Qty.")
{
ApplicationArea = Jobs;
Visible = false;
}
field("Direct Unit Cost (LCY)"; Rec."Direct Unit Cost (LCY)")
{
ApplicationArea = Jobs;
Editable = false;
ToolTip = 'Specifies the cost, in the local currency, of one unit of the selected item or resource.';
Visible = false;
}
field("Unit Cost"; Rec."Unit Cost")
{
ApplicationArea = Jobs;
Editable = UnitCostEditable;
}
field("Unit Cost (LCY)"; Rec."Unit Cost (LCY)")
{
ApplicationArea = Jobs;
ToolTip = 'Specifies the cost, in LCY, of one unit of the item or resource on the line.';
Visible = false;
}
field("Total Cost"; Rec."Total Cost")
{
ApplicationArea = Jobs;
}
field("Remaining Total Cost"; Rec."Remaining Total Cost")
{
ApplicationArea = Jobs;
Visible = false;
}
field("Total Cost (LCY)"; Rec."Total Cost (LCY)")
{
ApplicationArea = Jobs;
ToolTip = 'Specifies the total cost for the planning line. The amount is in the local currency.';
Visible = false;
}
field("Remaining Total Cost (LCY)"; Rec."Remaining Total Cost (LCY)")
{
ApplicationArea = Jobs;
ToolTip = 'Specifies the remaining total cost (LCY) for the planning line. The amount is in the local currency.';
Visible = false;
}
field("Unit Price"; Rec."Unit Price")
{
ApplicationArea = Jobs;
Editable = UnitPriceEditable;
}
field("Unit Price (LCY)"; Rec."Unit Price (LCY)")
{
ApplicationArea = Jobs;
ToolTip = 'Specifies the price, in LCY, of one unit of the item or resource. You can enter a price manually or have it entered according to the Price/Profit Calculation field on the related card.';
Visible = false;
}
field("Line Amount"; Rec."Line Amount")
{
ApplicationArea = Jobs;
Editable = LineAmountEditable;
}
field("Remaining Line Amount"; Rec."Remaining Line Amount")
{
ApplicationArea = Jobs;
Visible = false;
}
field("Line Amount (LCY)"; Rec."Line Amount (LCY)")
{
ApplicationArea = Jobs;
ToolTip = 'Specifies the amount in the local currency that will be posted to the project ledger.';
Visible = false;
}
field("Remaining Line Amount (LCY)"; Rec."Remaining Line Amount (LCY)")
{
ApplicationArea = Jobs;
ToolTip = 'Specifies the amount in the local currency that will be posted to the project ledger.';
Visible = false;
}
field("Line Discount Amount"; Rec."Line Discount Amount")
{
ApplicationArea = Jobs;
Editable = LineDiscountAmountEditable;
Visible = false;
}
field("Line Discount %"; Rec."Line Discount %")
{
ApplicationArea = Jobs;
Editable = LineDiscountPctEditable;
Visible = false;
}
field("Total Price"; Rec."Total Price")
{
ApplicationArea = Jobs;
Visible = false;
}
field("Total Price (LCY)"; Rec."Total Price (LCY)")
{
ApplicationArea = Jobs;
ToolTip = 'Specifies the total price on the planning line. The total price is in the local currency.';
Visible = false;
}
field("Qty. Posted"; Rec."Qty. Posted")
{
ApplicationArea = Jobs;
Visible = false;
}
field("Qty. to Transfer to Journal"; Rec."Qty. to Transfer to Journal")
{
ApplicationArea = Jobs;
}
field("Posted Total Cost"; Rec."Posted Total Cost")
{
ApplicationArea = Jobs;
Visible = false;
}
field("Posted Total Cost (LCY)"; Rec."Posted Total Cost (LCY)")
{
ApplicationArea = Jobs;
ToolTip = 'Specifies the total cost (LCY) that has been posted to the project ledger, if the Usage Link check box has been selected.';
Visible = false;
}
field("Posted Line Amount"; Rec."Posted Line Amount")
{
ApplicationArea = Jobs;
Visible = false;
}
field("Posted Line Amount (LCY)"; Rec."Posted Line Amount (LCY)")
{
ApplicationArea = Jobs;
ToolTip = 'Specifies the amount in the local currency that has been posted to the project ledger. This field is only filled in if the Apply Usage Link check box selected on the project card.';
Visible = false;
}
field("Qty. Transferred to Invoice"; Rec."Qty. Transferred to Invoice")
{
ApplicationArea = Jobs;
Visible = false;
trigger OnDrillDown()
begin
Rec.DrillDownJobInvoices();
end;
}
field("Qty. to Transfer to Invoice"; Rec."Qty. to Transfer to Invoice")
{
ApplicationArea = Jobs;
Visible = false;
}
field("Qty. Invoiced"; Rec."Qty. Invoiced")
{
ApplicationArea = Jobs;
Visible = false;
trigger OnDrillDown()
begin
Rec.DrillDownJobInvoices();
end;
}
field("Qty. to Invoice"; Rec."Qty. to Invoice")
{
ApplicationArea = Jobs;
Visible = false;
}
field("Invoiced Amount (LCY)"; Rec."Invoiced Amount (LCY)")
{
ApplicationArea = Jobs;
ToolTip = 'Specifies, in local currency, the sales amount that was invoiced for this planning line.';
trigger OnDrillDown()
begin
Rec.DrillDownJobInvoices();
end;
}
field("Invoiced Cost Amount (LCY)"; Rec."Invoiced Cost Amount (LCY)")
{
ApplicationArea = Jobs;
ToolTip = 'Specifies, in the local currency, the cost amount that was invoiced for this planning line.';
Visible = false;
trigger OnDrillDown()
begin
Rec.DrillDownJobInvoices();
end;
}
field("User ID"; Rec."User ID")
{
ApplicationArea = Jobs;
Visible = false;
trigger OnDrillDown()
var
UserMgt: Codeunit "User Management";
begin
UserMgt.DisplayUserInformation(Rec."User ID");
end;
}
field("Serial No."; Rec."Serial No.")
{
ApplicationArea = ItemTracking;
Visible = false;
}
field("Lot No."; Rec."Lot No.")
{
ApplicationArea = ItemTracking;
Visible = false;
}
field("Job Contract Entry No."; Rec."Job Contract Entry No.")
{
ApplicationArea = Jobs;
Visible = false;
}
field("Ledger Entry Type"; Rec."Ledger Entry Type")
{
ApplicationArea = Jobs;
Visible = false;
}
field("Ledger Entry No."; Rec."Ledger Entry No.")
{
ApplicationArea = Jobs;
Visible = false;
}
field("System-Created Entry"; Rec."System-Created Entry")
{
ApplicationArea = Jobs;
Visible = false;
}
field(Overdue; Rec.Overdue())
{
ApplicationArea = Jobs;
Caption = 'Overdue';
Editable = false;
ToolTip = 'Specifies that the project is overdue. ';
Visible = false;
}
field("Qty. Picked"; Rec."Qty. Picked")
{
ApplicationArea = Warehouse;
Visible = false;
}
field("Qty. Picked (Base)"; Rec."Qty. Picked (Base)")
{
ApplicationArea = Warehouse;
ToolTip = 'Specifies the base quantity of the item you have picked for the project planning line.';
Visible = false;
}
field("Contract Line"; Rec."Contract Line")
{
ApplicationArea = Warehouse;
Visible = false;
}
}
}
}
actions
{
area(processing)
{
group("F&unctions")
{
Caption = 'F&unctions';
Image = "Action";
action("&Open Job Journal")
{
ApplicationArea = Jobs;
Caption = '&Open Project Journal';
Image = Journals;
RunObject = Page "Job Journal";
RunPageLink = "Job No." = field("Job No."),
"Job Task No." = field("Job Task No.");
ToolTip = 'Open the project journal, for example, to post usage for a project.';
}
group("Item Availability by")
{
Caption = 'Item Availability by';
Image = ItemAvailability;
action("Event")
{
ApplicationArea = Basic, Suite;
Caption = 'Event';
Image = "Event";
ToolTip = 'View how the actual and the projected available balance of an item will develop over time according to supply and demand events.';
trigger OnAction()
begin
JobPlanningAvailabilityMgt.ShowItemAvailabilityFromJobPlanningLines(Rec, "Item Availability Type"::"Event")
end;
}
action(Period)
{
ApplicationArea = Basic, Suite;
Caption = 'Period';
Image = Period;
ToolTip = 'Show the projected quantity of the item over time according to time periods, such as day, week, or month.';
trigger OnAction()
begin
JobPlanningAvailabilityMgt.ShowItemAvailabilityFromJobPlanningLines(Rec, "Item Availability Type"::Period)
end;
}
action("Variant")
{
ApplicationArea = Planning;
Caption = 'Variant';
Image = ItemVariant;
ToolTip = 'View or edit the item''s variants. Instead of setting up each color of an item as a separate item, you can set up the various colors as variants of the item.';
trigger OnAction()
begin
JobPlanningAvailabilityMgt.ShowItemAvailabilityFromJobPlanningLines(Rec, "Item Availability Type"::Variant)
end;
}
action(UnitOfMeasure)
{
ApplicationArea = Basic, Suite;
Caption = 'Unit of Measure';
Image = UnitOfMeasure;
ToolTip = 'View the item''s availability by a unit of measure.';
trigger OnAction()
begin
JobPlanningAvailabilityMgt.ShowItemAvailabilityFromJobPlanningLines(Rec, "Item Availability Type"::UOM);
end;
}
action(Location)
{
AccessByPermission = TableData Location = R;
ApplicationArea = Location;
Caption = 'Location';
Image = Warehouse;
ToolTip = 'View the actual and projected quantity of the item per location.';
trigger OnAction()
begin
JobPlanningAvailabilityMgt.ShowItemAvailabilityFromJobPlanningLines(Rec, "Item Availability Type"::Location)
end;
}
action(Lot)
{
ApplicationArea = ItemTracking;
Caption = 'Lot';
Image = LotInfo;
RunObject = Page "Item Availability by Lot No.";
RunPageLink = "No." = field("No."),
"Location Filter" = field("Location Code"),
"Variant Filter" = field("Variant Code");
ToolTip = 'View the current and projected quantity of the item in each lot.';
}
action("BOM Level")
{
AccessByPermission = TableData "BOM Buffer" = R;
ApplicationArea = Assembly;
Caption = 'BOM Level';
Image = BOMLevel;
ToolTip = 'View availability figures for items on bills of materials that show how many units of a parent item you can make based on the availability of child items.';
trigger OnAction()
begin
JobPlanningAvailabilityMgt.ShowItemAvailabilityFromJobPlanningLines(Rec, "Item Availability Type"::BOM)
end;
}
}
separator(Action16)
{
}
action("Sales &Invoices/Credit Memos")
{
ApplicationArea = Jobs;
Caption = 'Sales &Invoices/Credit Memos';
Ellipsis = true;
Image = GetSourceDoc;
ToolTip = 'View sales invoices or sales credit memos that are related to the selected project.';
trigger OnAction()
begin
JobCreateInvoice.GetJobPlanningLineInvoices(Rec);
end;
}
separator(Action123)
{
}
action(Reserve)
{
ApplicationArea = Reservation;
Caption = '&Reserve';
Ellipsis = true;
Image = Reserve;
ToolTip = 'Reserve one or more units of the item on the project planning line, either from inventory or from incoming supply.';
trigger OnAction()
begin
Rec.ShowReservation();
end;
}
action("Order &Tracking")
{
ApplicationArea = ItemTracking;
Caption = 'Order &Tracking';
Image = OrderTracking;
ToolTip = 'Tracks the connection of a supply to its corresponding demand. This can help you find the original demand that created a specific production order or purchase order.';
trigger OnAction()
begin
Rec.ShowTracking();
end;
}
action("Insert Ext. Texts")
{
AccessByPermission = TableData "Extended Text Header" = R;
ApplicationArea = Basic, Suite;
Caption = 'Insert &Ext. Texts';
Image = Text;
ToolTip = 'Insert the extended item description that is set up for the item that is being processed on the line.';
trigger OnAction()
begin
this.InsertExtendedText(true);
end;
}
action(ExplodeBOM_Functions)
{
AccessByPermission = TableData "BOM Component" = R;
ApplicationArea = Suite;
Caption = 'E&xplode BOM';
Image = ExplodeBOM;
ToolTip = 'Add a line for each component on the bill of materials for the selected item. For example, this is useful for selling the parent item as a kit. CAUTION: The line for the parent item will be deleted and only its description will display. To undo this action, delete the component lines and add a line for the parent item again.';
trigger OnAction()
begin
ExplodeBOM();
end;
}
action(SelectMultiItems)
{
AccessByPermission = TableData Item = R;
ApplicationArea = Basic, Suite;
Caption = 'Select items';
Image = NewItem;
Ellipsis = true;
ToolTip = 'Add two or more items from the full list of available items.';
trigger OnAction()
begin
Rec.SelectMultipleItems();
end;
}
group("Assemble to Order")
{
Caption = 'Assemble to Order';
Image = AssemblyBOM;
action(AssembleToOrderLines)
{
AccessByPermission = TableData "BOM Component" = R;
ApplicationArea = Assembly;
Image = AssemblyBOM;
Caption = 'Assemble-to-Order Lines';
ToolTip = 'View any linked assembly order lines if the documents represents an assemble-to-order project.';
trigger OnAction()
begin
Rec.ShowAsmToJobPlanningLines();
end;
}
}
action(CreatePurchaseOrder)
{
ApplicationArea = Suite;
Caption = 'Create Purchase Order';
Image = Document;
ToolTip = 'Create new purchase order to buy the items that are required by planning lines in this project task, deducting any quantity that is already available.';
trigger OnAction()
var
Job: Record Job;
JobTask: Record "Job Task";
PurchaseDocFromJob: Codeunit "Purchase Doc. From Job";
begin
Job.Get(Rec."Job No.");
JobTask.Get(Rec."Job No.", Rec."Job Task No.");
PurchaseDocFromJob.CreateContractEntryNoFilter(JobTask);
PurchaseDocFromJob.CreatePurchaseOrder(Job);
end;
}
}
}
}
trigger OnAfterGetCurrRecord()
var
Item: Record Item;
begin
SetEditable(IsTypeFieldEditable());
if Rec."Variant Code" = '' then
VariantCodeMandatory := Item.IsVariantMandatory(Rec.Type = Rec.Type::Item, Rec."No.");
end;
trigger OnInit()
var
EmailAccount: Codeunit "Email Account";
PriceCalculationMgt: Codeunit "Price Calculation Mgt.";
begin
UnitCostEditable := true;
LineAmountEditable := true;
LineDiscountPctEditable := true;
LineDiscountAmountEditable := true;
UnitPriceEditable := true;
WorkTypeCodeEditable := true;
LocationCodeEditable := true;
BinCodeEditable := true;
VariantCodeEditable := true;
UnitOfMeasureCodeEditable := true;
DescriptionEditable := true;
NoEditable := true;
TypeEditable := true;
DocumentNoEditable := true;
CurrencyDateEditable := true;
PlanningDateEditable := true;
JobTaskNoVisible := true;
CanSendToCalendar := EmailAccount.IsAnyAccountRegistered();
ExtendedPriceEnabled := PriceCalculationMgt.IsExtendedPriceCalculationEnabled();
end;
trigger OnModifyRecord(): Boolean
begin
if Rec."System-Created Entry" then
if Confirm(Text001, false) then
Rec."System-Created Entry" := false
else
Error('');
end;
trigger OnNewRecord(BelowxRec: Boolean)
begin
Rec.SetUpNewLine(xRec);
end;
trigger OnOpenPage()
var
Job: Record Job;
begin
if Rec.GetFilter("Job No.") <> '' then begin
Rec.CopyFilter("Job No.", Job."No.");
if Job.FindFirst() then
CurrPage.Editable(not (Job.Blocked = Job.Blocked::All));
end;
end;
var
JobCreateInvoice: Codeunit "Job Create-Invoice";
JobPlanningAvailabilityMgt: Codeunit "Job Planning Availability Mgt.";
#pragma warning disable AA0074
Text001: Label 'This project planning line was automatically generated. Do you want to continue?';
#pragma warning restore AA0074
ExtendedPriceEnabled: Boolean;
VariantCodeMandatory: Boolean;
protected var
JobTaskNoVisible: Boolean;
PlanningDateEditable: Boolean;
CurrencyDateEditable: Boolean;
DocumentNoEditable: Boolean;
TypeEditable: Boolean;
NoEditable: Boolean;
DescriptionEditable: Boolean;
UnitOfMeasureCodeEditable: Boolean;
VariantCodeEditable: Boolean;
LocationCodeEditable: Boolean;
BinCodeEditable: Boolean;
WorkTypeCodeEditable: Boolean;
UnitPriceEditable: Boolean;
LineDiscountAmountEditable: Boolean;
LineDiscountPctEditable: Boolean;
LineAmountEditable: Boolean;
UnitCostEditable: Boolean;
CanSendToCalendar: Boolean;
protected procedure SetEditable(Edit: Boolean)
begin
PlanningDateEditable := Edit;
CurrencyDateEditable := Edit;
DocumentNoEditable := Edit;
TypeEditable := Edit;
NoEditable := Edit;
DescriptionEditable := Edit;
UnitOfMeasureCodeEditable := Edit;
VariantCodeEditable := Edit;
LocationCodeEditable := Edit;
BinCodeEditable := Edit;
WorkTypeCodeEditable := Edit;
UnitPriceEditable := Edit;
LineDiscountAmountEditable := Edit;
LineDiscountPctEditable := Edit;
LineAmountEditable := Edit;
UnitCostEditable := Edit;
OnAfterSetEditable(Edit, Rec);
end;
procedure SetJobTaskNoVisible(NewJobTaskNoVisible: Boolean)
begin
JobTaskNoVisible := NewJobTaskNoVisible;
end;
local procedure PerformAutoReserve()
begin
if (Rec.Reserve = Rec.Reserve::Always) and
(Rec."Remaining Qty. (Base)" <> 0)
then begin
CurrPage.SaveRecord();
Rec.AutoReserve();
CurrPage.Update(false);
end;
end;
protected procedure UsageLinkOnAfterValidate()
begin
PerformAutoReserve();
end;
protected procedure PlanningDateOnAfterValidate()
begin
if Rec."Planning Date" <> xRec."Planning Date" then
PerformAutoReserve();
end;
protected procedure NoOnAfterValidate()
begin
if Rec."No." <> xRec."No." then
PerformAutoReserve();
this.InsertExtendedText(false);
OnAfterNoOnAfterValidate(Rec);
end;
protected procedure VariantCodeOnAfterValidate()
begin
if Rec."Variant Code" <> xRec."Variant Code" then
PerformAutoReserve();
end;
protected procedure LocationCodeOnAfterValidate()
begin
if Rec."Location Code" <> xRec."Location Code" then
PerformAutoReserve();
end;
protected procedure BinCodeOnAfterValidate()
begin
if Rec."Bin Code" <> xRec."Bin Code" then
PerformAutoReserve();
end;
protected procedure UnitofMeasureCodeOnAfterValidate()
begin
PerformAutoReserve();
end;
protected procedure ReserveOnAfterValidate()
begin
PerformAutoReserve();
end;
protected procedure QtyToAsmOnAfterValidate()
begin
PerformAutoReserve();
end;
protected procedure QuantityOnAfterValidate()
begin
PerformAutoReserve();
if (Rec.Type = Rec.Type::Item) and (Rec.Quantity <> xRec.Quantity) then
CurrPage.Update(true);
end;
protected procedure InsertExtendedText(Unconditionally: Boolean)
var
TransferExtendedText: Codeunit "Transfer Extended Text";
begin
if TransferExtendedText.JobCheckIfAnyExtText(Rec, Unconditionally) then begin
CurrPage.SaveRecord();
Commit();
TransferExtendedText.InsertJobExtText(Rec);
end;
if TransferExtendedText.MakeUpdate() then
CurrPage.Update(true);
end;
local procedure IsTypeFieldEditable(): Boolean
var
JobPlanningLineInvoice: Record "Job Planning Line Invoice";
IsHandled, TypeFieldEditable : Boolean;
begin
TypeFieldEditable := false;
IsHandled := false;
if Rec.Type = Rec.Type::Text then begin
JobPlanningLineInvoice.SetRange("Job No.", Rec."Job No.");
JobPlanningLineInvoice.SetRange("Job Task No.", Rec."Job Task No.");
JobPlanningLineInvoice.SetRange("Job Planning Line No.", Rec."Line No.");
OnIsTypeFieldEditableOnAfterFilterJobPlanningLineInvoice(JobPlanningLineInvoice, Rec, TypeFieldEditable, IsHandled);
if IsHandled then
exit(TypeFieldEditable);
exit(JobPlanningLineInvoice.IsEmpty());
end;
OnAfterIsTypeFieldEditable(Rec, TypeFieldEditable, IsHandled);
if IsHandled then
exit(TypeFieldEditable);
exit(Rec."Qty. Transferred to Invoice" = 0);
end;
local procedure ExplodeBOM()
begin
Codeunit.Run(Codeunit::"Job-Explode BOM", Rec);
end;
[IntegrationEvent(true, false)]
local procedure OnAfterNoOnAfterValidate(var JobPlanningLine: Record "Job Planning Line")
begin
end;
[IntegrationEvent(true, false)]
local procedure OnIsTypeFieldEditableOnAfterFilterJobPlanningLineInvoice(var JobPlanningLineInvoice: Record "Job Planning Line Invoice"; JobPlanningLine: Record "Job Planning Line"; var TypeFieldEditable: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(true, false)]
local procedure OnAfterIsTypeFieldEditable(var JobPlanningLine: Record "Job Planning Line"; var TypeFieldEditable: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(true, false)]
local procedure OnAfterSetEditable(Edit: Boolean; var JobPlanningLine: Record "Job Planning Line");
begin
end;
}