Application Development 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: 

Selection Screen not able to pick from f4 if i make field non editable.

former_member196331
Active Contributor
0 Kudos

Hi,

I have one small requirement.

I would like to restrict the Users. The person has to give the input values in Selection screen through the only f4 help only,

It might  be possible to enter the values in fields directly.  Plz have a look on below attached image.

In the below code, In selection screen If i make field disabled, Only parameter only it is working. means i can able to pick the value from f4.

but same logic is applicable to 

SELECT-OPTIONS: S_BUKRS FOR MARA-MATNR.   But not working.

Can any body tell me  what is the wrong in my code..

TABLES: MARA.

TYPES: BEGIN OF TY,

          MATNR TYPE MATNR,

         WERKS TYPE WERKS_D,

        END OF TY.

DATA: IT2 TYPE STANDARD TABLE OF DSELC,

       WA2 TYPE DSELC.

DATA: IT TYPE STANDARD TABLE OF TY,

       WA_RETURN TYPE DDSHRETVAL,

       I_RETURN TYPE STANDARD TABLE OF DDSHRETVAL,

       REPID TYPE SY-REPID,

       DYNNR TYPE SY-DYNNR.

PARAMETERS:

          P_MATNR   TYPE MARA-MATNR,

          P_WERKS    TYPE MARC-WERKS.

SELECT-OPTIONS: S_BUKRS FOR MARA-MATNR.

AT SELECTION-SCREEN OUTPUT.

   LOOP AT SCREEN.

     IF SCREEN-NAME = 'P_WERKS'.

       SCREEN-INPUT = 0.

       SCREEN-DISPLAY_3D = 'X'.

       MODIFY SCREEN.

     ENDIF.

   ENDLOOP.

     LOOP AT SCREEN.

     IF SCREEN-NAME = 'P_MATNR'.

       SCREEN-INPUT = 0.

*      SCREEN-DISPLAY_3D = 'X'.

       MODIFY SCREEN.

     ENDIF.

   ENDLOOP.

   LOOP AT SCREEN.

     IF SCREEN-NAME = 'S_BUKRS-HIGH'.

       SCREEN-INPUT = 0.

*      SCREEN-DISPLAY_3D = 'X'.

       MODIFY SCREEN.

     ENDIF.

   ENDLOOP.

     LOOP AT SCREEN.

     IF SCREEN-NAME = 'S_BUKRS-LOW'.

       SCREEN-INPUT = 0.

*      SCREEN-DISPLAY_3D = 'X'.

       MODIFY SCREEN.

     ENDIF.

   ENDLOOP.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_MATNR.

   REPID = SY-REPID.

   DYNNR = SY-DYNNR.

   SELECT MATNR WERKS

               FROM MARC UP TO 20 ROWS

               INTO TABLE IT.

   CHECK SY-SUBRC = 0.

   WA2-FLDNAME = 'F0001'.

   WA2-DYFLDNAME = 'P_MATNR'.

   APPEND WA2 TO IT2.

   WA2-FLDNAME = 'F0002'.

   WA2-DYFLDNAME = 'P_WERKS'.

   APPEND WA2 TO IT2.

   CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

     EXPORTING

       RETFIELD        = 'WERKS'

       DYNPPROG        = REPID

       DYNPNR          = DYNNR

       DYNPROFIELD     = 'P_WERKS'

       VALUE_ORG       = 'S'

       DISPLAY         = 'F'

     TABLES

       VALUE_TAB       = IT

       DYNPFLD_MAPPING = IT2

     EXCEPTIONS

       PARAMETER_ERROR = 1

       NO_VALUES_FOUND = 2

       OTHERS          = 3.

1 ACCEPTED SOLUTION

venkateswaran_k
Active Contributor
0 Kudos

Yes NewB

If the field is non editable, you cannot select item from the F4 - help.

Hence, we change it to 1 - allowed select - and changed it back to 0

Hope this clarifies your doubt,

The  better approach would be as I said earlier, make the field as dropdown list - so taht user cannot enter instead only select.

PARAMETERS:

           P_MATNR   TYPE MARA-MATNR AS LISTBOX VISIBLE LENGTH 18,

           P_WERKS    TYPE MARC-WERKS.


Regards,

Venkat

19 REPLIES 19

former_member192023
Active Participant
0 Kudos

Try FM DYNP_VALUES_UPDATE.

Regards.

0 Kudos

Ok i will check it.

0 Kudos

Thanks For your reply.

Still i am facing the problem.I used DYNP_VALUES_UPDATE.

Below is my code. If fields are enabled and if i don't use dynpro_update it is working fine.

