2008 Mar 20 8:05 PM
Hi all,
I have a requirement to upload the excel data into KP26 T. code, I have tried below 2 BAPI's and for some reason it's not posting any thing, I am not getting any error messages, but the values are not posting.
1) BAPI_ACT_PRICE_CHECK_AND_POST 2)BAPI_COSTACTPLN_POSTACTOUTPUT
I have step through the code and it's going to perform routine call_interface_aci at the end of BAPI logic, in this routine it's not calling Posting FM, before calling this Function Module checking the the Internal tables and it has got blank (gt_acivalline and gt_acitotline).
I have passed all the required info at header level and item level.
Do I missed any thing?
We are at 4.6C version.
Let me know if you need more info.
Thanks!
Thiru
2008 Apr 04 3:14 PM
2008 Jun 13 8:47 PM
Hi Thiru Red,
How did you solved this? i have the same requirment to upload from Excel into ECC 6.0.
Which BAI did you use?
1) BAPI_ACT_PRICE_CHECK_AND_POST or
2)BAPI_COSTACTPLN_POSTACTOUTPUT?
Please respond.
Thanks
Dan
2008 Jun 14 9:56 PM
Hi Dan,
See the below entire code. all you have to change only internal table structure to fit your excel data, thats it.
REPORT zfii_kp26_upload_acttype .
----
*Project : To Load Activity Type for KP26 Transaction Code
*Program Name : ZFII_KP26_UPLOAD_ACTTYPE
*Program Description : This program reads Activity file from pc and
pass the valuse to BAPI and it will Update each
and every Cost Center/Activity Type
*Author : Thirupathi Reddy Billa
*Use : This program avoids manual entering of Cos
Centers Activity values by using KP26 ZFCC
transaction code
----
*--Data Declarations
TABLES : zfi_auth.
TYPE-POOLS: truxs.
DATA : lit_head LIKE bapiplnhdr OCCURS 0 WITH HEADER LINE,
lit_idx LIKE bapiacpstru OCCURS 0 WITH HEADER LINE,
lit_obj LIKE bapiacpobj OCCURS 0 WITH HEADER LINE,
lit_val LIKE bapiacpval OCCURS 0 WITH HEADER LINE,
lit_tval LIKE bapiacptot OCCURS 0 WITH HEADER LINE,
lit_ctrl LIKE bapiacpctrl OCCURS 0 WITH HEADER LINE,
lit_err LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
*--Internal Table to store the final sucessfull results
DATA : BEGIN OF lit_disp OCCURS 0,
kostl LIKE ccss-kostl,
lstar LIKE ccss-lstar,
zval LIKE rkpln-lst,
message LIKE bapiret2-message,
END OF lit_disp.
*--Internal Table to store the final Error results
DATA : BEGIN OF lit_disp_err OCCURS 0,
kostl LIKE ccss-kostl,
message LIKE bapiret2-message,
END OF lit_disp_err.
DATA: count TYPE i,
ncount(2) TYPE n,
tcount TYPE i,
lv_totrec TYPE i,
lv_totrec1 TYPE i,
lv_totct TYPE i,
prev_lstar LIKE zfsr_loc-lstar,
lv_oi LIKE bapiacpstru-object_index,
lv_vi LIKE bapiacpstru-value_index,
lv_ai LIKE bapiacpstru-attrib_index.
TYPES : BEGIN OF ls_act_data,
kostl TYPE ccss-kostl,
lstar TYPE ccss-lstar,
plan_act TYPE rkpln-lst ,
dis_key TYPE spred_appli-spred.
TYPES : END OF ls_act_data.
DATA : lit_act_data TYPE ls_act_data OCCURS 0 WITH HEADER LINE,
lit_raw TYPE truxs_t_text_data.
*--Selection Screen
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME TITLE text-001.
PARAMETER : p_file LIKE rlgrap-filename.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 3(8) text-002.
SELECTION-SCREEN POSITION 11.
PARAMETER : p_tstrun AS CHECKBOX DEFAULT ' '.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN: END OF BLOCK b01.
*--This logic is for F4 for selection parameter
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
PROGRAM_NAME = SYST-REPID
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = ' '
static = 'X'
MASK = ' '
CHANGING
file_name = p_file
EXCEPTIONS
mask_too_long = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
AT SELECTION-SCREEN ON BLOCK b01.
IF p_file IS INITIAL.
MESSAGE e002(zz) WITH 'Select The Activity File to Process'.
ENDIF.
*--Start Of Selection
START-OF-SELECTION.
PERFORM get_file_into_itab.
PERFORM build_bapi_data.
*--process only for successful BAPI execution.
IF NOT lit_disp[] IS INITIAL.
PERFORM display_details.
ENDIF.
*--Check errors before displaying
IF NOT lit_disp_err[] IS INITIAL.
PERFORM display_err_details.
ENDIF.
TOP-OF-PAGE.
IF NOT lit_disp[] IS INITIAL.
WRITE:/ 'BAPI Posted Sucessfully Planned Activity Types'
COLOR COL_NEGATIVE.
IF p_tstrun = 'X'.
WRITE:/52 'NOTE : THIS IS A TEST RUN' COLOR COL_NEGATIVE.
ENDIF.
SKIP 1.
WRITE:/ 'Cost Center' COLOR COL_POSITIVE,
15 'Activity Type' COLOR COL_POSITIVE,
32 'Activity Value' COLOR COL_POSITIVE,
57 'Message' COLOR COL_POSITIVE.
ENDIF.
&----
*& Form build_bapi_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_bapi_data.
SORT lit_act_data BY lstar kostl.
CLEAR: lit_obj, lit_idx, lit_tval, lit_ctrl, lit_disp.
REFRESH : lit_obj, lit_idx, lit_tval, lit_ctrl, lit_disp.
lv_oi = 0.
lv_vi = 0.
lv_ai = 0.
PERFORM generate_header_data.
PERFORM generate_item_data.
PERFORM call_bapi.
ENDFORM. " build_bapi_data
&----
*& Form get_file_into_itab
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_file_into_itab.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
I_FIELD_SEPERATOR =
I_LINE_HEADER =
i_tab_raw_data = lit_raw
i_filename = p_file
TABLES
i_tab_converted_data = lit_act_data
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " get_file_into_itab
&----
*& Form generate_header_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM generate_header_data.
CLEAR lit_head.
REFRESH lit_head.
*--Header Data
lit_head-co_area = 'MHCC'.
lit_head-fisc_year = '2008'.
lit_head-period_from = '001'.
lit_head-period_to = '012'.
lit_head-version ='0'.
lit_head-doc_hdr_tx = 'Uploading Planned Budget Volume'.
lit_head-plan_currtype = 'C'.
APPEND lit_head.
ENDFORM. " generate_header
&----
*& Form generate_item_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM generate_item_data.
LOOP AT lit_act_data.
*--Increment Object, Attribute and Value indexes for each iteration
lv_oi = lv_oi + 000001.
lv_vi = lv_vi + 000001.
lv_ai = lv_ai + 000001.
*--Object Data
lit_obj-object_index = lv_oi.
lit_obj-costcenter = lit_act_data-kostl.
lit_obj-acttype = lit_act_data-lstar.
APPEND lit_obj.
*--Index Data
lit_idx-object_index = lv_oi.
lit_idx-value_index = lv_vi.
lit_idx-attrib_index = lv_ai.
APPEND lit_idx.
*--Total Data
lit_tval-value_index = lv_vi.
lit_tval-actvty_qty = lit_act_data-plan_act.
lit_tval-dist_key_quan = lit_act_data-dis_key.
APPEND lit_tval.
*--Control Record Data
lit_ctrl-attrib_index = lv_ai.
lit_ctrl-price_indicator = '001'.
APPEND lit_ctrl.
ENDLOOP.
ENDFORM. " generate_item_data
&----
*& Form call_bapi
&----
text
----
--> p1 text
<-- p2 text
----
FORM call_bapi.
CALL FUNCTION 'BAPI_ACT_PRICE_CHECK_AND_POST'
EXPORTING
header_info = lit_head
testrun = p_tstrun
DELTA = ' '
TABLES
idx_structure = lit_idx
object = lit_obj
per_value = lit_val
tot_value = lit_tval
contrl = lit_ctrl
return = lit_err.
READ TABLE lit_err WITH KEY type = 'E'.
IF sy-subrc NE 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT =
IMPORTING
RETURN =
.
*--Append all the sucess values to the table
IF sy-subrc EQ 0.
READ TABLE lit_err INDEX 1.
LOOP AT lit_obj.
READ TABLE lit_act_data WITH KEY kostl = lit_obj-costcenter
lstar = lit_obj-acttype.
tcount = tcount + 1.
lit_disp-kostl = lit_obj-costcenter.
lit_disp-lstar = lit_obj-acttype.
lit_disp-zval = lit_act_data-plan_act.
lit_disp-message = 'Uploaded CostCenter Activity Volume Successfully'.
APPEND lit_disp.
ENDLOOP.
ENDIF.
*--If the any errors append to the error table
ELSE.
LOOP AT lit_err.
IF lit_err-type = 'E'.
lit_disp_err-kostl = lit_err-message_v2.
lit_disp_err-message = lit_err-message.
APPEND lit_disp_err.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " call_bapi
&----
*& Form display_details
&----
text
----
--> p1 text
<-- p2 text
----
FORM display_details.
CLEAR count.
LOOP AT lit_disp.
count = count + 1.
WRITE:/2 lit_disp-kostl, 17 lit_disp-lstar,
24 lit_disp-zval, 57 lit_disp-message.
ENDLOOP.
SKIP 1.
WRITE 😕 'Total count ', tcount.
SKIP 2.
ENDFORM. " display_details
&----
*& Form display_err_details
&----
text
----
--> p1 text
<-- p2 text
----
FORM display_err_details.
WRITE:/ 'BAPI is Not Sucessfull for Below Cost Centers'
COLOR COL_NEGATIVE.
SKIP 1.
WRITE:/ 'Cost Center' COLOR COL_POSITIVE,
20 'Message' COLOR COL_POSITIVE.
LOOP AT lit_disp_err.
WRITE:/2 lit_disp_err-kostl,
20 lit_disp_err-message.
ENDLOOP.
ENDFORM. " display_err_details
2008 Jun 16 8:29 PM
Hi Thiru Reddy ,
Thanks a lot..Where do i assiign points to you.
Only things i that i am not able t get the Return messages from this BAPI.
Can you please tell me how to do this?
Thanks
Dany
2013 Sep 20 3:36 PM
Thx a lot Thiru for this coding!
Additionnaly, here is some coding to update Fixed of variable price by costcenter/activity type:
FORM generate_item_data.
* CC C0113200-AMO- fix price
* Increment Object, Attribute and Value indexes for each iteration
lv_oi = lv_oi + 000001.
lv_vi = lv_vi + 000001.
lv_ai = lv_ai + 000001.
*--Object Data
lit_obj-object_index = lv_oi.
lit_obj-costcenter = 'C0113200'.
lit_obj-acttype = 'AMO'.
APPEND lit_obj.
*--Index Data
lit_idx-object_index = lv_oi.
lit_idx-value_index = lv_vi.
lit_idx-attrib_index = lv_ai.
APPEND lit_idx.
*--Total Data
CLEAR lit_tval.
lit_tval-value_index = lv_vi.
* lit_tval-actvty_qty = lit_act_data-plan_act.
* lit_tval-dist_key_quan = lit_act_data-dis_key.
lit_tval-price_fix = '0.97'.
lit_tval-dist_key_price_fix = '2'.
lit_tval-price_unit = '00001'.
lit_tval-equivalence_no = '1'.
* lit_tval-currency = 'EUR'.
APPEND lit_tval.
*--Control Record Data
lit_ctrl-attrib_index = lv_ai.
* lit_ctrl-price_indicator = '001'.
APPEND lit_ctrl.
* CC C0113200-MOD- variable price
* Increment Object, Attribute and Value indexes for each iteration
lv_oi = lv_oi + 000001.
lv_vi = lv_vi + 000001.
lv_ai = lv_ai + 000001.
*--Object Data
lit_obj-object_index = lv_oi.
lit_obj-costcenter = 'C0113200'.
lit_obj-acttype = 'MOD'.
APPEND lit_obj.
*--Index Data
lit_idx-object_index = lv_oi.
lit_idx-value_index = lv_vi.
lit_idx-attrib_index = lv_ai.
APPEND lit_idx.
*--Total Data
CLEAR lit_tval.
lit_tval-value_index = lv_vi.
* lit_tval-actvty_qty = lit_act_data-plan_act.
* lit_tval-dist_key_quan = lit_act_data-dis_key.
lit_tval-price_var = '27.35'.
lit_tval-dist_key_price_var = '2'.
lit_tval-price_unit = '00001'.
lit_tval-equivalence_no = '1'.
* lit_tval-currency = 'EUR'.
APPEND lit_tval.
*--Control Record Data
lit_ctrl-attrib_index = lv_ai.
* lit_ctrl-price_indicator = '001'.
APPEND lit_ctrl.
ENDFORM. " generate_item_data