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

Filtering second parameter based on first parameter value

Former Member
0 Likes
957

Hi Experts,

I have two parameters LOCATION AND PLAN with f4 help in selection screen.

i want to filter second parameter based on the first selection criteria.

on entering value say 16 in location .

I want to filter plan through drop down based on location 16.

thanks

Surbhi

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
761

Hi

Example to get materials(Second parameter in selection scree) based on plant(First selection screen parameter)

PARAMETERS:p_werks TYPE marc-werks,

p_matnr TYPE mara-matnr.

DATA:it_dynread TYPE TABLE OF dynpread.

DATA:wa_dynread TYPE dynpread.

TYPES:BEGIN OF ty_matnr,

werks TYPE marc-werks,

matnr TYPE marc-matnr,

END OF ty_matnr.

TYPES:BEGIN OF ty_mara,

matnr TYPE mara-matnr,

END OF ty_mara.

DATA:wa_matnr TYPE ty_matnr.

DATA:it_matnr TYPE STANDARD TABLE OF ty_matnr.

DATA:wa_mara TYPE ty_mara,

it_mara TYPE STANDARD TABLE OF ty_mara.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_matnr.

CLEAR:it_dynread[],wa_dynread.

wa_dynread-fieldname = 'P_WERKS'.

APPEND wa_dynread TO it_dynread.

CALL FUNCTION 'DYNP_VALUES_READ'

EXPORTING

dyname = sy-repid

dynumb = sy-dynnr

translate_to_upper = 'X'

TABLES

dynpfields = it_dynread

EXCEPTIONS

invalid_abapworkarea = 1

invalid_dynprofield = 2

invalid_dynproname = 3

invalid_dynpronummer = 4

invalid_request = 5

no_fielddescription = 6

invalid_parameter = 7

undefind_error = 8

double_conversion = 9

stepl_not_found = 10

OTHERS = 11.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ELSE.

READ TABLE it_dynread INTO wa_dynread INDEX 1.

IF wa_dynread-fieldvalue IS INITIAL.

MESSAGE i000(oo) WITH 'Enter Valid Value'.

ENDIF.

ENDIF.

READ TABLE it_dynread INTO wa_dynread INDEX 1.

p_werks = wa_dynread-fieldvalue.

SELECT matnr FROM marc INTO TABLE it_mara WHERE werks = p_werks.

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

EXPORTING

retfield = 'MATNR'

dynpprog = sy-cprog

dynpnr = sy-dynnr

dynprofield = 'P_MATNR'

value_org = 'S'

TABLES

value_tab = it_mara

EXCEPTIONS

parameter_error = 1

no_values_found = 2

OTHERS = 3.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

Regards

Srilaxmi

4 REPLIES 4
Read only

Former Member
0 Likes
761

Hi Surbhi,

You have to use function module DYNP_VALUES_READ to read the value entered in the first Parameter & based on that you have to read the data form database in a internal table & pass the data to the function module ,F4IF_INT_TABLE_VALUE_REQUEST.

Kindly check for the code in SCN.

Regards

Abhii

Read only

former_member386202
Active Contributor
0 Likes
761

Hi,

Refer following code

*--Local Variables

DATA :lt_value_tab TYPE STANDARD TABLE OF ty_s_value_tab.

*--Select Document Numbers from table WITH_ITEM

SELECT augbl "Document Number

FROM with_item "With Item

INTO TABLE lt_value_tab

WHERE bukrs IN s_bukrs

AND gjahr IN s_gjahr.

IF sy-subrc EQ 0.

*--Sort table by document number

SORT lt_value_tab BY augbl.

*--Delete duplicate records from table

DELETE ADJACENT DUPLICATES FROM lt_value_tab COMPARING ALL FIELDS.

*--Call function module for F4

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

EXPORTING

retfield = 'AUGBL' "Document number

dynpprog = sy-cprog "program name

dynpnr = sy-dynnr "Screen number

