‎2009 Dec 30 1:45 PM
Hi Experts,
My selection screen contains MATNR and WERKS. After I enter MATNR, I need that the F4 help for WERKS should show all the values corresponding to the MATNR entered. I have used
AT SELECTION-SCREEN ON p_matnr.
g_matnr = p_matnr.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_werks-low.
PERFORM werks_f4_help .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_werks-high.
PERFORM werks_f4_help .
FORM werks_f4_help.
DATA:it_werks TYPE TABLE OF ty_werks,
it_f4_werks TYPE TABLE OF ty_f4_werks,
l_repid TYPE sy-repid,
l_dynnr TYPE sy-dynnr.
l_repid = sy-repid.
l_dynnr = sy-dynnr.
clear g_matnr.
GET PARAMETER ID 'MAT' FIELD g_matnr.
SELECT werks FROM marc INTO TABLE it_werks WHERE matnr = g_matnr.
IF NOT it_werks[] IS INITIAL.
SELECT werks name1 FROM t001w INTO TABLE it_f4_werks
FOR ALL ENTRIES IN it_werks
WHERE werks = it_werks-werks.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'WERKS'
dynpprog = l_repid
dynpnr = l_dynnr
dynprofield = 'SO_WERKS'
WINDOW_TITLE = 'Possible Entries:Plants'
value_org = 'S'
TABLES
value_tab = it_f4_werks
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.
The problem here is AT SELECTION-SCREEN ON VALUE-REQUEST gets called first and so I dont get g_matnr value based on which i have made a selection in form werks_f4_help. Kindly suggest what can be done.
Thanks in advance.
Regards,
Puja
<LOCKED BY MODERATOR - USE APPROPRIATE TITLES>
Edited by: Alvaro Tejada Galindo on Dec 30, 2009 9:14 AM
‎2009 Dec 30 2:02 PM
HI,
Use FM *DYNP_VALUES_READ* this will give the value entered in MATNR field before the PAI is triggered.
PARAMETERS : p_matnr TYPE matnr.
DATA : dynpread TYPE TABLE OF dynpread WITH HEADER LINE.
dynpread-fieldname = 'P_MATNR'.
APPEND dynpread.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
translate_to_upper = 'X'
TABLES
dynpfields = dynpread
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.
READ TABLE dynpread WITH KEY fieldname = 'P_MATNR'.
IF sy-subrc IS INITIAL.
p_matnr = dynpread-fieldvalue. " Now you can continue taking F4 help on Plant
ENDIF.
ENDIF.
SELECT werks FROM marc INTO TABLE it_werks WHERE matnr = p_matnr. " use this select query and proceed further
Get parameter id will give you once the PAI is triggered that means after you press enter or F8.Cheerz
Ram
‎2009 Dec 30 2:05 PM
try this code..
REPORT zpwtest3.
TABLES marc .
PARAMETERS : p_matnr TYPE marc-matnr .
SELECT-OPTIONS so_werks FOR marc-werks .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_werks-low.
PERFORM werks_f4_help .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_werks-high.
PERFORM werks_f4_help .
*&---------------------------------------------------------------------*
*& Form werks_f4_help
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM werks_f4_help.
TYPES : BEGIN OF ty_werks ,
werks TYPE marc-werks ,
END OF ty_werks ,
BEGIN OF ty_f4_werks ,
werks TYPE marc-werks ,
name1 TYPE t001w-name1 ,
END OF ty_f4_werks .
DATA: it_werks TYPE TABLE OF ty_werks,
it_f4_werks TYPE TABLE OF ty_f4_werks,
l_repid TYPE sy-repid,
l_dynnr TYPE sy-dynnr,
g_matnr TYPE mara-matnr .
l_repid = sy-repid.
l_dynnr = sy-dynnr.
PERFORM get_current_screen_value USING 'P_MATNR' '1000' CHANGING g_matnr .
SELECT werks FROM marc INTO TABLE it_werks WHERE matnr = g_matnr.
IF NOT it_werks[] IS INITIAL.
SELECT werks name1 FROM t001w INTO TABLE it_f4_werks
FOR ALL ENTRIES IN it_werks
WHERE werks = it_werks-werks.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'WERKS'
dynpprog = l_repid
dynpnr = l_dynnr
dynprofield = 'SO_WERKS'
value_org = 'S'
TABLES
value_tab = it_f4_werks
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 . "werks_f4_help
*&---------------------------------------------------------------------*
*& Form get_current_screen_value
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->L_SCREEN_FIELD text
* -->L_SCREEN_NUMBER text
* -->L_SCREEN_VALUE text
*----------------------------------------------------------------------*
FORM get_current_screen_value USING l_screen_field
l_screen_number
CHANGING l_screen_value.
DATA it_dynpfields TYPE STANDARD TABLE OF dynpread.
DATA wa_dynpfields TYPE dynpread.
wa_dynpfields-fieldname = l_screen_field.
APPEND wa_dynpfields TO it_dynpfields.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-cprog
dynumb = l_screen_number
translate_to_upper = 'X'
* REQUEST = ' '
* PERFORM_CONVERSION_EXITS = ' '
* PERFORM_INPUT_CONVERSION = ' '
* DETERMINE_LOOP_INDEX = ' '
TABLES
dynpfields = it_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.
ELSE.
READ TABLE it_dynpfields INTO wa_dynpfields
WITH KEY fieldname = l_screen_field.
IF sy-subrc = 0.
l_screen_value = wa_dynpfields-fieldvalue.
ENDIF.
ENDIF.
ENDFORM. " get_current_screen_valueEdited by: Pawan Kesari on Dec 30, 2009 7:35 PM
‎2009 Dec 30 2:13 PM
Put below call just before the SELECT FROM MARC.
PERFORM get_current_screen_value USING 'P_MATNR' '1000' CHANGING g_matnr .include this form in program
FORM get_current_screen_value USING l_screen_field
l_screen_number
CHANGING l_screen_value.
DATA it_dynpfields TYPE STANDARD TABLE OF dynpread.
DATA wa_dynpfields TYPE dynpread.
wa_dynpfields-fieldname = l_screen_field.
APPEND wa_dynpfields TO it_dynpfields.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-cprog
dynumb = l_screen_number
translate_to_upper = 'X'
TABLES
dynpfields = it_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.
ELSE.
READ TABLE it_dynpfields INTO wa_dynpfields
WITH KEY fieldname = l_screen_field.
IF sy-subrc = 0.
l_screen_value = wa_dynpfields-fieldvalue.
ENDIF.
ENDIF.
ENDFORM. " get_current_screen_value