You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 10 Next »

General presentation

Objective of the application

Functional Specification Document:


Tool Leader + IT leader of the application: 

Usage information

History

Roles & Access

Roles and access

List of application role + menu role  and explanation if we have several applications role with specials rules.

Role CodeRole DescriptionExplanation
 ZR_RCS_CA_M69MS - Model S  Role for queries and workbook

  
   

Authorization objects

List of autorisation objects mandatory for the application.

Authorization objectExplanation
 C_COMPCDE__C_AUTHMA Query authorization object
  CPFCTR1_2 Query authorization object
 C_COMPCDE__C_MNGAREA Query authorization object
C_COMPPRSQuery authorization object

Dataflow overview

Functional and Technical rules on Workbench + Reporting

Rules & Explanations

Main steps:

  1. Extract quantity total stock from ADSO ABMMIC01 in ADSO APCOMS01 with help of query BW_QRY_ABMMIC01_0001.

    The principal thing to know here it's about the way to extract the data.

    The goal is to extract and stock in APCOMS01 "Quantity Total Stock" 0TOTALSTCK from ABMMIC01. Info object 0TOTALSTCK is not physically stored in invenotry DSO. The only way to extract the key figure is to use a query as datasource (BW_QRY_ABMMIC01_0001).

    In query BW_QRY_ABMMIC01_0001 we used a variable "V_CALMONTH11" based on class ZCL_BIU001_V_0CALMONTH_0031.

    The class determine the month to load from current date and more or less x month(s). To know the number of months to add or removre from current date, the class read master data global filter (C_GLBFILT) on stream "STOCK_LOG":

    Normally, by default the month to load in ADSO APCOMS01 is current month - 1. To load other month it's necessary to change fields "low" and / or "hight" in master data.
    It's in ADSO APCOMS01 where we define by default C_SOURCE = LOGISTIC. We will use this field in filters to extract data from caclulation views to separate LOGISTIC data and WORKING CAPITAL (equal TRANSIT) data.

  2. Use calculation views to consolidate the different data sources.
    1. See details on calculation views here.
      To use calculation views to load ADSO APCOMS04 we have two infopackages:
      • IP: DTS_CV_FMCO_CO_MS_IM_FINAL - Full -Logistic-Prev Month → filter on calmonth to have by default current month - 1 and filter on field C_SOURCE to have only "LOGISTIC" data (from APCOMS01).
      • IP: DTS_CV_FMCO_CO_MS_IM_FINAL - Full -WC-LastDayPrevMonth → filter on posting date to have by default the last day of previous month and filter on C_SOURCE to have only "WORKING CAPITAL" data (equal TRANSIT data, from DBFIGL13).

  3. Load ADSO ABCOMS01 and calculate key figuress for Model S.
    Last step is to caculate all key figures for Model S report, It's done in transformation TRSF: APCOMS04 -> ADSO ABCOMS01.

    In start routine, we delete some lines according to their company code or plant. Company code and plant to exclude are defined in master data global filter (C_GLBFILT) in stream "MODEL S" and rule "PLANT" or "COMPCDE":


    During the loading, the transformation will convert the unit and currencies key figures with help of conversion type UOM_MATNR2 (units) and CTK_MODELS (currencies).

    In end routine, we use key figures previously converted to create new ones:

    LabelFieldCalcul in abap (end routine)
    Lot Size (ManPlant)LOTSIZE_IT 
    LOTSIZE_IT_PLANTLOTSIZE_IT_PLANT 
    Quantity Total StockK_TOTSTK 
    Quantity/BIC/K_QTY 
    Total Stock (Log + Transit )K_TOTALSTK <RESULT_FIELDS>-K_TOTALSTK =
     <result_fields>-K_TOTSTK + <result_fields>-/BIC/K_QTY.
    K_CP_LOG_MP K_CP_LOG_MP  
    K_CNP_LOG_MPK_CNP_LOG_MP 
    K_AMO_LOG_MPK_AMO_LOG_MP 
    Variable in end routine
    CP + CNP + AMO (Conv) ManP Logistic
    V_CP_CNP_AMO_MANP_LOG
    K_CP_CNP_AMO_MP_LOG
    V_CP_CNP_AMO_MANP_LOG = 
    <result_fields>-K_CP_LOG_MP + <result_fields>-K_CNP_LOG_MP + <result_fields>-K_AMO_LOG_MP.
    K_CP_LOG_PK_CP_LOG_P 
    Stock IM Logisitic - CPK_STOCK_IM_LOG_CP        IF  V_CP_CNP_AMO_MANP_LOG <> 0.
              IF <result_fields>-LOTSIZE_IT <> 0. "IF divisor <> 0.
                <result_fields>-K_STOCK_IM_LOG_CP =
                <result_fields>-K_CP_LOG_MP * <result_fields>-K_TOTSTK /
                <result_fields>-LOTSIZE_IT.
              ELSE. "IF divisor = 0.
                <result_fields>-K_STOCK_IM_LOG_CP = 0.
              ENDIF.
            ELSE.
              IF <result_fields>-LOTSIZE_IT_PLANT <> 0. "IF divisor <> 0.
                <result_fields>-K_STOCK_IM_LOG_CP =
                <result_fields>-K_CP_LOG_P * <result_fields>-K_TOTSTK /
                <result_fields>-LOTSIZE_IT_PLANT.
              ELSE. "IF divisor = 0.
                <result_fields>-K_STOCK_IM_LOG_CP = 0.
              ENDIF.
            ENDIF.
    K_CNP_LOG_PK_CNP_LOG_P 
    Stock IM Logistic - CNPK_STOCK_IM_LOG_CNP        IF  V_CP_CNP_AMO_MANP_LOG <> 0.
              IF <result_fields>-LOTSIZE_IT <> 0.
              "IF lotsize Man. Plant <> 0.
                <result_fields>-K_STOCK_IM_LOG_CNP =
                <result_fields>-K_CNP_LOG_MP * <result_fields>-K_TOTSTK /
                <result_fields>-LOTSIZE_IT.
              ELSE. "IF divisor = 0.
                <result_fields>-K_STOCK_IM_LOG_CNP = 0.
              ENDIF.
            ELSE.
              IF <result_fields>-LOTSIZE_IT_PLANT <> 0.
              "IF lotsize plant <> 0.
                <result_fields>-K_STOCK_IM_LOG_CNP =
                <result_fields>-K_CNP_LOG_P * <result_fields>-K_TOTSTK /
                <result_fields>-LOTSIZE_IT_PLANT.
              ELSE. "IF divisor = 0.
                <result_fields>-K_STOCK_IM_LOG_CNP = 0.
              ENDIF.
            ENDIF.
    K_AMO_LOG_PK_AMO_LOG_P 
    Stock IM Logistic - AMOK_STOCK_IM_LOG_AMO      IF  V_CP_CNP_AMO_MANP_LOG <> 0.
              IF <result_fields>-LOTSIZE_IT <> 0.
              "IF lotsize Man. Plant <> 0.
                <result_fields>-K_STOCK_IM_LOG_AMO =
                <result_fields>-K_AMO_LOG_MP * <result_fields>-K_TOTSTK /
                <result_fields>-LOTSIZE_IT.
              ELSE. "IF divisor = 0.
                <result_fields>-K_STOCK_IM_LOG_AMO = 0.
              ENDIF.
            ELSE.
              IF <result_fields>-LOTSIZE_IT_PLANT <> 0.
              "IF lotsize plant <> 0.
                <result_fields>-K_STOCK_IM_LOG_AMO =
                <result_fields>-K_AMO_LOG_P * <result_fields>-K_TOTSTK /
                <result_fields>-LOTSIZE_IT_PLANT.
              ELSE. "IF divisor = 0.
                <result_fields>-K_STOCK_IM_LOG_AMO = 0.
              ENDIF.
            ENDIF.
    K_CP_TRA_PK_CP_TRA_P 
    K_CP_TRA_MPK_CP_TRA_MP 
    K_CNP_TRA_MPK_CNP_TRA_MP 
    K_AMO_WC_MPK_AMO_WC_MP 
    Variable in end routine
    CP + CNP + AMO (Conv) ManP Transit
    Variable in end routine
    V_CP_CNP_AMO_MANP_TRA
    K_CP_CNP_AMO_MP_TRA
            V_CP_CNP_AMO_MANP_TRA = <result_fields>-K_CP_TRA_MP +
            <result_fields>-K_CNP_TRA_MP + <result_fields>-K_AMO_WC_MP.
    Stock IM Transit - CPK_STOCK_IM_TRA_CP        IF  V_CP_CNP_AMO_MANP_TRA <> 0.
              IF <result_fields>-LOTSIZE_IT <> 0.
              "IF lotsize Man. Plant <> 0.
                <result_fields>-K_STOCK_IM_TRA_CP =
                <result_fields>-K_CP_TRA_MP * <result_fields>-/BIC/K_QTY /
                <result_fields>-LOTSIZE_IT.
              ELSE. "IF divisor = 0.
                <result_fields>-K_STOCK_IM_TRA_CP = 0.
              ENDIF.
            ELSE.
              IF <result_fields>-LOTSIZE_IT_PLANT <> 0.
              "IF lotsize plant <> 0.
                <result_fields>-K_STOCK_IM_TRA_CP =
                <result_fields>-K_CP_TRA_P * <result_fields>-/BIC/K_QTY /
                <result_fields>-LOTSIZE_IT_PLANT.
              ELSE. "IF divisor = 0.
                <result_fields>-K_STOCK_IM_TRA_CP = 0.
              ENDIF.
            ENDIF.
    K_CNP_TRA_PK_CNP_TRA_P 
    Stock IM Transit - CNPK_STOCK_IM_TRA_CNP        IF  V_CP_CNP_AMO_MANP_TRA <> 0.
              IF <result_fields>-LOTSIZE_IT <> 0.
              "IF lotsize Man. Plant <> 0.
                <result_fields>-K_STOCK_IM_TRA_CNP =
                <result_fields>-K_CNP_TRA_MP * <result_fields>-/BIC/K_QTY /
                <result_fields>-LOTSIZE_IT.
              ELSE. "IF divisor = 0.
                <result_fields>-K_STOCK_IM_TRA_CNP = 0.
              ENDIF.
            ELSE.
              IF <result_fields>-LOTSIZE_IT_PLANT <> 0.
              "IF lotsize plant <> 0.
                <result_fields>-K_STOCK_IM_TRA_CNP =
                <result_fields>-K_CNP_TRA_P * <result_fields>-/BIC/K_QTY /
                <result_fields>-LOTSIZE_IT_PLANT.
              ELSE. "IF divisor = 0.
                <result_fields>-K_STOCK_IM_TRA_CNP = 0.
              ENDIF.
            ENDIF.
    K_AMO_WC_PK_AMO_WC_P 
    Stock IM Transit - AMOK_STOCK_IM_TRA_AMO        IF  V_CP_CNP_AMO_MANP_TRA <> 0.
              IF <result_fields>-LOTSIZE_IT <> 0.
              "IF lotsize Man. Plant <> 0.
                <result_fields>-K_STOCK_IM_TRA_AMO =
                <result_fields>-K_AMO_WC_MP * <result_fields>-/BIC/K_QTY /
                <result_fields>-LOTSIZE_IT.
              ELSE. "IF divisor = 0.
                <result_fields>-K_STOCK_IM_TRA_AMO = 0.
              ENDIF.
            ELSE.
              IF <result_fields>-LOTSIZE_IT_PLANT <> 0.
              "IF lotsize plant <> 0.
                <result_fields>-K_STOCK_IM_TRA_AMO =
                <result_fields>-K_AMO_WC_P * <result_fields>-/BIC/K_QTY /
                <result_fields>-LOTSIZE_IT_PLANT.
              ELSE. "IF divisor = 0.
                <result_fields>-K_STOCK_IM_TRA_AMO = 0.
              ENDIF.
            ENDIF.
    Stock IM (CP/CNP/AMO)K_SK_IM_CP_CNP_AMO        <result_fields>-K_STOCK_IM_CP_CNP_AMO = <result_fields>-K_STOCK_IM_LOG_CP + <result_fields>-K_STOCK_IM_LOG_CNP + <result_fields>-K_STOCK_IM_LOG_AMO + <result_fields>-K_STOCK_IM_TRA_CP + <result_fields>-K_STOCK_IM_TRA_CNP +
    <result_fields>-K_STOCK_IM_TRA_AMO.


     
    K_FRG_LOG_MPK_FRG_LOG_MP 
    Variable in end routine
    Stock IM Logistic - Freight (ManPlant)
    Variable in end routine
    K_STOCK_IM_LOG_FREIGHT_MP
     IF <result_fields>-LOTSIZE_IT <> 0.
          V_STOCK_IM_LOG_FREIGHT_MP = <result_fields>-K_FRG_LOG_MP * <result_fields>-K_TOTSTK / <result_fields>-LOTSIZE_IT.
        ELSE.
          V_STOCK_IM_LOG_FREIGHT_MP = 0.
        ENDIF.
    K_FRG_LOG_PK_FRG_LOG_P 
    Variable in end routine
    Stock IM Logistic - Freight (Plant)
    Variable in end routine
    K_STOCK_IM_LOG_FREIGHT_P
     IF <result_fields>-LOTSIZE_IT_PLANT <> 0.
          V_STOCK_IM_LOG_FREIGHT_P = <result_fields>-K_FRG_LOG_P * <result_fields>-K_TOTSTK / <result_fields>-LOTSIZE_IT_PLANT.
        ELSE.
          V_STOCK_IM_LOG_FREIGHT_P = 0.
        ENDIF.
    Stock IM Logistic - FreightK_SK_IM_LOG_FRE    IF V_STOCK_IM_LOG_FREIGHT_P = 0.
          <result_fields>-K_STOCK_IM_LOG_FREIGHT = V_STOCK_IM_LOG_FREIGHT_MP.
        ELSE.
          <result_fields>-K_STOCK_IM_LOG_FREIGHT = V_STOCK_IM_LOG_FREIGHT_P.
        ENDIF.
    K_FRG_TRA_MPK_FRG_TRA_MP 
    Variable in end routine
    Stock IM Transit - Freight (ManPlant)
    Variable in end routine
    K_STOCK_IM_TRA_FREIGHT_MP
        IF <result_fields>-LOTSIZE_IT <> 0.
          V_STOCK_IM_TRA_FREIGHT_MP = <result_fields>-K_FRG_TRA_MP *
          <result_fields>-/BIC/K_QTY / <result_fields>-LOTSIZE_IT.
        ELSE.
          V_STOCK_IM_TRA_FREIGHT_MP = 0.
        ENDIF.
    K_FRG_TRA_PK_FRG_TRA_P 
    Variable in end routine
    Stock IM Transit - Freight (Plant)
    Variable in end routine
    K_STOCK_IM_TRA_FREIGHT_P 
     IF <result_fields>-LOTSIZE_IT_PLANT <> 0.
          V_STOCK_IM_TRA_FREIGHT_P = <result_fields>-K_FRG_TRA_P *
          <result_fields>-/BIC/K_QTY / <result_fields>-LOTSIZE_IT_PLANT.
        ELSE.
          V_STOCK_IM_TRA_FREIGHT_P = 0.
        ENDIF.
    Stock IM Transit - FreightK_SK_IM_TRA_FRE    IF V_STOCK_IM_TRA_FREIGHT_P = 0.
          <result_fields>-K_STOCK_IM_TRA_FREIGHT = V_STOCK_IM_TRA_FREIGHT_MP
          .
        ELSE.
          <result_fields>-K_STOCK_IM_TRA_FREIGHT = V_STOCK_IM_TRA_FREIGHT_P.
        ENDIF.
    Stock IM - FreightK_STOCK_IM_FREIGHT<result_fields>-K_STOCK_IM_FREIGHT = <result_fields>-K_STOCK_IM_LOG_FREIGHT + <result_fields>-K_STOCK_IM_TRA_FREIGHT.
    K_DUT_TRA_MPK_DUT_TRA_MP
    Variable in end routine
    Stock IM Transit - Duty (ManPlant)
    K_STOCK_IM_TRA_DUTY_MP     IF <result_fields>-LOTSIZE_IT <> 0.
          <result_fields>-K_STOCK_IM_TRA_DUTY_MP = <result_fields>-K_DUT_TRA_MP * <result_fields>-/BIC/K_QTY / <result_fields>-LOTSIZE_IT.
        ENDIF.
    K_DUT_TRA_PK_DUT_TRA_P
    Variable in end routine
    Stock IM Transit - Duty (Plant)
    K_STOCK_IM_TRA_DUTY_P "Stock IM Transit - Duty (Plant)
        IF <result_fields>-LOTSIZE_IT_PLANT <> 0.
          <result_fields>-K_STOCK_IM_TRA_DUTY_P =
          <result_fields>-K_DUT_TRA_P * <result_fields>-/BIC/K_QTY /
          <result_fields>-LOTSIZE_IT_PLANT.
        ENDIF.
    Stock IM Transit - DutyK_STOCK_IM_TRA_DUTY    IF <result_fields>-K_STOCK_IM_TRA_DUTY_P = 0.
            <result_fields>-K_STOCK_IM_TRA_DUTY =
            <result_fields>-K_STOCK_IM_TRA_DUTY_MP.
        ELSE.
          <result_fields>-K_STOCK_IM_TRA_DUTY =
          <result_fields>-K_STOCK_IM_TRA_DUTY_P.
        ENDIF.
          ENDLOOP.
        ENDIF.
    K_DUT_LOG_MPK_DUT_LOG_MP
    Variable in end routine
    Stock IM Logistic - Duty - (ManPlant)
    K_STOCK_IM_LOG_DUTY_MP IF <result_fields>-LOTSIZE_IT <> 0.
          <result_fields>-K_STOCK_IM_LOG_DUTY_MP = <result_fields>-K_DUT_LOG_MP * <result_fields>-K_TOTSTK / <result_fields>-LOTSIZE_IT.
        ENDIF.
    K_DUT_LOG_PK_DUT_LOG_P 
    Variable in end routine
    Stock IM Logistic - Duty (Plant)
    K_STOCK_IM_LOG_DUTY_P     IF <result_fields>-LOTSIZE_IT_P <> 0.
          <result_fields>-K_STOCK_IM_LOG_DUTY_P = <result_fields>-K_DUT_LOG_P * <result_fields>-K_TOTSTK / <result_fields>-LOTSIZE_IT_P.
        ENDIF.
    Stock IM Logistic - DutyK_STOCK_IM_LOG_DUTY      IF <result_fields>-K_STOCK_IM_LOG_DUTY_P = 0.
            <result_fields>-K_STOCK_IM_LOG_DUTY = <result_fields>-K_STOCK_IM_LOG_DUTY_MP.
          ELSE.
            <result_fields>-K_STOCK_IM_LOG_DUTY = <result_fields>-K_STOCK_IM_LOG_DUTY_P.
          ENDIF.
    Stock IM - DutyK_STOCK_IM_DUTY        <result_fields>-K_STOCK_IM_DUTY = <result_fields>-K_STOCK_IM_TRA_DUTY + <result_fields>-K_STOCK_IM_LOG_DUTY.
    Total Stock IMK_TOT_STOCK_IM        <result_fields>-K_TOT_STOCK_IM = <result_fields>-K_STOCK_IM_CP_CNP_AMO + <result_fields>-K_STOCK_IM_FREIGHT + <result_fields>-K_STOCK_IM_DUTY.
    STD_PRICE_BASESTD_PRICE_BASE 
    Standard Price Lot Size - LogisticK_STDPR_LOTSZ_LOG       IF <result_fields>-/BIC/C_SOURCE = 'LOGISTIC'.
              <result_fields>-K_STDPR_LOTSZ_LOG =
              <result_fields>-STD_PRICE_BASE.
           ENDIF.
    STD_PRICE_VALSTD_PRICE_VAL 
    Standard Price - LogisticK_STDPR_LOG       IF <result_fields>-/BIC/C_SOURCE = 'LOGISTIC'.
              <result_fields>-K_STDPR_LOG = <result_fields>-STD_PRICE_VAL.
           ENDIF.
    Debit Credit LC - TransitK_DEB_CRE_LC_TRANSIT       IF <result_fields>-/BIC/C_SOURCE = 'WORKING CAPITAL'.
             <result_fields>-K_DEB_CRE_LC_TRANSIT = <result_fields>-DEB_CRE_LC.
           ENDIF.  
    Total Stock Standard CostK_TOT_STOCK_STD        IF <result_fields>-K_STDPR_LOTSZ_LOG <> 0.
              V_TOT_STOCK_STD = <result_fields>-K_TOTSTK *
              <result_fields>-K_STDPR_LOG /
              <result_fields>-K_STDPR_LOTSZ_LOG.
            ENDIF.
              <result_fields>-K_TOT_STOCK_STD = V_TOT_STOCK_STD +
              <result_fields>-K_DEB_CRE_LC_TRANSIT.
    Stock EliminationK_STOCK_ELIM <result_fields>-K_STOCK_ELIM = <result_fields>-K_TOT_STOCK_STD - <result_fields>-K_TOT_STOCK_IM.
    Stock IM (CP/CNP/AMO) LogisticK_SK_IM_CP_CNP_AMO_L       <result_fields>-K_SK_IM_CP_CNP_AMO_L =
            <result_fields>-K_STOCK_IM_LOG_CP +
            <result_fields>-K_STOCK_IM_LOG_CNP +
            <result_fields>-K_STOCK_IM_LOG_AMO.
    Stock IM (CP/CNP/AMO) TransitK_SK_IM_CP_CNP_AMO_T        <result_fields>-K_SK_IM_CP_CNP_AMO_T =
            <result_fields>-K_STOCK_IM_TRA_CP +
            <result_fields>-K_STOCK_IM_TRA_CNP +
            <result_fields>-K_STOCK_IM_TRA_AMO.

