There are many use cases of SAP S/4HANA TM(Transportation Management) Load Optimizer and one such use case is used in conjunction with the Deployment Optimizer within SAP IBP for response and supply for TLB (Truck Load Building) functionality. In this use case, the Deployment Optimizer in SAP IBP for response and supply generates the Deployment Stock Transport Requisitions (DSTRs) which will be published onto the On-premise SAP S/4HANA system first and then, they will be fed into the SAP S/4HANA TM Load Optimizer to generate the optimized full truckloads to be created as the Consolidated Stock Transport Requisitions (CSTRs)(Each CSTR represents one shipment of Full truckload). These CSTRs can be reviewed, modified, and later converted into STOs (Stock Transport Orders). This use case was used when the TLB (Truck Load Building) functionality was not available in SAP IBP for response and supply but still is very relevant if there are unique and complex requirements exist for the Truckload building.
This is the third blog in this series to showcase the tricks and tips for meeting a few unique requirements of Truckload building during the Load Optimizer calls.
Please refer to these URL for the earlier blogs in this series.
SAP S/4HANA TM Load Optimization – Tricks and Trips for different use-cases – Dead-stack Loading
Though each use case is unique and different for each customer, these tricks and tips can be combined to achieve their own business requirements.
Requirement: Build the truckloads such that all prioritized products should be part of the same truckloads so that the warehouse operations would prioritize, load, and ship them first before other truckloads. For example, there are 20 items and 4 of them are high priority items and each item has 10 pallets of load. So, in total, there are 200 pallets (20 x 10 = 200) of load out of which 40 pallets (4 x 10 = 40) are of high priority loads. Consider that Transportation resource has 20 pallets of capacity and when the load optimization is performed as is, it will give 10 truckloads as output ( 200/20 = 10 ) but these high-priority 40 pallets could go onto few or all of these 10 truckloads. In the worst case, all 10 truckloads would be flagged as high-priority trucks because of having at least one high-priority pallet as a result, the warehouse operations would have to treat each one of them as a high-priority one, not a desired outcome! The desired outcome would be 2 truckloads with all 40 high-priority loads and the other 8 truckloads would be with 160 loads so that only 2 Trucks would be flagged as high priority for warehouse operations.
Solution:
The Load optimization process primarily consists of two steps – Package Building and the Load Optimizer, as shown below. The Package Building steps perform the palletization of products and regardless of what process is used for the package building (Package Building using Optimizer or Pack Instructions or Packaging Specifications), the output of package building will be the pallet entries and they will be fed as input to the Load optimizer process. As shown below, there are enhancement spots (BADis) that exist before and after the Optimizer engine call to enable the direct manipulation of inputs and outputs of the Optimizer engine.
In this use case, Pre-processing BADis will be used to “manipulate” the inputs, and Post-processing BADis will be used to “manipulate” the outputs of the Optimizer engine. Here is the info about the Enhancement Spots for the Optimizer engine.
The “pallet entries”(the output of the package building step) will be available in “mt_et_package” internal table of “io_opt_input” object instance in the Pre-processing BADi.
Now, let’s get into details of how they will be manipulated (in this case “mt_et_package” internal table of “io_opt_input” object instance) to get the desired output from the Load optimizer engine.
The inputs will be manipulated using ABAP within the BADi implementation for the pre-processing enhancement spot.
The screenshot below shows the modified pallet entries – It consists of all non-prioritized pallet entries and additional two hypothetical pallet entries in place of all prioritized loads. The gross weight of each hypothetical pallet is the aggregated sum of the gross weight of replaced corresponding prioritized loads. The width and height values are set as the width and height of the transportation resource and the length value is derived based on the aggregated volume of those grouped prioritized pallet entries.
In summary, mt_et_package” internal table consists of all 12 non-prioritized pallet entries and 2 hypothetical pallet entries after the pre-processing BADi. Also, save the cross-reference link of each hypothetical pallet and its corresponding original prioritized pallets in an internal table as well as the original mt_et_package internal table as well, to be referenced later in the post-processing BADi.
The Optimizer engine will prioritize the hypothetical pallet entries over other pallet entries owing to their larger weight and accordingly give the output Truckloads.
Now, in the post-processing BADi, changes should be made to replace the hypothetical pallet entries with the corresponding prioritized pallet entries. MT_IT_PACKAGE_LOAD_LIST internal table of IO_OPT_RESULT Object instance consists of all pallet entries and their corresponding transportation resource, in the post-processing BADi. Here each Transportation resource entry corresponds to one truckload. In the example below, the first truckload consists of both hypothetical pallet entries, and the other two truckloads consist of other pallet entries.
Replace hypothetical pallet entries with their corresponding original pallet entries.
This example is primarily used to provide the concepts/thoughts behind this ideation only.
Similarly, replace all hypothetical pallet entries in “mt_et_package” internal table of “IO_LSO_REQUEST” with the corresponding prioritized pallet entries (basically restoring “mt_et_package” internal table with original entries)
With these changes, the load optimizer would yield the desired output as shown in the very beginning.
To conclude this topic, this blog summarizes how simply changing the inputs and outputs of the Load optimizer engine yields the desired truckloads thus meeting yet another unique requirement of truckload building.
Hope you find the blog useful.