on 05-19-2015 7:06 PM
Hi,
I am writing the below Start and end routine with a case statement but some reason its not working as expected.....With my limited ABAP knowledge I could able to correct the issue ...
Shall be grateful if someone could provide me inputs.
Logic: A Z Table is maintained with company code and default Profit Centre.
For all Profit centres from source we need to check if first 2 letters starts with IE and source company code 531 0r 521 then populate source fields to result fields if not then populate from z table
Start Routine
SELECT * FROM ZCC_PC_MAPPING INTO TABLE t_cc_pc_map FOR ALL ENTRIES IN SOURCE_PACKAGE
WHERE COMP_CODE = SOURCE_PACKAGE-COMP_CODE.
SORT t_cc_pc_map BY comp_code.
End Routine:
LOOP AT RESULT_PACKAGE ASSIGNING <RESULT_FIELDS>.
l_prefix = <RESULT_FIELDS>-PROFIT_CTR(2).
CASE l_prefix.
WHEN 'IE'.
IF <RESULT_FIELDS>-COMP_CODE = '531' OR
<RESULT_FIELDS>-COMP_CODE = '521'.
<RESULT_FIELDS>-PROFIT_CTR = <RESULT_FIELDS>-PROFIT_CTR.
<RESULT_FIELDS>-CO_AREA = <RESULT_FIELDS>-CO_AREA.
ENDIF.
WHEN 'CY'.
IF <RESULT_FIELDS>-COMP_CODE = '797' OR
<RESULT_FIELDS>-COMP_CODE = '993' OR
<RESULT_FIELDS>-COMP_CODE = '994'.
<RESULT_FIELDS>-PROFIT_CTR = <RESULT_FIELDS>-PROFIT_CTR.
<RESULT_FIELDS>-CO_AREA = <RESULT_FIELDS>-CO_AREA.
ENDIF.
WHEN 'RW'.
IF <RESULT_FIELDS>-COMP_CODE = '1004' OR
<RESULT_FIELDS>-COMP_CODE = '650' OR
<RESULT_FIELDS>-COMP_CODE = '911'.
<RESULT_FIELDS>-PROFIT_CTR = <RESULT_FIELDS>-PROFIT_CTR.
<RESULT_FIELDS>-CO_AREA = <RESULT_FIELDS>-CO_AREA.
ENDIF.
WHEN 'NZ'.
IF <RESULT_FIELDS>-COMP_CODE = '1029'.
<RESULT_FIELDS>-PROFIT_CTR = <RESULT_FIELDS>-PROFIT_CTR.
<RESULT_FIELDS>-CO_AREA = <RESULT_FIELDS>-CO_AREA.
ENDIF.
WHEN 'GB'.
IF <RESULT_FIELDS>-COMP_CODE <> ' '.
<RESULT_FIELDS>-PROFIT_CTR = <RESULT_FIELDS>-PROFIT_CTR.
<RESULT_FIELDS>-CO_AREA = <RESULT_FIELDS>-CO_AREA.
ENDIF.
WHEN 'GS'.
IF <RESULT_FIELDS>-COMP_CODE <> ' '.
<RESULT_FIELDS>-PROFIT_CTR = <RESULT_FIELDS>-PROFIT_CTR.
<RESULT_FIELDS>-CO_AREA = <RESULT_FIELDS>-CO_AREA.
ENDIF.
* WHEN 'GB' OR 'IE' OR 'NZ' OR 'CY' OR 'RW' OR 'GS'.
* CONTINUE.
WHEN OTHERS.
READ TABLE t_cc_pc_map ASSIGNING <fs_cc_pc_map>
WITH KEY comp_code = <RESULT_FIELDS>-COMP_CODE BINARY SEARCH.
IF sy-subrc = 0.
<RESULT_FIELDS>-PROFIT_CTR = <fs_cc_pc_map>-profit_c.
<RESULT_FIELDS>-CO_AREA = <fs_cc_pc_map>-co_area.
ENDIF.
ENDCASE.
ENDLOOP.
Hi,
Please use below clear statement before assigning new value.
Maintain below line after LOOP statement and the assign new value.
Clear : l_prefix.
Thank you,
Nanda
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Thanks for the Update.
Still not working
Source Data:
Company Code - 612
Profit Centre - IE736322
Z Table Entry
612 - US84522
As per the end routine logic for this source repord I am expecting source profit centre IE736322 to be replaced with Z Table profit centre US84522.....
With the current logic its still loading IE736322
Please advise
Hi,
if you look at your code. 612 is not checking hence it populating old value.
WHEN 'IE'.
IF <RESULT_FIELDS>-COMP_CODE = '531' OR
<RESULT_FIELDS>-COMP_CODE = '521'.
<RESULT_FIELDS>-PROFIT_CTR = <RESULT_FIELDS>-PROFIT_CTR.
<RESULT_FIELDS>-CO_AREA = <RESULT_FIELDS>-CO_AREA.
ENDIF.
Please change or add 612.
Thank you,
Nanda
Hi ,
You have to change code as like below.
WHEN 'IE'.
IF <RESULT_FIELDS>-COMP_CODE = '531' OR
<RESULT_FIELDS>-COMP_CODE = '521'.
<RESULT_FIELDS>-PROFIT_CTR = <RESULT_FIELDS>-PROFIT_CTR.
<RESULT_FIELDS>-CO_AREA = <RESULT_FIELDS>-CO_AREA.
else.
READ TABLE t_cc_pc_map ASSIGNING <fs_cc_pc_map>
WITH KEY comp_code = <RESULT_FIELDS>-COMP_CODE BINARY SEARCH.
IF sy-subrc = 0.
<RESULT_FIELDS>-PROFIT_CTR = <fs_cc_pc_map>-profit_c.
<RESULT_FIELDS>-CO_AREA = <fs_cc_pc_map>-co_area.
ENDIF.
ENDIF.
Because once profit ctr IE it will come to WHEN 'IE', it will not go to again WHEN OTHER hence it populating old value.
Please change code in all areas. like CY, RW Etc...
This definitely work.
Thanks
Nanda
Hi,
Thanks for the inputs...modified the code as specified...can you please check...let me know if any further corrections required
LOOP AT RESULT_PACKAGE ASSIGNING <RESULT_FIELDS>.
Clear : l_prefix.
l_prefix = <RESULT_FIELDS>-PROFIT_CTR(2).
CASE l_prefix.
WHEN 'IE'.
IF <RESULT_FIELDS>-COMP_CODE = '531' OR
<RESULT_FIELDS>-COMP_CODE = '521'.
<RESULT_FIELDS>-PROFIT_CTR = <RESULT_FIELDS>-PROFIT_CTR.
<RESULT_FIELDS>-CO_AREA = <RESULT_FIELDS>-CO_AREA.
ELSE.
READ TABLE t_cc_pc_map ASSIGNING <fs_cc_pc_map>
WITH KEY comp_code = <RESULT_FIELDS>-COMP_CODE BINARY SEARCH.
IF sy-subrc = 0.
<RESULT_FIELDS>-PROFIT_CTR = <fs_cc_pc_map>-profit_c.
<RESULT_FIELDS>-CO_AREA = <fs_cc_pc_map>-co_area.
ENDIF.
ENDIF.
WHEN 'CY'.
IF <RESULT_FIELDS>-COMP_CODE = '797' OR
<RESULT_FIELDS>-COMP_CODE = '993' OR
<RESULT_FIELDS>-COMP_CODE = '994'.
<RESULT_FIELDS>-PROFIT_CTR = <RESULT_FIELDS>-PROFIT_CTR.
<RESULT_FIELDS>-CO_AREA = <RESULT_FIELDS>-CO_AREA.
ELSE.
READ TABLE t_cc_pc_map ASSIGNING <fs_cc_pc_map>
WITH KEY comp_code = <RESULT_FIELDS>-COMP_CODE BINARY SEARCH.
IF sy-subrc = 0.
<RESULT_FIELDS>-PROFIT_CTR = <fs_cc_pc_map>-profit_c.
<RESULT_FIELDS>-CO_AREA = <fs_cc_pc_map>-co_area.
ENDIF.
ENDIF.
WHEN 'RW'.
IF <RESULT_FIELDS>-COMP_CODE = '1004' OR
<RESULT_FIELDS>-COMP_CODE = '650' OR
<RESULT_FIELDS>-COMP_CODE = '911'.
<RESULT_FIELDS>-PROFIT_CTR = <RESULT_FIELDS>-PROFIT_CTR.
<RESULT_FIELDS>-CO_AREA = <RESULT_FIELDS>-CO_AREA.
ELSE.
READ TABLE t_cc_pc_map ASSIGNING <fs_cc_pc_map>
WITH KEY comp_code = <RESULT_FIELDS>-COMP_CODE BINARY SEARCH.
IF sy-subrc = 0.
<RESULT_FIELDS>-PROFIT_CTR = <fs_cc_pc_map>-profit_c.
<RESULT_FIELDS>-CO_AREA = <fs_cc_pc_map>-co_area.
ENDIF.
ENDIF.
WHEN 'NZ'.
IF <RESULT_FIELDS>-COMP_CODE = '1029'.
<RESULT_FIELDS>-PROFIT_CTR = <RESULT_FIELDS>-PROFIT_CTR.
<RESULT_FIELDS>-CO_AREA = <RESULT_FIELDS>-CO_AREA.
ELSE.
READ TABLE t_cc_pc_map ASSIGNING <fs_cc_pc_map>
WITH KEY comp_code = <RESULT_FIELDS>-COMP_CODE BINARY SEARCH.
IF sy-subrc = 0.
<RESULT_FIELDS>-PROFIT_CTR = <fs_cc_pc_map>-profit_c.
<RESULT_FIELDS>-CO_AREA = <fs_cc_pc_map>-co_area.
ENDIF.
ENDIF.
WHEN 'GB'.
IF <RESULT_FIELDS>-COMP_CODE <> ' '.
<RESULT_FIELDS>-PROFIT_CTR = <RESULT_FIELDS>-PROFIT_CTR.
<RESULT_FIELDS>-CO_AREA = <RESULT_FIELDS>-CO_AREA.
ELSE.
READ TABLE t_cc_pc_map ASSIGNING <fs_cc_pc_map>
WITH KEY comp_code = <RESULT_FIELDS>-COMP_CODE BINARY SEARCH.
IF sy-subrc = 0.
<RESULT_FIELDS>-PROFIT_CTR = <fs_cc_pc_map>-profit_c.
<RESULT_FIELDS>-CO_AREA = <fs_cc_pc_map>-co_area.
ENDIF.
ENDIF.
WHEN 'GS'.
IF <RESULT_FIELDS>-COMP_CODE <> ' '.
<RESULT_FIELDS>-PROFIT_CTR = <RESULT_FIELDS>-PROFIT_CTR.
<RESULT_FIELDS>-CO_AREA = <RESULT_FIELDS>-CO_AREA.
ELSE.
READ TABLE t_cc_pc_map ASSIGNING <fs_cc_pc_map>
WITH KEY comp_code = <RESULT_FIELDS>-COMP_CODE BINARY SEARCH.
IF sy-subrc = 0.
<RESULT_FIELDS>-PROFIT_CTR = <fs_cc_pc_map>-profit_c.
<RESULT_FIELDS>-CO_AREA = <fs_cc_pc_map>-co_area.
ENDIF.
ENDIF.
WHEN OTHERS.
READ TABLE t_cc_pc_map ASSIGNING <fs_cc_pc_map>
WITH KEY comp_code = <RESULT_FIELDS>-COMP_CODE BINARY SEARCH.
IF sy-subrc = 0.
<RESULT_FIELDS>-PROFIT_CTR = <fs_cc_pc_map>-profit_c.
<RESULT_FIELDS>-CO_AREA = <fs_cc_pc_map>-co_area.
ENDIF.
ENDCASE.
ENDLOOP.
User | Count |
---|---|
93 | |
10 | |
10 | |
9 | |
9 | |
7 | |
6 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.