Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Passing range table in a Subroutine

Former Member
0 Likes
3,339

I got 3 select options like this:

Tables : VBRK.
*---------------------------------------------------------------------*
*SELECTION SCREEN GUI
*---------------------------------------------------------------------*
SELECT-OPTIONS:
so_fkdat   FOR vbrk-fkdat OBLIGATORY,
so_fkart   FOR vbrk-fkart,
so_vbeln   FOR vbrk-vbeln.

Now In the title of my alv I want to show

what user hav input in these 3 select-options. (the alv part is okay)

FORM form_so_title
                    USING itab_so  TYPE ANY TABLE
                    it_so
                    CHANGING p_ls_line_info TYPE slis_entry.
  LOOP AT itab_so into it_so.
* this is not working with type any
* so i hav to loop instead of read line
*  READ TABLE it_so INDEX 1. 
    EXIT.
  ENDLOOP.
*When i am trying to access it_so-low, i m getting error
   l_describe = cl_abap_typedescr=>describe_by_data( it_so-low ).
    IF l_describe->type_kind EQ 'D'.
      WRITE it_so-high TO p_ls_line_info DD/MM/YYYY.
    ELSE.
      p_ls_line_info = it_so-high.
    ENDIF.
* this routine is complex but i am only posting 
* certain part of it
ENDFORM.

Here is how I am calling the routines


  ls_line-key  = 'Billing Date'.
  PERFORM form_so_title USING so_fkdat[] so_fkdat
                        CHANGING ls_line-info.
  APPEND ls_line TO lt_top_of_page.
*

  ls_line-key  = 'Billing No.'.
  CLEAR ls_line-info.
  PERFORM form_so_title USING so_vbeln[] so_vbeln
                        CHANGING ls_line-info.
  APPEND ls_line TO lt_top_of_page.
*
  ls_line-key  = 'Billing Type'.
  CLEAR ls_line-info.
  PERFORM form_so_title USING so_fkart[] so_fkart
                        CHANGING ls_line-info.
  APPEND ls_line TO lt_top_of_page.

P.S.

I got 3 select options like this:

Tables : VBRK.
*---------------------------------------------------------------------*
*SELECTION SCREEN GUI
*---------------------------------------------------------------------*
SELECT-OPTIONS:
so_fkdat   FOR vbrk-fkdat OBLIGATORY,
so_fkart   FOR vbrk-fkart,
so_vbeln   FOR vbrk-vbeln.

Now In the title of my alv I want to show

what user hav input in these 3 select-options. (the alv part is okay)

FORM form_so_title
                    USING itab_so  TYPE ANY TABLE
                    it_so
                    CHANGING p_ls_line_info TYPE slis_entry.
  LOOP AT itab_so into it_so.
* this is not working with type any
* so i hav to loop instead of read line
*  READ TABLE it_so INDEX 1. 
    EXIT.
  ENDLOOP.
*When i am trying to access it_so-low, i m getting error
   l_describe = cl_abap_typedescr=>describe_by_data( it_so-low ).
    IF l_describe->type_kind EQ 'D'.
      WRITE it_so-high TO p_ls_line_info DD/MM/YYYY.
    ELSE.
      p_ls_line_info = it_so-high.
    ENDIF.
* this routine is complex but i am only posting 
* certain part of it
ENDFORM.

Here is how I am calling the routines


  ls_line-key  = 'Billing Date'.
  PERFORM form_so_title USING so_fkdat[] so_fkdat
                        CHANGING ls_line-info.
  APPEND ls_line TO lt_top_of_page.
*

  ls_line-key  = 'Billing No.'.
  CLEAR ls_line-info.
  PERFORM form_so_title USING so_vbeln[] so_vbeln
                        CHANGING ls_line-info.
  APPEND ls_line TO lt_top_of_page.
*
  ls_line-key  = 'Billing Type'.
  CLEAR ls_line-info.
  PERFORM form_so_title USING so_fkart[] so_fkart
                        CHANGING ls_line-info.
  APPEND ls_line TO lt_top_of_page.

P.S.

5 REPLIES 5
Read only

Former Member
0 Likes
1,211

not able to understand what ur asking.....but u can directly loop at so_vbeln/so_fkdat/so_fkart to get the data in select options.

Not sure y ur using itab_so....wat is the structure of itab_so??!!

-Aarthi.

Read only

0 Likes
1,211

@Aarthi:

the idea is to do it dynamically,

i want to reuse the code,

