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 Code | Role Description | Explanation |
|---|---|---|
| ZR_RCS_CA_M69 | MS - Model S | Role for queries and workbook |
Authorization objects
List of autorisation objects mandatory for the application.
| Authorization object | Explanation |
|---|---|
| C_COMPCDE__C_AUTHMA | Query authorization object |
| CPFCTR1_2 | Query authorization object |
| C_COMPCDE__C_MNGAREA | Query authorization object |
| C_COMPPRS | Query authorization object |
Dataflow overview
Functional and Technical rules on Workbench + Reporting
Rules & Explanations
Main steps:
- 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. - Use calculation views to consolidate the different data sources.
- 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).
- See details on calculation views here.
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:Label Field Calcul in abap (end routine) Lot Size (ManPlant) LOTSIZE_IT LOTSIZE_IT_PLANT LOTSIZE_IT_PLANT Quantity Total Stock K_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_MP K_CNP_LOG_MP K_AMO_LOG_MP K_AMO_LOG_MP Variable in end routine
CP + CNP + AMO (Conv) ManP LogisticV_CP_CNP_AMO_MANP_LOG
K_CP_CNP_AMO_MP_LOGV_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_P K_CP_LOG_P Stock IM Logisitic - CP K_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_P K_CNP_LOG_P Stock IM Logistic - CNP K_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_P K_AMO_LOG_P Stock IM Logistic - AMO K_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_P K_CP_TRA_P K_CP_TRA_MP K_CP_TRA_MP K_CNP_TRA_MP K_CNP_TRA_MP K_AMO_WC_MP K_AMO_WC_MP Variable in end routine
CP + CNP + AMO (Conv) ManP TransitVariable in end routine
V_CP_CNP_AMO_MANP_TRA
K_CP_CNP_AMO_MP_TRAV_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 - CP K_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_P K_CNP_TRA_P Stock IM Transit - CNP K_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_P K_AMO_WC_P Stock IM Transit - AMO K_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_MP K_FRG_LOG_MP Variable in end routine
Stock IM Logistic - Freight (ManPlant)Variable in end routine
K_STOCK_IM_LOG_FREIGHT_MPIF <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_P K_FRG_LOG_P Variable in end routine
Stock IM Logistic - Freight (Plant)Variable in end routine
K_STOCK_IM_LOG_FREIGHT_PIF <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 - Freight K_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_MP K_FRG_TRA_MP Variable in end routine
Stock IM Transit - Freight (ManPlant)Variable in end routine
K_STOCK_IM_TRA_FREIGHT_MPIF <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_P K_FRG_TRA_P Variable in end routine
Stock IM Transit - Freight (Plant)Variable in end routine
K_STOCK_IM_TRA_FREIGHT_PIF <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 - Freight K_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 - Freight K_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_MP K_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_P K_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 - Duty K_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_MP K_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_P K_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 - Duty K_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 - Duty K_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 IM K_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_BASE STD_PRICE_BASE Standard Price Lot Size - Logistic K_STDPR_LOTSZ_LOG IF <result_fields>-/BIC/C_SOURCE = 'LOGISTIC'.
<result_fields>-K_STDPR_LOTSZ_LOG =
<result_fields>-STD_PRICE_BASE.
ENDIF.STD_PRICE_VAL STD_PRICE_VAL Standard Price - Logistic K_STDPR_LOG IF <result_fields>-/BIC/C_SOURCE = 'LOGISTIC'.
<result_fields>-K_STDPR_LOG = <result_fields>-STD_PRICE_VAL.
ENDIF.Debit Credit LC - Transit K_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 Cost K_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 Elimination K_STOCK_ELIM <result_fields>-K_STOCK_ELIM = <result_fields>-K_TOT_STOCK_STD - <result_fields>-K_TOT_STOCK_IM. Stock IM (CP/CNP/AMO) Logistic K_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) Transit K_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 Name | Process Chain - Description | Starter | Comment |
|---|---|---|---|
| PC_CO_MS_0006 | MS: TD - M - Model S - Global | Event: Z_EVT_PC_CO_MS_0006 triggered in process chain PC_INT_MARGIN | |
| PC_CO_MS_0003 | MS: TD - M - Model S Propagation APCOMS01 | External 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_0004 | MS: TD - M - Model S Propagation - APCOMS04 | External start only (via API or metachain) | Sub Chain of PC_CO_MS_0006 |
| PC_CO_MS_0005 | MS: TD - M - Model S Businesss | External start only (via API or metachain) | Sub Chain of PC_CO_MS_0006 |
| PC_CO_MS_0001 | MS: 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 Figure | Estimation |
|---|---|
| ~ 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.



