Report 5848 Cost Shares Breakdown

App
Base Application
Namespace
Microsoft.Manufacturing.Reports
Versions
17-28

Procedures, 1Events, 4

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Manufacturing/Reports/CostSharesBreakdown.Report.al978 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.Manufacturing.Reports;

using Microsoft.Inventory.Costing;
using Microsoft.Inventory.Item;
using Microsoft.Inventory.Ledger;
using Microsoft.Manufacturing.Capacity;
using Microsoft.Manufacturing.Document;
using System.Utilities;

report 5848 "Cost Shares Breakdown"
{
    ApplicationArea = Manufacturing;
    Caption = 'Cost Shares Breakdown';
    ToolTip = 'View the item''s cost broken down in inventory, WIP, or COGS, according to purchase and material cost, capacity cost, capacity overhead cost, manufacturing overhead cost, subcontracted cost, variance, indirect cost, revaluation, and rounding. The report breaks down cost at a single BOM level and does not roll up the costs from lower BOM levels. The report does not calculate the cost share from items that use the Average costing method.';
    UsageCategory = ReportsAndAnalysis;
    DefaultRenderingLayout = RDLCLayout;

    dataset
    {
        dataitem(Item; Item)
        {
            DataItemTableView = where(Type = const(Inventory));
            RequestFilterFields = "No.", "Inventory Posting Group";
            dataitem("Item Ledger Entry"; "Item Ledger Entry")
            {
                DataItemLink = "Item No." = field("No.");
                DataItemTableView = sorting("Item No.");

                trigger OnAfterGetRecord()
                begin
                    CalcRemainingQty("Item Ledger Entry");
                    if RemainingQty = 0 then
                        CurrReport.Skip();
                end;

                trigger OnPreDataItem()
                begin
                    if EndDate <> 0D then begin
                        SetRange("Posting Date", 0D, EndDate);
                        SetRange("Drop Shipment", false);
                    end;

                    if Find('-') then begin
                        SetRange("Posting Date");
                        SetRange("Drop Shipment");
                    end;
                end;
            }

            trigger OnAfterGetRecord()
            begin
                if "Costing Method" = "Costing Method"::Average then
                    CurrReport.Skip();
            end;
        }
        dataitem("Production Order"; "Production Order")
        {
            DataItemTableView = where(Status = filter(Released ..));
            dataitem("Capacity Ledger Entry"; "Capacity Ledger Entry")
            {
                DataItemLink = "Order No." = field("No.");
                DataItemTableView = sorting("Order Type", "Order No.", "Order Line No.") where("Order Type" = const(Production));

                trigger OnAfterGetRecord()
                var
                    TempItem: Record Item temporary;
                begin
                    if Item.Get("Capacity Ledger Entry"."Item No.") then begin
                        TempItem := Item;
                        TempItem.Insert();
                        TempItem.CopyFilters(Item);
                        if TempItem.IsEmpty() then
                            CurrReport.Skip();
                    end;

                    InsertCapLedgEntryCostShare("Capacity Ledger Entry");
                end;

                trigger OnPreDataItem()
                begin
                    if EndDate <> 0D then
                        SetRange("Posting Date", StartDate, EndDate)
                    else
                        SetFilter("Posting Date", '>=%1', StartDate);
                end;
            }

            trigger OnAfterGetRecord()
            begin
                if CostSharePrint <> CostSharePrint::"WIP Inventory" then
                    CurrReport.Break();
            end;
        }
        dataitem(PrintHeader; "Integer")
        {
            DataItemTableView = sorting(Number) where(Number = filter(1 ..));
            PrintOnlyIfDetail = true;
            column(TodayFormatted; Format(Today, 0, 4))
            {
            }
            column(CompanyName; COMPANYPROPERTY.DisplayName())
            {
            }
            column(CostSharePrint; CostSharePrint)
            {
                OptionCaption = 'Sales,Inventory,WIP Inventory';
                OptionMembers = Sales,Inventory,"WIP Inventory";
            }
            column(TableCaptionItemFilter; Item.TableCaption + ': ' + ItemFilter)
            {
            }
            column(TableCaptionProdOrderFilter; "Production Order".TableCaption + ': ' + ProdOrderFilter)
            {
            }
            column(ProdOrderFilter; ProdOrderFilter)
            {
            }
            column(Number_PrintHeader; Number)
            {
            }
            column(FdCaptSubcontracted; TempCostShareBuffer.FieldCaption(Subcontracted))
            {
            }
            column(CostShareBufNewMaterial; TempCostShareBuffer."New Material")
            {
            }
            column(CostShareBufNewCapacity; TempCostShareBuffer."New Capacity")
            {
            }
            column(CostShareBufNewCapOverhd; TempCostShareBuffer."New Capacity Overhead")
            {
            }
            column(CostShareBufNewMatrlOverhd; TempCostShareBuffer."New Material Overhead")
            {
            }
            column(Subcontracted; TempCostShareBuffer."New Subcontracted")
            {
            }
            column(CostShareBufNewVar; TempCostShareBuffer."New Variance")
            {
            }
            column(CostShareBufNewRevaluation; TempCostShareBuffer."New Revaluation")
            {
            }
            column(CostShareBufNewRounding; TempCostShareBuffer."New Rounding")
            {
            }
            column(Total; TempCostShareBuffer."New Direct Cost" + TempCostShareBuffer."New Indirect Cost" + TempCostShareBuffer."New Revaluation" + TempCostShareBuffer."New Rounding" + TempCostShareBuffer."New Variance")
            {
            }
            column(CostShareBufNewPurchaseVar; TempCostShareBuffer."New Purchase Variance")
            {
            }
            column(CostShareBufNewMaterialVar; TempCostShareBuffer."New Material Variance")
            {
            }
            column(CostShareBufNewCpctyVar; TempCostShareBuffer."New Capacity Variance")
            {
            }
            column(CostShareBufNewCapOverHdVar; TempCostShareBuffer."New Capacity Overhead Variance")
            {
            }
            column(CostShareBufNewMfgOverheadVar; TempCostShareBuffer."New Mfg. Overhead Variance")
            {
            }
            column(NewSubcontracted; TempCostShareBuffer."New Subcontracted Variance")
            {
            }
            column(CurrReportPageNoCaption; CurrReportPageNoCaptionLbl)
            {
            }
            column(CostShareBufDocumentNoCaption; CostShareBufDocumentNoCaptionLbl)
            {
            }
            column(CostShareBufDescriptionCaption; CostShareBufDescriptionCaptionLbl)
            {
            }
            column(CostShareBufNewQuantityCaption; CostShareBufNewQuantityCaptionLbl)
            {
            }
            column(CostShareBufNewMatrlCaption; CostShareBufNewMatrlCaptionLbl)
            {
            }
            column(CapacityDirCostAppCaption; CapacityDirCostAppCaptionLbl)
            {
            }
            column(CapacityOverheadCaption; CapacityOverheadCaptionLbl)
            {
            }
            column(MaterialOverheadCaption; MaterialOverheadCaptionLbl)
            {
            }
            column(VarianceCaption; VarianceCaptionLbl)
            {
            }
            column(RevaluationCaption; RevaluationCaptionLbl)
            {
            }
            column(RoundingCaption; RoundingCaptionLbl)
            {
            }
            column(TotalCaption; TotalCaptionLbl)
            {
            }
            column(VarBreakdownCaption; VarBreakdownCaptionLbl)
            {
            }
            dataitem(PrintInvtCostShareBuf; "Integer")
            {
                DataItemTableView = sorting(Number) where(Number = filter(1 ..));
                column(CostShareBufDescription; TempCostShareBuffer.Description)
                {
                }
                column(CostShareBufItemNo; TempCostShareBuffer."Item No.")
                {
                }
                column(Number_PrntInvtCostSharBufNo; Number)
                {
                }
                column(ShowDetails; ShowDetails)
                {
                }
                column(TotalPrintInvtCostShareBuf; TempCostShareBuffer."New Direct Cost" + TempCostShareBuffer."New Indirect Cost" + TempCostShareBuffer."New Revaluation" + TempCostShareBuffer."New Rounding" + TempCostShareBuffer."New Variance")
                {
                }
                column(CostShareBufDocumentNo; TempCostShareBuffer."Document No.")
                {
                }
                column(NewMatrl_PrintInvCstShrBuf; TempCostShareBuffer."New Material")
                {
                }
                column(NewCap_PrintInvCstShrBuf; TempCostShareBuffer."New Capacity")
                {
                }
                column(NewCapOvrHd_PrintInvCstShrBuf; TempCostShareBuffer."New Capacity Overhead")
                {
                }
                column(NewMatOvrHd_PrintInvCstShrBuf; TempCostShareBuffer."New Material Overhead")
                {
                }
                column(Subcontrt_PrintInvCstShrBuf; TempCostShareBuffer."New Subcontracted")
                {
                }
                column(NewVar_PrintInvCstShrBuf; TempCostShareBuffer."New Variance")
                {
                }
                column(NewReval_PrintInvCstShrBuf; TempCostShareBuffer."New Revaluation")
                {
                }
                column(NewRounding_PrintInvCstShrBuf; TempCostShareBuffer."New Rounding")
                {
                }
                column(CostShareBufNewQuantity; TempCostShareBuffer."New Quantity")
                {
                    DecimalPlaces = 0 : 5;
                }
                column(NewPurchVar_PrintInvCstShrBuf; TempCostShareBuffer."New Purchase Variance")
                {
                }
                column(NewMatrlVar_PrintInvCstShrBuf; TempCostShareBuffer."New Material Variance")
                {
                }
                column(NewCapVar_PrintInvCstShrBuf; TempCostShareBuffer."New Capacity Variance")
                {
                }
                column(NwCapOvHdVar_PrintInvCstShrBuf; TempCostShareBuffer."New Capacity Overhead Variance")
                {
                }
                column(NwMfgOvrhdVar_PrintInvCstShrBuf; TempCostShareBuffer."New Mfg. Overhead Variance")
                {
                }
                column(CostShareBufNewSubcontractedVar; TempCostShareBuffer."New Subcontracted Variance")
                {
                }
                column(TotalCostVariance; TempCostShareBuffer."New Purchase Variance" + TempCostShareBuffer."New Material Variance" + TempCostShareBuffer."New Capacity Variance" + TempCostShareBuffer."New Capacity Overhead Variance" + TempCostShareBuffer."New Mfg. Overhead Variance" + TempCostShareBuffer."New Subcontracted Variance")
                {
                }
                column(TotalCost; TempCostShareBuffer."New Direct Cost" + TempCostShareBuffer."New Indirect Cost" + TempCostShareBuffer."New Revaluation" + TempCostShareBuffer."New Rounding" + TempCostShareBuffer."New Variance")
                {
                }
                column(SrvTrPrintInvtCostShareBufFtr4; SrvTrPrintInvtCostShareBufFtr4())
                {
                }
                column(SrvTrPrintInvtCostShareBufFtr5; SrvTrPrintInvtCostShareBufFtr5())
                {
                }

                trigger OnAfterGetRecord()
                var
                    TempItem: Record Item temporary;
                    InvtAdjmtEntryOrder: Record "Inventory Adjmt. Entry (Order)";
                begin
                    if Number = 1 then begin
                        if not TempCostShareBuffer.Find('-') then
                            CurrReport.Break();
                    end else
                        if TempCostShareBuffer.Next() = 0 then
                            CurrReport.Break();

                    if TempCostShareBuffer."Posting Date" > EndDate then
                        CurrReport.Skip();

                    case CostSharePrint of
                        CostSharePrint::Sales:
                            begin
                                TempCostShareBuffer."New Revaluation" := TempCostShareBuffer."New Revaluation" - TempCostShareBuffer.Revaluation;
                                TempCostShareBuffer."New Quantity" := TempCostShareBuffer.Quantity;
                            end;
                        CostSharePrint::Inventory:
                            if TempCostShareBuffer."New Quantity" = 0 then
                                CurrReport.Skip();
                        CostSharePrint::"WIP Inventory":
                            begin
                                if InvtAdjmtEntryOrder.Get(TempCostShareBuffer."Order Type", TempCostShareBuffer."Order No.", TempCostShareBuffer."Order Line No.") then begin
                                    Item.Get(InvtAdjmtEntryOrder."Item No.");
                                    TempItem := Item;
                                    TempItem.Insert();
                                    TempItem.CopyFilters(Item);
                                    if TempItem.IsEmpty() then
                                        CurrReport.Skip();
                                end;

                                if TempCostShareBuffer."Entry Type" = TempCostShareBuffer."Entry Type"::" " then begin
                                    TempCostShareBuffer."New Direct Cost" := -TempCostShareBuffer."New Direct Cost";
                                    TempCostShareBuffer."New Indirect Cost" := -TempCostShareBuffer."New Indirect Cost";
                                    TempCostShareBuffer."New Revaluation" := -TempCostShareBuffer."New Revaluation";
                                    TempCostShareBuffer."New Rounding" := -TempCostShareBuffer."New Rounding";
                                    TempCostShareBuffer."New Variance" := -TempCostShareBuffer."New Variance";
                                    TempCostShareBuffer."New Purchase Variance" := -TempCostShareBuffer."New Purchase Variance";
                                    TempCostShareBuffer."New Material Variance" := -TempCostShareBuffer."New Material Variance";
                                    TempCostShareBuffer."New Capacity Variance" := -TempCostShareBuffer."New Capacity Variance";
                                    TempCostShareBuffer."New Capacity Overhead Variance" := -TempCostShareBuffer."New Capacity Overhead Variance";
                                    TempCostShareBuffer."New Mfg. Overhead Variance" := -TempCostShareBuffer."New Mfg. Overhead Variance";
                                    TempCostShareBuffer."New Subcontracted Variance" := -TempCostShareBuffer."New Subcontracted Variance";
                                    TempCostShareBuffer."New Material" := -TempCostShareBuffer."New Material";
                                    TempCostShareBuffer."New Capacity" := -TempCostShareBuffer."New Capacity";
                                    TempCostShareBuffer."New Capacity Overhead" := -TempCostShareBuffer."New Capacity Overhead";
                                    TempCostShareBuffer."New Material Overhead" := -TempCostShareBuffer."New Material Overhead";
                                    TempCostShareBuffer."New Subcontracted" := -TempCostShareBuffer."New Subcontracted";
                                end;
                                TempCostShareBuffer."New Variance" := TempCostShareBuffer."New Variance" - TempCostShareBuffer.Variance;
                                TempCostShareBuffer."New Purchase Variance" := TempCostShareBuffer."New Purchase Variance" - TempCostShareBuffer."Purchase Variance";
                                TempCostShareBuffer."New Material Variance" := TempCostShareBuffer."New Material Variance" - TempCostShareBuffer."Material Variance";
                                TempCostShareBuffer."New Capacity Variance" := TempCostShareBuffer."New Capacity Variance" - TempCostShareBuffer."Capacity Variance";
                                TempCostShareBuffer."New Capacity Overhead Variance" :=
                                  TempCostShareBuffer."New Capacity Overhead Variance" - TempCostShareBuffer."Capacity Overhead Variance";
                                TempCostShareBuffer."New Mfg. Overhead Variance" := TempCostShareBuffer."New Mfg. Overhead Variance" -
                                  TempCostShareBuffer."Mfg. Overhead Variance";
                                TempCostShareBuffer."New Subcontracted Variance" := TempCostShareBuffer."New Subcontracted Variance" -
                                  TempCostShareBuffer."Subcontracted Variance";
                            end;
                    end;

                    if Number = 1 then
                        if CostSharePrint in [CostSharePrint::Sales, CostSharePrint::Inventory] then begin
                            if ItemPrint.Get(TempCostShareBuffer."Item No.") then begin
                                TempCostShareBuffer."Item No." := ItemPrint."No.";
                                TempCostShareBuffer.Description := ItemPrint.Description;
                            end;
                        end else
                            if (TempCostShareBuffer."Order Type" = TempCostShareBuffer."Order Type"::Production) and
                               (ProdOrderPrint.Get(ProdOrderPrint.Status::Finished, TempCostShareBuffer."Order No.") or
                                ProdOrderPrint.Get(ProdOrderPrint.Status::Released, TempCostShareBuffer."Order No."))
                            then begin
                                TempCostShareBuffer."Item No." := ProdOrderPrint."No.";
                                TempCostShareBuffer.Description := ProdOrderPrint.Description;
                                TempCostShareBuffer."New Quantity" := ProdOrderPrint.Quantity;
                            end;
                end;

                trigger OnPreDataItem()
                begin
                    if CostSharePrint in [CostSharePrint::Sales, CostSharePrint::Inventory] then begin
                        TempCostShareBuffer.SetCurrentKey("Item No.");
                        TempCostShareBuffer.SetRange("Item No.", ItemPrint."No.");
                        if CostSharePrint = CostSharePrint::Sales then begin
                            TempCostShareBuffer.SetRange("Entry Type", TempCostShareBuffer."Entry Type"::Sale);
                            if EndDate = 0D then
                                EndDate := DMY2Date(31, 12, 9998);
                            TempCostShareBuffer.SetRange("Posting Date", StartDate, EndDate)
                        end;
                    end else begin
                        TempCostShareBuffer.SetCurrentKey("Order Type", "Order No.");
                        TempCostShareBuffer.SetRange("Order Type", TempCostShareBuffer."Order Type"::Production);
                        TempCostShareBuffer.SetRange("Order No.", ProdOrderPrint."No.");
                    end;
                end;
            }

            trigger OnAfterGetRecord()
            begin
                case CostSharePrint of
                    CostSharePrint::Sales, CostSharePrint::Inventory:
                        if Number = 1 then begin
                            if not ItemPrint.Find('-') then
                                CurrReport.Break();
                        end else
                            if ItemPrint.Next() = 0 then
                                CurrReport.Break();
                    CostSharePrint::"WIP Inventory":
                        if Number = 1 then begin
                            if not ProdOrderPrint.Find('-') then
                                CurrReport.Break();
                        end else
                            if ProdOrderPrint.Next() = 0 then
                                CurrReport.Break();
                end;

                TempCostShareBuffer.Reset();
                if not TempCostShareBuffer.Find('-') then
                    CurrReport.Skip();
            end;

            trigger OnPreDataItem()
            begin
                if CostSharePrint in [CostSharePrint::Sales, CostSharePrint::Inventory] then begin
                    ItemPrint.CopyFilters(Item);
                    ItemPrint.SetCurrentKey("Inventory Posting Group");
                end else
                    ProdOrderPrint.CopyFilters("Production Order");
            end;
        }
    }

    requestpage
    {
        SaveValues = true;

        layout
        {
            area(content)
            {
                group(Options)
                {
                    Caption = 'Options';
                    field(StartDate; StartDate)
                    {
                        ApplicationArea = Manufacturing;
                        Caption = 'Starting Date';
                        ToolTip = 'Specifies the first date from which you want the information in the report to be taken. If you leave this field blank, the program includes all information up to the ending date that you specify in the Ending Date field.';
                    }
                    field(EndDate; EndDate)
                    {
                        ApplicationArea = Manufacturing;
                        Caption = 'Ending Date';
                        ToolTip = 'Specifies the last date from which you want the information in the report to be taken. If left blank, the program includes all information from the starting date to the present time.';
                    }
                    field(CostSharePrint; CostSharePrint)
                    {
                        ApplicationArea = Manufacturing;
                        Caption = 'Print Cost Share ';
                        OptionCaption = 'Sales,Inventory,WIP Inventory';
                        ToolTip = 'Specifies that cost share information is included on printouts of the report. ';
                    }
                    field(ShowDetails; ShowDetails)
                    {
                        ApplicationArea = Manufacturing;
                        Caption = 'Show Details';
                        ToolTip = 'Specifies if you want to see a detailed breakdown of where the cost comes from for each item.';
                    }
                }
            }
        }

        actions
        {
        }

        trigger OnOpenPage()
        begin
            if (StartDate = 0D) and (EndDate = 0D) then
                EndDate := WorkDate();
        end;
    }

    rendering
    {
        layout(RDLCLayout)
        {
            Type = RDLC;
            LayoutFile = './Manufacturing/Reports/CostSharesBreakdown.rdlc';
            Summary = 'Report layout made in the legacy RDLC format. Use an RDLC editor to modify the layout.';
        }
    }

    labels
    {
    }

    trigger OnPreReport()
    begin
        if (StartDate = 0D) and (EndDate = 0D) then
            EndDate := WorkDate();

        case true of
            (StartDate <> 0D) and (EndDate <> 0D):
                Item.SetRange("Date Filter", StartDate, EndDate);
            (StartDate <> 0D):
                Item.SetFilter("Date Filter", '%1..', StartDate);
            else
                Item.SetRange("Date Filter", 0D, EndDate);
        end;

        ItemFilter := Item.GetFilters();
        ProdOrderFilter := "Production Order".GetFilters();

        TempCostShareBuffer.Reset();
        TempCostShareBuffer.DeleteAll();
    end;

    var
        ItemPrint: Record Item;
        ProdOrderPrint: Record "Production Order";
        TempCostShareBuffer: Record "Cost Share Buffer" temporary;
        ItemFilter: Text;
        ProdOrderFilter: Text;
        RemainingQty: Decimal;
        CostSharePrint: Option Sales,Inventory,"WIP Inventory";
        StartDate: Date;
        EndDate: Date;
        ShowDetails: Boolean;
        CurrReportPageNoCaptionLbl: Label 'Page';
        CostShareBufDocumentNoCaptionLbl: Label 'No.';
        CostShareBufDescriptionCaptionLbl: Label 'Description';
        CostShareBufNewQuantityCaptionLbl: Label 'Quantity';
        CostShareBufNewMatrlCaptionLbl: Label 'Material Direct Cost Applied';
        CapacityDirCostAppCaptionLbl: Label 'Capacity Direct Cost Applied';
        CapacityOverheadCaptionLbl: Label 'Capacity Overhead';
        MaterialOverheadCaptionLbl: Label 'Material Overhead';
        VarianceCaptionLbl: Label 'Variance';
        RevaluationCaptionLbl: Label 'Revaluation';
        RoundingCaptionLbl: Label 'Rounding';
        TotalCaptionLbl: Label 'Total';
        VarBreakdownCaptionLbl: Label 'Variance Breakdown';

    local procedure CalcRemainingQty(FromItemLedgEntry: Record "Item Ledger Entry")
    var
        ItemApplnEntry: Record "Item Application Entry";
        OldRemainingQty: Decimal;
    begin
        OldRemainingQty := RemainingQty;
        RemainingQty := FromItemLedgEntry.Quantity;
        OnCalcRemainingQtyOnAfterSetRemainingQty(FromItemLedgEntry, RemainingQty, OldRemainingQty);

        if FromItemLedgEntry.Positive then begin
            if TempCostShareBuffer.Get(FromItemLedgEntry."Entry No.") then
                exit;
            if not ItemApplnEntry.AppliedFromEntryExists(FromItemLedgEntry."Entry No.") then
                if ForwardToAppliedOutbndEntry(FromItemLedgEntry."Entry No.") then
                    exit;
        end;

        if (FromItemLedgEntry."Posting Date" > EndDate) and (EndDate <> 0D) then
            exit;

        if not TempCostShareBuffer.Get(FromItemLedgEntry."Entry No.") then
            InsertItemLedgEntryCostShare(FromItemLedgEntry);
    end;

    local procedure ForwardToAppliedOutbndEntry(EntryNo: Integer): Boolean
    var
        ItemApplnEntry: Record "Item Application Entry";
    begin
        if ItemApplnEntry.AppliedOutbndEntryExists(EntryNo, true, false) then begin
            ForwardItemLedgEntryCostShare(ItemApplnEntry, EntryNo, false);
            exit(true);
        end;
        exit(false);
    end;

    local procedure ForwardToAppliedInbndEntry(EntryNo: Integer)
    var
        ItemApplnEntry: Record "Item Application Entry";
    begin
        if ItemApplnEntry.AppliedInbndEntryExists(EntryNo, true) then
            ForwardItemLedgEntryCostShare(ItemApplnEntry, EntryNo, true);
    end;

    local procedure ForwardToInbndTranEntry(EntryNo: Integer): Boolean
    var
        ItemApplnEntry: Record "Item Application Entry";
    begin
        if ItemApplnEntry.AppliedInbndTransEntryExists(EntryNo, true) then begin
            ForwardItemLedgEntryCostShare(ItemApplnEntry, EntryNo, true);
            exit(true);
        end;
        exit(false);
    end;

    local procedure ForwardItemLedgEntryCostShare(var ItemApplnEntry: Record "Item Application Entry"; EntryNo: Integer; IsInBound: Boolean)
    var
        FromItemLedgEntry: Record "Item Ledger Entry";
        ToItemLedgEntry: Record "Item Ledger Entry";
        FromCostShareBuffer: Record "Cost Share Buffer";
        ToCostShareBuffer: Record "Cost Share Buffer";
        ToEntryNo: Integer;
        CostShare: Decimal;
        AppliedQty: Decimal;
        IsHandled: Boolean;
    begin
        repeat
            if not TempCostShareBuffer.Get(EntryNo) then begin
                FromItemLedgEntry.Get(EntryNo);
                if FromItemLedgEntry."Posting Date" > EndDate then
                    exit;
                InsertItemLedgEntryCostShare(FromItemLedgEntry);
            end;
            FromCostShareBuffer := TempCostShareBuffer;
            if IsInBound then
                ToEntryNo := ItemApplnEntry."Inbound Item Entry No."
            else
                ToEntryNo := ItemApplnEntry."Outbound Item Entry No.";

            ToItemLedgEntry.Get(ToEntryNo);
            if not TempCostShareBuffer.Get(ToEntryNo) then
                InsertItemLedgEntryCostShare(ToItemLedgEntry);

            ToCostShareBuffer := TempCostShareBuffer;
            if (ToCostShareBuffer."Posting Date" <= EndDate) or (EndDate = 0D) then begin
                IsHandled := false;
                OnForwardItemLedgEntryCostShareOnBeforeCheckCostShareQtyCondition(FromCostShareBuffer, ItemApplnEntry, AppliedQty, IsHandled);
                if not IsHandled then
                    if (EndDate = 0D) or (ToItemLedgEntry."Posting Date" <= EndDate) and
                       (FromCostShareBuffer.Quantity * ItemApplnEntry.Quantity < 0)
                    then
                        AppliedQty := AppliedQty + ItemApplnEntry.Quantity;

                if ToCostShareBuffer.Quantity < 0 then
                    ToCostShareBuffer."New Quantity" := ToCostShareBuffer."New Quantity" - ItemApplnEntry.Quantity;

                CostShare := ItemApplnEntry.Quantity / FromCostShareBuffer.Quantity;
                UpdateCosts(FromCostShareBuffer, ToCostShareBuffer, CostShare, true);

                TempCostShareBuffer := ToCostShareBuffer;
                TempCostShareBuffer.Modify();

                ForwardToAppliedOutbndEntry(ToCostShareBuffer."Item Ledger Entry No.");
                if ToCostShareBuffer."New Quantity" - ToItemLedgEntry."Remaining Quantity" = 0 then
                    ForwardToAppliedInbndEntry(ToCostShareBuffer."Item Ledger Entry No.");

                if (ToCostShareBuffer.Quantity < 0) and
                   (CostSharePrint in [CostSharePrint::Inventory, CostSharePrint::"WIP Inventory"])
                then begin
                    TempCostShareBuffer.Find();
                    ToCostShareBuffer := TempCostShareBuffer;
                    CostShare := -CostShare;
                    UpdateCosts(FromCostShareBuffer, ToCostShareBuffer, CostShare, false);
                    TempCostShareBuffer := ToCostShareBuffer;
                    TempCostShareBuffer.Modify();
                end;
            end;
        until ItemApplnEntry.Next() = 0;

        if ToItemLedgEntry."Entry Type" = ToItemLedgEntry."Entry Type"::Transfer then
            if not ToItemLedgEntry.Positive then begin
                if EndDate in [0D .. ToItemLedgEntry."Posting Date"] then
                    ForwardToInbndTranEntry(EntryNo)
            end else
                exit;

        if (CostSharePrint = CostSharePrint::Inventory) and (FromCostShareBuffer.Quantity > 0) then begin
            FromCostShareBuffer."New Quantity" := FromCostShareBuffer."New Quantity" + AppliedQty;
            CostShare := AppliedQty / FromCostShareBuffer.Quantity;
            UpdateCosts(FromCostShareBuffer, FromCostShareBuffer, CostShare, false);
        end;
        TempCostShareBuffer := FromCostShareBuffer;
        TempCostShareBuffer.Modify();
    end;

    local procedure UpdateCosts(FromCostShareBuffer: Record "Cost Share Buffer"; var ToCostShareBuffer: Record "Cost Share Buffer"; CostShare: Decimal; DirCostIsDiff: Boolean)
    begin
        ToCostShareBuffer."New Indirect Cost" := ToCostShareBuffer."New Indirect Cost" + CostShare * FromCostShareBuffer."New Indirect Cost";
        if CostSharePrint = CostSharePrint::Sales then
            ToCostShareBuffer."New Revaluation" := ToCostShareBuffer."New Revaluation" + CostShare * FromCostShareBuffer."New Revaluation";
        ToCostShareBuffer."New Rounding" := ToCostShareBuffer."New Rounding" + CostShare * FromCostShareBuffer."New Rounding";
        ToCostShareBuffer."New Variance" := ToCostShareBuffer."New Variance" + CostShare * FromCostShareBuffer."New Variance";
        ToCostShareBuffer."New Purchase Variance" := ToCostShareBuffer."New Purchase Variance" + CostShare * FromCostShareBuffer."New Purchase Variance";
        ToCostShareBuffer."New Material Variance" := ToCostShareBuffer."New Material Variance" + CostShare * FromCostShareBuffer."New Material Variance";
        ToCostShareBuffer."New Capacity Variance" := ToCostShareBuffer."New Capacity Variance" + CostShare * FromCostShareBuffer."New Capacity Variance";
        ToCostShareBuffer."New Capacity Overhead Variance" :=
          ToCostShareBuffer."New Capacity Overhead Variance" + CostShare * FromCostShareBuffer."New Capacity Overhead Variance";
        ToCostShareBuffer."New Mfg. Overhead Variance" :=
          ToCostShareBuffer."New Mfg. Overhead Variance" + CostShare * FromCostShareBuffer."New Mfg. Overhead Variance";
        ToCostShareBuffer."New Subcontracted Variance" :=
          ToCostShareBuffer."New Subcontracted Variance" + CostShare * FromCostShareBuffer."New Subcontracted Variance";
        if DirCostIsDiff then
            ToCostShareBuffer."New Direct Cost" := ToCostShareBuffer."New Direct Cost" - CostShare *
              (FromCostShareBuffer."New Indirect Cost" +
               FromCostShareBuffer."New Revaluation" +
               FromCostShareBuffer."New Variance" +
               FromCostShareBuffer."New Rounding")
        else
            ToCostShareBuffer."New Direct Cost" := ToCostShareBuffer."New Direct Cost" + CostShare * FromCostShareBuffer."New Direct Cost";
        ToCostShareBuffer."New Capacity" := ToCostShareBuffer."New Capacity" + CostShare * FromCostShareBuffer."New Capacity";
        ToCostShareBuffer."New Capacity Overhead" := ToCostShareBuffer."New Capacity Overhead" + CostShare * FromCostShareBuffer."New Capacity Overhead";
        ToCostShareBuffer."New Material Overhead" := ToCostShareBuffer."New Material Overhead" + CostShare * FromCostShareBuffer."New Material Overhead";
        ToCostShareBuffer."New Subcontracted" := ToCostShareBuffer."New Subcontracted" + CostShare * FromCostShareBuffer."New Subcontracted";
        ToCostShareBuffer."New Material" := ToCostShareBuffer."New Direct Cost" - (ToCostShareBuffer."New Capacity" + ToCostShareBuffer."New Capacity Overhead" + ToCostShareBuffer."New Subcontracted");
    end;

    local procedure InsertItemLedgEntryCostShare(ItemLedgEntry: Record "Item Ledger Entry")
    var
        ValueEntry: Record "Value Entry";
        CostInPeriod: Decimal;
        TotalCost: Decimal;
        DirectCostInPeriod: Decimal;
        TotalDirectCost: Decimal;
    begin
        TempCostShareBuffer.Init();
        TempCostShareBuffer."Item Ledger Entry No." := ItemLedgEntry."Entry No.";
        TempCostShareBuffer."Item No." := ItemLedgEntry."Item No.";
        TempCostShareBuffer.Quantity := ItemLedgEntry.Quantity;
        OnInsertItemLedgEntryCostShareOnAfterSetQuantity(ItemLedgEntry, TempCostShareBuffer);
        TempCostShareBuffer."Entry Type" := ItemLedgEntry."Entry Type";
        TempCostShareBuffer."Location Code" := ItemLedgEntry."Location Code";
        TempCostShareBuffer."Variant Code" := ItemLedgEntry."Variant Code";
        TempCostShareBuffer."Order Type" := ItemLedgEntry."Order Type";
        TempCostShareBuffer."Order No." := ItemLedgEntry."Order No.";
        TempCostShareBuffer."Order Line No." := ItemLedgEntry."Order Line No.";
        TempCostShareBuffer."Document No." := ItemLedgEntry."Document No.";
        TempCostShareBuffer.Description := ItemLedgEntry.Description;
        TempCostShareBuffer."Posting Date" := ItemLedgEntry."Posting Date";

        TotalCost := 0;
        CostInPeriod := 0;
        DirectCostInPeriod := 0;
        TotalDirectCost := 0;
        ValueEntry.SetCurrentKey("Item Ledger Entry No.", "Entry Type");
        ValueEntry.SetRange("Item Ledger Entry No.", ItemLedgEntry."Entry No.");
        if EndDate <> 0D then
            ValueEntry.SetRange("Posting Date", 0D, EndDate);
        if ValueEntry.Find('-') then
            repeat
                GetValueEntryCostAmts(TempCostShareBuffer, ValueEntry);

                if IsInCostingPeriod(ValueEntry."Posting Date") then begin
                    CostInPeriod := CostInPeriod + ValueEntry."Cost Amount (Actual)" + ValueEntry."Cost Amount (Expected)";
                    if ValueEntry."Entry Type" = ValueEntry."Entry Type"::"Direct Cost" then
                        DirectCostInPeriod := DirectCostInPeriod + ValueEntry."Cost Amount (Actual)" + ValueEntry."Cost Amount (Expected)";
                end;
                TotalCost := TotalCost + ValueEntry."Cost Amount (Actual)" + ValueEntry."Cost Amount (Expected)";
                if ValueEntry."Entry Type" = ValueEntry."Entry Type"::"Direct Cost" then
                    TotalDirectCost := TotalDirectCost + ValueEntry."Cost Amount (Actual)" + ValueEntry."Cost Amount (Expected)";
            until ValueEntry.Next() = 0;

        if ItemLedgEntry."Entry Type" in [ItemLedgEntry."Entry Type"::Output,
                                          ItemLedgEntry."Entry Type"::"Assembly Output"]
        then
            UpdateCostShareBufFromInvAdjmtEntryOrder(ItemLedgEntry, TempCostShareBuffer)
        else
            TempCostShareBuffer."Material Overhead" := TempCostShareBuffer."Indirect Cost";

        TempCostShareBuffer.Material := TempCostShareBuffer."Direct Cost" - (TempCostShareBuffer.Capacity + TempCostShareBuffer."Capacity Overhead" + TempCostShareBuffer.Subcontracted);

        if TotalCost <> 0 then
            TempCostShareBuffer."Share of Cost in Period" := CostInPeriod / TotalCost;

        TempCostShareBuffer."New Quantity" := TempCostShareBuffer.Quantity;
        TempCostShareBuffer."New Direct Cost" := TempCostShareBuffer."Direct Cost";
        TempCostShareBuffer."New Indirect Cost" := TempCostShareBuffer."Indirect Cost";
        TempCostShareBuffer."New Revaluation" := TempCostShareBuffer.Revaluation;
        TempCostShareBuffer."New Variance" := TempCostShareBuffer.Variance;
        TempCostShareBuffer."New Rounding" := TempCostShareBuffer.Rounding;

        TempCostShareBuffer."New Purchase Variance" := TempCostShareBuffer."Purchase Variance";
        TempCostShareBuffer."New Material Variance" := TempCostShareBuffer."Material Variance";
        TempCostShareBuffer."New Capacity Variance" := TempCostShareBuffer."Capacity Variance";
        TempCostShareBuffer."New Capacity Overhead Variance" := TempCostShareBuffer."Capacity Overhead Variance";
        TempCostShareBuffer."New Mfg. Overhead Variance" := TempCostShareBuffer."Mfg. Overhead Variance";
        TempCostShareBuffer."New Subcontracted Variance" := TempCostShareBuffer."Subcontracted Variance";

        TempCostShareBuffer."New Material" := TempCostShareBuffer.Material;
        TempCostShareBuffer."New Capacity" := TempCostShareBuffer.Capacity;
        TempCostShareBuffer."New Capacity Overhead" := TempCostShareBuffer."Capacity Overhead";
        TempCostShareBuffer."New Material Overhead" := TempCostShareBuffer."Material Overhead";
        TempCostShareBuffer."New Subcontracted" := TempCostShareBuffer.Subcontracted;
        TempCostShareBuffer.Insert();
    end;

    local procedure UpdateCostShareBufFromInvAdjmtEntryOrder(ItemLedgEntry: Record "Item Ledger Entry"; var CostShareBuffer: Record "Cost Share Buffer")
    var
        InvtAdjmtEntryOrder: Record "Inventory Adjmt. Entry (Order)";
        CalcInvtAdjmtOrder: Codeunit "Calc. Inventory Adjmt. - Order";
        ShareOfCost: Decimal;
        OutputQty: Decimal;
    begin
        if not InvtAdjmtEntryOrder.Get(ItemLedgEntry."Order Type", ItemLedgEntry."Order No.", ItemLedgEntry."Order Line No.") then
            exit;

        OutputQty := CalcInvtAdjmtOrder.CalcOutputQty(InvtAdjmtEntryOrder, false);
        CalcInvtAdjmtOrder.CalcActualUsageCosts(InvtAdjmtEntryOrder, OutputQty, InvtAdjmtEntryOrder);

        CostShareBuffer.Capacity += InvtAdjmtEntryOrder."Single-Level Capacity Cost";
        CostShareBuffer."Capacity Overhead" += InvtAdjmtEntryOrder."Single-Level Cap. Ovhd Cost";
        CostShareBuffer."Material Overhead" += InvtAdjmtEntryOrder."Single-Level Mfg. Ovhd Cost";
        CostShareBuffer.Subcontracted += InvtAdjmtEntryOrder."Single-Level Subcontrd. Cost";

        ApplyShareOfCostToCostShareBuffer(ItemLedgEntry, CostShareBuffer, InvtAdjmtEntryOrder, OutputQty, ShareOfCost);
    end;

    local procedure ApplyShareOfCostToCostShareBuffer(ItemLedgEntry: Record "Item Ledger Entry"; var CostShareBuffer: Record "Cost Share Buffer"; var InvtAdjmtEntryOrder: Record "Inventory Adjmt. Entry (Order)"; OutputQty: Decimal; var ShareOfCost: Decimal)
    var
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnUpdateCostShareBufFromInvAdjmtEntryOrderOnBeforeApplyShareOfCost(ItemLedgEntry, CostShareBuffer, InvtAdjmtEntryOrder, OutputQty, ShareOfCost, IsHandled);
        if IsHandled then
            exit;

        if OutputQty <> 0 then begin
            ShareOfCost := ItemLedgEntry.Quantity / OutputQty;
            CostShareBuffer.Capacity *= ShareOfCost;
            CostShareBuffer."Capacity Overhead" *= ShareOfCost;
            CostShareBuffer."Material Overhead" *= ShareOfCost;
            CostShareBuffer.Subcontracted *= ShareOfCost;
        end;
    end;

    local procedure InsertCapLedgEntryCostShare(CapLedgEntry: Record "Capacity Ledger Entry")
    var
        ValueEntry: Record "Value Entry";
        CostInPeriod: Decimal;
        TotalCost: Decimal;
    begin
        TempCostShareBuffer.Init();
        TempCostShareBuffer."Capacity Ledger Entry No." := CapLedgEntry."Entry No.";
        TempCostShareBuffer."Item No." := CapLedgEntry."Item No.";
        TempCostShareBuffer.Quantity := CapLedgEntry.Quantity;
        TempCostShareBuffer."Entry Type" := TempCostShareBuffer."Entry Type"::" ";
        TempCostShareBuffer."Order Type" := CapLedgEntry."Order Type";
        TempCostShareBuffer."Order No." := CapLedgEntry."Order No.";
        TempCostShareBuffer."Order Line No." := CapLedgEntry."Order Line No.";
        TempCostShareBuffer."Document No." := CapLedgEntry."Document No.";
        TempCostShareBuffer.Description := CapLedgEntry.Description;

        TotalCost := 0;
        CostInPeriod := 0;
        ValueEntry.SetCurrentKey("Capacity Ledger Entry No.", "Entry Type");
        ValueEntry.SetRange("Capacity Ledger Entry No.", CapLedgEntry."Entry No.");
        if EndDate <> 0D then
            ValueEntry.SetRange("Posting Date", 0D, EndDate);
        if ValueEntry.Find('-') then
            repeat
                GetValueEntryCostAmts(TempCostShareBuffer, ValueEntry);

                if IsInCostingPeriod(ValueEntry."Posting Date") then
                    CostInPeriod := CostInPeriod + ValueEntry."Cost Amount (Actual)";
                TotalCost := TotalCost + ValueEntry."Cost Amount (Actual)";
            until ValueEntry.Next() = 0;

        if TotalCost <> 0 then
            TempCostShareBuffer."Share of Cost in Period" := CostInPeriod / TotalCost;

        if CapLedgEntry.Subcontracting then
            TempCostShareBuffer.Subcontracted := TempCostShareBuffer."Direct Cost"
        else
            TempCostShareBuffer.Capacity := TempCostShareBuffer."Direct Cost";
        TempCostShareBuffer."Capacity Overhead" := TempCostShareBuffer."Indirect Cost";

        TempCostShareBuffer."New Quantity" := TempCostShareBuffer.Quantity;
        TempCostShareBuffer."New Direct Cost" := TempCostShareBuffer."Direct Cost";
        TempCostShareBuffer."New Indirect Cost" := TempCostShareBuffer."Indirect Cost";
        TempCostShareBuffer."New Revaluation" := TempCostShareBuffer.Revaluation;
        TempCostShareBuffer."New Variance" := TempCostShareBuffer.Variance;
        TempCostShareBuffer."New Rounding" := TempCostShareBuffer.Rounding;

        TempCostShareBuffer."New Purchase Variance" := TempCostShareBuffer."Purchase Variance";
        TempCostShareBuffer."New Material Variance" := TempCostShareBuffer."Material Variance";
        TempCostShareBuffer."New Capacity Variance" := TempCostShareBuffer."Capacity Variance";
        TempCostShareBuffer."New Capacity Overhead Variance" := TempCostShareBuffer."Capacity Overhead Variance";
        TempCostShareBuffer."New Mfg. Overhead Variance" := TempCostShareBuffer."Mfg. Overhead Variance";
        TempCostShareBuffer."New Subcontracted Variance" := TempCostShareBuffer."Subcontracted Variance";

        TempCostShareBuffer."New Material" := TempCostShareBuffer.Material;
        TempCostShareBuffer."New Capacity" := TempCostShareBuffer.Capacity;
        TempCostShareBuffer."New Capacity Overhead" := TempCostShareBuffer."Capacity Overhead";
        TempCostShareBuffer."New Material Overhead" := TempCostShareBuffer."Material Overhead";
        TempCostShareBuffer."New Subcontracted" := TempCostShareBuffer.Subcontracted;
        TempCostShareBuffer.Insert();
    end;

    local procedure GetValueEntryCostAmts(var CostShareBuf: Record "Cost Share Buffer"; ValueEntry: Record "Value Entry")
    begin
        case ValueEntry."Entry Type" of
            ValueEntry."Entry Type"::"Direct Cost":
                CostShareBuf."Direct Cost" := CostShareBuf."Direct Cost" + ValueEntry."Cost Amount (Actual)" + ValueEntry."Cost Amount (Expected)";
            ValueEntry."Entry Type"::"Indirect Cost":
                CostShareBuf."Indirect Cost" := CostShareBuf."Indirect Cost" + ValueEntry."Cost Amount (Actual)" + ValueEntry."Cost Amount (Expected)";
            ValueEntry."Entry Type"::Variance:
                begin
                    CostShareBuf.Variance := CostShareBuf.Variance + ValueEntry."Cost Amount (Actual)";
                    case ValueEntry."Variance Type" of
                        ValueEntry."Variance Type"::Purchase:
                            CostShareBuf."Purchase Variance" := CostShareBuf."Purchase Variance" + ValueEntry."Cost Amount (Actual)" + ValueEntry."Cost Amount (Expected)";
                        ValueEntry."Variance Type"::Material:
                            CostShareBuf."Material Variance" := CostShareBuf."Material Variance" + ValueEntry."Cost Amount (Actual)" + ValueEntry."Cost Amount (Expected)";
                        ValueEntry."Variance Type"::Capacity:
                            CostShareBuf."Capacity Variance" := CostShareBuf."Capacity Variance" + ValueEntry."Cost Amount (Actual)" + ValueEntry."Cost Amount (Expected)";
                        ValueEntry."Variance Type"::"Capacity Overhead":
                            CostShareBuf."Capacity Overhead Variance" :=
                              CostShareBuf."Capacity Overhead Variance" + ValueEntry."Cost Amount (Actual)" + ValueEntry."Cost Amount (Expected)";
                        ValueEntry."Variance Type"::"Manufacturing Overhead":
                            CostShareBuf."Mfg. Overhead Variance" :=
                              CostShareBuf."Mfg. Overhead Variance" + ValueEntry."Cost Amount (Actual)" + ValueEntry."Cost Amount (Expected)";
                        ValueEntry."Variance Type"::Subcontracted:
                            CostShareBuf."Subcontracted Variance" :=
                              CostShareBuf."Subcontracted Variance" + ValueEntry."Cost Amount (Actual)" + ValueEntry."Cost Amount (Expected)";
                    end;
                end;
            ValueEntry."Entry Type"::Revaluation:
                CostShareBuf.Revaluation := CostShareBuf.Revaluation + ValueEntry."Cost Amount (Actual)" + ValueEntry."Cost Amount (Expected)";
            ValueEntry."Entry Type"::Rounding:
                CostShareBuf.Rounding := CostShareBuf.Rounding + ValueEntry."Cost Amount (Actual)" + ValueEntry."Cost Amount (Expected)";
        end;
    end;

    local procedure IsInCostingPeriod(PostingDate: Date): Boolean
    begin
        if EndDate <> 0D then
            exit(PostingDate in [StartDate .. EndDate]);
        exit(PostingDate >= StartDate);
    end;

    local procedure SrvTrPrintInvtCostShareBufFtr4(): Boolean
    begin
        if CostSharePrint in [CostSharePrint::Sales, CostSharePrint::Inventory] then begin
            TempCostShareBuffer."Item No." := ItemPrint."No.";
            TempCostShareBuffer.Description := ItemPrint.Description;
        end else begin
            TempCostShareBuffer."Item No." := ProdOrderPrint."No.";
            TempCostShareBuffer.Description := ProdOrderPrint.Description;
            TempCostShareBuffer."New Quantity" := ProdOrderPrint.Quantity;
        end;
        exit(ShowDetails);
    end;

    local procedure SrvTrPrintInvtCostShareBufFtr5(): Boolean
    begin
        if CostSharePrint = CostSharePrint::"WIP Inventory" then begin
            TempCostShareBuffer."Item No." := ProdOrderPrint."No.";
            TempCostShareBuffer."New Quantity" := ProdOrderPrint.Quantity;
        end;
        exit(not ShowDetails);
    end;

    procedure InitializeRequest(NewStartDate: Date; NewEndDate: Date; NewPrintCostShare: Option; NewShowDetails: Boolean)
    begin
        StartDate := NewStartDate;
        EndDate := NewEndDate;
        CostSharePrint := NewPrintCostShare;
        ShowDetails := NewShowDetails;
    end;

    [IntegrationEvent(false, false)]
    local procedure OnCalcRemainingQtyOnAfterSetRemainingQty(FromItemLedgerEntry: Record "Item Ledger Entry"; var RemainingQty: Decimal; OldRemainingQty: Decimal)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnForwardItemLedgEntryCostShareOnBeforeCheckCostShareQtyCondition(CostShareBuffer: Record "Cost Share Buffer"; ItemApplicationEntry: Record "Item Application Entry"; var AppliedQty: Decimal; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnInsertItemLedgEntryCostShareOnAfterSetQuantity(ItemLedgerEntry: Record "Item Ledger Entry"; var TempCostShareBuffer: Record "Cost Share Buffer" temporary)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnUpdateCostShareBufFromInvAdjmtEntryOrderOnBeforeApplyShareOfCost(ItemLedgerEntry: Record "Item Ledger Entry"; var CostShareBuffer: Record "Cost Share Buffer"; var InventoryAdjmtEntryOrder: Record "Inventory Adjmt. Entry (Order)"; OutputQuantity: Decimal; var ShareOfCost: Decimal; var IsHandled: Boolean)
    begin
    end;
}