as i wrote in my subroutine, its 100 line of code

and i dont want to repeat them

  • itab_so has got no strucute

@Manoj Gupta :

I want to use the same subroutines for all the three select-options

@Naimesh Patel :

Macro is nice work around, but i need to use it in other programs

Read only

0 Likes
1,211
*&---------------------------------------------------------------------*
*& Report  ZT_SO
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zt_so.

*---------------------------------------------------------------------*
* ALV
*---------------------------------------------------------------------*
TYPE-POOLS: slis, kkblo.


*---------------------------------------------------------------------*
*TABLES
*---------------------------------------------------------------------*

TABLES: usr01, sscrfields, vbrk.
TABLES: thead,                         "Textheader
        tline.                         "Textline
DATA:
it_vbrk LIKE TABLE OF vbrk.
*---------------------------------------------------------------------*
*SELECTION SCREEN GUI
*---------------------------------------------------------------------*
SELECT-OPTIONS:
so_fkdat   FOR vbrk-fkdat OBLIGATORY,
so_fkart   FOR vbrk-fkart,
so_vbeln   FOR vbrk-vbeln.


AT SELECTION-SCREEN.

  CASE sscrfields-ucomm.
    WHEN 'ONLI'.
      PERFORM form_extract_data.
    WHEN OTHERS.
      MESSAGE s001(00) WITH '' sscrfields-ucomm.
  ENDCASE.

START-OF-SELECTION.
  PERFORM form_show.


*&---------------------------------------------------------------------*
*&      Form  form_so_title
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_SO_FKDAT[]  text
*      <--P_LS_LINE_INFO  text
*----------------------------------------------------------------------*
FORM form_so_title
                    USING itab_so  TYPE ANY TABLE
                    CHANGING
                    it_so
                    p_ls_line_info TYPE slis_entry.

  FIELD-SYMBOLS:
  <fs_low> TYPE ANY, <fs_high> TYPE ANY,
  <fs_option> TYPE ANY, <fs_sign> TYPE ANY.

  DATA comp_low(3) TYPE c VALUE 'LOW'.
  DATA comp_high(4) TYPE c VALUE 'HIGH'.
  DATA comp_sign(4) TYPE c VALUE 'SIGN'.
  DATA comp_option(6) TYPE c VALUE 'OPTION'.

  LOOP AT itab_so INTO it_so.
    EXIT.
  ENDLOOP.
  DATA:
           str_where(255), str_low(10), str_high(10), str_option(50), typ1.

  DATA l_describe TYPE REF TO cl_abap_typedescr.

  ASSIGN COMPONENT comp_low OF STRUCTURE it_so TO <fs_low>.
  ASSIGN COMPONENT comp_high OF STRUCTURE it_so TO <fs_high>.
  ASSIGN COMPONENT comp_sign OF STRUCTURE it_so TO <fs_sign>.
  ASSIGN COMPONENT comp_option OF STRUCTURE it_so TO <fs_option>.

  l_describe = cl_abap_typedescr=>describe_by_data( <fs_low> ).
  typ1 = l_describe->type_kind.


  IF <fs_high> IS NOT INITIAL
  AND <fs_low> IS NOT INITIAL.
    IF typ1 = 'D'.
      WRITE <fs_low>  TO str_low DD/MM/YYYY.
      WRITE <fs_high> TO str_high DD/MM/YYYY.
    ELSE.
      str_low = <fs_low>.
      str_high = <fs_high>.
    ENDIF.
*     "BT", "NB"
    IF <fs_option> = 'BT'.
      str_option = 'between'.
    ELSEIF <fs_option> = 'NB'.
      str_option = ' not between'.
    ENDIF.

    CONCATENATE  str_option str_low 'and' str_high INTO p_ls_line_info
    SEPARATED BY space.
  ELSEIF <fs_high> IS NOT INITIAL.
    IF typ1 = 'D'.
      WRITE <fs_high> TO p_ls_line_info DD/MM/YYYY.
    ELSE.
      p_ls_line_info = <fs_high>.
    ENDIF.
  ELSEIF <fs_low> IS NOT INITIAL.
