P_RASchedDistinctItem

DDL: P_RASCHEDDISTINCTITEM Type: view_entity COMPOSITE Package: ODATA_FARR_REVENUESCHEDULE

Revenue Schedule: Distinct/Compound POB

P_RASchedDistinctItem is a Composite CDS View that provides data about "Revenue Schedule: Distinct/Compound POB" in SAP S/4HANA. It reads from 2 data sources (I_RAPerformanceObligation, P_RASchedAllocatedAmtPerPerd) and exposes 52 fields with key fields PerformanceObligation, FiscalYear, FiscalPeriod, RevenueAccountingContract. Part of development package ODATA_FARR_REVENUESCHEDULE.

Data Sources (2)

SourceAliasJoin Type
I_RAPerformanceObligation RAPerformanceObligation inner
P_RASchedAllocatedAmtPerPerd RevAcctgAllocatedAmtPerPerd from

Annotations (3)

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

Fields (52)

KeyFieldSource TableSource FieldDescription
KEY PerformanceObligation P_RASchedAllocatedAmtPerPerd PerformanceObligation
KEY FiscalYear P_RASchedAllocatedAmtPerPerd FiscalYear
KEY FiscalPeriod P_RASchedAllocatedAmtPerPerd FiscalPeriod
KEY RevenueAccountingContract P_RASchedAllocatedAmtPerPerd RevenueAccountingContract
RAHigherLevelPerfOblgn I_RAPerformanceObligation RAHigherLevelPerfOblgn
CompanyCode I_RAPerformanceObligation CompanyCode
PerformanceObligationClass I_RAPerformanceObligation PerformanceObligationClass
PerformanceObligationStartDate I_RAPerformanceObligation PerformanceObligationStartDate
PerformanceObligationEndDate I_RAPerformanceObligation PerformanceObligationEndDate
PerfObligationDeferralMethod I_RAPerformanceObligation PerfObligationDeferralMethod
PerfOblgnStartDateType I_RAPerformanceObligation PerfOblgnStartDateType
PerfOblgnIsFullyFulfilled I_RAPerformanceObligation PerfOblgnIsFullyFulfilled
PerfOblgnIsFinallyInvoiced I_RAPerformanceObligation PerfOblgnIsFinallyInvoiced
PerfOblgnEventType I_RAPerformanceObligation PerfOblgnEventType
PerfOblgnFulfillmentType I_RAPerformanceObligation PerfOblgnFulfillmentType
Customer I_RAPerformanceObligation Customer
RAPerfOblgnDistinctType I_RAPerformanceObligation RAPerfOblgnDistinctType
SalesDocumentCurrency I_RAPerformanceObligation SalesDocumentCurrency
PerfOblgnEffectiveQuantityUnit I_RAPerformanceObligation PerfOblgnEffectiveQuantityUnit
PerfOblgnContractualQtyUnit I_RAPerformanceObligation PerfOblgnContractualQtyUnit
RatioUnit
PerUnitSSPriceInSlsDocCrcy I_RAPerformanceObligation PerUnitSSPriceInSlsDocCrcy
SSPriceInSalesDocCrcy I_RAPerformanceObligation SSPriceInSalesDocCrcy
PerfOblgnContractualQuantity I_RAPerformanceObligation PerfOblgnContractualQuantity
AllocatedPriceInSalesDocCrcy
ContractualPrcInSlsDocCrcy
CumltvEffectiveAmtInSlsDocCrcy
TolEffectiveCostPerPerd P_RASchedAllocatedAmtPerPerd TolEffectiveCostPerPerd
PerPerdInvoicedAmtInSlsDocCrcy
RecgdCatchUpAmtInSlsDocCrcy
PostedRevnInSlsDocCrcy
DeltaRecgdCostInSlsDocCrcy
PostedCostInSlsDocCrcy
UpToCurPeriodFulfilledQty
PerfOblgnEffectiveQuantity
PerfOblgnPerPeriodFulfilledQty
PerfOblgnDeltaInvoicedQuantity
RevnAcctgSenderComponent
RevnAcctgOperationalDocument
RAOperationalDocumentItem
RANumberOfOperationalDocument
TotalEffectiveAmtInSlsDocCrcy P_RASchedAllocatedAmtPerPerd TotalEffectiveAmtInSlsDocCrcy
TolRecognizedAmtPerPerd P_RASchedAllocatedAmtPerPerd TolRecognizedAmtPerPerd
TolRecgdAmtCatchupPerPerd P_RASchedAllocatedAmtPerPerd TolRecgdAmtCatchupPerPerd
_PerfOblgnStartDateType I_RAPerformanceObligation _PerfOblgnStartDateType
_PerfObligationEventType I_RAPerformanceObligation _PerfObligationEventType
_FulfillmentType I_RAPerformanceObligation _FulfillmentType
_Customer I_RAPerformanceObligation _Customer
_PerfOblgnDistinctType I_RAPerformanceObligation _PerfOblgnDistinctType
_Currency I_RAPerformanceObligation _Currency
_PerfOblgnContractualQtyUnit I_RAPerformanceObligation _PerfOblgnContractualQtyUnit
_PerfOblgnEffectiveQtyUnit I_RAPerformanceObligation _PerfOblgnEffectiveQtyUnit
@AccessControl.authorizationCheck: #NOT_REQUIRED

// @EndUserText.label: 'Revenue Schedule: Distinct/Compound POB'


@VDM.private: true
@VDM.viewType: #COMPOSITE

define view entity P_RASchedDistinctItem
  // Cumulative Amount

  as select from           P_RASchedAllocatedAmtPerPerd   as RevAcctgAllocatedAmtPerPerd

  // POB

    inner join             I_RAPerformanceObligation      as RAPerformanceObligation
      on  RAPerformanceObligation.PerformanceObligation     = RevAcctgAllocatedAmtPerPerd.PerformanceObligation
      and RAPerformanceObligation.RevenueAccountingContract = RevAcctgAllocatedAmtPerPerd.RevenueAccountingContract

  // Delta Amount

    left outer to one join P_RASchedPerfOblgnAmtPerd      as RAPerfOblgnTotalAmtPerPeriod
      on  RevAcctgAllocatedAmtPerPerd.PerformanceObligation     = RAPerfOblgnTotalAmtPerPeriod.PerformanceObligation
      and RevAcctgAllocatedAmtPerPerd.FiscalYear                = RAPerfOblgnTotalAmtPerPeriod.FiscalYear
      and RevAcctgAllocatedAmtPerPerd.FiscalPeriod              = RAPerfOblgnTotalAmtPerPeriod.FiscalPeriod
      and RevAcctgAllocatedAmtPerPerd.RevenueAccountingContract = RAPerfOblgnTotalAmtPerPeriod.RevenueAccountingContract

  // Cumulative Quantity

    left outer to one join P_RASchedCumltvPerfOblgnQtyPer as RACumFulfilledQtyPerPerd
      on  RevAcctgAllocatedAmtPerPerd.PerformanceObligation     = RACumFulfilledQtyPerPerd.PerformanceObligation
      and RevAcctgAllocatedAmtPerPerd.FiscalYear                = RACumFulfilledQtyPerPerd.FiscalYear
      and RevAcctgAllocatedAmtPerPerd.FiscalPeriod              = RACumFulfilledQtyPerPerd.FiscalPeriod
      and RevAcctgAllocatedAmtPerPerd.RevenueAccountingContract = RACumFulfilledQtyPerPerd.RevenueAccountingContract

  // Delta Quantity

    left outer to one join P_RASchedPerfOblgnQtyPerd      as RAInvcAndFulfilledQtyPerPerd
      on  RAInvcAndFulfilledQtyPerPerd.PerformanceObligation     = RevAcctgAllocatedAmtPerPerd.PerformanceObligation
      and RAInvcAndFulfilledQtyPerPerd.FiscalYear                = RevAcctgAllocatedAmtPerPerd.FiscalYear
      and RAInvcAndFulfilledQtyPerPerd.FiscalPeriod              = RevAcctgAllocatedAmtPerPerd.FiscalPeriod
      and RAInvcAndFulfilledQtyPerPerd.RevenueAccountingContract = RevAcctgAllocatedAmtPerPerd.RevenueAccountingContract

  // Posted Amount

    left outer to one join P_RASchedPerfOblgnPostdAmtPerd as RAPerfOblgnPostedRevnPerPerd
      on  RevAcctgAllocatedAmtPerPerd.PerformanceObligation     = RAPerfOblgnPostedRevnPerPerd.PerformanceObligation
      and RevAcctgAllocatedAmtPerPerd.FiscalYear                = RAPerfOblgnPostedRevnPerPerd.FiscalYear
      and RevAcctgAllocatedAmtPerPerd.FiscalPeriod              = RAPerfOblgnPostedRevnPerPerd.FiscalPeriod
      and RevAcctgAllocatedAmtPerPerd.RevenueAccountingContract = RAPerfOblgnPostedRevnPerPerd.RevenueAccountingContract

