@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@Metadata.ignorePropagatedAnnotations: true
@VDM.private: true
@VDM.viewType: #COMPOSITE
define view entity P_EBPC_Cost3
with parameters
P_Ledger : fins_ledger,
P_FromFiscalYearPeriod : fins_fyearperiod,
P_ToFiscalYearPeriod : fins_fyearperiod,
P_CurrencyRole : fis_curtp
as select from P_EBPC_Cost2( P_Ledger : $parameters.P_Ledger,
P_FromFiscalYearPeriod : $parameters.P_FromFiscalYearPeriod,
P_ToFiscalYearPeriod : $parameters.P_ToFiscalYearPeriod,
P_CurrencyRole : $parameters.P_CurrencyRole ) as EBPCData
inner join I_ProductCostCtrlgOrder as EvtBsdOrder on EBPCData.OrderID = EvtBsdOrder.OrderID
and EBPCData.CompanyCode = EvtBsdOrder.CompanyCode
//Order Key Statuses - REL, PREL, CNF, DLV, CLSD, TECO, DLFL
inner join P_CoEvtBsdOrderKeyStatus as _OrderKeyStatus on EvtBsdOrder.ObjectInternalID = _OrderKeyStatus.ControllingObject
inner join I_LedgerCompanyCodeCrcyRolesVH as _LdgrCompCodeCrcy on _LdgrCompCodeCrcy.Ledger = $parameters.P_Ledger
and _LdgrCompCodeCrcy.CompanyCode = EBPCData.CompanyCode
and _LdgrCompCodeCrcy.CurrencyRole = $parameters.P_CurrencyRole
// Order Quantities
left outer to one join P_EBPC_MfgOutputQuantity( P_FromFiscalYearPeriod: $parameters.P_FromFiscalYearPeriod,
P_ToFiscalYearPeriod : $parameters.P_ToFiscalYearPeriod ) as _OrderOutpQty on _OrderOutpQty.ControllingObject = EvtBsdOrder.ObjectInternalID
{
key EBPCData.OrderID,
@Environment.sql.passValue: true
key EBPCData.SelectedCurrencyBranch,
EvtBsdOrder.ObjectInternalID,
// Order Header /////////////////////////////////////////////////
EvtBsdOrder.OrderType,
EvtBsdOrder.OrderCategory,
EvtBsdOrder.ExternalOrder,
EvtBsdOrder.OrderDescription,
EvtBsdOrder.Plant,
EBPCData.CompanyCode,
cast(_OrderOutpQty.CostCtrActivityTypeQtyUnit as fis_meinh) as BaseUnit,
cast('%' as msehi) as RatioUnit,
// Assignment ///////////////////////////////////////////////////
$parameters.P_Ledger as Ledger,
EvtBsdOrder.ControllingArea,
EvtBsdOrder.BusinessArea,
EvtBsdOrder.ProfitCenter,
EvtBsdOrder.ResponsibleCostCenter,
EvtBsdOrder.WBSElementInternalID,
EvtBsdOrder.IsMarkedForDeletion,
EvtBsdOrder.MfgOrderHasMultipleItems,
EvtBsdOrder.ActualCostsCostingVariant,
EvtBsdOrder.PlannedCostsCostingVariant,
EvtBsdOrder._RepresentativeOrderItem.Material as Material,
// Process //////////////////////////////////////////////////////
EvtBsdOrder.PlannedReleaseDate,
EvtBsdOrder.PlannedCompletionDate,
EvtBsdOrder.CreatedByUser,
EvtBsdOrder.CreationDate,
EvtBsdOrder.LastChangedByUser,
EvtBsdOrder.LastChangeDate,
EvtBsdOrder.TechnicalCompletionDate,
// Order Header PPS Orders //////////////////////////////////////
EvtBsdOrder.ScheduledBasicEndDate,
EvtBsdOrder.ScheduledReleaseDate,
EvtBsdOrder.ActualStartDate,
EvtBsdOrder.ConfirmedEndDate,
EvtBsdOrder.ActualReleasedDate,
// Order Status /////////////////////////////////////////////////
cast(_OrderKeyStatus.ControllingObjectStatus as fco_current_order_status) as ControllingObjectStatus,
// Order Key Status /////////////////////////////////////////////////
cast(_OrderKeyStatus.StatusCode as fco_current_order_key_status) as OrderKeyStatus,
// Currency /////////////////////////////////////////////////////
_LdgrCompCodeCrcy.Currency as DisplayCurrency,
@Semantics.businessDate.at: true
cast(substring( cast(tstmp_current_utctimestamp() as abap.char( 17 ) ), 1, 8 ) as abap.dats ) as ValidityDate,
// Order Actual Costs ///////////////////////////////////////////
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.CreditActlCostInDspCrcy as fis_cr_actlcost_in_dspcrcy) as CreditActlCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.DebitActlCostInDspCrcy as fis_dr_actlcost_in_dspcrcy) as DebitActlCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.CreditActlCostInDspCrcy + EBPCData.DebitActlCostInDspCrcy as fis_actlcost_in_dspcrcy ) as ActlCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.CrdtActlFxdCostInDspCrcy as fis_cr_actlfxdcost_in_dspcrcy) as CrdtActlFxdCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.DebitActlFixedCostInDspCrcy as fis_dr_actlfxdcost_in_dspcrcy) as DebitActlFxdCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.CrdtActlFxdCostInDspCrcy + EBPCData.DebitActlFixedCostInDspCrcy as fis_actlfixedcost_in_dspcrcy) as ActlFixedCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.DebitActlCostInDspCrcy - EBPCData.DebitActlFixedCostInDspCrcy as fis_dr_actlvarblcost_indspcrcy) as DebitActlVarblCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.CreditActlCostInDspCrcy - EBPCData.CrdtActlFxdCostInDspCrcy as fis_cr_actlvarblcost_indspcrcy) as CrdtActlVarblCostIndDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.DebitActlCostInDspCrcy - EBPCData.DebitActlFixedCostInDspCrcy +
EBPCData.CreditActlCostInDspCrcy - EBPCData.CrdtActlFxdCostInDspCrcy as fis_actlvarblcost_in_dspcrcy) as ActlVarblCostInDspCrcy,
// Order Plan Costs /////////////////////////////////////////////
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.CreditPlanCostInDspCrcy as fis_cr_plancost_in_dspcrcy) as CreditPlanCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.DebitPlanCostInDspCrcy as fis_dr_plancost_in_dspcrcy) as DebitPlanCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.CreditPlanFxdCostInDspCrcy as fis_cr_plnfxdcost_in_dspcrcy) as CrdtPlnFxdCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.DebitPlanFxdCostInDspCrcy as fis_dr_plnfxdcost_in_dspcrcy) as DebitPlnFxdCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.DebitPlanCostInDspCrcy - EBPCData.DebitPlanFxdCostInDspCrcy as fis_dr_plnvarblcost_in_dspcrcy) as DebitPlnVarblCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.CreditPlanCostInDspCrcy - EBPCData.CreditPlanFxdCostInDspCrcy as fis_cr_plnvarblcost_in_dspcrcy) as CrdtPlnVarblCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.DebitPlanCostInDspCrcy - EBPCData.DebitPlanFxdCostInDspCrcy +
EBPCData.CreditPlanCostInDspCrcy - EBPCData.CreditPlanFxdCostInDspCrcy as fis_planvarblcost_in_dspcrcy) as PlanVarblCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.DebitPlanCostInDspCrcy + EBPCData.CreditPlanCostInDspCrcy as fis_plancost_in_dspcrcy) as PlanCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.DebitPlanFxdCostInDspCrcy + EBPCData.CreditPlanFxdCostInDspCrcy as fis_planfixedcost_in_dspcrcy) as PlanFixedCostInDspCrcy,
// Order Target Costs ///////////////////////////////////////////
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.CrdtTargetCostInDspCrcy as fis_cr_tgtcost_in_dspcrcy) as CrdtTargetCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.DebitTargetCostInDspCrcy as fis_dr_tgtcost_in_dspcrcy) as DebitTargetCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast((EBPCData.CrdtTargetCostInDspCrcy + EBPCData.DebitTargetCostInDspCrcy) as fis_tgtcost_in_dspcrcy) as TargetCostInDspCrcy,
// Order WIP Costs //////////////////////////////////////////////
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.WIPCostInDspCrcy as fis_wipcost_in_dspcrcy) as WIPCostInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.UnrlzdCostRsrvAmtInDspCrcy as fis_abgruekfk) as UnrlzdCostRsrvAmtInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast((EBPCData.WIPCostInDspCrcy + EBPCData.UnrlzdCostRsrvAmtInDspCrcy) as abgbesges) as TotalWIPAmountInDspCrcy,
// Order Variances Costs ////////////////////////////////////////
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast(EBPCData.CostVarianceInDspCrcy as fco_eb_totalvarcamt_in_dspcrcy) as CostVarianceInDspCrcy,
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
EBPCData.InptPrVarcAmtInDspCrcy, //SLALineType = 09130
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
EBPCData.InptQtyVarcAmtInDspCrcy, //SLALineType = 09131
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
EBPCData.RsceUsgeVarcAmtInDspCrcy, //SLALineType = 09132
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
EBPCData.LotSizeVarcAmtInDspCrcy, //SLALineType = 09139
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
EBPCData.RmngVarcAmtInDspCrcy, //SLALineType = 09140
/////////////////////////////////////////////////////////////////////////////////////
// Calculates deviations
/////////////////////////////////////////////////////////////////////////////////////
// Deviations: Actual - Plan ////////////////////////////////////
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast((EBPCData.DebitActlCostInDspCrcy - EBPCData.DebitPlanCostInDspCrcy) as fis_dractlplndiffcostindspcrcy) as DebitActlPlnDiffCostInDspCrcy,
@Semantics: { quantity : {unitOfMeasure: 'RatioUnit'} }
cast( case
when EBPCData.DebitPlanCostInDspCrcy <> 0
then round(division((EBPCData.DebitActlCostInDspCrcy - EBPCData.DebitPlanCostInDspCrcy),
EBPCData.DebitPlanCostInDspCrcy, 5) * 100, 2)
else
case
when EBPCData.DebitActlCostInDspCrcy = 0
then 0
else 100
end
end as fis_dr_cocrcy_actlplndiffpct ) as DebitActlPlanDiffPercent,
// Deviations: Actual - Target //////////////////////////////////
@Semantics: { amount : {currencyCode: 'DisplayCurrency'} }
cast((EBPCData.DebitActlCostInDspCrcy - EBPCData.DebitTargetCostInDspCrcy) as fis_dractltgtdiffcostindspcrcy) as DebitActlTgtDiffCostInDspCrcy,
@Semantics: { quantity : {unitOfMeasure: 'RatioUnit'} }
cast( case
when EBPCData.DebitTargetCostInDspCrcy <> 0
then round(division((EBPCData.DebitActlCostInDspCrcy - EBPCData.DebitTargetCostInDspCrcy),
EBPCData.DebitTargetCostInDspCrcy, 5) * 100, 2)
else
case
when EBPCData.DebitActlCostInDspCrcy = 0
then 0
else 100
end
end as fis_dr_cocrcy_actltgtdiffpct ) as DebitActlTgtDiffPercent,
// Output Quantities ////////////////////////////////////////////
@Semantics: { quantity : {unitOfMeasure: 'BaseUnit'} }
cast(_OrderOutpQty.PlanOutputQuantity as fis_plan_output_quantity) as PlanOutputQuantity,
@Semantics: { quantity : {unitOfMeasure: 'BaseUnit'} }
cast(_OrderOutpQty.ActualOutputQuantity as fis_actual_output_quantity) as ActualOutputQuantity,
@Semantics: { quantity : {unitOfMeasure: 'BaseUnit'} }
cast((_OrderOutpQty.ActualOutputQuantity - _OrderOutpQty.PlanOutputQuantity) as fis_actlplandiffoutputquantity) as ActlPlanDiffOutputQuantity,
@Semantics: { quantity : {unitOfMeasure: 'RatioUnit'} }
cast( case
when _OrderOutpQty.PlanOutputQuantity <> 0
then round(division(cast(_OrderOutpQty.ActualOutputQuantity - _OrderOutpQty.PlanOutputQuantity as abap.dec(15,3)), cast(_OrderOutpQty.PlanOutputQuantity as abap.dec(15,3)), 5) * 100, 2)
else
case
when _OrderOutpQty.ActualOutputQuantity <> 0
then 100
else 0
end
end as fis_actlplandiffoutpqtypercent) as ActlPlanDiffOutpQtyPercent
}
where
EvtBsdOrder.OrderIsEventBasedPosting = 'X'
and(
(
EvtBsdOrder.ActualReleasedDate is not initial // filters Released Orders '10', '40' only
and(
EvtBsdOrder.OrderCategory = '10'
or EvtBsdOrder.OrderCategory = '40'
)
)
or EvtBsdOrder.OrderCategory = '05' // ActualReleasedDate is not filled for Released Orders '05'
)