if i make it fields editable = false and use the dynpro_update not working.

if i make it fields editable = false then values are not picking.


TABLES:MARA.

SELECT-OPTIONS   : S_MATNR FOR MARA-MATNR.

TYPES: BEGIN OF RESB_POSNR,

*       AUFNR TYPE RESB-AUFNR,

*       POSNR TYPE RESB-POSNR,

         MATNR TYPE MARA-MATNR,

        END OF RESB_POSNR.

DATA: IT_RSEB TYPE TABLE OF RESB_POSNR,

       WA_RSEB TYPE RESB_POSNR.

DATA : IT_RETURN1 LIKE DDSHRETVAL OCCURS 0 WITH HEADER LINE,

        IT_RETURN2 LIKE DDSHRETVAL OCCURS 0 WITH HEADER LINE.

AT SELECTION-SCREEN OUTPUT.

   LOOP AT SCREEN.

     IF SCREEN-NAME = 'S_MATNR-LOW'.

       SCREEN-INPUT = 0.

*      SCREEN-DISPLAY_3D = 'X'.

       MODIFY SCREEN.

     ENDIF.

   ENDLOOP.

   LOOP AT SCREEN.

     IF SCREEN-NAME = 'S_MATNR-HIGH'.

       SCREEN-INPUT = 0.

*      SCREEN-DISPLAY_3D = 'X'.

       MODIFY SCREEN.

     ENDIF.

   ENDLOOP.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MATNR-LOW.

*  SELECT AUFNR POSNR  FROM RESB INTO TABLE IT_RSEB WHERE BDART EQ 'AR' AND  BWART IN ('261','262') ORDER BY AUFNR.

   SELECT   MATNR FROM MARA INTO TABLE IT_RSEB.

   IF SY-SUBRC = 0.

     CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

       EXPORTING

         RETFIELD        = 'MATNR'

         DYNPPROG        = 'ZPRAC11'

         DYNPNR          = SY-DYNNR

         DYNPROFIELD     = 'S_SCREEN'

         VALUE_ORG       = 'S'  "Mandatory

       TABLES

         VALUE_TAB       = IT_RSEB

       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.

*

     DATA : IT_DYN TYPE TABLE OF DYNPREAD ,

            WA_DYN TYPE DYNPREAD.

     WA_DYN-FIELDNAME = 'S_MATNR' .

     WA_DYN-FIELDVALUE = IT_RETURN1-FIELDVAL.

     APPEND WA_DYN TO IT_DYN.

     CALL FUNCTION 'DYNP_VALUES_UPDATE'

       EXPORTING

         DYNAME     = SY-REPID

         DYNUMB     = SY-DYNNR

       TABLES

         DYNPFIELDS = IT_DYN.

   ENDIF.

Former Member
0 Kudos

hi,

REFRESH it_tab.

   CLEAR it_tab.

   it_tab-fieldname ='P_WERKS'.

   APPEND it_tab.

   CALL FUNCTION 'DYNP_VALUES_READ'

     EXPORTING

       dyname               = sy-repid

       dynumb               = sy-dynnr

       translate_to_upper   = 'X '

     TABLES

       dynpfields           = it_tab

     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.

   ENDIF.

   READ TABLE it_tab INDEX 1.

   p_werks = it_tab-fieldvalue.



SELECT dispo INTO TABLE it_f4 FROM marc WHERE werks = p_werks.

   SORT it_f4 DESCENDING BY dispo.

   READ TABLE it_f4 INTO wa_f4 INDEX 1.

   REFRESH it_f4.

   APPEND wa_f4 TO it_f4.

   CLEAR wa_f4.

   CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

     EXPORTING

       retfield        = 'DISPO'

       dynpprog        = sy-repid

       dynpnr          = sy-dynnr

       dynprofield     = 'DISPO'

       value_org       = 'S'

     TABLES

       value_tab       = it_f4

     EXCEPTIONS

       parameter_error = 1

       no_values_found = 2

       OTHERS          = 3.

   IF sy-subrc IS NOT INITIAL.

     REFRESH it_f4.

   ENDIF.

venkateswaran_k
Active Contributor
0 Kudos

Hi NewB

Use like this,  you can achieve what you want.

PARAMETERS:

           P_MATNR   TYPE MARA-MATNR AS LISTBOX VISIBLE LENGTH 18,

           P_WERKS    TYPE MARC-WERKS.


Regards,

Venkat

0 Kudos

had a chance to try this option above i said.?

PARAMETERS:

           P_MATNR   TYPE MARA-MATNR AS LISTBOX VISIBLE LENGTH 18,

           P_WERKS    TYPE MARC-WERKS.

