10-10-2015 6:49 AM
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.
10-12-2015 5:46 AM
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
10-10-2015 7:14 AM
10-10-2015 7:29 AM
10-10-2015 9:34 AM
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.
10-10-2015 7:33 AM
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.
10-10-2015 7:46 AM
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
10-10-2015 12:05 PM
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.
10-10-2015 12:20 PM
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.
10-10-2015 12:45 PM
do you want to return two fields from help? matnr and werks?
can u explain please
10-10-2015 2:02 PM
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.
10-10-2015 6:42 PM
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
10-12-2015 4:18 AM
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.
10-11-2015 11:56 AM
10-11-2015 6:44 PM
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
10-12-2015 4:23 AM
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
10-12-2015 5:46 AM
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
10-12-2015 6:16 AM
Ok, Point noted. I can use it. But client has to approve it. I will check it.
10-12-2015 3:01 PM
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.
10-12-2015 3:04 PM
Hi,
Thanks For your reply. Give me some time , I will check it and update to u..
10-13-2015 8:39 AM
HI, Surbjeet Dhillon
Thanks For your reply. Now working. No need to use Dynpro_update or read. you correct,
Keep posting.