Many code samples or tips I post here originate in my collection that was built in last years. When I discover or code something worth keeping, I strip company specifics from the code and save it in simple text files. Some code snippets are used again and again, like macros in this post below or data caching forms. But once in a while I have to reuse the code after blowing away the dust.
That was back in 2000 when I have to do some report that, among other things, had to show costing estimates from the product costing runs. I don’t remember any more how did I find the solution (probably after my functional analyst gave up trying to help me to get the data easily), but it was using a couple of BAPI functions. And two weeks ago, after getting a similar requirement and having spent some time with debugger and asking FI/CO colleagues and everyone else, I have thought that this is actually a “deja vu”. Quick check of my code library – YES! I had to do some adjustments to the code and use the debugger to get the right constants corresponding to my company’s logic, but was still a wonder that my old code did. Here it goes:
* Macro to prefill select option
DEFINE ADD_SELECTION_VALUE.
&2-SIGN = 'I'.
&2-OPTION = 'EQ'.
&2-LOW = &1.
APPEND &2.
CLEAR &2.
END-OF-DEFINITION.
form get_cost_element
using
pi_plant type werks_d
pi_matnr type matnr
pi_date type sydatum
changing
po_cost type total_amt.
data:
lt_cvar type standard table of bapicstgva with header line,
lt_matnr type standard table of bapimateri with header line,
lt_plant type standard table of bapiplant with header line,
lt_costs type standard table of bapisplitt with header line.
data: begin of it_list occurs 0.
include structure bapicolist.
data: end of it_list.
data:
ls_cost_header like bapiheader.
data:
ls_ret type bapireturn,
lf_found type char1 value ' '.
* ABCD is the costing variant. It should be your company specifics.
add_selection_value 'ABDC' lt_cvar.
add_selection_value pi_matnr lt_matnr.
add_selection_value pi_plant lt_plant.
clear: po_cost.
call function 'BAPI_COSTESTIMATE_GETLIST'
importing
return = ls_ret
tables
costing_variant = lt_cvar
material = lt_matnr
plant = lt_plant
cost_estimate_list = it_list
exceptions
others = 1.
check sy-subrc = 0.
* sort to get result of the last costing run
sort it_list by valid_from descending.
* XX and YYY should be specific to your task.
* Check with debugger after calling the first BAPI
loop at it_list where cstg_type = 'XX' and
vltn_vrnt = 'YYY'.
if lf_found = 'X'.
exit.
endif.
* Get first costing suitable by date
if pi_date >= it_list-valid_from and
pi_date 0.
po_cost = lt_costs-total_amt.
lf_found = 'X'.
exit.
endloop.
endif.
endif.
endloop.
endform.


