P_EBPC_Cost3

DDL: P_EBPC_COST3 Type: view_entity COMPOSITE Package: ODATA_CO_RT_PRODUCTION_COSTS

Event-Based Order Cost

P_EBPC_Cost3 is a Composite CDS View that provides data about "Event-Based Order Cost" in SAP S/4HANA. It reads from 4 data sources (I_LedgerCompanyCodeCrcyRolesVH, P_CoEvtBsdOrderKeyStatus, I_ProductCostCtrlgOrder, P_EBPC_Cost2) and exposes 71 fields with key fields OrderID, SelectedCurrencyBranch. Part of development package ODATA_CO_RT_PRODUCTION_COSTS.

Data Sources (4)

SourceAliasJoin Type
I_LedgerCompanyCodeCrcyRolesVH _LdgrCompCodeCrcy inner
P_CoEvtBsdOrderKeyStatus _OrderKeyStatus inner
I_ProductCostCtrlgOrder EvtBsdOrder inner
P_EBPC_Cost2 P_EBPC_Cost2 from

Parameters (4)

NameTypeDefault
P_Ledger fins_ledger
P_FromFiscalYearPeriod fins_fyearperiod
P_ToFiscalYearPeriod fins_fyearperiod
P_CurrencyRole fis_curtp

Annotations (4)

NameValueLevelField
AccessControl.authorizationCheck #NOT_REQUIRED view
Metadata.ignorePropagatedAnnotations true view
VDM.private true view
VDM.viewType #COMPOSITE view

Fields (71)

KeyFieldSource TableSource FieldDescription
KEY OrderID EBPCData OrderID
KEY SelectedCurrencyBranch EBPCData SelectedCurrencyBranch
ObjectInternalID I_ProductCostCtrlgOrder ObjectInternalID
OrderType I_ProductCostCtrlgOrder OrderType
OrderCategory I_ProductCostCtrlgOrder OrderCategory
ExternalOrder I_ProductCostCtrlgOrder ExternalOrder
OrderDescription I_ProductCostCtrlgOrder OrderDescription
Plant I_ProductCostCtrlgOrder Plant
CompanyCode EBPCData CompanyCode
BaseUnit
RatioUnit
Ledger
ControllingArea I_ProductCostCtrlgOrder ControllingArea
BusinessArea I_ProductCostCtrlgOrder BusinessArea
ProfitCenter I_ProductCostCtrlgOrder ProfitCenter
ResponsibleCostCenter I_ProductCostCtrlgOrder ResponsibleCostCenter
WBSElementInternalID I_ProductCostCtrlgOrder WBSElementInternalID
IsMarkedForDeletion I_ProductCostCtrlgOrder IsMarkedForDeletion
MfgOrderHasMultipleItems I_ProductCostCtrlgOrder MfgOrderHasMultipleItems
ActualCostsCostingVariant I_ProductCostCtrlgOrder ActualCostsCostingVariant
PlannedCostsCostingVariant I_ProductCostCtrlgOrder PlannedCostsCostingVariant
Material
PlannedReleaseDate I_ProductCostCtrlgOrder PlannedReleaseDate
PlannedCompletionDate I_ProductCostCtrlgOrder PlannedCompletionDate
CreatedByUser I_ProductCostCtrlgOrder CreatedByUser
CreationDate I_ProductCostCtrlgOrder CreationDate
LastChangedByUser I_ProductCostCtrlgOrder LastChangedByUser
LastChangeDate I_ProductCostCtrlgOrder LastChangeDate
TechnicalCompletionDate I_ProductCostCtrlgOrder TechnicalCompletionDate
ScheduledBasicEndDate I_ProductCostCtrlgOrder ScheduledBasicEndDate
ScheduledReleaseDate I_ProductCostCtrlgOrder ScheduledReleaseDate
ActualStartDate I_ProductCostCtrlgOrder ActualStartDate
ConfirmedEndDate I_ProductCostCtrlgOrder ConfirmedEndDate
ActualReleasedDate I_ProductCostCtrlgOrder ActualReleasedDate
ControllingObjectStatus
OrderKeyStatus
DisplayCurrency I_LedgerCompanyCodeCrcyRolesVH Currency
ValidityDate
CreditActlCostInDspCrcy
DebitActlCostInDspCrcy
ActlCostInDspCrcy
CrdtActlFxdCostInDspCrcy
DebitActlFxdCostInDspCrcy
ActlFixedCostInDspCrcy
DebitActlVarblCostInDspCrcy
CrdtActlVarblCostIndDspCrcy
CreditPlanCostInDspCrcy
DebitPlanCostInDspCrcy
CrdtPlnFxdCostInDspCrcy
DebitPlnFxdCostInDspCrcy
DebitPlnVarblCostInDspCrcy
CrdtPlnVarblCostInDspCrcy
PlanCostInDspCrcy
PlanFixedCostInDspCrcy
CrdtTargetCostInDspCrcy
DebitTargetCostInDspCrcy
TargetCostInDspCrcy
WIPCostInDspCrcy
UnrlzdCostRsrvAmtInDspCrcy
TotalWIPAmountInDspCrcy
CostVarianceInDspCrcy
InptPrVarcAmtInDspCrcy EBPCData InptPrVarcAmtInDspCrcy
InptQtyVarcAmtInDspCrcy EBPCData InptQtyVarcAmtInDspCrcy
RsceUsgeVarcAmtInDspCrcy EBPCData RsceUsgeVarcAmtInDspCrcy
LotSizeVarcAmtInDspCrcy EBPCData LotSizeVarcAmtInDspCrcy
RmngVarcAmtInDspCrcy EBPCData RmngVarcAmtInDspCrcy
DebitActlPlnDiffCostInDspCrcy
DebitActlTgtDiffCostInDspCrcy
PlanOutputQuantity
ActualOutputQuantity
ActlPlanDiffOutputQuantity
@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'

  )