Project Manufacturing Management and Optimization: Order Cost Rollup Fiori Report
Project Manufacturing Management and Optimization (PMMO) in S/4HANA helps achieve greater efficiency with project manufacturing in an Engineer to Order (ETO) environment to deliver complex end products (for example: military aircrafts, ships and submarines, complex industrial machinery etc.), that often involves complex engineering and production processes. On the other hand, it maintains visibility into detailed actual cost reporting and progress analysis for non-valuated grouped project stock.
I encourage you to check out the new features in PMMO that were released in S/4HANA 2022 FPS0 release. In this blog post, I would like to share insights on the Order Cost Rollup Fiori report (Fiori App ID F6378), that provides true actual costs for a given production order or purchase order using the grouped non-valuated costing model. If you are interested to know more about non-valuated cost model, check out my other blog post.
One of the constraints with non-valuated project stock is that actual costs on any given order in the as-built BOM (Bill of Materials) is not directly available. In case of non-valuated project stock, each material is managed on a quantity basis only and not on value basis. During goods issue, there are no financial accounting documents posted with non-valuated project stock and therefore, the actual costs at each level in the BOM do not include the costs of the issued project stock components.
With Order cost rollup report you now can determine the actual cost of an order at any level in the as-built BOM. The costs of the issued components are calculated top down and rolled up based on the prorated quantities that are issued. In addition to the costs, this Fiori app also calculates the total activity duration.
With S/4HANA 2022 release, the order cost rollup is available as a Fiori app. In addition, a standard RFC function module is also available, in case a customer or partner is interested in calculating costs for multiple orders and storing the results in a custom table. This could be helpful, for example, to calculate moving average price for a given material that is used in non-valuated project stock, by determining the actual costs of all orders of the material in a given period and calculating the average.
The input to the cost rollup Fiori app is an order. This can be a production order or purchase order (standard purchase order, stock transport order or subcontracting purchase order) account assigned to either a grouping WBS element or an operative WBS element.
Note that, the order cost rollup calculates true actual cost with non-valuated grouped project stock only and PMMO must be active. In the cost rollup Fiori app, you can search for an order by material, plant or account assignment WBS element. In this example, if we search for all orders of material KBY7_F1 (a finished material), you will see in the result all orders of this material that are account assigned to a WBS element. From here, you can select the order for which the actual cost is to be determined. If the user already has the order number, it can be entered on the selection directly too.
Order Cost Rollup Calculation
Now, let’s take a look at the calculation of the cost rollup.
I have an example below that will be used to illustrate the calculation of the order cost rollup.
The calculation involves first determining the order hierarchy, which is the logistics part. Starting with the order entered, all issued materials in the as-built BOM along with the corresponding replenishment objects (i.e., production order, purchase order etc.) and issued quantity are derived and depicted as levels in the result. Level 0 is the order which is entered on the selection, and Level 1 indicates the material components that are issued to the Level 0 order and Level 2 indicates the material components that are issued to the Level 1 order and so on. In principle, you can visualize as an order tree starting from the top and traversing multiple levels below until you reach the bottom. At each level, there can be multiple material components and multiple orders supporting the next higher assembly (NHA). The logistical order tree is determined based on the PMMO_CONSUMPTION table, which tracks all issued grouped project stock components along with the sending and receiving replenishment object and the issued quantity.
In this example, the entered order 1927888 is the production order for the finished material KBY7_F1, which has at Level 1, a sub-assembly material KBY71_S1 produced via order 1927889 issued to it. The sub-assembly material has a raw material KBY71_R1 issued to it. In addition to project stock components, the cost rollup also provides visibility into any plant stock components that were issued at any level in the order chain. Note that the plant stock components are valuated and therefore the standard costs of such plant stock materials flow into the next higher automatically during the goods issue.
Once the logistical order tree is determined, the actual costs for each order in the order tree is calculated. The actual costs (value type = 4) are read from ACDOCA table. Note that it is not needed to run PMMO pegging or cost distribution batch job for the cost rollup calculation, because the cost rollup calculation reads actual cost postings (for example COIN, RKL) on the account assignment WBS element in the order hierarchy for the calculation. Therefore, any costs or activity hours that are posted on the purchase order or production order in the order tree hierarchy are immediately visible in the cost rollup report.
There are two kinds of proration that applies here when allocating costs to each order in the order hierarchy. At hierarchy level 0, no proration is needed. At every level below hierarchy level 0, the issued quantity may not be the same as the total order quantity. For example, the production order for sub-assembly material could be for 20 EA, however 10 EA are issued to the order for which we are determining actual costs and the other 10 EA might have been issued to a different order (and therefore belongs to a different order tree). In this case, we allocate only 10/20th of the actual cost of the sub-assembly order. The second kind of proration is necessary due to inheritance. In the same example, if we had 2 purchase orders PO1 for 10 EA and PO2 for 10 EA that are issued to the sub-assembly production order. In this case, we can only allocate 10/20th (inheriting from NHA) cost from PO1 and 10/20th (inheriting from NHA) cost from PO2. You can see these proration ratios in the output of the API function module.
API function module
The RFC function module that does the cost rollup calculation is PMMO_CALC_ORDER_COST_ROLLUP, which accepts a table of replenishment objects. The output has the summarized cost and detail costs for each order. With a simple test report, you can test this RFC function module and you’ll see the granular details of the order cost rollup calculation, as seen below.
Below screen shows the summarized total order cost and total activity hours.
and the screenshot below shows the detail breakdown of the calculation including the ratios that are calculated in the order hierarchy due to issued quantity and inherited ratio from NHA.
The Fiori app provides the front-end visualization of the cost rollup results.
One key benefit with this app is that you can quickly find summarized cost breakdown by cost element or activity type or cost center or material. For example, if you want to breakdown the total order cost by activity type – how much labor cost, material cost went into the overall cost? This can be achieved by grouping on the activity type attribute. You can create more than one level of grouping too (for example, group by activity type and cost center).
As you might have learnt from this blog post, the order cost rollup provides a simple yet powerful reporting app to get the true actual cost for any given order. This can help with estimating the unit cost of manufacturing a similar material in a project-based Engineer to Order scenario. I encourage you to try this Fiori app and hope you find this blog post useful. Comments and questions are welcome.