cancel
Showing results for 
Search instead for 
Did you mean: 

ABAP Case Statement in Transformation End Routine

Former Member
0 Kudos


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.

Accepted Solutions (1)

Accepted Solutions (1)

ccc_ccc
Active Contributor
0 Kudos

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

Former Member
0 Kudos

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

ccc_ccc
Active Contributor
0 Kudos

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


ccc_ccc
Active Contributor
0 Kudos

Please let me know how you declared :

l_prefix variable


Thank you,

Nanda

ccc_ccc
Active Contributor
0 Kudos

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


Former Member
0 Kudos

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.



ccc_ccc
Active Contributor
0 Kudos

looks good. go ahead.

Regards,

Nanda

Former Member
0 Kudos

Thanks for all the help.

Points assigned

Answers (0)