{
      /*======Key===============================================*/
  key RevAcctgAllocatedAmtPerPerd.PerformanceObligation,
  key RevAcctgAllocatedAmtPerPerd.FiscalYear,
  key RevAcctgAllocatedAmtPerPerd.FiscalPeriod,
  key RevAcctgAllocatedAmtPerPerd.RevenueAccountingContract,

      /*======Associated Key====================================*/
      RAPerformanceObligation.RAHigherLevelPerfOblgn,

      cast(concat(RevAcctgAllocatedAmtPerPerd.FiscalYear, RevAcctgAllocatedAmtPerPerd.FiscalPeriod)
           as fis_jahrper_conv)                                                                                    as FiscalYearPeriod,

      cast(concat(RevAcctgAllocatedAmtPerPerd.FiscalPeriod, concat('.', RevAcctgAllocatedAmtPerPerd.FiscalYear))
           as fis_fiscalyearperiod_c preserving type)                                                              as FiscalYearPeriodCompoundText,

      /*======POB Data==========================================*/
      RAPerformanceObligation.CompanyCode,
      RAPerformanceObligation.PerformanceObligationClass,
      RAPerformanceObligation.PerformanceObligationStartDate,
      RAPerformanceObligation.PerformanceObligationEndDate,
      RAPerformanceObligation.PerfObligationDeferralMethod,
      RAPerformanceObligation.PerfOblgnStartDateType,
      RAPerformanceObligation.PerfOblgnIsFullyFulfilled,
      RAPerformanceObligation.PerfOblgnIsFinallyInvoiced,
      RAPerformanceObligation.PerfOblgnEventType,
      RAPerformanceObligation.PerfOblgnFulfillmentType,
      RAPerformanceObligation.Customer,

      // @ObjectModel.foreignKey.association: 'RAPerformanceObligation._PerfOblgnDistinctType'

      RAPerformanceObligation.RAPerfOblgnDistinctType,

      // UoM

      RAPerformanceObligation.SalesDocumentCurrency,
      RAPerformanceObligation.PerfOblgnEffectiveQuantityUnit,
      RAPerformanceObligation.PerfOblgnContractualQtyUnit,
      cast('%' as farr_quantity_unit)                                                                              as RatioUnit,

      // Price and Quantity

      @Semantics.amount.currencyCode: 'SalesDocumentCurrency'
      RAPerformanceObligation.PerUnitSSPriceInSlsDocCrcy,

      @Semantics.amount.currencyCode: 'SalesDocumentCurrency'
      RAPerformanceObligation.SSPriceInSalesDocCrcy,

      @Semantics.quantity.unitOfMeasure: 'PerfOblgnContractualQtyUnit'
      RAPerformanceObligation.PerfOblgnContractualQuantity,

      /*======Cumulative Amount==========================================*/
      @Semantics.amount.currencyCode: 'SalesDocumentCurrency'
      cast(RevAcctgAllocatedAmtPerPerd.TotalEffectiveAmtInSlsDocCrcy as farr_allocated_amt preserving type)        as AllocatedPriceInSalesDocCrcy,

      @Semantics.amount.currencyCode: 'SalesDocumentCurrency'
      cast(RevAcctgAllocatedAmtPerPerd.TotalDocAmtContractual as farr_price preserving type)                       as ContractualPrcInSlsDocCrcy,

      @Semantics.amount.currencyCode: 'SalesDocumentCurrency'
      cast(RevAcctgAllocatedAmtPerPerd.TotalDocAmtAllocatedEffect as farr_corr_amt preserving type)                as CumltvEffectiveAmtInSlsDocCrcy,

      @Semantics. amount.currencyCode: 'SalesDocumentCurrency'
      cast(RevAcctgAllocatedAmtPerPerd.TotalEffectiveAmtInSlsDocCrcy
           - RevAcctgAllocatedAmtPerPerd.TolRecgdAmtCatchupPerPerd
           - RevAcctgAllocatedAmtPerPerd.TolRecognizedAmtPerPerd
           as farr_open_revenue)                                                                                   as RAOpenRevnInSlsDocCrcy,

      // total cost

      @Semantics.amount.currencyCode: 'SalesDocumentCurrency'
      RevAcctgAllocatedAmtPerPerd.TolEffectiveCostPerPerd,

      // Open Cost

      @Semantics. amount.currencyCode: 'SalesDocumentCurrency'
      cast(RevAcctgAllocatedAmtPerPerd.TolEffectiveCostPerPerd
           - RevAcctgAllocatedAmtPerPerd.TolRecognizedCostPerPerd
           as farr_open_cost)                                                                                      as RAOpenCostInSlsDocCrcy,

      /*======Delta Amount==========================================*/
      // Delta Invoiced Amount

      @Semantics.amount.currencyCode: 'SalesDocumentCurrency'
      cast(RAPerfOblgnTotalAmtPerPeriod.DeltaInvoicedAmtPerPerd as farr_cds_invoiced_amount preserving type)       as PerPerdInvoicedAmtInSlsDocCrcy,

      // Delta Recognized Amount

      @Semantics.amount.currencyCode: 'SalesDocumentCurrency'
      cast(  RAPerfOblgnTotalAmtPerPeriod.DeltaRecognizedAmtPerPerd
          + RAPerfOblgnTotalAmtPerPeriod.DeltaRecgdAmtCatchupPerPerd as farr_recog_amt)                            as DeltaRecognizedAmtInSlsDocCrcy,

      // Delta Catch Up Amount

      @Semantics.amount.currencyCode: 'SalesDocumentCurrency'
      cast(RAPerfOblgnTotalAmtPerPeriod.DeltaRecgdAmtCatchupPerPerd as farr_cds_rev_catchup_amt preserving type)   as RecgdCatchUpAmtInSlsDocCrcy,

      // Delta Posted Amount

      @Semantics.amount.currencyCode: 'SalesDocumentCurrency'
      cast(RAPerfOblgnPostedRevnPerPerd.TotalPostgAmtInSlsDocCrcy * -1 as farr_post_price)                         as PostedRevnInSlsDocCrcy,

      // Delta Recognized Cost

      @Semantics.amount.currencyCode: 'SalesDocumentCurrency'
      cast(RAPerfOblgnTotalAmtPerPeriod.DeltaRecognizedCostPerPerd as farr_recog_cost preserving type)             as DeltaRecgdCostInSlsDocCrcy,

      // Delta Posted Cost

      @Semantics.amount.currencyCode: 'SalesDocumentCurrency'
      cast(RAPerfOblgnPostedRevnPerPerd.TotalPostgCostInSlsDocCrcy as farr_post_cost preserving type)              as PostedCostInSlsDocCrcy,

      /*======Cumulative Quantity==========================================*/
      // Cumulative Fulfilled Quantity

      @Semantics.quantity.unitOfMeasure: 'PerfOblgnEffectiveQuantityUnit'
      cast(RACumFulfilledQtyPerPerd.PerfOblgnCumltvFulfilledQty as farr_fulfilled_qty_to_cur_perd preserving type) as UpToCurPeriodFulfilledQty,

      // Cumulative Effective Quantity

      @Semantics.quantity.unitOfMeasure: 'PerfOblgnEffectiveQuantityUnit'
      cast(RACumFulfilledQtyPerPerd.PerfOblgnCumltvEffectiveQty as farr_cds_effective_quantity preserving type)    as PerfOblgnEffectiveQuantity,

      /*======Delta Quantity==========================================*/
      // Delta Fulfilled Quantity

      @Semantics.quantity.unitOfMeasure: 'PerfOblgnEffectiveQuantityUnit'
      cast(RAInvcAndFulfilledQtyPerPerd.DeltaPerfOblgnFulfilledQty as farr_cds_fulfilled_quantity)                 as PerfOblgnPerPeriodFulfilledQty,

      // Delta Invoiced Quantity

      @Semantics.quantity.unitOfMeasure: 'PerfOblgnContractualQtyUnit'
      cast(RAInvcAndFulfilledQtyPerPerd.PerfOblgnDeltaInvoicedQuantity  as farr_cds_invoiced_quantity)             as PerfOblgnDeltaInvoicedQuantity,

      /*======Calculated Fields==========================================*/
      // Revenue Fulfilled Progress = Recognized Revenue / Total Revenue

      @Semantics.quantity.unitOfMeasure: 'RatioUnit'
      cast(case RevAcctgAllocatedAmtPerPerd.TotalEffectiveAmtInSlsDocCrcy
             when 0 then 100
      // TODO: after setting the reference @Semantics.amount.currencyCode: 'SalesDocumentCurrency' to the underlying field in P_RASchedAllocatedAmtPerPerd,

      // use the commented-out code below!

             else round(100 * division(cast(  RevAcctgAllocatedAmtPerPerd.TolRecognizedAmtPerPerd
                                            + RevAcctgAllocatedAmtPerPerd.TolRecgdAmtCatchupPerPerd   as abap.dec(23,6)),
                                       cast(RevAcctgAllocatedAmtPerPerd.TotalEffectiveAmtInSlsDocCrcy as abap.dec(23,6)), 6), 2)
      // else round(100 * (  curr_to_decfloat_amount(RevAcctgAllocatedAmtPerPerd.TolRecognizedAmtPerPerd)

      //                   + curr_to_decfloat_amount(RevAcctgAllocatedAmtPerPerd.TolRecgdAmtCatchupPerPerd))

      //                / curr_to_decfloat_amount(RevAcctgAllocatedAmtPerPerd.TotalEffectiveAmtInSlsDocCrcy), 2)

           end as farr_fulfilled_rev_progress)                                                                     as RecognizedRevnUpToCurPerdPct,

      // FulfilledQtyUpToCurPerdRatio = Cumulative Fulfilled Quantity / Effective Quantity

      @Semantics.quantity.unitOfMeasure: 'RatioUnit'
      cast(case RACumFulfilledQtyPerPerd.PerfOblgnCumltvEffectiveQty
             when 0 then 0
             else round(100 * get_numeric_value(RACumFulfilledQtyPerPerd.PerfOblgnCumltvFulfilledQty)
                            / get_numeric_value(RACumFulfilledQtyPerPerd.PerfOblgnCumltvEffectiveQty), 2)
           end as farr_fulfilled_qty_progress)                                                                     as FulfilledQtyUpToCurPerdRatio,

      /*======DPC Fields==========================================*/
      cast('' as farr_cds_rai_srcco)                                                                               as RevnAcctgSenderComponent,
      cast('' as farr_operational_doc)                                                                             as RevnAcctgOperationalDocument,
      cast('' as farr_item_id)                                                                                     as RAOperationalDocumentItem,
      cast(0 as farr_num_of_oprational_doc)                                                                        as RANumberOfOperationalDocument,

      /*======Additional Fields for Consumer==========================================*/
      @Semantics.amount.currencyCode: 'SalesDocumentCurrency'
      RevAcctgAllocatedAmtPerPerd.TotalEffectiveAmtInSlsDocCrcy,

      @Semantics.amount.currencyCode: 'SalesDocumentCurrency'
      RevAcctgAllocatedAmtPerPerd.TolRecognizedAmtPerPerd,

      @Semantics.amount.currencyCode: 'SalesDocumentCurrency'
      RevAcctgAllocatedAmtPerPerd.TolRecgdAmtCatchupPerPerd,

      /*======Associated View=====================================*/
      //  RAPerformanceObligation._RevenueAccountingContract,

      RAPerformanceObligation._PerfOblgnStartDateType,
      RAPerformanceObligation._PerfObligationEventType,
      RAPerformanceObligation._FulfillmentType,
      RAPerformanceObligation._Customer,
      RAPerformanceObligation._PerfOblgnDistinctType,
      RAPerformanceObligation._Currency,
      RAPerformanceObligation._PerfOblgnContractualQtyUnit,
      RAPerformanceObligation._PerfOblgnEffectiveQtyUnit

}
where RAPerformanceObligation.RAPerfOblgnDistinctType = 'D' // Distinct

  and RAPerformanceObligation.PerfOblgnIsSoftDeleted  is initial