Dear SCN Members.
Recently we develop a project for our customer which requested us to develop a Budget Transfer functionality between Internal Orders (CO-OM) and Fund Center/Commitment Items (FM-PSM), in this case they use the Former Budget.
Our customer use FM-PSM to control expenses budget from departments and basically, all Cost Element and Cost Center are used in the derivation rules. As many other companies, the budget assigned to these objects are planned every year.
During the year, some special expenses(as the call here) are needed such as business trip, events, etc. In these cases, the planned year budget cannot be used since many departments have already planned the use of these amounts. So, in this case, Internal Order are used for that specifically expense.
Our customer budget and cost department creates the internal order for that expense and assign the requested budget for that.
According to the policy, after the use of this Internal Order budget, if some remaining amount exists, it can be transferred to the department budget, in this case Fund Center/Commitment Item.
|Fund Center and Commitment Item||X||X||X||X|
As we analyzed, only FM has the Transfer budget functionality, and this transfer is between the same object (Fund to Fund).
Our business requested us to make the possibility to transfer budget cross-object IO <-> FM and FM <-> IO.
The functional solution that we found for this request, is to apply the Supplement and Return functions for each object and control these assignments in a Z table.
So, when our business transfer from IO to FM, we do a return budget in IO side and a supplement in FM side and vice-versa.
In a technical perspective, we had to think in how we could develop this to post only if both posting will be done. For example, the budget supplement has to be done only if the return have done. Since this is a transfer, the receiver must receive only if the sender has been sent.
The achievement of the best solution that we found, it was the CHECK function modules before the commit posting.
To Supplement and Return budget for FM we used FM: KBPI_BUDGET_ENTER
To Supplement and Return budget for IO we used FM: KBPP_EXTERN_UPDATE_CO
Before commit both transactions we run KBPI_BUDGET_ENTER in test run mode (there is a parameter to run in test mode) and KBPP_EXTERN_UPDATE_CO without commit option and finally we check the Return messages with both will be run without errors.
Using this way we will make sure that Receiver and Sender will posted successfully.
I hope this can help you in a scenario like this one.