General presentation
Objective of the application
Manufacturing VC query (QV_BW_QRY_CPCOPC04_0001) brings the Variable Cost (VC) of a product (sum of Raw Materials + Packaging + Tolling + Utilities costs).
We bring these detailed costs from SAP from the BOM (Bill of Material).
The BOM brings, for a given Finished Product/Plant/Month, the detailed list of components with the corresponding quantities and costs.
In the query, we calculate the FL Variable Cost for projected months, using the forecasted prices for Raw Material and Energy (input by the users in IP workbooks). If no forecast is found, then we extrapolate last Actual price to the future months.
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_M83 | Forward Looking ICM - Manufacturing | Role Menu |
| ZBI_RCS_CO_A09 | Forward Looking ICM - Manufacturing | Authorization objects |
Authorization variables
List of authorization variables mandatory for the application.
| Authorization variables | Object |
|---|---|
| V_CPFCTR1_2_0006 | CPFCTR1_2 |
| V_C_PLANT_0012 | C_PLANT |
| V_C_AUTHMA_0001 | C_PLANT__C_AUTHMA |
Dataflow overview
Composite Provider CPCOPC04 (FL ICM - Manufacturing Unit Cost) contains 2 DSOs:
- ABCOPC06 - WP1
- ABCOP06B - PF1
The BOM data from both ERPs is harmonized in CV_FMCO_BOM to be consumed by the Manufacturing Cost CVs.
BOM data flow
First step to calculate Manufacturing Cost is to load the BOM.
WP1 flow
2 datasources are used to define the BOM scope
- DTS_PU_RM01: to get from P&L (MVCOPA01) all materials sold in the past 24 months
- ABCOPC07: to get materials with Sales Forecast (eventually new materials with Sales Forecast but no actual sales yet)
Then, in the Transformations, for each plant/finished material, we call table function ZCDS_BOM_ALL, which is implemented with method GET_BOM_ALL (class ZCL_BOM_ALL.)
This method GET_BOM_ALL does the BOM explosion via lookup in ODS_PCP1 with a recursive logic.
Each subsequent level is built by taking the component and reading again ODS_PCP1 using the component as "father", to check if it explodes further (if it's an intermediate product).
For example: when building level 2, the component (COMPNT) of level 1 is used as material (MATNR) of level 2 and so on up to level 10.
After the explosion of the BOM, the calculated quantity of each component in each level is stored in ABPURM02 in field K_MENGECK.
Then ABPURM02 is used in CV_ALL_BOMLEVELS_N2 where we calculate the cost, getting Raw Material prices from ODS_PCP3 and Utilities prices from ODS_PCP8.
Then CV_ALL_BOMLEVELS_N1 is on top of CV_ALL_BOMLEVELS_N2 just for currency conversion purposes.
PF1 flow
Data is loaded from table ZCO_PRICE_RM in PF1 (this table is generated with program ZCO_PRICE_SIMULATION in PF1).
The logic of the BOM explosion resides in PF1 and it goes straight-forward to BW.
Then calculation view CV_FMCO_BOM joins BOM data from both ERP
PF1 - from CPCOBOM2
WP1 - from ABCOCP05
ABCOPC05 is an intermediate DSO (used only for WP1 data) for the correct aggregation of data (exception aggregation on price KF) as we remove some characteristics (level and intermediate product) to send to Manufacturing Cost CV.
BOM overall dataflow
There are 2 different BOM queries (not used directly in Pricing dashboard, but can be used to check the BOM data with all the available granularity)
- QV_BW_QRY_CPCOBOM1_0001 - for WP1
- QV_BW_QRY_CPCOBOM2_0001 - for PF1
You can find the dimensions of each query here:
Granularity of the BOM
From WP1, each record in the BOM is an individual component, which is either a Raw Material (C_BOMCPT) or an Activity Type (0ACTTYPE).
From PF1, we don't have the same granularity. Only the critical raw materials are detailed (with quantity and price). This is what we call "Simple" version (VERSION = 'S').
Then we have some "buckets" that aggregate the costs as follows:
- OTHER_RM - Sum of the costs of the non-critical raw materials
- OTHER_PK - Sum of the cost of Packaging Materials
- OTHER_UTI - Sum of the cost of Utilities
- OTHER_TOLL - Sum of the cost of Tolling
Raw Material Forecast Integration (Novecare)
DSO ABCOPC01 stores Raw Material forecast prices (saved by the users in the workbook).
Field K_AMT_EUR is the final confirmed price (in EUR/1000 KG), used to integrate in Manuf. query
This DSO is integrated in CV_FMCO_MAN_COST_RCS with the following logic:
A dynamic month lag is applied by GBU, which is stored as a parameter LAG_xx (xx = GBU) in the Global Filter Master Data C_GLBFILT.
If no lag is set in the Master Data, the default one is 1 month applied to the relevant GBU.
The Forecast months included in this lag period are excluded, and then the Standard cost is displayed instead during this lag.
CC_TYPE = 1 (Forecast) ==> Value Component 009 (Raw Material Forecast)
CC_TYPE = 2 (Actual) ==> Value Component 004 (Raw Material Actual)
"Buy & Sell" products (Novecare)
These are products that the GBU buy and re-sell, and they have no BOM in SAP.
They are identified in Critical Raw Material Master Data C_FLRMAT, with “Critical flag” (C_FLRMATF) = “B” (No BOM)
We create a "virtual" BOM in BW assigning the same material code as both Finished Product and Raw Material, with the whole quantity of the lot size (1000 KG).
This is done with 2 different Transformations into ABCOPC06 (WP1 only):
- TRSF: ABCOPC01 -> ABCOPC06
Here we get from ABCOPC01 the forecast prices for Buy & Sell products.
- TRSF: ODS_PCP9 -> ABCOPC06
Here we get the actual price from P&L. query QVSBS_QRY_MVCOPA06_0001 (technically we take data directly from ODS_PCP9 field C_MVR_CP).
We adjust the price to a lot size of 1000 KG and also convert the price to EUR using CAR3 exchange rate.
Also in this transformation, we extrapolate Actual price for the future 12 months, in case no forecast exists in ABCOPC01.
"Make or Buy" products (SpP)
The relevant raw materials for "Make or Buy" process are marked in Critical Raw Material Master Data C_FLRMAT, with “Critical flag” (C_FLRMATF) = “I” for internal and “E” for external.
In ABCOPC20 we find the Usage Factor (K_USGFACT) to replace the quantity from the BOM.
This Usage Factor is filled in the corresponding workbook by Material Group / Finished Material / Raw Material / Quarter.
In CV_FMCO_MAN_COST we read data from ABCOPC20 joining with CALMONTH to extrapolate the months in each quarter and copy the Usage Factor.
CC_MORB_QTY = K_USGFACT * 1000
CC_MORB_AMOUNT = CC_MORB_QTY * Forecast Price
Then in TRSF: DTS_CV_FMCO_BOM_FORECAST -> ABCOP06B we take the "Make or Buy cost" if it exists.
The Usage Factor can be seen in Manufacturing query but it's hidden by default.
BOM Reloading
In case of any period reloading, a Global Parameter is set in C_GLBFILT to condition the code in the relevant Transformations :
TRSF: DTS_CV_FMCO_BOM_FORECAST WBD_HANAIV -> ABCOP06B
TRSF: DTS_CV_FMCO_MAN_COST_RCS WBD_HANAIV -> ADSO ABCOPC06
TRSF: ODS_PCP9 -> ABCOPC06
TRSF: DTS_CV_FMCO_BOM_FORECAST WBD_HANAIV -> ABCOP06
The RULE = 'BOM_RELOAD' allows to change the loading logic in these Transformations, to keep only Actuals in case of period reloading.
Field C_LOW must be changed to 'Y' in case of reloading.
You can find FL-ICM overall architecture here:
Functional and Technical rules on Workbench + Reporting
Rules & Explanations
Novecare (in WP1) works with Standard Cost.
Beginning of month M, we have the cost for month M.
Specialty Polymers (in PF1) works with Actual Cost.
Beginning of month M, we have the cost for month M-1 (last closed month).
In order to have a common view, for a unique Running Period, this is the way we generate data in Manufacturing Cost query.
Note that for Novecare (WP1), there is a month lag in the RM Forecast price for the projected months (for example, April Forecast is calculated with the price from March).
2 different calculation views were created as we can only filter a single period to read BOM data, so in each CV, Run Period is calculated differently:
CV_FMCO_MAN_COST_RCS (WP1)
RUNPER is equal to FISCPER from DTP (used to extract BOM)
CV_FMCO_MAN_COST (PF1)
RUNPER = FISCPER from DTP +1
Dependencies with other applications
Data loadings
Info providers and objects loaded
Process chain PC_COPC_10 scheduled monthly on the 6th at 03:00 AM CET → //\\ BOM loadings constraints to consider before changing scheduling → Loading frequency //\\
Process chain PC_COPC_20 scheduled monthly from the 7th to 14th at 03:00 AM CET → No BOM loading → No scheduling impact
This process chain reloads Manufacturing Cost into ABCOPC06 to take into account potential changes in the forecast prices done by the users in the workbooks.
It is not necessary to reload the BOM from SAP, since there are no changes after the costs are released in WP1.
It contains a step (with an ABAP program) to delete from ABCOPC06 the requests from the same Run Period before reloading, to avoid duplication.
Loading frequency
//\\ Dependencies to consider before changing PC scheduling //\\
We need all the below objects to be properly loaded at the time of the FLICM Manufacturing loading process.
ABCOPC07 Sales Revenues Forecast Snapshot
MVCOPA01 Profitability Analysis: COPA - P&L -> 25 Infoproviders
ODS_PCP1 CCR: Product Cost Items
ODS_PCP3 CCR: released costs estimates
ODS_PCP8 Resource's Unit Price
The FLICM Manufacturing process is first dealing with the loading of ABPURM02 BOM explosion (WP1), using all dependent objects above.
The loading time restrictions for each are as follow :
MVCOPA01 Profitability Analysis: COPA - P&L -> 25 Infoproviders
PC_COPA_PL_GLOBAL COPA: PL Global Process Chain - Daily 1:00 AM
ODS_PCP1 - CCR: Product Cost Items
DTP: DTS_KEKO_CKIS (WP1) -> ODS_PCP1 - Delta
RSP_COPCP_MONTHLY Integ Margin : 2 workdays from start of month (FR calendar) - 11:30 PM
RSP_PVELOCITY PVelocity : 3 workdays from start of month (BE calendar) - 10:00 AM
DTP: ABDSOPCP1 -> ODS_PCP1 - PC_FILE - full
PC_INT_MARGIN Integ Margin : 3 days from start of month (no Sunday) - 00:30 AM
ABCOPC07 - Sales Forecasts
PC_COPC_16 COPC: TD - M - Sales Loadings : Daily 3:00 AM + 03:00 PM - not on Sundays nor bank holidays
ODS_PCP3 CCR: released costs estimates
RPC_CCR_PCP1_MTHLY_CHAIN CCR Monthly Process Chain : 1 workday from start of month (FR calendar) - 11:30 PM
ODS_PCP8 Resource's Unit Price
RSP_COPCP_MONTHLY Integ Margin : 2 workdays from start of month (FR calendar) - 11:30 PM
RSP_PVELOCITY PVelocity : 3 workdays from start of month (BE calendar) - 10:00 AM
We must take the worst restriction above as the time to consider before starting the FLICM Manufacturing loading process.
If we consider the second monthly Delta loading of ODS_PCP1, it is 3 workdays from the start of month (BE calendar) - 10:00 AM
This object is the BOM structure used to explode each Material with recursive logic (WP1 source : ZBW_KEKO_CKIS (Extraction of cost items)).
Therefore, if the 1st day of the month is a public holiday on Friday (New Year's Day or All Saints' Day in FR or BE calendar), the worst time of BOM loading will be the 6th at 10:00 AM.
We can optimize the FLICM Manufacturing loading on the same day at 10:00 PM
If we consider the first monthly Delta loading of ODS_PCP1, it is 2 workdays from start of month (FR calendar) - 11:30 PM
If the 1st day of the month is a public holiday on Friday (New Year's Day or All Saints' Day in FR or BE calendar), the worst time of BOM loading will be the 5th at 11:30 PM.
We could schedule the FLICM Manufacturing loading on the next day the 6th at 03:00 AM.
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
Main queries
Manufacturing Unit Cost query : QV_BW_QRY_CPCOPC04_0001
Main functionalities
It combines BOM (Bill of Material) data for Actuals + Raw Material Forecast.
Global properties
Variables
Definitions
Variable Name | Info-object | Selection Type | Required | Description/Explanation |
|---|---|---|---|---|
| 0I_CALMO | 0CALMONTH | Interval | No | Calendar Year/Month |
| V_C_PLANT_0012 | C_PLANT | Authorization with Input | No | Plant |
| V_CPFCTR1_2_0006 | CPFCTR1_2 | Authorization with Input | No | Global business Unit |
| V_C_MATNR2_0001 | C_MATNR2 | Select Option | No | Raw Material |
| V_C_AUTHMA_0001 | C_AUTHMA | Authorization | No | Authorization Scope |
| V_0CALMONTH_0062 | C_RUNPER | Interval | No | Run Period |















