‎2007 Feb 08 2:45 PM
Hi ,
I have two fields in Selection screen.
Entry is made in first field of selection screen, Based on the entry in the
first field , the second field should have f4 help which brings the value from
table based on the first field entry.
How to do this.Help me to solve thid issue.
Thanks.
‎2007 Feb 08 2:50 PM
In these type of situations it is better to choose a drop down facility in the second input field based on the condition of the first field.
It is possible in MPP using Type pools VRM and the internal table VRM_SET_VALUES.
Cheers.
‎2007 Feb 08 2:50 PM
HI
Check this....
TABLES: mara, makt.
DATA mat LIKE mara-matnr.
DATA: BEGIN OF itab OCCURS 0,
matnr LIKE mara-matnr,
END OF itab.
DATA : BEGIN OF btab OCCURS 0,
maktx LIKE makt-maktx,
END OF btab.
DATA : return LIKE ddshretval OCCURS 0 WITH HEADER LINE.
SELECT-OPTIONS: so_matnr FOR mara-matnr,
so_maktx FOR makt-maktx.
INITIALIZATION.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_matnr-low.
PERFORM matnr.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_matnr-high.
PERFORM matnr.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_maktx-low.
PERFORM maktx.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_maktx-high.
PERFORM maktx.
&----
*& Form matnr
&----
text
----
FORM matnr.
REFRESH itab.
SELECT matnr FROM mara INTO TABLE itab.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'MATNR '
dynprofield = 'P_MATNR '
dynpprog = sy-repid
dynpnr = sy-dynnr
value_org = 'S'
TABLES
value_tab = itab
return_tab = return.
mat = return-fieldval.
UNPACK mat TO mat.
so_matnr = return-fieldval.
REFRESH return.
CLEAR return.
ENDFORM. "matnr
&----
*& Form maktx
&----
text
----
FORM maktx.
REFRESH btab.
SELECT maktx FROM makt INTO TABLE btab WHERE matnr = mat AND spras =
sy-langu.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'MAKTX'
dynprofield = 'SO_MAKTX '
dynpprog = sy-repid
dynpnr = sy-dynnr
value_org = 'S'
TABLES
value_tab = btab
return_tab = return.
so_maktx = return-fieldval.
REFRESH return.
CLEAR return.
ENDFORM. "maktx
Regards
SAB
‎2007 Feb 08 2:52 PM
hi for this u need to dynamic read of selection screens,
This populates based on user selection for F4 help
check this sample code bolded part...
DATA: PROGNAME TYPE SY-REPID,
DYNNUM TYPE SY-DYNNR,
DYNPRO_VALUES TYPE TABLE OF DYNPREAD,
FIELD_VALUE LIKE LINE OF DYNPRO_VALUES.
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.
<b>
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = SY-CPROG
DYNUMB = SY-DYNNR
TRANSLATE_TO_UPPER = 'X'
TABLES
DYNPFIELDS = DYNPRO_VALUES.
</b>
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.
SEARCH FOR REQUESTED VALUE FROM TABLE ZEXCH AND DISPLAY VALUES OF STOCK * * * * AVAILABLE IN THE SELECTED STOCK EXCHANGE
<b>
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.
</b>
DYNAMIC POPULATION OF SCREEN VALUES STOCK CODE AND LAST TRADED PRICE
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 .
UPDATE THE DYNPRO VALUES.
<b>
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
DYNAME = SY-CPROG
DYNUMB = SY-DYNNR
TABLES
DYNPFIELDS = DYNPRO_VALUES.
</b>
ENDIF.
‎2007 Feb 08 2:57 PM
Hi,
Look at the SAP DEMO program <b>DEMO_SELECTION_SCREEN_F4</b>
Also, the below are the F4 help examples for Dailog Screens
DEMO_DYNPRO_F4_HELP_DICTIONARY
DEMO_DYNPRO_F4_HELP_DYNPRO
DEMO_DYNPRO_F4_HELP_MODULE
Regards
Sudheer
‎2007 Feb 08 2:58 PM
Hi,
You can use following method.
Here firstly populate the all the data regarding first field into local internal table
Let us assme first field is plant and second is material.Then first populate the
all the materials regarding plant which is given on the selection screeen into one local internal table.then use following field.
Itab contains two fields plant and material
AT SELECTION-SCREEN ON VALUE-REQUEST FOR field2.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
DDIC_STRUCTURE = 'ZWBPASS '
RETFIELD = 'field1' "field1 name in our internal table
PVALKEY = ' '
DYNPPROG = sy-repid
DYNPNR = sy-dynnr
DYNPROFIELD = v_field "second field which comes from selection screen.
STEPL = 0
WINDOW_TITLE =
VALUE = ' '
VALUE_ORG = 'S'
MULTIPLE_CHOICE = ' '
DISPLAY = ' '
CALLBACK_PROGRAM = ' '
CALLBACK_FORM = ' '
MARK_TAB =
IMPORTING
USER_RESET =
TABLES
VALUE_TAB = it_tab "local table
FIELD_TAB =
RETURN_TAB =
DYNPFLD_MAPPING =
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.
‎2007 Feb 08 3:01 PM
report zabc.
parameters: p_bukrs type t001-bukrs,
p_butxt type t001-butxt,
p_ort01 type t001-ort01,
p_land1 type t001-land1.
data: dynfields type table of dynpread with header line.
data: return type table of ddshretval with header line.
at selection-screen on value-request for p_bukrs.
call function 'F4IF_FIELD_VALUE_REQUEST'
exporting
tabname = 'T001'
fieldname = 'BUKRS'
dynpprog = sy-cprog
dynpnr = sy-dynnr
dynprofield = 'P_BUKRS'
tables
return_tab = return
exceptions
field_not_found = 1
no_help_for_field = 2
inconsistent_help = 3
no_values_found = 4
others = 5.
break-point.
refresh dynfields.
read table return with key fieldname = 'P_BUKRS'.
Add it back to the dynpro.
dynfields-fieldname = return-retfield.
dynfields-fieldvalue = return-fieldval.
append dynfields.
Get the company code from db and add to dynpro
data: xt001 type t001.
clear xt001.
select single * into xt001
from t001
where bukrs = return-fieldval.
dynfields-fieldname = 'P_BUTXT'.
dynfields-fieldvalue = xt001-butxt.
append dynfields.
dynfields-fieldname = 'P_ORT01'.
dynfields-fieldvalue = xt001-ort01.
append dynfields.
dynfields-fieldname = 'P_LAND1'.
dynfields-fieldvalue = xt001-land1.
append dynfields.
Update the dynpro values.
call function 'DYNP_VALUES_UPDATE'
exporting
dyname = sy-cprog
dynumb = sy-dynnr
tables
dynpfields = dynfields
exceptions
others = 8.
start-of-selection.
‎2007 Feb 08 3:05 PM
You'll need to dynamically read the value for the field you are depending on, then you could build your F4 help using that value. Say for example we have a select option s_pernr-low that depends on the value input for s_kunnr-low.
In order to read the value:
-
at selection-screen on value-request for s_pernr-low.
DATA: BEGIN OF DYNPFIELDS OCCURS 1.
INCLUDE STRUCTURE DYNPREAD.
DATA: END OF DYNPFIELDS.
CLEAR DYNPFIELDS.
REFRESH DYNPFIELDS.
DYNPFIELDS-FIELDNAME = 'S_KUNNR-LOW'.
APPEND DYNPFIELDS.
DYNPFIELDS table will hold your field name and the value.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = SY-REPID
DYNUMB = SY-DYNNR
TRANSLATE_TO_UPPER = 'X'
TABLES
DYNPFIELDS = DYNPFIELDS
EXCEPTIONS
OTHERS = 11.