0 Kudos

Hi, I checked your reply. I tried your option.

But my questions is Why My code is not working.

I will use your code definitely , But second choice only.

I tried diff ways. I am not able to select the value from the list .. Values are not getting selected. If i put the break point that's why field is not getting any value.

0 Kudos

do you want to return two fields from help?  matnr and werks?

can u explain please

0 Kudos

Hi,

Thanks for your reply.

This is my code.

TABLES:MARA.

SELECT-OPTIONS   : S_MATNR FOR MARA-MATNR.

TYPES: BEGIN OF RESB_POSNR,

*       AUFNR TYPE RESB-AUFNR,

*       POSNR TYPE RESB-POSNR,

         MATNR TYPE MARA-MATNR,

        END OF RESB_POSNR.

DATA: IT_RSEB TYPE TABLE OF RESB_POSNR,

       WA_RSEB TYPE RESB_POSNR,

       LS_VALUES TYPE DDSHRETVAL.

DATA : IT_RETURN1 LIKE DDSHRETVAL OCCURS 0 WITH HEADER LINE,

        IT_RETURN2 LIKE DDSHRETVAL OCCURS 0 WITH HEADER LINE,

        LT_VALUES TYPE STANDARD TABLE OF DDSHRETVAL.

AT SELECTION-SCREEN OUTPUT.

  LOOP AT SCREEN.

    IF SCREEN-NAME = 'S_MATNR-LOW'.

      SCREEN-INPUT = 0.

*      SCREEN-DISPLAY_3D = 'X'.

      MODIFY SCREEN.

    ENDIF.

  ENDLOOP.

  LOOP AT SCREEN.

    IF SCREEN-NAME = 'S_MATNR-HIGH'.

      SCREEN-INPUT = 0.

*      SCREEN-DISPLAY_3D = 'X'.

      MODIFY SCREEN.

    ENDIF.

  ENDLOOP.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MATNR-LOW.

*  SELECT AUFNR POSNR  FROM RESB INTO TABLE IT_RSEB WHERE BDART EQ 'AR' AND  BWART IN ('261','262') ORDER BY AUFNR.

  SELECT   MATNR FROM MARA INTO TABLE IT_RSEB.

  IF SY-SUBRC = 0.

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

      EXPORTING

        RETFIELD        = 'MATNR'

        DYNPPROG        = 'ZPRAC11'

        DYNPNR          = SY-DYNNR

        DYNPROFIELD     = 'S_SCREEN'

        VALUE_ORG       = 'S'  "Mandatory

*       WINDOW_TITLE    = 'Select the Table Field'(001)

*        MULTIPLE_CHOICE = 'X'

*        DISPLAY         = 'F'

      TABLES

        VALUE_TAB       = IT_RSEB

        RETURN_TAB      = LT_VALUES

      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.

    S_MATNR-SIGN    = 'I'.

    S_MATNR-OPTION  = 'EQ'.

    LOOP AT LT_VALUES INTO LS_VALUES.

      S_MATNR-LOW = LS_VALUES-FIELDVAL.

      APPEND S_MATNR.

    ENDLOOP.

    DATA: LT_DYNPREAD   TYPE STANDARD TABLE OF DYNPREAD,

          LWA_DYNPREAD  TYPE DYNPREAD.

    READ TABLE S_MATNR INDEX 1.

    IF SY-SUBRC = 0.

      LWA_DYNPREAD-FIELDNAME  = 'S_MATNR-LOW'.

      LWA_DYNPREAD-FIELDVALUE = S_MATNR-LOW.

      APPEND LWA_DYNPREAD TO LT_DYNPREAD.

    ENDIF.

    CALL FUNCTION 'DYNP_VALUES_UPDATE'

      EXPORTING

        DYNAME               = SY-REPID

        DYNUMB               = SY-DYNNR

      TABLES

        DYNPFIELDS           = LT_DYNPREAD

      EXCEPTIONS

        INVALID_ABAPWORKAREA = 1

        INVALID_DYNPROFIELD  = 2

        INVALID_DYNPRONAME   = 3

        INVALID_DYNPRONUMMER = 4

        INVALID_REQUEST      = 5

        NO_FIELDDESCRIPTION  = 6

        UNDEFIND_ERROR       = 7

        OTHERS               = 8.

    IF SY-SUBRC NE 0.

    ENDIF.

  ENDIF.

What i am facing from the above problem is.(Please have a look on below attached image.)

1) I am not able to select the values from the f4_help

2)After press the Enter return values are not capturing.

Any one knows what is the problem.