*    "EQ", "NE", "GE", "GT", "LE", "LT", "CP" and "NP"

    CASE  <fs_option>.
      WHEN 'EQ'.
        str_option = ''.
      WHEN 'NE'.
        str_option = 'not equal to'.
      WHEN 'GE'.
        str_option = 'greater than or equal to'.
      WHEN 'GT'.
        str_option = 'greater than'.
      WHEN 'LE'.
        str_option = 'less than or equal to'.
      WHEN 'LT'.
        str_option = 'less than'.
      WHEN 'CP'.
        str_option = 'like'.
      WHEN 'NP'.
        str_option = 'not like'.
    ENDCASE.
    IF typ1 = 'D'.
      WRITE <fs_low> TO str_low DD/MM/YYYY.
    ELSE.
      str_low = <fs_low>.
    ENDIF.
    CONCATENATE  str_option str_low INTO p_ls_line_info
       SEPARATED BY space.
  ENDIF.

ENDFORM.                    " form_so_title
*&---------------------------------------------------------------------*
*&      Form  form_extract_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM form_extract_data .
  SELECT SINGLE * FROM vbrk.
  APPEND vbrk TO it_vbrk.
ENDFORM.                    " form_extract_data
*&---------------------------------------------------------------------*
*&      Form  form_show
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM form_show .
  DATA:
  gt_list_top_of_page TYPE slis_t_listheader,
  wa_gt LIKE LINE OF gt_list_top_of_page.

*"List Header for Top-Of-Page
  PERFORM comment_build USING gt_list_top_of_page[].
  FORMAT COLOR COL_TOTAL.
  LOOP AT gt_list_top_of_page INTO wa_gt.
    FORMAT INTENSIFIED ON.
    WRITE:/ wa_gt-key.
    FORMAT INTENSIFIED OFF.
    WRITE wa_gt-info.
  ENDLOOP.
  FORMAT COLOR OFF.

  FORMAT COLOR COL_KEY.
  LOOP AT it_vbrk INTO vbrk.
    WRITE:/ vbrk-vbeln.
    WRITE vbrk-fkdat.
  ENDLOOP.
  FORMAT COLOR OFF.



ENDFORM.                    " form_show

*&---------------------------------------------------------------------*
*&      Form  comment_build
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->LT_TOP_OF_PAGE  text
*----------------------------------------------------------------------*
FORM comment_build USING lt_top_of_page TYPE
                                        slis_t_listheader.
  DATA: ls_line TYPE slis_listheader,
         str_select TYPE string,
         str_where(255), str_low(10), str_high(10), str_option(50).


  CLEAR ls_line.
  ls_line-typ  = 'H'.
  ls_line-info = 'SDN BLOG'.
  APPEND ls_line TO lt_top_of_page.

  CLEAR ls_line.
  ls_line-typ  = 'H'.
  ls_line-info = 'Form report'.
  APPEND ls_line TO lt_top_of_page.


  CLEAR ls_line.
  CLEAR str_where.
  ls_line-typ  = 'S'.

  ls_line-key  = 'Report generated on'.
  WRITE sy-datum TO ls_line-info DD/MM/YYYY.
  APPEND ls_line TO lt_top_of_page.




*
  ls_line-key  = 'Billing Date'.
  PERFORM form_so_title USING so_fkdat[]
                        CHANGING so_fkdat ls_line-info.
  APPEND ls_line TO lt_top_of_page.
*

  ls_line-key  = 'Billing No.'.
  CLEAR ls_line-info.
  PERFORM form_so_title USING so_vbeln[]
                        CHANGING so_vbeln ls_line-info.
  APPEND ls_line TO lt_top_of_page.
*
  ls_line-key  = 'Billing Type'.
  CLEAR ls_line-info.
  PERFORM form_so_title USING so_fkart[]
                        CHANGING so_fkart ls_line-info.
  APPEND ls_line TO lt_top_of_page.

ENDFORM.                    "comment_build
Read only

naimesh_patel
Active Contributor
0 Likes
1,211

Hello,

It is not possible to pass the different select-options into same parameter in the subroutine.

Try to do it with MACRO.

define disp.

  • here you can access components like &1-low, &1-high...

end-of-defination.

*use it

disp so_fkdat.

Regards,

Naimesh

Read only

Former Member
0 Likes
1,211

Hi,

Do this

FORM form_so_title
             tables itab_so  like so_fkdat
           CHANGING p_ls_line_info TYPE slis_entry.

Note : - so_fkdat should be globally declared.

<b>or</b>

make a global varaible like this

data : lt_fkdat type ranges of fkdat.

then this

FORM form_so_title
             tables itab_so  like lt_fkdat
           CHANGING p_ls_line_info TYPE slis_entry.

NOTE :- It will not recognize the variable until u type cast it. always define type of variable in form aparameter.