dynprofield = 'S_AUGBL' "Selection field

value_org = gc_s "Structure view

TABLES

value_tab = lt_value_tab "Data table

EXCEPTIONS

parameter_error = 1

no_values_found = 2

OTHERS = 3.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDIF.

Regards,

Prashant

Read only

Former Member
0 Likes
762

Hi

Example to get materials(Second parameter in selection scree) based on plant(First selection screen parameter)

PARAMETERS:p_werks TYPE marc-werks,

p_matnr TYPE mara-matnr.

DATA:it_dynread TYPE TABLE OF dynpread.

DATA:wa_dynread TYPE dynpread.

TYPES:BEGIN OF ty_matnr,

werks TYPE marc-werks,

matnr TYPE marc-matnr,

END OF ty_matnr.

TYPES:BEGIN OF ty_mara,

matnr TYPE mara-matnr,

END OF ty_mara.

DATA:wa_matnr TYPE ty_matnr.

DATA:it_matnr TYPE STANDARD TABLE OF ty_matnr.

DATA:wa_mara TYPE ty_mara,

it_mara TYPE STANDARD TABLE OF ty_mara.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_matnr.

CLEAR:it_dynread[],wa_dynread.

wa_dynread-fieldname = 'P_WERKS'.

APPEND wa_dynread TO it_dynread.

CALL FUNCTION 'DYNP_VALUES_READ'

EXPORTING

dyname = sy-repid

dynumb = sy-dynnr

translate_to_upper = 'X'

TABLES

dynpfields = it_dynread

EXCEPTIONS

invalid_abapworkarea = 1

invalid_dynprofield = 2

invalid_dynproname = 3

invalid_dynpronummer = 4

invalid_request = 5

no_fielddescription = 6

invalid_parameter = 7

undefind_error = 8

double_conversion = 9

stepl_not_found = 10

OTHERS = 11.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ELSE.

READ TABLE it_dynread INTO wa_dynread INDEX 1.

IF wa_dynread-fieldvalue IS INITIAL.

MESSAGE i000(oo) WITH 'Enter Valid Value'.

ENDIF.

ENDIF.

READ TABLE it_dynread INTO wa_dynread INDEX 1.

p_werks = wa_dynread-fieldvalue.

SELECT matnr FROM marc INTO TABLE it_mara WHERE werks = p_werks.

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

EXPORTING

retfield = 'MATNR'

dynpprog = sy-cprog

dynpnr = sy-dynnr

dynprofield = 'P_MATNR'

value_org = 'S'

TABLES

value_tab = it_mara

EXCEPTIONS

parameter_error = 1

no_values_found = 2

OTHERS = 3.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

Regards

Srilaxmi

Read only

former_member404244
Active Contributor
0 Likes
761

Hi,

Please find the Sample code.. Please try with your case.


*** Populate listbox for control grade whenever matnr changes
  REFRESH git_list[].
  CLEAR : gwa_value.

      SELECT matnr cctrlgrade
           FROM <dbtable>
           INTO TABLE git_cctrlgrade
           WHERE matnr = p_matnr.


    IF git_cctrlgrade[] IS NOT INITIAL.

      SORT git_cctrlgrade BY matnr cctrlgrade.
      DELETE ADJACENT DUPLICATES FROM git_cctrlgrade COMPARING matnr cctrlgrade.

      LOOP AT git_cctrlgrade INTO gwa_cctrlgrade WHERE cctrlgrade IS NOT INITIAL.
        gwa_value-text = gwa_cctrlgrade-cctrlgrade.
        gwa_value-key = gwa_cctrlgrade-cctrlgrade.
        APPEND gwa_value TO git_list.
      ENDLOOP.
    ENDIF.

    gv_name = 'P_CCTRLG'.

    CALL FUNCTION 'VRM_SET_VALUES'
      EXPORTING
        id              = gv_name
        values          = git_list
      EXCEPTIONS
        id_illegal_name = 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.

Regards,

Nagaraj