‎2009 Mar 23 2:37 AM
Dear All,
I' ve some problem during search help using 'F4IF_INT_TABLE_VALUE_REQUEST on my screen.
let's say that i have 2 field , A and B at a screen.
then I have search help for field B, that is using A as a filter for the search help.
the problem is when i replace the value on field A at the screen, the field value on the screen is not directly pass to the one on the program, and then the search help for B shows a wrong help.
is there any function that i can call to pass the value on screen, into the field A, without first passing by PAI section?
Tks & Rgds,
WP.
‎2009 Mar 23 3:37 AM
Hi,
Refer this demo code to get a S.help for BELNR based on user input for BUKRS:-
PARAMETERS : p_belnr TYPE belnr,
p_bukrs TYPE bukrs.
DATA : BEGIN OF itab OCCURS 0,
belnr TYPE belnr,
END OF itab.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_belnr.
PERFORM f4_belnr_help USING p_belnr.
*&---------------------------------------------------------------------*
*& Form f4_belnr_help
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_BELNR text
*----------------------------------------------------------------------*
FORM f4_belnr_help USING p_belnr.
DATA : itab TYPE STANDARD TABLE OF it WITH HEADER LINE,
tb_dynpfields LIKE dynpread OCCURS 0 WITH HEADER LINE,
v_bukrs TYPE bukrs.
CLEAR: tb_dynpfields.
REFRESH: tb_dynpfields.
MOVE 'P_BUKRS' TO tb_dynpfields-fieldname.
APPEND tb_dynpfields.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = 'Z_F4' "program name
dynumb = '1000' "screen number
TABLES
dynpfields = tb_dynpfields
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 tb_dynpfields INDEX 1.
IF sy-subrc EQ 0.
v_bukrs = tb_dynpfields-fieldvalue.
ENDIF.
SELECT belnr from <db_table> INTO TABLE itab WHERE bukrs = v_bukrs.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'BELNR' "internal table field
dynpprog = 'Z_F4' "program name
dynpnr = '1000' "screen number
dynprofield = 'P_BELNR' "screen field name
value_org = 'S'
TABLES
value_tab = itab "internal 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.
ENDFORM. " f4_belnr_help
Hope this helps you.
Regards,
Tarun
‎2009 Mar 23 3:37 AM
Hi,
Refer this demo code to get a S.help for BELNR based on user input for BUKRS:-
PARAMETERS : p_belnr TYPE belnr,
p_bukrs TYPE bukrs.
DATA : BEGIN OF itab OCCURS 0,
belnr TYPE belnr,
END OF itab.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_belnr.
PERFORM f4_belnr_help USING p_belnr.
*&---------------------------------------------------------------------*
*& Form f4_belnr_help
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_BELNR text
*----------------------------------------------------------------------*
FORM f4_belnr_help USING p_belnr.
DATA : itab TYPE STANDARD TABLE OF it WITH HEADER LINE,
tb_dynpfields LIKE dynpread OCCURS 0 WITH HEADER LINE,
v_bukrs TYPE bukrs.
CLEAR: tb_dynpfields.
REFRESH: tb_dynpfields.
MOVE 'P_BUKRS' TO tb_dynpfields-fieldname.
APPEND tb_dynpfields.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = 'Z_F4' "program name
dynumb = '1000' "screen number
TABLES
dynpfields = tb_dynpfields
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 tb_dynpfields INDEX 1.
IF sy-subrc EQ 0.
v_bukrs = tb_dynpfields-fieldvalue.
ENDIF.
SELECT belnr from <db_table> INTO TABLE itab WHERE bukrs = v_bukrs.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'BELNR' "internal table field
dynpprog = 'Z_F4' "program name
dynpnr = '1000' "screen number
dynprofield = 'P_BELNR' "screen field name
value_org = 'S'
TABLES
value_tab = itab "internal 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.
ENDFORM. " f4_belnr_help
Hope this helps you.
Regards,
Tarun
‎2009 Mar 23 5:06 AM
Hi William,
This is very simple you need to call another FM 'DYNP_VALUES_READ' before calling 'F4IF_INT_TABLE_VALUE_REQUEST' to actualy read the value selected for field A and pass this selected value to field B in this second FM.
Code snippet given above help you more how to use above 2 FM module and what all to pass as aruments.
Hope now you will able to solve the problem.
Pooja
‎2009 Mar 23 5:10 AM
EXAMPLE:-
MODULE module_help INPUT.
DATA: w_progname LIKE sy-repid,
w_scr_num LIKE sy-dynnr .
DATA: return_values LIKE ddshretval OCCURS 0 WITH HEADER LINE.
DATA: itab_dynpfields LIKE dynpread OCCURS 0 WITH HEADER LINE,
t_dynpfields LIKE dynpread.
DATA: t_dyname LIKE d020s-prog,
t_dynumb LIKE d020s-dnum.
DATA : fd_name LIKE help_info-dynprofld.
DATA: BEGIN OF int_f4 OCCURS 0,
kunnr TYPE kna1-kunnr,
name1 TYPE kna1-name1,
land1 TYPE kna1-land1,
regio TYPE kna1-regio,
adrnr TYPE kna1-adrnr,
END OF int_f4.
****GETTING RECORDS IN THE INTERNAL TABLE FOR F4 DISPLAY
SELECT kunnr name1 land1 regio adrnr
INTO TABLE int_f4
FROM kna1
UP TO 10 ROWS.
CLEAR int_f4.
****function module to get pop-up window of f4.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'KUNNR'
dynpprog = w_progname
dynpnr = w_scr_num
dynprofield = 'TB_WA-KUNNR'
value_org = 'S'
TABLES
value_tab = int_f4
return_tab = return_values
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE s000(zsn) WITH 'could not find the values'.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE .
kunnr = return_values-fieldval.
ENDIF.
REFRESH itab_dynpfields.
CLEAR: itab_dynpfields.
t_dynpfields-fieldname = 'TB_WA-KUNNR'.
APPEND t_dynpfields TO itab_dynpfields.
t_dynumb = sy-dynnr.
t_dyname = sy-repid.
* This function module must have the values added to
* the internal table that you need t oread.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = t_dyname
dynumb = t_dynumb
TABLES
dynpfields = itab_dynpfields
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.
break developer.
LOOP AT itab_dynpfields.
CASE itab_dynpfields-fieldname.
WHEN 'TB_WA-KUNNR'.
itab_dynpfields-fieldvalue = kunnr.
MODIFY itab_dynpfields.
ENDCASE.
ENDLOOP.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = t_dyname
dynumb = t_dynumb
TABLES
dynpfields = itab_dynpfields
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 <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
REFRESH int_f4.
CLEAR int_f4.
ENDMODULE. " SOURCE_HELP INPUT
‎2009 Mar 23 5:29 AM
Hi,
This function module it self fatches value. I am sending some code in my object. check with this.
Select BSTKD KUNNR KUNNR1 ZZBIRFLAG VBELN into table LT_HELP from T903740.
IF P-BSTKD = 'S-BSTKD-LOW'.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
Retfield = 'BSTKD'
Dynpprog = SY-REPID
Dynpnr = sy-dynnr
Dynprofield = 'S_BSTKD_LOW'
TABLES
Value-Tab = LT_Help
Return-Tab = Lt_return
Exceptions.
If Sy-subrc <> 0
Clear Cv_BSTKD.
Else
Read table LT_Return Index 1.
It sy-subrc = 0.
Cv_BSTKD = LT_Return-Fieldval
endif.
endif.
Regards
Md.MahaboobKhan
‎2009 Mar 24 4:42 AM
Dear Tarun Gambhir , Pooja Gupta , Krupa Jani, Md.MahaboobKhan.
Thanks for the answer.
It solved my problem.
Regards,
WP.