0 Kudos

This is because, you set the field attributes screen-input = 0.

That is why, the values are not returned and even the help is readonly.

To toggle that,

Please add the following code under the section

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MATNR-LOW.

    LOOP AT SCREEN.

     IF SCREEN-NAME = 'S_MATNR-LOW'.

       SCREEN-INPUT = 1.

*      SCREEN-DISPLAY_3D = 'X'.

       MODIFY SCREEN.

     ENDIF.

   ENDLOOP.


Regards,

Venkat

0 Kudos

Hi,

If i make it

  SCREEN-INPUT = 1 .

The field is editable = true.


so, your answer is if i make it editable = false i can not pick it from the f4_help.

Former Member
0 Kudos

HI,

    what venkat told is correct,now it will work.

former_member184158
Active Contributor
0 Kudos

Hi

could you refer to this Select options - dynp_values_update | SCN

may it help you. I have tried out, and the Selection Screen not editable but you can although  pick value from f4.

Regards

Ebrahim

0 Kudos

Hi,Ebrahim Hatem

Thanks for your reply. Actually i seen that post. before post the question. u can able to see bookmark for the above post. I bookmarked that one.

Please have a look on below attached image. If i fallow the above post. the selection screen changes.

This is little bit  Difference than the Normal f4_help selection screen I hope i had observed.

Because of that reason. Whether is it possible or not From the above code i am just asking. I am thinking i had done some thing wrong, that's what i posted this questions




venkateswaran_k
Active Contributor
0 Kudos

Yes NewB

If the field is non editable, you cannot select item from the F4 - help.

Hence, we change it to 1 - allowed select - and changed it back to 0

Hope this clarifies your doubt,

The  better approach would be as I said earlier, make the field as dropdown list - so taht user cannot enter instead only select.

PARAMETERS:

           P_MATNR   TYPE MARA-MATNR AS LISTBOX VISIBLE LENGTH 18,

           P_WERKS    TYPE MARC-WERKS.


Regards,

Venkat

0 Kudos

Ok, Point noted. I can use it. But client has to approve it. I will check it.

0 Kudos

Hi NewB,

You were on the right lines with the very first code that you posted. I think you got a little confused trying to handle a select-option. You certainly do not need to call DYNP_VALUES_UPDATE.

As you found the key to be able to return a value to display only fields is the following parameter of the function call:

        display         = 'F' "<<<<<< Allow value return to screen in display mode

The following report returns the selected F4 value to a select-option. Frankly it is not really suited to returning a value to a display only select-option, as you are limited to what you can select in the F4 help. It is much more suited to a display only parameter, but the below shows that it can be done for a select-option. Just be careful the input parameters to the function call match your program, e.g. dynpprog, dynprofield, etc:

  REPORT zprac11.

  TABLES:mara.

  SELECT-OPTIONS : s_matnr FOR mara-matnr.

  TYPES: BEGIN OF resb_posnr,

           matnr TYPE mara-matnr,

         END OF resb_posnr.

  DATA: it_rseb TYPE TABLE OF resb_posnr,

        wa_rseb TYPE resb_posnr,

        ls_values TYPE ddshretval.

  DATA : it_return1 LIKE ddshretval OCCURS 0 WITH HEADER LINE,

         it_return2 LIKE ddshretval OCCURS 0 WITH HEADER LINE,

         lt_values TYPE STANDARD TABLE OF ddshretval.

AT SELECTION-SCREEN OUTPUT.

  LOOP AT SCREEN.

    IF screen-name = 'S_MATNR-LOW'

    OR screen-name = 'S_MATNR-HIGH'.

      screen-input = 0.

      MODIFY SCREEN.

    ENDIF.

  ENDLOOP.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_matnr-low.

  SELECT   matnr FROM mara INTO TABLE it_rseb

     UP TO 10 ROWS.

  IF sy-subrc = 0.

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

      EXPORTING

        retfield        = 'MATNR'

        dynpprog        = 'ZPRAC11' "<<<<<<< The name of your ABAP program

        dynpnr          = sy-dynnr

        dynprofield     = 'S_MATNR'  "<<<<<<< The name of the select-option

        value_org       = 'S'

        display         = 'F' "<<<<<< Allow value return to screen in display mode

      TABLES

        value_tab       = it_rseb

        return_tab      = lt_values

      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.

The above works when I try it.

0 Kudos

Hi,

Thanks For your reply. Give me some time , I will check it and update to u..

0 Kudos

HI, Surbjeet Dhillon

Thanks For your reply. Now working. No need to use Dynpro_update or read. you correct,

Keep posting.