Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Events

Former Member
0 Likes
588

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

3 REPLIES 3
Read only

Former Member
0 Likes
561

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

Read only

Pawan_Kesari
Active Contributor
0 Likes
561

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_value

Edited by: Pawan Kesari on Dec 30, 2009 7:35 PM

Read only

0 Likes
561

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