Dependencies with other applications

Mains data sources:

Logistic data: ADSO ABMMIC01 - "Material stock".

Transit data: DBFIGL13 - "IM from FIGL: Line Items for G/L Acct (S) - Rhodia Level 2".

Integrated Margin data: ODS_PCP4 - "CCR: Integrated margin".

Data loadings

Info providers and objects loaded

Process Chain - Technical NameProcess Chain - DescriptionStarterComment
PC_CO_MS_0006MS: TD - M - Model S - GlobalEvent: Z_EVT_PC_CO_MS_0006 triggered in process chain PC_INT_MARGIN
PC_CO_MS_0003MS: TD - M - Model S Propagation APCOMS01External start only (via API or metachain)

Sub Chain of PC_CO_MS_0006.

Load ADSO APCOMS01 with query BW_QRY_ABMMIC01_0001 in source.

PC_CO_MS_0004MS: TD - M - Model S Propagation - APCOMS04External start only (via API or metachain)Sub Chain of PC_CO_MS_0006
PC_CO_MS_0005MS: TD - M - Model S BusinesssExternal start only (via API or metachain)Sub Chain of PC_CO_MS_0006
PC_CO_MS_0001MS: TD - D - Shift of Months: Models S (Propagation Layer)External start only (via API or metachain)



Loading frequency

The loading is done after the process chain PC_INT_MARGIN - "Integrated Margin 2" normally once a month in the 3th workday.

Average performance

 

Key FigureEstimation
~ Average Process Chain Runtime 
~ Average nb of rows loaded per load 
~ Total nb of rows loaded (if full) 
~ Average Runtime for 10k lines 

Record Keeping

Reporting

Queries End User Documentation

 

Main queries

BW_QRY_ABMMIC01_0001 - BW - Material Stock for extract model S (Core Query)

BW_QRY_CPCOMS01_0001 - Stock margin elimination report (Core Query)

BW_QRY_CPCOMS01_0002 - Stock Margin Elimination report 2 (Core Query)

Main functionalities

Broadcast

Maintenance

Known bugs

Recurring procedure

Planned Evolution

  • Replace query BW_QRY_ABMMIC01_0001 with new one based on composite provider CPMMIC02 and find a way to improve the loading time.

 

  • No labels