2006 Sep 06 8:51 AM
Hi all,
I have a field that should be READ-ONLY when the screen appears (SCREEN-INPUT = 0). Then i should be able to select F4 help for the field, for which i make SCREEN-INPUT = 1. But after selection of a value from the F4 help i want to make the field again READ-ONLY (SCREEN-INPUT = 0) which is not happening.
Either am able to display the value that i select from F4 help or I am able to make the field READ-ONLY. Both are not happening together.
Can any one please let me know how to do this.
Thanks and Regards,
Ram.
2006 Sep 06 12:06 PM
hi ram kumar check this one, i worked with this kind of scenraio, check only the bold portion, the rest just shows the scenario
When i looping again at at selection screen output i check whether the field with F4 help is filled or not and then lock them accordingly
AT SELECTION-SCREEN ON VALUE-REQUEST FOR ST_NAME.
CLEAR: FIELD_VALUE, DYNPRO_VALUES.
REFRESH DYNPRO_VALUES.
FIELD_VALUE-FIELDNAME = 'EXCH'.
APPEND FIELD_VALUE TO DYNPRO_VALUES.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = SY-CPROG
DYNUMB = SY-DYNNR
TRANSLATE_TO_UPPER = 'X'
TABLES
DYNPFIELDS = DYNPRO_VALUES.
READ TABLE DYNPRO_VALUES INDEX 1 INTO FIELD_VALUE.
IF FIELD_VALUE-FIELDVALUE IS NOT INITIAL.
IF SY-SUBRC = 0 AND FIELD_VALUE-FIELDVALUE = 1.
FIELD_VALUE-FIELDVALUE = 'BSE'.
ELSEIF SY-SUBRC = 0 AND FIELD_VALUE-FIELDVALUE = 2.
FIELD_VALUE-FIELDVALUE = 'NSE'.
ENDIF.
SELECT STOCK ST_NAME
CURRPR
FROM
ZEXCH
INTO TABLE TEMP_ITAB
WHERE EXCH = FIELD_VALUE-FIELDVALUE.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'ST_NAME'
DYNPPROG = SY-CPROG
DYNPNR = SY-DYNNR
DYNPROFIELD = 'ST_NAME'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = TEMP_ITAB
RETURN_TAB = RETURN.
SELECT STOCK CURRPR
FROM ZEXCH
INTO (T_CODE, T_CURRPR)
WHERE ST_NAME = RETURN-FIELDVAL.
ENDSELECT.
CLEAR DYNPRO_VALUES[].
FIELD_VALUE-FIELDNAME = 'ST_NAME'.
FIELD_VALUE-FIELDVALUE = RETURN-FIELDVAL.
APPEND FIELD_VALUE TO DYNPRO_VALUES .
FIELD_VALUE-FIELDNAME = 'ST_CODE'.
FIELD_VALUE-FIELDVALUE = T_CODE.
APPEND FIELD_VALUE TO DYNPRO_VALUES .
CALL FUNCTION 'HRCM_AMOUNT_TO_STRING_CONVERT'
EXPORTING
BETRG = T_CURRPR
IMPORTING
STRING = T_CHAR.
FIELD_VALUE-FIELDNAME = 'CURRPR'.
FIELD_VALUE-FIELDVALUE = T_CHAR.
APPEND FIELD_VALUE TO DYNPRO_VALUES .
* Update the dynpro values.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
DYNAME = SY-CPROG
DYNUMB = SY-DYNNR
TABLES
DYNPFIELDS = DYNPRO_VALUES.
ENDIF.************************************************************************
* At Selection-Screen output
************************************************************************
AT SELECTION-SCREEN OUTPUT.
* APPEND 'ONLI' TO CURRENT_SCR-EXCL. "Execute
* APPEND 'PRIN' TO CURRENT_SCR-EXCL. "Execute and Print
* APPEND 'SJOB' TO CURRENT_SCR-EXCL. "Execute in Background
LOOP AT SCREEN.
IF SCREEN-NAME = 'ACCNO'.
SELECT ACCNO
NAME
BANK
BANKACC
AMOUNT
FROM ZUSERDETAILS
INTO (ACCNO,NAME,BANK,BANKACC,AMOUNT)
WHERE ACCNO = TEMP_ACCNO.
ENDSELECT.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'NAME' OR
SCREEN-NAME = 'BANKNAME' OR
SCREEN-NAME = 'BANKACC' OR
SCREEN-NAME = 'AMOUNT' OR
SCREEN-NAME = 'CURRPR' OR
SCREEN-NAME = 'ST_CODE'.
SELECT NAME FROM ZBANKCODE INTO BANKNAME WHERE BANK = BANK.
ENDSELECT.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
<b> IF SCREEN-NAME = 'ST_NAME'.
IF ST_NAME IS NOT INITIAL AND FLAG_SEL IS INITIAL.
CLEAR LIMPR.
CLEAR QTY.
IF EXCH = 1.
L_EXCH = 'BSE'.
ELSEIF EXCH = 2.
L_EXCH = 'NSE'.
ELSE.
FLAG_END = 'X'.
MESSAGE I000(ZZ) WITH 'Select an exchange from dropdown'.
STOP.
ENDIF.
SELECT STOCK CURRPR
FROM
ZEXCH
INTO (ST_CODE, CURRPR)
WHERE ST_NAME = ST_NAME
AND EXCH = L_EXCH.
ENDSELECT.
IF SY-SUBRC <> 0.
FLAG_END = 'X'.
CLEAR CURRPR.
CLEAR ST_CODE.
CLEAR ST_NAME.
LOOP AT SCREEN.
IF SCREEN-NAME = 'ST_CODE' OR SCREEN-NAME = 'CURRPR'.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
MESSAGE I000(ZZ) WITH 'This is not valid name of the stock'.
STOP.
ENDIF.
ENDIF.</b>
ENDIF.
ENDLOOP.
hi ram kumar check this one, i worked with this kind of scenraio, check only the bold portion, the rest just shows the scenario
When i looping again at at selection screen output i check whether the field with F4 help is filled or not and then lock them accordingly
AT SELECTION-SCREEN ON VALUE-REQUEST FOR ST_NAME.
CLEAR: FIELD_VALUE, DYNPRO_VALUES.
REFRESH DYNPRO_VALUES.
FIELD_VALUE-FIELDNAME = 'EXCH'.
APPEND FIELD_VALUE TO DYNPRO_VALUES.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = SY-CPROG
DYNUMB = SY-DYNNR
TRANSLATE_TO_UPPER = 'X'
TABLES
DYNPFIELDS = DYNPRO_VALUES.
READ TABLE DYNPRO_VALUES INDEX 1 INTO FIELD_VALUE.
IF FIELD_VALUE-FIELDVALUE IS NOT INITIAL.
IF SY-SUBRC = 0 AND FIELD_VALUE-FIELDVALUE = 1.
FIELD_VALUE-FIELDVALUE = 'BSE'.
ELSEIF SY-SUBRC = 0 AND FIELD_VALUE-FIELDVALUE = 2.
FIELD_VALUE-FIELDVALUE = 'NSE'.
ENDIF.
SELECT STOCK ST_NAME
CURRPR
FROM
ZEXCH
INTO TABLE TEMP_ITAB
WHERE EXCH = FIELD_VALUE-FIELDVALUE.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'ST_NAME'
DYNPPROG = SY-CPROG
DYNPNR = SY-DYNNR
DYNPROFIELD = 'ST_NAME'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = TEMP_ITAB
RETURN_TAB = RETURN.
SELECT STOCK CURRPR
FROM ZEXCH
INTO (T_CODE, T_CURRPR)
WHERE ST_NAME = RETURN-FIELDVAL.
ENDSELECT.
CLEAR DYNPRO_VALUES[].
FIELD_VALUE-FIELDNAME = 'ST_NAME'.
FIELD_VALUE-FIELDVALUE = RETURN-FIELDVAL.
APPEND FIELD_VALUE TO DYNPRO_VALUES .
FIELD_VALUE-FIELDNAME = 'ST_CODE'.
FIELD_VALUE-FIELDVALUE = T_CODE.
APPEND FIELD_VALUE TO DYNPRO_VALUES .
CALL FUNCTION 'HRCM_AMOUNT_TO_STRING_CONVERT'
EXPORTING
BETRG = T_CURRPR
IMPORTING
STRING = T_CHAR.
FIELD_VALUE-FIELDNAME = 'CURRPR'.
FIELD_VALUE-FIELDVALUE = T_CHAR.
APPEND FIELD_VALUE TO DYNPRO_VALUES .
* Update the dynpro values.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
DYNAME = SY-CPROG
DYNUMB = SY-DYNNR
TABLES
DYNPFIELDS = DYNPRO_VALUES.
ENDIF.************************************************************************
* At Selection-Screen output
************************************************************************
AT SELECTION-SCREEN OUTPUT.
* APPEND 'ONLI' TO CURRENT_SCR-EXCL. "Execute
* APPEND 'PRIN' TO CURRENT_SCR-EXCL. "Execute and Print
* APPEND 'SJOB' TO CURRENT_SCR-EXCL. "Execute in Background
LOOP AT SCREEN.
IF SCREEN-NAME = 'ACCNO'.
SELECT ACCNO
NAME
BANK
BANKACC
AMOUNT
FROM ZUSERDETAILS
INTO (ACCNO,NAME,BANK,BANKACC,AMOUNT)
WHERE ACCNO = TEMP_ACCNO.
ENDSELECT.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'NAME' OR
SCREEN-NAME = 'BANKNAME' OR
SCREEN-NAME = 'BANKACC' OR
SCREEN-NAME = 'AMOUNT' OR
SCREEN-NAME = 'CURRPR' OR
SCREEN-NAME = 'ST_CODE'.
SELECT NAME FROM ZBANKCODE INTO BANKNAME WHERE BANK = BANK.
ENDSELECT.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
<b> IF SCREEN-NAME = 'ST_NAME'.
IF ST_NAME IS NOT INITIAL AND FLAG_SEL IS INITIAL.
CLEAR LIMPR.
CLEAR QTY.
IF EXCH = 1.
L_EXCH = 'BSE'.
ELSEIF EXCH = 2.
L_EXCH = 'NSE'.
ELSE.
FLAG_END = 'X'.
MESSAGE I000(ZZ) WITH 'Select an exchange from dropdown'.
STOP.
ENDIF.
SELECT STOCK CURRPR
FROM
ZEXCH
INTO (ST_CODE, CURRPR)
WHERE ST_NAME = ST_NAME
AND EXCH = L_EXCH.
ENDSELECT.
IF SY-SUBRC <> 0.
FLAG_END = 'X'.
CLEAR CURRPR.
CLEAR ST_CODE.
CLEAR ST_NAME.
LOOP AT SCREEN.
IF SCREEN-NAME = 'ST_CODE' OR SCREEN-NAME = 'CURRPR'.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
MESSAGE I000(ZZ) WITH 'This is not valid name of the stock'.
STOP.
ENDIF.
ENDIF.</b>
ENDIF.
ENDLOOP.
2006 Sep 06 8:53 AM
make ur field input enabled only if its initial.
it means by default ur field will be in display mode
2006 Sep 06 8:54 AM
HI,
try this code for your field.
<b>AT SELECTION-SCREEN output.
If NOT field IS INITIAL.
LOOP AT SCREEN.
if screen-name = 'FIELD'.
screen-input = 0.
modify screen.
ENDIF.
ENDLOOP.</b>Regards,
2006 Sep 06 8:56 AM
Hi,
use your routine to modify at events:
1) initialzation
2) at selection-screen output
A.
2006 Sep 06 10:59 AM
Hi,
I tried all the events possible.But those events doesnot get triggered when i select a value from F4 help.because after selecting a value i want to make the field READ-ONLY. Kindly help.
Thanks and Regards,
Ram.
2006 Sep 06 11:06 AM
Hi
You're right Ram, so you can't update the screen after pressing F4.
Perhaps you can try to manage the search help programmaticly by event AT SELECTION-SCREEN ON VALUE-REQUEST and here re-call the selection-screen, so AT SELECTION-SCREEN OUTPUT event should be triggered, but I'm not sure it can work....try!
Max
2006 Sep 06 11:08 AM
2006 Sep 06 11:08 AM
hi,
I think you can not provide F4 help for a field which is in display mode on selection screen.
My suggestion is instead of changing it to display mode, let the user input some value. You can do validation for the input given in at selection-screen event.
Regards,
Sailaja.
2006 Sep 06 11:26 AM
Hi,
If its selection-screen :
1. Process it in the AT SELECTION-SCREEN ON FIELD ...
event. Set a flag and make your screen changes in AT SELECTION OUTPUT.
If you`re using a Dialog Module :
1. Process it in the POV, have a module with the field statement and set a flag. Make screen changes in the PBO.
Reward if helpful.
Rgds
2006 Sep 06 11:49 AM
Hi,
I tried both inputs given by Zapper and Max, but it doesnot sem to work. Is there a sample code that you can send so i can verify if what iam doing is right?
Also Sailaja, the user requirement is this way. So i cannot change it
It is in Display mode. I change it to Input mode, then press F4 help and select a value. Now with the value displayed in the field, I want to chagne it to display mode again.
Thanks and Regards,
Ram.
2006 Sep 06 12:06 PM
hi ram kumar check this one, i worked with this kind of scenraio, check only the bold portion, the rest just shows the scenario
When i looping again at at selection screen output i check whether the field with F4 help is filled or not and then lock them accordingly
AT SELECTION-SCREEN ON VALUE-REQUEST FOR ST_NAME.
CLEAR: FIELD_VALUE, DYNPRO_VALUES.
REFRESH DYNPRO_VALUES.
FIELD_VALUE-FIELDNAME = 'EXCH'.
APPEND FIELD_VALUE TO DYNPRO_VALUES.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = SY-CPROG
DYNUMB = SY-DYNNR
TRANSLATE_TO_UPPER = 'X'
TABLES
DYNPFIELDS = DYNPRO_VALUES.
READ TABLE DYNPRO_VALUES INDEX 1 INTO FIELD_VALUE.
IF FIELD_VALUE-FIELDVALUE IS NOT INITIAL.
IF SY-SUBRC = 0 AND FIELD_VALUE-FIELDVALUE = 1.
FIELD_VALUE-FIELDVALUE = 'BSE'.
ELSEIF SY-SUBRC = 0 AND FIELD_VALUE-FIELDVALUE = 2.
FIELD_VALUE-FIELDVALUE = 'NSE'.
ENDIF.
SELECT STOCK ST_NAME
CURRPR
FROM
ZEXCH
INTO TABLE TEMP_ITAB
WHERE EXCH = FIELD_VALUE-FIELDVALUE.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'ST_NAME'
DYNPPROG = SY-CPROG
DYNPNR = SY-DYNNR
DYNPROFIELD = 'ST_NAME'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = TEMP_ITAB
RETURN_TAB = RETURN.
SELECT STOCK CURRPR
FROM ZEXCH
INTO (T_CODE, T_CURRPR)
WHERE ST_NAME = RETURN-FIELDVAL.
ENDSELECT.
CLEAR DYNPRO_VALUES[].
FIELD_VALUE-FIELDNAME = 'ST_NAME'.
FIELD_VALUE-FIELDVALUE = RETURN-FIELDVAL.
APPEND FIELD_VALUE TO DYNPRO_VALUES .
FIELD_VALUE-FIELDNAME = 'ST_CODE'.
FIELD_VALUE-FIELDVALUE = T_CODE.
APPEND FIELD_VALUE TO DYNPRO_VALUES .
CALL FUNCTION 'HRCM_AMOUNT_TO_STRING_CONVERT'
EXPORTING
BETRG = T_CURRPR
IMPORTING
STRING = T_CHAR.
FIELD_VALUE-FIELDNAME = 'CURRPR'.
FIELD_VALUE-FIELDVALUE = T_CHAR.
APPEND FIELD_VALUE TO DYNPRO_VALUES .
* Update the dynpro values.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
DYNAME = SY-CPROG
DYNUMB = SY-DYNNR
TABLES
DYNPFIELDS = DYNPRO_VALUES.
ENDIF.************************************************************************
* At Selection-Screen output
************************************************************************
AT SELECTION-SCREEN OUTPUT.
* APPEND 'ONLI' TO CURRENT_SCR-EXCL. "Execute
* APPEND 'PRIN' TO CURRENT_SCR-EXCL. "Execute and Print
* APPEND 'SJOB' TO CURRENT_SCR-EXCL. "Execute in Background
LOOP AT SCREEN.
IF SCREEN-NAME = 'ACCNO'.
SELECT ACCNO
NAME
BANK
BANKACC
AMOUNT
FROM ZUSERDETAILS
INTO (ACCNO,NAME,BANK,BANKACC,AMOUNT)
WHERE ACCNO = TEMP_ACCNO.
ENDSELECT.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'NAME' OR
SCREEN-NAME = 'BANKNAME' OR
SCREEN-NAME = 'BANKACC' OR
SCREEN-NAME = 'AMOUNT' OR
SCREEN-NAME = 'CURRPR' OR
SCREEN-NAME = 'ST_CODE'.
SELECT NAME FROM ZBANKCODE INTO BANKNAME WHERE BANK = BANK.
ENDSELECT.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
<b> IF SCREEN-NAME = 'ST_NAME'.
IF ST_NAME IS NOT INITIAL AND FLAG_SEL IS INITIAL.
CLEAR LIMPR.
CLEAR QTY.
IF EXCH = 1.
L_EXCH = 'BSE'.
ELSEIF EXCH = 2.
L_EXCH = 'NSE'.
ELSE.
FLAG_END = 'X'.
MESSAGE I000(ZZ) WITH 'Select an exchange from dropdown'.
STOP.
ENDIF.
SELECT STOCK CURRPR
FROM
ZEXCH
INTO (ST_CODE, CURRPR)
WHERE ST_NAME = ST_NAME
AND EXCH = L_EXCH.
ENDSELECT.
IF SY-SUBRC <> 0.
FLAG_END = 'X'.
CLEAR CURRPR.
CLEAR ST_CODE.
CLEAR ST_NAME.
LOOP AT SCREEN.
IF SCREEN-NAME = 'ST_CODE' OR SCREEN-NAME = 'CURRPR'.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
MESSAGE I000(ZZ) WITH 'This is not valid name of the stock'.
STOP.
ENDIF.
ENDIF.</b>
ENDIF.
ENDLOOP.
2006 Sep 06 12:34 PM
Hi Rahul,
I am not sure if i had explained the scenario properly or not. Here we go again.
1. First a screen is displayed with four radio buttons.
2. Up on selecting a radio button accordingly a text box appears (it was hidden in INITIALIZATION eventas well it is made READ-ONLY).
3. Now when i press F4 help, here i Loop at screen and make the text box editable.
4. I select a value from F4 help. Now the value that i selected should be displayed and also the text box should be changed to READ-ONLY mode.
As you have mentioned, in the event AT SELECTION-SCREEN OUTPUT, i have looped at screen and tried to change the field to READ-ONLY mode, but after selecting a value through F4 help, this particular event doesnot get triggered. This is where i stand now..
Any inputs please.
Thanks and Regards,
Ram.
2006 Sep 06 12:49 PM
Hi Ram
Try this sample perhaps it can help you:
PARAMETERS: P_MATNR LIKE MARA-MATNR.
DATA F4.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_MATNR.
DATA: TABNAME TYPE DFIES-TABNAME,
FIELDNAME TYPE DFIES-FIELDNAME.
DATA T_VALUE TYPE STANDARD TABLE OF DDSHRETVAL WITH HEADER LINE.
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
EXPORTING
TABNAME = TABNAME
FIELDNAME = FIELDNAME
SEARCHHELP = 'MAT1'
TABLES
RETURN_TAB = T_VALUE
EXCEPTIONS
FIELD_NOT_FOUND = 1
NO_HELP_FOR_FIELD = 2
INCONSISTENT_HELP = 3
NO_VALUES_FOUND = 4
OTHERS = 5.
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 T_VALUE INDEX 1.
P_MATNR = T_VALUE-FIELDVAL.
F4 = 'x'.
SET SCREEN 1000. LEAVE SCREEN.
ENDIF.
AT SELECTION-SCREEN OUTPUT.
IF F4 = 'x'.
LOOP AT SCREEN.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
Max
2006 Sep 06 1:47 PM
Hi Max,
That was the resolution i was looking for. Thanks a lot Max. full marks to you
Thanks and Regards,
Ram.
| User | Count |
|---|---|
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |