F4IF_INT_TABLE_VALUE_REQUEST Problem

Hi Folks,
I have problem with FM F4IF_INT_TABLE_VALUE_REQUEST
Here is the scenario.
i have interbnal table tbwerks[] that contains plant and description(two fields).
DATA: BEGIN OF tbwerks OCCURS 10,
       werks LIKE t001w-werks,
       name1 like t001w-name1,
      END OF tbwerks .
then i am populating values to internal table.
now i want to display all the plants in listbox.
for that i am using the following FM
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
       EXPORTING
            retfield        = 'TBWERKS-WERKS'
            value_org       = 'S'
       TABLES
            value_tab       = tbwerks[]
       EXCEPTIONS
            parameter_error = 1
            no_values_found = 2
            OTHERS          = 3.
  IF sy-subrc <> 0.
  ENDIF.
But, here i am getting all descriptions insted of plants.
can't we use internal table with two fields here..?
what could be the problem..
sara

Hei Sara,
I've the similar requirement as yours. In my case, the two columns are Administrator and Administrator name ( instead of plant and plant description ) and I've solved the problem this way :
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_sachx.
  PERFORM build_dropdown.
FORM build_dropdown.
  TYPES:BEGIN OF ty_admin,
         sachx LIKE t526-sachx,
         sachn LIKE t526-sachn,
        END OF ty_admin.
  DATA:it_admin  TYPE  TABLE OF ty_admin,
       it_return TYPE STANDARD TABLE OF ddshretval.
  DATA:wa_admin  LIKE LINE OF it_admin,
       wa_return LIKE LINE OF it_return.
  DATA:l_retfield TYPE  dfies-fieldname.
Get HR administrators
SELECT sachx sachn FROM t526 INTO CORRESPONDING FIELDS OF TABLE it_admin
                   WHERE sachx LIKE 'H%'.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = l_retfield
      value_org       = 'S'
    TABLES
      value_tab       = it_admin
      return_tab      = it_return
    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.
  READ TABLE it_return INTO wa_return INDEX 1.
  READ TABLE it_admin INTO wa_admin WITH KEY
                  sachn = wa_return-fieldval.
  WRITE wa_admin-sachx TO p_sachx.
Refresh it_admin, otherwise valuse in the drop-down will keep on
adding up each time
  REFRESH:it_admin.
ENDFORM.                    " build_dropdown
It's working fine...
Regards,
Rudresh

Similar Messages

  • F4IF_INT_TABLE_VALUE_REQUEST , problem with return_tab

    hi all,
    i have coded the following:
    CLEAR field_tab.
            field_tab-fieldname = 'E_VALUE'.
            field_tab-intlen = 20.
            field_tab-outputlen = 20.
            field_tab-inttype = 'C'.
            field_tab-scrtext_m = 'Region'.
            APPEND field_tab.
            CLEAR field_tab.
            field_tab-fieldname = 'Region'.
            field_tab-intlen = 20.
            field_tab-outputlen = 20.
            field_tab-inttype = 'C'.
            field_tab-scrtext_m = 'State No'.
            APPEND field_tab.
    itab contains value:
    data   Region    State No
    1       CR              1
    2       CR              2
    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
          retfield        = 'E_VALUE'
          dynprofield     = 'A'
          dynpprog        = sy-cprog
          dynpnr          = sy-dynnr
        TABLES
          value_tab       = itab
          field_tab       = field_tab
          return_tab      = return_tab
        EXCEPTIONS
          parameter_error = 1
          no_values_found = 2
          OTHERS          = 3.
    if i choose data 2, return_tab will give value of
    SHLPNAME       ~
    FIELDNAME      E_VALUE
    RECORDPOS   0001
    FIELDVAL     C      CR
    RETFIELD     C      PRPS-USR01
    how can i know that from itab, the CR value i choose is from data 2 , because return_tab-recordpos returns value of 0001

    Hi,
       check the following code.
    data: lt_retval type standard table of ddshretval,
          ls_retval like ddshretval,
          lt_dynmap type standard table of dselc,
          ls_dynmap type dselc,
          dynp_values type standard table of dynpread ,
          wa_dynp_values type dynpread,
          lt_values type table of seahlpres,
          lt_fields type table of dfies,
          ls_field  type dfies,
          ls_return type ddshretval.
      clear ls_field.
      ls_field-fieldname = 'SKILLS'.
      ls_field-intlen = 15.
      ls_field-leng = 15.
      ls_field-outputlen = 15.
      ls_field-scrtext_m = 'SKILLS AVALIABLE'.
      append ls_field to lt_fields.
      clear ls_field.
      ls_field-fieldname = 'DESCRIPTION'.
      ls_field-intlen = 25.
      ls_field-leng = 25.
      ls_field-outputlen = 25.
      ls_field-scrtext_m = 'DESCRIPTION'.
      append ls_field to lt_fields.
      perform fill_values using 'C' 'C programming'.
      perform fill_values using 'C+' 'C+ Programming'.
      perform fill_values using 'ABAP' 'ABAP Language'.
      perform fill_values using 'JAVA' 'JAVA programming'.
      perform fill_values using 'SAP SCRIPT' 'Working with SAP Scripts'.
      perform fill_values using 'SMART FORMS' 'Smart forms'.
      call function 'F4IF_INT_TABLE_VALUE_REQUEST'
            exporting
              retfield               = 'SKILLS'
             dynpprog               = sy-repid
            tables
              value_tab              = gt_values
              field_tab              = lt_fields
             return_tab             =  lt_retval
           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.
      clear ls_retval.
      read table lt_retval into ls_retval index 1.
      move ls_retval-fieldval to p_skills.
    PS: p_skills is parameter @ selection screen.
    Regards,
    Niyaz

  • Problems with FM F4IF_INT_TABLE_VALUE_REQUEST and DYNP_VALUES_UPDATE

    Hi gurus,
    Im making a search help using FM F4IF_INT_TABLE_VALUE_REQUEST with multiple choice and it's working fine, my problem it's passing the values choosed from this FM to the screen...
    I've declare a select option, and what i want it's to pass the choosen values from the search help to the screen but it's not working fine... i already tried the FM DYNP_VALUES_UPDATE to update the screen field but still yhe same...
    Below goes my code, just in case...
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
           EXPORTING
                retfield        = 'ZLINHA'
                dynpprog        = sy-repid
                dynpnr          = sy-dynnr
                dynprofield     = 'SO_NUM'
                window_title    = 'Programa'
                value_org       = 'S'
                multiple_choice = 'X'
           TABLES
                value_tab       = it_values
                return_tab      = return_tab.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ELSE.
        LOOP AT return_tab.
    *      CLEAR r_num.
          so_num-option = 'EQ'.
          so_num-sign = 'I'.
          MOVE 'SO_NUM' TO dynpfields-fieldname.
          MOVE return_tab-fieldval TO dynpfields-fieldvalue.
          APPEND dynpfields.
    *      so_num-low = return_tab-fieldval.
    *      APPEND so_num.
        ENDLOOP.
      ENDIF.
      CLEAR dynpfields.
      CALL FUNCTION 'DYNP_VALUES_UPDATE'
           EXPORTING
                dyname     = progname
                dynumb     = dynnum
           TABLES
                dynpfields = dynpfields.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    If anyone has any idea, feel free to speak
    Thanks in advance,
    Best Regards

    Hi Martins,
    You have used the select options that means you have to use the function module for the <select-option >-low and <select-option>-high.
    I am giving you a code snippet in which the selection screen has select-options and with the help of function module it shows F4 help and pass the values.
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-023.
    SELECT-OPTIONS:S_PIDNUM FOR ZMST_PERMIT-ZPIDNUM ,
                   S_ENGDSC FOR ZMST_PERMIT-ZENGDSC NO INTERVALS LOWER CASE,
                   S_ARBDSC FOR ZMST_PERMIT-ZARBDSC NO INTERVALS LOWER CASE,
                   S_TARIFF FOR ZMST_PERMIT-ZTARIFF NO INTERVALS,
                   S_PERNUM FOR ZMST_PERMIT-ZPERNUM NO INTERVALS,
                   S_ARRPRT FOR ZMST_PERMIT-ZARRPRT NO INTERVALS MATCHCODE OBJECT ZMST_PORTS.
    PARAMETER:P_PERTYP(2) TYPE C AS LISTBOX VISIBLE LENGTH 20.
    SELECTION-SCREEN END OF BLOCK B1.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_PIDNUM-LOW.
      W_NAME2 = 'S_PIDNUM-LOW'.
      W_NAME1 = 'ZPIDNUM'.
      PERFORM F4_HELP USING W_NAME1 W_NAME2 .         "calling subroutine to provide desired F4 help
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_PIDNUM-HIGH.
      W_NAME2 = 'S_PIDNUM-HIGH'.
      W_NAME1 = 'ZPIDNUM'.
      PERFORM F4_HELP USING W_NAME1 W_NAME2 .         "calling subroutine to provide desired F4 help
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_ENGDSC-LOW.
      W_NAME2 = 'S_ENGDSC'.
      W_NAME1 = 'ZENGDSC'.
      PERFORM F4_HELP USING W_NAME1 W_NAME2 .         "calling subroutine to provide desired F4 help
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_ARBDSC-LOW.
      W_NAME2 = 'S_ARBDSC'.
      W_NAME1 = 'ZARBDSC'.
      PERFORM F4_HELP USING W_NAME1 W_NAME2 .         "calling subroutine to provide desired F4 help
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_TARIFF-LOW.
      W_NAME2 = 'S_TARIFF'.
      W_NAME1 = 'ZTARIFF'.
      PERFORM F4_HELP USING W_NAME1 W_NAME2 .         "calling subroutine to provide desired F4 help
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_PERNUM-LOW.
      W_NAME2 = 'S_PERNUM'.
      W_NAME1 = 'ZPERNUM'.
      PERFORM F4_HELP USING W_NAME1 W_NAME2 .         "calling subroutine to provide desired F4 help
    *&      Form  F4_HELP
          text
    -->  p1        text
    <--  p2        text
    FORM F4_HELP USING: W_VAR TYPE DFIES-FIELDNAME
                        W_VAR1 TYPE HELP_INFO-DYNPROFLD .
    Fetching data from zmst_permit for F4 help on PERMIT ID No.--
      IF IT_PERMIT[] IS INITIAL.
        SELECT ZPIDNUM
               ZENGDSC
               ZARBDSC
               ZTARIFF
               ZPERNUM
               ZARRPRT
               ZEFFDT
               ZEXPDT
               FROM ZMST_PERMIT INTO CORRESPONDING FIELDS OF TABLE IT_PERMIT.
      ENDIF.
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
          RETFIELD        = W_NAME1 " 'ZPIDNUM'
          DYNPPROG        = 'ZMSTR0022'
          DYNPNR          = SY-DYNNR
          DYNPROFIELD     = W_NAME2 "'S_PIDNUM'
          VALUE_ORG       = 'S'
        TABLES
          VALUE_TAB       = IT_PERMIT
        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_HELP
    I hope this will help you.
    Help children of U.N World Food Program by rewarding  points and encourage others to answer your queries.

  • Problem with F4if_int_table_value_request

    Hi to all experts,
    I have a peculiar problem in the fm 'F4IF_INT_TABLE_VALUE_REQUEST' when i click f4 im not
    able see the values in the dialog box , im getting the status message as 3 records exist . But im not able to see the values in the dialog box what could be the problem.
    p_dept is a selection screen field of type char 30. I need the f4 help for this field.
    DATA: l_repid TYPE sy-repid,
            l_dynnr  TYPE sy-dynnr.
      MOVE: sy-repid TO l_repid,
            sy-dynnr TO l_dynnr.
      TYPES: BEGIN OF line_type_val.
              INCLUDE STRUCTURE ddshretval.
      TYPES: END   OF line_type_val.
      DATA:  it_val TYPE STANDARD TABLE OF line_type_val WITH HEADER LINE.
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
          retfield               = 'P_DEPT'
          dynpprog               = l_repid
          dynpnr                 = l_dynnr
          dynprofield            = 'P_DEPT'
          value_org              = 'C'
      TABLES
          value_tab              = t_f4help
    *   FIELD_TAB              =
       RETURN_TAB             = it_val
    *   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.
    ELSE.
       READ TABLE it_val INDEX 1.
       IF  sy-subrc EQ 0.
        p_dept = it_val-fieldval.
       ENDIF.

    Hi Abdul,
    Try like this:-
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
          retfield        = 'KSCHL'
          dynpprog        = l_repid
          dynpnr          = l_dynnr
          dynprofield     = 'P_KSCHL'
          window_title    = text-059
          value_org       = 'S'
        TABLES
          value_tab       = it_value_tab
        EXCEPTIONS
          parameter_error = 1
          no_values_found = 2
          OTHERS          = 3.
      IF sy-subrc <> 0.
      ENDIF. 
    Thanks,
    Manas

  • Problems with: F4IF_INT_TABLE_VALUE_REQUEST

    Hi,
    i use the FM: F4IF_INT_TABLE_VALUE_REQUEST for an own F4-Help.
    My problem in this code is, that field MATNR in the ALV-Output
    shows 15 char of matnr and 3 char of mtart in the alv-field matnr
    and mtart has ####.
    I don't know why. Before calling the FM, the itab value_t has the right values.
    Has anyone an idea which mistake i do.
    TABLES: MARA, MAKT.
    SELECTION-SCREEN: BEGIN OF LINE.
    SELECTION-SCREEN: COMMENT 01(33) T_MATNR.
    PARAMETERS:       P_MATNR LIKE MARA-MATNR.
    SELECTION-SCREEN: END   OF LINE.
    SELECTION-SCREEN: BEGIN OF LINE.
    SELECTION-SCREEN: COMMENT 01(33) T_MTART.
    PARAMETERS:       P_MTART LIKE MARA-MTART.
    SELECTION-SCREEN: END   OF LINE.
    SELECTION-SCREEN: BEGIN OF LINE.
    SELECTION-SCREEN: COMMENT 01(33) T_MAKTX.
    PARAMETERS:       P_MAKTX LIKE MAKT-MAKTX.
    SELECTION-SCREEN: END   OF LINE.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_MATNR.
    Felder für F4 -> kurzfassung
      DATA: BEGIN OF VALUE_T OCCURS 0,
             MATNR TYPE MARA-MATNR,
             MTART TYPE MARA-MTART,
             MAKTX TYPE MAKT-MAKTX,
            END   OF VALUE_T.
      DATA : DYNPFLD_T TYPE TABLE OF DSELC WITH HEADER LINE.
      DATA : FIELD_T   TYPE TABLE OF DFIES WITH HEADER LINE.
      SELECT * FROM MARA UP TO 15 ROWS.
        SELECT SINGLE * FROM MAKT WHERE MATNR = MARA-MATNR
                                    AND SPRAS = SY-LANGU.
        VALUE_T-MATNR = MARA-MATNR.
        VALUE_T-MTART = MARA-MTART.
        VALUE_T-MAKTX = MAKT-MAKTX.
        APPEND VALUE_T.
      ENDSELECT.
      REFRESH FIELD_T.
      FIELD_T-TABNAME = 'MARA'.
      FIELD_T-FIELDNAME = 'MATNR'.
      APPEND FIELD_T.
      FIELD_T-TABNAME = 'MARA'.
      FIELD_T-FIELDNAME = 'MTART'.
      APPEND FIELD_T.
      FIELD_T-TABNAME = 'MAKT'.
      FIELD_T-FIELDNAME = 'MAKTX'.
      APPEND FIELD_T.
      REFRESH DYNPFLD_T.
      DYNPFLD_T-FLDNAME   = 'MATNR'.
      DYNPFLD_T-DYFLDNAME = 'P_MATNR'.
      APPEND DYNPFLD_T.
      DYNPFLD_T-FLDNAME   = 'MTART'.
      DYNPFLD_T-DYFLDNAME = 'P_MTART'.
      APPEND DYNPFLD_T.
      DYNPFLD_T-FLDNAME   = 'MAKTX'.
      DYNPFLD_T-DYFLDNAME = 'P_MAKTX'.
      APPEND DYNPFLD_T.
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
          RETFIELD        = 'P_MATNR'
          WINDOW_TITLE    = 'Statusselektion'
          DYNPPROG        = SY-REPID
          DYNPNR          = SY-DYNNR
          DYNPROFIELD     = 'P_MATNR'
          VALUE_ORG       = 'S'
        TABLES
          VALUE_TAB       = VALUE_T
          FIELD_TAB       = FIELD_T
          DYNPFLD_MAPPING = DYNPFLD_T
        EXCEPTIONS
          PARAMETER_ERROR = 1
          NO_VALUES_FOUND = 2
          OTHERS          = 3.
    INITIALIZATION.
      T_MATNR = 'Materialnummer:'.
      T_MTART = 'Materialart'.
      T_MAKTX = 'Kurztext'.
    Thanks for help.
    Regards, Dieter

    Check this code
    TABLES: MARA, MAKT.
    SELECTION-SCREEN: BEGIN OF LINE.
    SELECTION-SCREEN: COMMENT 01(33) T_MATNR.
    PARAMETERS: P_MATNR LIKE MARA-MATNR.
    SELECTION-SCREEN: END OF LINE.
    SELECTION-SCREEN: BEGIN OF LINE.
    SELECTION-SCREEN: COMMENT 01(33) T_MTART.
    PARAMETERS: P_MTART LIKE MARA-MTART.
    SELECTION-SCREEN: END OF LINE.
    SELECTION-SCREEN: BEGIN OF LINE.
    SELECTION-SCREEN: COMMENT 01(33) T_MAKTX.
    PARAMETERS: P_MAKTX LIKE MAKT-MAKTX.
    SELECTION-SCREEN: END OF LINE.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_MATNR.
    Felder für F4 -> kurzfassung
    DATA: BEGIN OF VALUE_T OCCURS 0,
    MATNR LIKE MARA-MATNR,
    MTART LIKE MARA-MTART,
    MAKTX LIKE MAKT-MAKTX,
    END OF VALUE_T.
    DATA : DYNPFLD_T TYPE TABLE OF DSELC WITH HEADER LINE.
    DATA : FIELD_T TYPE TABLE OF DFIES WITH HEADER LINE.
    SELECT * FROM MARA UP TO 15 ROWS.
    SELECT SINGLE * FROM MAKT WHERE MATNR = MARA-MATNR
    AND SPRAS = SY-LANGU.
    VALUE_T-MATNR = MARA-MATNR.
    VALUE_T-MTART = MARA-MTART.
    VALUE_T-MAKTX = MAKT-MAKTX.
    APPEND VALUE_T.
    ENDSELECT.
    *REFRESH FIELD_T.
    *FIELD_T-TABNAME = 'MARA'.
    *FIELD_T-FIELDNAME = 'MATNR'.
    *APPEND FIELD_T.
    *FIELD_T-TABNAME = 'MARA'.
    *FIELD_T-FIELDNAME = 'MTART'.
    *APPEND FIELD_T.
    *FIELD_T-TABNAME = 'MAKT'.
    *FIELD_T-FIELDNAME = 'MAKTX'.
    *APPEND FIELD_T.
    CALL FUNCTION 'DDIF_FIELDINFO_GET'
      EXPORTING
        tabname              = 'VALUE_T'
      FIELDNAME            = ' '
      LANGU                = SY-LANGU
      LFIELDNAME           = ' '
      ALL_TYPES            = ' '
      GROUP_NAMES          = ' '
      UCLEN                =
    IMPORTING
      X030L_WA             =
      DDOBJTYPE            =
      DFIES_WA             =
      LINES_DESCR          =
    TABLES
       DFIES_TAB            = FIELD_T
      FIXED_VALUES         =
    EXCEPTIONS
       NOT_FOUND            = 1
       INTERNAL_ERROR       = 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.
    REFRESH DYNPFLD_T.
    DYNPFLD_T-FLDNAME = 'MATNR'.
    DYNPFLD_T-DYFLDNAME = 'P_MATNR'.
    APPEND DYNPFLD_T.
    DYNPFLD_T-FLDNAME = 'MTART'.
    DYNPFLD_T-DYFLDNAME = 'P_MTART'.
    APPEND DYNPFLD_T.
    DYNPFLD_T-FLDNAME = 'MAKTX'.
    DYNPFLD_T-DYFLDNAME = 'P_MAKTX'.
    APPEND DYNPFLD_T.
    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
    RETFIELD = 'MATNR'
    WINDOW_TITLE = 'Statusselektion'
    DYNPPROG = SY-REPID
    DYNPNR = SY-DYNNR
    DYNPROFIELD = 'P_MATNR'
    VALUE_ORG = 'S'
    TABLES
    VALUE_TAB = VALUE_T
    FIELD_TAB = FIELD_T[]
    DYNPFLD_MAPPING = DYNPFLD_T
    EXCEPTIONS
    PARAMETER_ERROR = 1
    NO_VALUES_FOUND = 2
    OTHERS = 3.
    INITIALIZATION.
    T_MATNR = 'Materialnummer:'.
    T_MTART = 'Materialart'.
    T_MAKTX = 'Kurztext'.

  • Problem in F4IF_INT_TABLE_VALUE_REQUEST

    Hi Experts,
                   I have a requirement that in selection screen  the parameter date should display 4 values in F4 help i.e 31 , 30 , 29 , 28. after using FM F4IF_INT_TABLE_VALUE_REQUEST currently it shows nothing.the code which i writen is shown below.
    SELECTION-SCREEN : BEGIN OF BLOCK HIM WITH FRAME TITLE TEXT-001.
    PARAMETER: DATE(2) TYPE C OBLIGATORY.
    SELECTION-SCREEN : END OF BLOCK HIM.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR DATE.
    IT_HELP-DAYS = '28'.
    APPEND IT_HELP.
    IT_HELP-DAYS = '29'.
    APPEND IT_HELP.
    IT_HELP-DAYS = '30'.
    APPEND IT_HELP.
    IT_HELP-DAYS = '31'.
    APPEND IT_HELP.
    L_RETFIELD = 'DAYS'.
    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
      DDIC_STRUCTURE         = ' '
        RETFIELD               = L_RETFIELD
      PVALKEY                = ' '
       DYNPPROG               = SY-REPID
       DYNPNR                 = '1000'
       DYNPROFIELD            = 'DATE'
      STEPL                  = 0
      WINDOW_TITLE           =
      VALUE                  = ' '
       VALUE_ORG              = 'S'
      MULTIPLE_CHOICE        = ' '
      DISPLAY                = ' '
      CALLBACK_PROGRAM       = ' '
      CALLBACK_FORM          = ' '
      MARK_TAB               =
    IMPORTING
      USER_RESET             =
      TABLES
        VALUE_TAB              = IT_HELP
      FIELD_TAB              = 'DATE'.
       RETURN_TAB             = T_RETURN
      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.
    Thanks & Regards,
    Himanshu Rangappa

    TABLES : ZVEMP.
    TYPES : BEGIN OF st_help,
      DAYS TYPE ZVEMP-ENAME,
      END OF st_help.
    DATA : it_help TYPE STANDARD TABLE OF st_help WITH HEADER LINE.
    DATA L_RETFIELD TYPE string.
    SELECTION-SCREEN : BEGIN OF BLOCK HIM WITH FRAME TITLE TEXT-001.
    PARAMETER: DATE(2) TYPE C OBLIGATORY.
    SELECTION-SCREEN : END OF BLOCK HIM.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR DATE.
    IT_HELP-DAYS = '28'.
    APPEND IT_HELP.
    IT_HELP-DAYS = '29'.
    APPEND IT_HELP.
    IT_HELP-DAYS = '30'.
    APPEND IT_HELP.
    IT_HELP-DAYS = '31'.
    APPEND IT_HELP.
    L_RETFIELD = 'DAYS'.
    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
      DDIC_STRUCTURE         = ' '
        RETFIELD               = 'IT_HELP-DAYS'
      PVALKEY                = ' '
       DYNPPROG               = SY-REPID
       DYNPNR                 = '1000'
       DYNPROFIELD            = 'ENAME'
      STEPL                  = 0
      WINDOW_TITLE           =
      VALUE                  = ' '
       VALUE_ORG              = 'S'
      MULTIPLE_CHOICE        = ' '
      DISPLAY                = ' '
       CALLBACK_PROGRAM       = SY-REPID
      CALLBACK_FORM          = ' '
      MARK_TAB               =
    IMPORTING
      USER_RESET             =
      TABLES
        VALUE_TAB              = IT_HELP
      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.
    hope this helpful
    Edited by: rajan bhalani on Dec 22, 2008 10:55 AM

  • F4IF_INT_TABLE_VALUE_REQUEST flickering problem

    Dear Abap experts,
    When I click on the select option dropdown it opens a drop down box containing a correct list of data followed by a half deformed drop down box which appear only in a flick second on the upper left side of the screen. The program works well but with this thing it looks very odd. Below is the sample program which I'm currently testing.
    tables kna1.
    data:
    begin of t_values occurs 2,
    value like kna1-begru,
    end of t_values,
    t_return like ddshretval occurs 0 with header line.
    select-options s_begru for kna1-begru.
    at selection-screen on value-request for s_begru-low.
    refresh t_values.
    t_values = 'PAR*'.
    append t_values.
    t_values = 'UGG'.
    append t_values.
    call function 'F4IF_INT_TABLE_VALUE_REQUEST'
    exporting
    retfield = 'BEGRU'
    value_org = 'S'
    tables
    value_tab = t_values
    return_tab = t_return
    exceptions
    parameter_error = 1
    no_values_found = 2
    others = 3.
    if sy-subrc = 0.
    read table t_return index 1.
    s_begru-low = t_return-fieldval.
    endif.
    Thanks
    Regards
    Adis

    initialization.
    refresh t_values.
    t_values = 'PAR*'.
    append t_values.
    t_values = 'UGG'.
    append t_values.
    at selection-screen on value-request for s_begru-low.
    call function 'F4IF_INT_TABLE_VALUE_REQUEST'
    exporting
    retfield = 'BEGRU'
    value_org = 'S'
    tables
    value_tab = t_values
    return_tab = t_return
    exceptions
    parameter_error = 1
    no_values_found = 2
    others = 3.
    if sy-subrc = 0.
    read table t_return index 1.
    s_begru-low = t_return-fieldval.
    endif.
    try with this

  • Serious Performance Problems in ABAP Reports

    Hi All,
    We are developing ABAP reports for SAP IS-U/CCS Modules and facing Performance issues.Whole scenario is given below.Please suggest some solution.
    1. Total No. Of Business Partners = 1500000
    2. Reports Selection Criteria are of two types:
         a) GSBER(Business Area) - Selection for atleast 200000 Business Partners
         b) Cokey(Division)     - Selection for around 1000 to 50000 Business Partners
    3. For implementing our reports logic we have to access several tables all of which are very large.They are :
         Table Name     No. of records (Appx)          
         DBERCHV               20000000
         DBERCHZ1              20000000
         DBERDLB               20000000
         DFKKKO                20000000
         DFKKOP                20000000
         EANLH                  4000000
         ERCH                  10000000
         ERCHC                 10000000
         ETTIFN                30000000
         EVER                   1500000
         FKKVKP                 1500000
         TECOKT                     500     
         TGSBT                       12
    4. Due to large no. of records we are facing problems at two levels:
         a) OpenSQL Statement is taking too much time for data selection
         b) Since large no. of records are selected Corresponding loops and data processing also takes much time
    5. We have tried almost all ABAP Performance optimization techniques such as using Index, SQL optimization techniques,Read Table Optimization, Loop Statement Optimization etc. but there is not much improvement.
    6. For example one of our Reports "R15" takes around 1500 seconds for 1000 Business Partners.
    Its Code is attached below:
    <b>a) ZISU_SCHL_LTR15_BAPI - Program which schedules actual R15 report in background</b>
    *& Report  ZISU_SCHL_LTR15_BAPI                                        *
    *& Developed By : Piyusha Kirwai                                       *
    *& Date         : 02/12/2005                                           *
    *& Purpose      : To Schedule the LT R 15 prog in background and store
    *& the File for Manual R-15 into server.
    REPORT  ZISU_SCHL_LTR15_BAPI  NO STANDARD PAGE HEADING.
    TABLES ZEVERFKKVKP.
    DATA:  DYFIELDS LIKE DYNPREAD OCCURS 0 WITH HEADER LINE.
    DATA: IT_TAB TYPE FILETABLE,
          GD_SUBRC TYPE I.
    DATA: LV_GSBER TYPE TGSBT-GSBER.
    RANGES R_COKEY FOR ZEVERFKKVKP-COKEY.
    DATA: BEGIN OF GT_TECOKT OCCURS 100,
            COKEY TYPE TECOKT-COKEY,
            LTEXT TYPE TECOKT-LTEXT,
          END   OF GT_TECOKT,
          BEGIN OF GT_TE422 OCCURS 100,
            TERMSCHL TYPE TE422-TERMSCHL,
            TERMTEXT TYPE TE422-TERMTEXT,
          END   OF GT_TE422.
    DATA: BEGIN OF GWA_MANUAL_DATA,
            COL_1(5)        TYPE C,
            COL_2(10)       TYPE C,
            COL_3(40)       TYPE C,
            COL_4(40)       TYPE C,
            COL_5(10)       TYPE C,
            COL_6(19)       TYPE C,
            COL_7(19)       TYPE C,
            COL_8(19)       TYPE C,
            COL_9(19)       TYPE C,
            COL_10(19)      TYPE C,
            COL_11(19)      TYPE C,
            COL_12(10)      TYPE C,
            COL_13(19)      TYPE C,
            COL_14(19)      TYPE C,
            COL_15(19)      TYPE C,
            COL_16(19)      TYPE C,
            COL_17(19)      TYPE C,
            COL_18(19)      TYPE C,
          END   OF GWA_MANUAL_DATA,
          GT_MANUAL_DATA LIKE GWA_MANUAL_DATA OCCURS 0,
          GT_INTERN_DATA TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
    *&-----FOR UPLOADING FILE TO SERVER------------------------------------*
    DATA: LV_SERVER_FILE_PREFIX(60) TYPE C.
    DATA: LV_SERVER_DATAFILE_NAME(60) TYPE C.
    DATA: LV_SERVER_ERRFILE_NAME(60) TYPE C.
    DATA: ENDT LIKE SY-UZEIT,
          ENDD LIKE SY-DATUM,
          JOBCOUNT TYPE TBTCJOB-JOBCOUNT.
    SELECTION-SCREEN BEGIN OF BLOCK 001 WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS: SO_GSBER FOR ZEVERFKKVKP-GSBER OBLIGATORY,
                    SO_COKEY FOR ZEVERFKKVKP-COKEY OBLIGATORY,
                    SO_MRU   FOR ZEVERFKKVKP-ABLEINH.
    PARAMETERS:     P_BMNTH(7) TYPE C OBLIGATORY.
    SELECT-OPTIONS: SO_GPART FOR ZEVERFKKVKP-GPART.
    SELECTION-SCREEN END  OF BLOCK 001.
    SELECTION-SCREEN BEGIN OF BLOCK 002 WITH FRAME TITLE TEXT-003.
    PARAMETERS:  P_COMPUT RADIOBUTTON GROUP R15,
                 P_INCLUD RADIOBUTTON GROUP R15,
                 P_FILE  TYPE  RLGRAP-FILENAME MODIF ID ACT.
    SELECTION-SCREEN END   OF BLOCK 002.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 2(83) TEXT-004.
    SELECTION-SCREEN END   OF LINE.
    *SELECTION-SCREEN BEGIN OF LINE.
    *  SELECTION-SCREEN COMMENT 8(40) TEXT-005.
    *SELECTION-SCREEN END   OF LINE.
    SELECTION-SCREEN BEGIN OF BLOCK 003 WITH FRAME TITLE TEXT-002.
    PARAMETERS   P_SCHL TYPE C AS CHECKBOX.
    PARAMETERS : P_IMMED RADIOBUTTON GROUP SCH ,
                 P_DT_TM  RADIOBUTTON GROUP SCH,
                 P_DATE TYPE SY-DATUM MODIF ID SHL,
                 P_TIME TYPE SY-UZEIT MODIF ID SHL.
    SELECTION-SCREEN END   OF BLOCK 003.
    AT SELECTION-SCREEN.
    AT SELECTION-SCREEN ON SO_GSBER.
      IF NOT SO_GSBER-LOW IS INITIAL.
        SELECT SINGLE GSBER FROM TGSBT INTO LV_GSBER
          WHERE GSBER = SO_GSBER-LOW.
        IF SY-SUBRC <> 0.
          MESSAGE E007(ZISU).
        ENDIF.
      ENDIF.
      IF NOT SO_GSBER-HIGH IS INITIAL .
        SELECT SINGLE GSBER FROM TGSBT INTO LV_GSBER
          WHERE GSBER = SO_GSBER-HIGH.
        IF SY-SUBRC <> 0.
          MESSAGE E007(ZISU).
        ENDIF.
      ENDIF.
    AT SELECTION-SCREEN ON P_BMNTH.
    **check the validity of Billing month format and for valid billing month
      IF P_BMNTH CO '0123456789/'.
        IF P_BMNTH CP '++++/++'.
          IF P_BMNTH+5(2) > 12.
            MESSAGE E002(ZISU) WITH 'from'.
          ENDIF.
    ** current year is less than year entered
          IF SY-DATUM(4) < P_BMNTH(4).
            MESSAGE E003(ZISU) WITH 'from'.
          ELSEIF SY-DATUM(4) = P_BMNTH(4).
    ** month in future
            IF SY-DATUM+4(2) < P_BMNTH+5(2).
              MESSAGE E004(ZISU) WITH 'from'.
            ENDIF.
          ENDIF.
        ELSE.
          MESSAGE E001(ZISU) WITH 'from'.
        ENDIF.
      ELSE.
    **  entry have some invalid char
        MESSAGE E010(ZISU).
      ENDIF.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_COKEY-LOW.
    **for geting the CO account assigment key of the entered Business area
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM DIVISON_DATA_GET CHANGING SO_COKEY-LOW.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_COKEY-HIGH.
    **for geting the CO account assigment key of the entered Business area
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM DIVISON_DATA_GET CHANGING SO_COKEY-HIGH.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_MRU-LOW.
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM MRU_DATA_GET CHANGING SO_MRU-LOW.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_MRU-HIGH.
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM MRU_DATA_GET CHANGING SO_MRU-HIGH.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
      REFRESH: IT_TAB.
    **Opens File Open Dialog Box for selecting input file.
      CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
        EXPORTING
          WINDOW_TITLE     = 'Select File'
          DEFAULT_FILENAME = '*.xls'
          MULTISELECTION   = ' '
        CHANGING
          FILE_TABLE       = IT_TAB
          RC               = GD_SUBRC.
      LOOP AT IT_TAB INTO P_FILE.
    *    so_fpath-sign = 'I'.
    *    so_fpath-option = 'EQ'.
    *    append so_fpath.
      ENDLOOP.
    AT SELECTION-SCREEN OUTPUT.
      LOOP AT SCREEN.
        IF SCREEN-GROUP1 = 'ACT'.
          IF P_INCLUD = ' '.
            SCREEN-INPUT = '0'.
          ELSE.
            SCREEN-INPUT = '1'.
          ENDIF.
        ENDIF.
        IF SCREEN-GROUP1 = 'SHL'.
          IF P_DT_TM = 'X'.
            SCREEN-INPUT = '1'.
          ELSE.
            SCREEN-INPUT = '0'.
          ENDIF.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.
    INITIALIZATION.
      P_DATE = SY-DATUM.
      P_TIME = SY-UZEIT + 180.
    START-OF-SELECTION.
      IF P_INCLUD = 'X' AND P_FILE IS INITIAL.
        MESSAGE 'Enter the Manual R-15 File' TYPE 'E'.
      ENDIF.
    *  IF P_INCLUD = 'X'.
    *    PERFORM UPLOAD_EXCEL_FILE.
    *    CONCATENATE 'R15' SY-DATUM '-' SY-UZEIT INTO LV_SERVER_FILE_PREFIX.
    *    CONCATENATE LV_SERVER_FILE_PREFIX '-' 'LT.TMP' INTO
    *    LV_SERVER_DATAFILE_NAME.
    *    OPEN DATASET LV_SERVER_DATAFILE_NAME
    *      FOR OUTPUT
    *      IN TEXT MODE
    *      ENCODING DEFAULT.
    *    LOOP AT GT_MANUAL_DATA INTO GWA_MANUAL_DATA.
    *      IF ( GWA_MANUAL_DATA-COL_6 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_7 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_8 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_9 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_10 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_11 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_13 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_14 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_15 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_16 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_17 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_18 CN '0123456789 ' ).
    *        MESSAGE 'Character Data in Numerical Field' TYPE 'E'.
    *      ENDIF.
    *      TRANSFER GWA_MANUAL_DATA TO LV_SERVER_DATAFILE_NAME.
    *    ENDLOOP.
    *    CLOSE DATASET LV_SERVER_DATAFILE_NAME.
    *  ENDIF.  "  P_INCLUD = 'X'.
      IF P_SCHL = 'X'.
        IF P_IMMED = 'X'.
          CALL FUNCTION 'C14B_ADD_TIME'
            EXPORTING
              I_STARTTIME = SY-UZEIT
              I_STARTDATE = SY-DATUM
              I_ADDTIME   = '000010'
            IMPORTING
              E_ENDTIME   = ENDT
              E_ENDDATE   = ENDD.
        ELSEIF P_DT_TM = 'X'.
          ENDD = P_DATE.
          ENDT = P_TIME.
        ENDIF.
        CALL FUNCTION 'JOB_OPEN'
          EXPORTING
    *     DELANFREP              = ' '
    *     JOBGROUP               = ' '
            JOBNAME                = 'R15JOB'
    *      SDLSTRTDT              = ENDD
    *      SDLSTRTTM              = ENDT
    *     JOBCLASS               =
         IMPORTING
           JOBCOUNT               = JOBCOUNT
    *   CHANGING
    *     RET                    =
    *   EXCEPTIONS
    *     CANT_CREATE_JOB        = 1
    *     INVALID_JOB_DATA       = 2
    *     JOBNAME_MISSING        = 3
    *     OTHERS                 = 4
        IF SY-SUBRC <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
        IF P_INCLUD = 'X'.
          PERFORM UPLOAD_EXCEL_FILE.
         CONCATENATE 'R15' SY-DATUM '-' SY-UZEIT INTO LV_SERVER_FILE_PREFIX.
          CONCATENATE LV_SERVER_FILE_PREFIX '-' JOBCOUNT 'LT.TMP' INTO
          LV_SERVER_DATAFILE_NAME.
          CONDENSE LV_SERVER_DATAFILE_NAME.
          OPEN DATASET LV_SERVER_DATAFILE_NAME
            FOR OUTPUT
            IN TEXT MODE
            ENCODING DEFAULT.
          IF SY-SUBRC NE 0.
            MESSAGE 'Error in Creating File on Server' TYPE 'E'.
          ENDIF.
          LOOP AT GT_MANUAL_DATA INTO GWA_MANUAL_DATA.
            IF ( GWA_MANUAL_DATA-COL_6 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_7 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_8 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_9 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_10 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_11 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_13 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_14 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_15 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_16 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_17 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_18 CN '0123456789 ' ).
              MESSAGE 'Character Data in Numerical Field' TYPE 'E'.
            ENDIF.
            TRANSFER GWA_MANUAL_DATA TO LV_SERVER_DATAFILE_NAME.
          ENDLOOP.
          CLOSE DATASET LV_SERVER_DATAFILE_NAME.
          IF SY-SUBRC NE 0.
            MESSAGE 'Error in Creating File on Server' TYPE 'E'.
          ENDIF.
        ENDIF.  "  P_INCLUD = 'X'.
        SUBMIT ZISU_LTR15_TUNE
          WITH SO_GSBER IN SO_GSBER
          WITH SO_COKEY IN SO_COKEY
          WITH SO_MRU   IN SO_MRU
          WITH SO_GPART IN SO_GPART
          WITH P_BMNTH  =  P_BMNTH
          WITH P_COMPUT = P_COMPUT
          WITH P_INCLUD = P_INCLUD
          WITH P_FILE   = LV_SERVER_DATAFILE_NAME
          USER SY-UNAME VIA JOB 'R15JOB' NUMBER JOBCOUNT AND RETURN.
        CALL FUNCTION 'JOB_CLOSE'
          EXPORTING
    *   AT_OPMODE                         = ' '
    *   AT_OPMODE_PERIODIC                = ' '
    *   CALENDAR_ID                       = ' '
    *   EVENT_ID                          = ' '
    *   EVENT_PARAM                       = ' '
    *   EVENT_PERIODIC                    = ' '
            JOBCOUNT                          = JOBCOUNT
            JOBNAME                           = 'R15JOB'
    *   LASTSTRTDT                        = NO_DATE
    *   LASTSTRTTM                        = NO_TIME
    *   PRDDAYS                           = 0
    *   PRDHOURS                          = 0
    *   PRDMINS                           = 0
    *   PRDMONTHS                         = 0
    *   PRDWEEKS                          = 0
    *   PREDJOB_CHECKSTAT                 = ' '
    *   PRED_JOBCOUNT                     = ' '
    *   PRED_JOBNAME                      = ' '
            SDLSTRTDT                         = ENDD
            SDLSTRTTM                         = ENDT
    *   STARTDATE_RESTRICTION             = BTC_PROCESS_ALWAYS
            STRTIMMED                         = P_IMMED
    *   TARGETSYSTEM                      = ' '
    *   START_ON_WORKDAY_NOT_BEFORE       = SY-DATUM
    *   START_ON_WORKDAY_NR               = 0
    *   WORKDAY_COUNT_DIRECTION           = 0
    *   RECIPIENT_OBJ                     =
    *   TARGETSERVER                      = ' '
    *   DONT_RELEASE                      = ' '
    *   TARGETGROUP                       = ' '
    *   DIRECT_START                      =
    * IMPORTING
    *   JOB_WAS_RELEASED                  =
    * CHANGING
    *   RET                               =
    * EXCEPTIONS
    *   CANT_START_IMMEDIATE              = 1
    *   INVALID_STARTDATE                 = 2
    *   JOBNAME_MISSING                   = 3
    *   JOB_CLOSE_FAILED                  = 4
    *   JOB_NOSTEPS                       = 5
    *   JOB_NOTEX                         = 6
    *   LOCK_FAILED                       = 7
    *   INVALID_TARGET                    = 8
    *   OTHERS                            = 9
        IF SY-SUBRC <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
      ELSE.  " IF NOT TO RUN IN BACKGROUND
        IF P_INCLUD = 'X'.
          PERFORM UPLOAD_EXCEL_FILE.
         CONCATENATE 'R15' SY-DATUM '-' SY-UZEIT INTO LV_SERVER_FILE_PREFIX.
          CONCATENATE LV_SERVER_FILE_PREFIX '-' 'LT.TMP' INTO
          LV_SERVER_DATAFILE_NAME.
          CONDENSE LV_SERVER_DATAFILE_NAME.
          OPEN DATASET LV_SERVER_DATAFILE_NAME
            FOR OUTPUT
            IN TEXT MODE
            ENCODING DEFAULT.
          IF SY-SUBRC NE 0.
            MESSAGE 'Error in Creating File on Server' TYPE 'E'.
          ENDIF.
          LOOP AT GT_MANUAL_DATA INTO GWA_MANUAL_DATA.
            IF ( GWA_MANUAL_DATA-COL_6 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_7 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_8 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_9 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_10 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_11 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_13 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_14 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_15 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_16 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_17 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_18 CN '0123456789 ' ).
              MESSAGE 'Character Data in Numerical Field' TYPE 'E'.
            ENDIF.
            TRANSFER GWA_MANUAL_DATA TO LV_SERVER_DATAFILE_NAME.
          ENDLOOP.
          CLOSE DATASET LV_SERVER_DATAFILE_NAME.
          IF SY-SUBRC NE 0.
            MESSAGE 'Error in Creating File on Server' TYPE 'E'.
          ENDIF.
        ENDIF.  "  P_INCLUD = 'X'.
        IF NOT SY-BATCH IS INITIAL.
          SUBMIT ZISU_LTR15_TUNE
            WITH SO_GSBER IN SO_GSBER
            WITH SO_COKEY IN SO_COKEY
            WITH SO_MRU   IN SO_MRU
            WITH SO_GPART IN SO_GPART
            WITH P_BMNTH  =  P_BMNTH
            WITH P_COMPUT = P_COMPUT
            WITH P_INCLUD = P_INCLUD
            WITH P_FILE   = LV_SERVER_DATAFILE_NAME
            TO SAP-SPOOL WITHOUT SPOOL DYNPRO.
        ELSE.
          SUBMIT ZISU_LTR15_TUNE
            WITH SO_GSBER IN SO_GSBER
            WITH SO_COKEY IN SO_COKEY
            WITH SO_MRU   IN SO_MRU
            WITH SO_GPART IN SO_GPART
            WITH P_BMNTH  =  P_BMNTH
            WITH P_COMPUT = P_COMPUT
            WITH P_INCLUD = P_INCLUD
            WITH P_FILE   = LV_SERVER_DATAFILE_NAME.
        ENDIF.
      ENDIF.
    *&      Form  divison_data_get
    *       text
    *      <--P_SO_COKEY_LOW  text
    FORM DIVISON_DATA_GET  CHANGING P_SO_COKEY_LOW.
    **to get the search help for division
      DATA : LV_LINES TYPE SY-TFILL,
            LT_RETURN_TAB LIKE DDSHRETVAL OCCURS 0, " with header line.
            LWA_RETURN_TAB LIKE DDSHRETVAL.
      DATA: LV_COKEY TYPE ZEVERFKKVKP-COKEY.
    **according to the Business area entered]
    *  break csebdev1.
      REFRESH R_COKEY[].
      DESCRIBE TABLE SO_GSBER LINES LV_LINES.
    **  when user has neither pressed the enter key nor selected the values
    **using search help
      IF LV_LINES = 0.
    *  loop at so_gsber.
        CLEAR R_COKEY.
    *    if so_gsber-high is initial.
    *    break csebdev1.
        DYFIELDS-FIELDNAME = 'SO_GSBER-LOW'.
        APPEND DYFIELDS.
        CALL FUNCTION 'DYNP_VALUES_READ'
          EXPORTING
            DYNAME     = SY-CPROG
            DYNUMB     = SY-DYNNR
          TABLES
            DYNPFIELDS = DYFIELDS.
    *      r_cokey-sign = 'I'.
    *      r_cokey-option = 'CP'.
    *r_cokey-low = so_gsber-low+0(2).
        CONCATENATE DYFIELDS-FIELDVALUE+0(2) '*' INTO R_COKEY-LOW.
    *    elseif not so_gsber-high is initial.
        DYFIELDS-FIELDNAME = 'SO_GSBER-HIGH'.
        APPEND DYFIELDS.
        CALL FUNCTION 'DYNP_VALUES_READ'
          EXPORTING
            DYNAME     = SY-CPROG
            DYNUMB     = SY-DYNNR
          TABLES
            DYNPFIELDS = DYFIELDS.
        IF NOT DYFIELDS-FIELDVALUE IS INITIAL.
          CONCATENATE DYFIELDS-FIELDVALUE+0(2) '99999999' INTO R_COKEY-HIGH.
        ENDIF.
    *    endif.
        IF NOT R_COKEY-HIGH IS INITIAL.
          R_COKEY-SIGN = 'I'.
          R_COKEY-OPTION = 'BT'.
        ELSEIF R_COKEY-HIGH IS INITIAL.
          R_COKEY-SIGN = 'I'.
          R_COKEY-OPTION = 'CP'.
        ENDIF.
        APPEND R_COKEY.
      ENDIF.
    *  endloop.
    *  APPEND DYFIELDS.
      IF LV_LINES > 0.
    *    break-point.
        IF NOT SO_GSBER[] IS INITIAL.
          LOOP AT SO_GSBER.
    *        r_cokey-sign = 'I'.
    *        r_cokey-option = 'CP'.
    *r_cokey-low = so_gsber-low+0(2).
            CONCATENATE SO_GSBER-LOW+0(2) '*' INTO R_COKEY-LOW.
            IF NOT SO_GSBER-HIGH IS INITIAL.
              CONCATENATE SO_GSBER-HIGH+0(2) '99999999' INTO R_COKEY-HIGH.
            ENDIF.
            IF NOT R_COKEY-HIGH IS INITIAL.
              R_COKEY-SIGN = 'I'.
              R_COKEY-OPTION = 'BT'.
            ELSEIF R_COKEY-HIGH IS INITIAL.
              R_COKEY-SIGN = 'I'.
              R_COKEY-OPTION = 'CP'.
            ENDIF.
            APPEND R_COKEY TO R_COKEY.
          ENDLOOP.
        ENDIF.
      ENDIF.
      IF NOT R_COKEY[] IS INITIAL.
    * break csebdev1.
        REFRESH GT_TECOKT[].
        SELECT COKEY LTEXT
        FROM TECOKT
        INTO TABLE GT_TECOKT
        WHERE COKEY IN R_COKEY AND SPRAS = 'EN'.
    *    %_HINTS ORACLE '("TECOKT","TECOKT~1")'.
      ENDIF.
    **now call the search help
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
    *   DDIC_STRUCTURE         = ' '
          RETFIELD               = 'COKEY'
    *   PVALKEY                = ' '
    *   DYNPPROG               = ' '
    *   DYNPNR                 = ' '
    *   DYNPROFIELD            = ' '
    *   STEPL                  = 0
         WINDOW_TITLE           = 'Division'
         VALUE                  = DYFIELDS-FIELDVALUE
         VALUE_ORG              = 'S'
    *   MULTIPLE_CHOICE        = ' '
    *   DISPLAY                = ' '
    *   CALLBACK_PROGRAM       = ' '
    *   CALLBACK_FORM          = ' '
    *   MARK_TAB               =
    * IMPORTING
    *   USER_RESET             =
        TABLES
          VALUE_TAB              = GT_TECOKT
    *   FIELD_TAB              =
         RETURN_TAB             = LT_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.
      READ TABLE LT_RETURN_TAB INTO LWA_RETURN_TAB INDEX 1.
      LV_COKEY = LWA_RETURN_TAB-FIELDVAL.
    *break csebdev1.
    ENDFORM.                    " divison_data_get
    *&      Form  upload_excel_file
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM UPLOAD_EXCEL_FILE .
      DATA: LV_INDEX TYPE I.
      FIELD-SYMBOLS <VAL> TYPE ANY.
      CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
        EXPORTING
          FILENAME                = P_FILE
          I_BEGIN_COL             = 1
          I_BEGIN_ROW             = 8
          I_END_COL               = 18
          I_END_ROW               = 94
        TABLES
          INTERN                  = GT_INTERN_DATA
        EXCEPTIONS
          INCONSISTENT_PARAMETERS = 1
          UPLOAD_OLE              = 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.
      IF NOT GT_INTERN_DATA[] IS INITIAL.
        SORT GT_INTERN_DATA BY ROW COL.
        LOOP AT GT_INTERN_DATA.
          MOVE GT_INTERN_DATA-COL TO LV_INDEX.
          ASSIGN COMPONENT LV_INDEX OF STRUCTURE GWA_MANUAL_DATA TO <VAL>.
          MOVE GT_INTERN_DATA-VALUE TO <VAL>.
          AT END OF ROW.
            APPEND GWA_MANUAL_DATA TO GT_MANUAL_DATA.
            CLEAR GWA_MANUAL_DATA.
          ENDAT.
        ENDLOOP.
      ENDIF.
    ENDFORM.                    " upload_excel_file
    *&      Form  MRU_DATA_GET
    *       text
    *      <--P_SO_MRU_LOW  text
    FORM MRU_DATA_GET  CHANGING LV_MRU.
    **to get the search help for Group
      DATA : LV_LINES TYPE SY-TFILL,
            LT_RETURN_TAB LIKE DDSHRETVAL OCCURS 0,
            LWA_RETURN_TAB LIKE DDSHRETVAL.
    *        lv_mru_p(3) type c.
      RANGES  R_MRU FOR EANLH-ABLEINH.
    **according to the Business area entered
    **  break csebdev1.
      REFRESH R_MRU[].
      DESCRIBE TABLE SO_GSBER LINES LV_LINES.
    **  when user has neither pressed the enter key nor selected the values
    **using search help
      IF LV_LINES = 0.
        CLEAR R_MRU[].
        DYFIELDS-FIELDNAME = 'SO_GSBER-LOW'.
        APPEND DYFIELDS.
        CALL FUNCTION 'DYNP_VALUES_READ'
          EXPORTING
            DYNAME     = SY-CPROG
            DYNUMB     = SY-DYNNR
          TABLES
            DYNPFIELDS = DYFIELDS.
        CONCATENATE DYFIELDS-FIELDVALUE+0(2) '*' INTO R_MRU-LOW.
        DYFIELDS-FIELDNAME = 'SO_GSBER-HIGH'.
        APPEND DYFIELDS.
        CALL FUNCTION 'DYNP_VALUES_READ'
          EXPORTING
            DYNAME     = SY-CPROG
            DYNUMB     = SY-DYNNR
          TABLES
            DYNPFIELDS = DYFIELDS.
        IF NOT DYFIELDS-FIELDVALUE IS INITIAL.
          CONCATENATE DYFIELDS-FIELDVALUE+0(2) '99999999' INTO R_MRU-HIGH.
        ENDIF.
        IF NOT R_MRU-HIGH IS INITIAL.
          R_MRU-SIGN   = 'I'.
          R_MRU-OPTION = 'BT'.
        ELSEIF R_MRU-HIGH IS INITIAL.
          R_MRU-SIGN   = 'I'.
          R_MRU-OPTION = 'CP'.
        ENDIF.
        APPEND R_MRU.
      ENDIF. " end lv_lines =0
      IF LV_LINES > 0.
        IF NOT SO_GSBER[] IS INITIAL.
          LOOP AT SO_GSBER.
            CONCATENATE SO_GSBER-LOW+0(2) '*' INTO R_MRU-LOW.
            IF NOT SO_GSBER-HIGH IS INITIAL.
              CONCATENATE SO_GSBER-HIGH+0(2) '99999999' INTO R_MRU-HIGH.
            ENDIF.
            IF R_MRU-HIGH IS INITIAL.
              R_MRU-SIGN   = 'I'.
              R_MRU-OPTION = 'CP'.
            ELSEIF NOT R_MRU-HIGH IS INITIAL.
              R_MRU-SIGN   = 'I'.
              R_MRU-OPTION = 'BT'.
            ENDIF.
            APPEND R_MRU.
          ENDLOOP.
        ENDIF. " end so_GSBER[]
      ENDIF. " end lv_lines > 0
      IF NOT R_MRU[] IS INITIAL.
    * break csebdev1.
        REFRESH GT_TE422[].
        SELECT TERMSCHL TERMTEXT FROM TE422 INTO CORRESPONDING FIELDS OF
    TABLE GT_TE422 WHERE TERMSCHL IN R_MRU .
      ENDIF.
    **now call the search help
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
    *   DDIC_STRUCTURE         = ' '
          RETFIELD               = 'TERMSCHL'
    *   PVALKEY                = ' '
    *   DYNPPROG               = ' '
    *   DYNPNR                 = ' '
    *   DYNPROFIELD            = ' '
    *   STEPL                  = 0
         WINDOW_TITLE           = 'Group'
         VALUE                  = DYFIELDS-FIELDVALUE
         VALUE_ORG              = 'S'
    *   MULTIPLE_CHOICE        = ' '
    *   DISPLAY                = ' '
    *   CALLBACK_PROGRAM       = ' '
    *   CALLBACK_FORM          = ' '
    *   MARK_TAB               =
    * IMPORTING
    *   USER_RESET             =
        TABLES
          VALUE_TAB              = GT_TE422
    *   FIELD_TAB              =
         RETURN_TAB             = LT_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.
      READ TABLE LT_RETURN_TAB INTO LWA_RETURN_TAB INDEX 1.
      LV_MRU = LWA_RETURN_TAB-FIELDVAL.
    ENDFORM.                    " MRU_DATA_GET
    <b>b) ZISU_LTR15_TUNE - Actual R15 report</b>
    *& Report  ZISU_LTR15_TUNE                                             *
    REPORT  ZISU_LTR15_TUNE NO STANDARD PAGE HEADING  MESSAGE-ID ZISU
    LINE-SIZE 250 LINE-COUNT 65.
    **Tables
    TABLES :  EVER,
              FKKVKP,
              EANLH.
    SELECTION-SCREEN BEGIN OF BLOCK SELECTION
                              WITH FRAME TITLE TEXT-001 . "no intervals.
    SELECT-OPTIONS: SO_GSBER FOR EVER-GSBER OBLIGATORY,
                    SO_COKEY FOR EVER-COKEY,
                    SO_MRU   FOR EANLH-ABLEINH.
    PARAMETERS:     P_BMNTH(7) TYPE C OBLIGATORY.
    PARAMETERS:     P_CONT TYPE EVER-VERTRAG.
    SELECT-OPTIONS: SO_GPART FOR FKKVKP-GPART.
    SELECTION-SCREEN END OF BLOCK SELECTION.
    SELECTION-SCREEN BEGIN OF BLOCK PROCESS WITH FRAME.
    PARAMETERS:     P_COMPUT RADIOBUTTON GROUP R15.
    PARAMETERS:     P_INCLUD RADIOBUTTON GROUP R15,
                    P_FILE(60) TYPE C.
    SELECTION-SCREEN END OF BLOCK PROCESS.
    *              Start of Type declaration
    TYPES: BEGIN OF ST_TB024 ,
            IND_SECTOR TYPE TB024-IND_SECTOR,
            TEXTLONG TYPE TB024-TEXTLONG,
          END   OF ST_TB024,
          BEGIN OF ST_TECOKT,
            COKEY TYPE TECOKT-COKEY,
            LTEXT TYPE TECOKT-LTEXT,
          END   OF ST_TECOKT,
          BEGIN OF ST_TGSBT,
            GSBER   TYPE TGSBT-GSBER,
            GTEXT   TYPE TGSBT-GTEXT,
          END   OF ST_TGSBT,
          BEGIN OF ST_TE422,
            TERMSCHL  TYPE TE422-TERMSCHL,
            TERMTEXT  TYPE TE422-TERMTEXT,
          END   OF ST_TE422.
    *              Start of data declaration
    DATA: IT_TAB TYPE FILETABLE,
          GD_SUBRC TYPE I.
    DATA : GT_TB024 TYPE STANDARD TABLE OF ST_TB024 WITH HEADER LINE
             INITIAL SIZE 0,
           GT_TECOKT TYPE STANDARD TABLE OF ST_TECOKT
             WITH HEADER LINE,
          GT_TGSBT TYPE SORTED TABLE OF ST_TGSBT
          WITH UNIQUE KEY GSBER WITH HEADER LINE,
          GT_TE422 TYPE TABLE OF ST_TE422 WITH HEADER LINE INITIAL SIZE 0,
          BEGIN OF GWA_EVER,
            VKONT    TYPE EVER-VKONTO,
            ANLAGE   TYPE EVER-ANLAGE,
            ABRSPERR TYPE EVER-ABRSPERR,
          END   OF GWA_EVER,
          GT_EVER LIKE TABLE OF GWA_EVER INITIAL SIZE 0,
          BEGIN OF GWA_EANLH,
          ANLAGE     TYPE EANLH-ANLAGE,
          BRANCHE    TYPE EANLH-BRANCHE,
          END   OF GWA_EANLH,
          GT_EANLH LIKE TABLE OF GWA_EANLH INITIAL SIZE 0,
          BEGIN OF GWA_FKKVKP,
            VKONT   TYPE FKKVKP-VKONT,
            KTOKL   TYPE FKKVKP-KTOKL,
          END   OF GWA_FKKVKP,
          GT_FKKVKP LIKE TABLE OF GWA_FKKVKP INITIAL SIZE 0,
          BEGIN OF GWA_EVER_EANLH_FKKVKP,
            VKONT   TYPE FKKVKP-VKONT,
            ANLAGE   TYPE EVER-ANLAGE,
            ABRSPERR TYPE EVER-ABRSPERR,
            BRANCHE  TYPE EANLH-BRANCHE,
            KTOKL    TYPE FKKVKP-KTOKL,
          END OF GWA_EVER_EANLH_FKKVKP,
          GT_EVER_EANLH_FKKVKP LIKE TABLE OF GWA_EVER_EANLH_FKKVKP
            INITIAL SIZE 0,
          GT_EVER_EANLH_FKKVKP_INACT LIKE STANDARD TABLE OF
            GWA_EVER_EANLH_FKKVKP INITIAL SIZE 0,
          BEGIN OF GWA_ERCH,
            BELNR      TYPE ERCH-BELNR,
            VKONT      TYPE ERCH-VKONT,
          END OF GWA_ERCH,
          GT_ERCH LIKE TABLE OF GWA_ERCH INITIAL SIZE 0,
          BEGIN OF GWA_PRINTDOC,
            OPBEL    TYPE ERDK-OPBEL,
            GPART    TYPE ERDK-PARTNER,
            VKONT    TYPE ERDK-VKONT,
            BUDAT    TYPE ERDK-BUDAT,
            FAEDN    TYPE ERDK-FAEDN,
          END   OF GWA_PRINTDOC,
          GT_PRINTDOC LIKE TABLE OF GWA_PRINTDOC INITIAL SIZE 0,
          BEGIN OF GWA_DBERCHZ1,
            BELNR      TYPE DBERCHZ1-BELNR,
            EIN01      TYPE DBERCHZ1-EIN01,
            V_ABRMENGE TYPE DBERCHZ1-V_ABRMENGE,
          END OF GWA_DBERCHZ1,
          GT_DBERCHZ1 LIKE TABLE OF GWA_DBERCHZ1 INITIAL SIZE 0,
          BEGIN OF GWA_ERCHC,
            BELNR     TYPE ERCHC-BELNR,
            OPBEL     TYPE ERCHC-OPBEL,
            BUDAT     TYPE ERCHC-BUDAT,
          END   OF GWA_ERCHC,
          GT_ERCHC LIKE TABLE OF GWA_ERCHC INITIAL SIZE 0,
    * arrears for inactive consumers.
          BEGIN OF GWA_DFKKOP_INACTIVE_ARR,
              OPBEL       TYPE DFKKOP-OPBEL,
              VKONT       TYPE DFKKOP-VKONT,
              BETRH       TYPE DFKKOP-BETRH,
          END OF GWA_DFKKOP_INACTIVE_ARR,
          GT_DFKKOP_INACTIVE_ARR LIKE TABLE OF GWA_DFKKOP_INACTIVE_ARR
            INITIAL SIZE 0,
          BEGIN OF GWA_ETTIFN,
            ANLAGE    TYPE ETTIFN-ANLAGE,
            OPERAND   TYPE ETTIFN-OPERAND,
            WERT1     TYPE ETTIFN-WERT1,
          END OF GWA_ETTIFN,
          GT_ETTIFN LIKE SORTED TABLE OF GWA_ETTIFN
            WITH NON-UNIQUE KEY ANLAGE OPERAND INITIAL SIZE 0,
          BEGIN OF GWA_DBERDLB,
            PRINTDOC     TYPE DBERDLB-PRINTDOC,
            BILLDOC      TYPE DBERDLB-BILLDOC,
            BILLDOCLINE  TYPE DBERDLB-BILLDOCLINE,
            NETTOBTR     TYPE DBERDLB-NETTOBTR,
          END OF GWA_DBERDLB,
          GT_DBERDLB LIKE TABLE OF GWA_DBERDLB INITIAL SIZE 0,
          BEGIN OF GWA_DBERCHZ1_BILL,
            BELNR       TYPE DBERCHZ1-BELNR,
            BELZEILE    TYPE DBERCHZ1-BELZEILE,
            TVORG       TYPE DBERCHZ1-TVORG,
          END   OF GWA_DBERCHZ1_BILL,
          GT_DBERCHZ1_BILL LIKE TABLE OF GWA_DBERCHZ1_BILL INITIAL SIZE 0,
          BEGIN OF GWA_BILLDOC,
            PRINTDOC TYPE ERDK-OPBEL,
            BILLDOC TYPE DBERDLB-BILLDOC,
          END OF GWA_BILLDOC,
          GT_BILLDOC LIKE TABLE OF GWA_BILLDOC INITIAL SIZE 0,
          BEGIN OF GWA_DBERCHV,
            BELNR    TYPE DBERCHV-BELNR,
            OPERAND  TYPE DBERCHV-OPERAND,
            EZ_ABRMENGE TYPE DBERCHV-EZ_ABRMENGE,
            ABLESGR  TYPE DBERCHV-ABLESGR,
            ABLESGRV TYPE DBERCHV-ABLESGRV,
          END OF GWA_DBERCHV,
          GT_DBERCHV LIKE TABLE OF GWA_DBERCHV INITIAL SIZE 0,
          BEGIN OF GWA_DFKKOP_ARREAR,
            OPBEL     TYPE DFKKOP-OPBEL,
            VKONT     TYPE DFKKOP-VKONT,
            HVORG     TYPE DFKKOP-HVORG,
            TVORG     TYPE DFKKOP-TVORG,
            BUDAT     TYPE DFKKOP-BUDAT,
            BETRH     TYPE DFKKOP-BETRH,
            AUGDT     TYPE DFKKOP-AUGDT,
            XBLNR     TYPE DFKKOP-XBLNR,
          END OF GWA_DFKKOP_ARREAR,
          GT_DFKKOP_ARREAR LIKE TABLE OF GWA_DFKKOP_ARREAR INITIAL SIZE 0,
          BEGIN OF GWA_MASTER_DATA,
            SLNO(4)      TYPE C,
            IND_SECTOR   TYPE TB024-IND_SECTOR,
            TEXTLONG     TYPE TB024-TEXTLONG,
            AC_CODE      TYPE TFK033D-FUN01,
          END   OF GWA_MASTER_DATA,
          GT_MASTER_DATA LIKE TABLE OF GWA_MASTER_DATA INITIAL SIZE 0,
    **      internal table for final prepared data
          BEGIN OF GWA_FINAL_DATA,
              SLNO(4) TYPE C,
              IND_SECTOR      TYPE TB024-IND_SECTOR, " for testing
              INDUSTRY        TYPE TB024-TEXTLONG,
              AC_CODE         TYPE TFK033D-FUN01,
    *    *for urban partners
              UPARTNER        TYPE I , "(6) type n,
              UBAD_METER      TYPE I, "(4) type n,
              UINACTIVE       TYPE I,
              ULOAD(8)        TYPE P DECIMALS 2,
              UUNITS(8)       TYPE P DECIMALS 2,
              UDEMANDS(8)     TYPE P DECIMALS 2,
              UARREARS(8)     TYPE P DECIMALS 2, "FKKMAKO-Msalm,
              UINACT_ARR(8)   TYPE P DECIMALS 2,
              BLANK(10)       TYPE C,
    *    *for rural partners
              RPARTNER        TYPE I , "(6) type n,
              RBAD_METER      TYPE I , "(4) type n,
              RINACTIVE       TYPE I,
              RLOAD(8)        TYPE P DECIMALS 2,
              RUNITS(8)       TYPE P DECIMALS 2,
              RDEMANDS(8)     TYPE P DECIMALS 2,
              RARREARS(8)     TYPE P DECIMALS 2,
              RINACT_ARR(8)   TYPE P DECIMALS 2,
          END OF GWA_FINAL_DATA,
          GT_FINAL_DATA LIKE TABLE OF GWA_FINAL_DATA INITIAL SIZE 0,
          BEGIN OF GWA_MANUAL_DATA,
            COL_1(5)        TYPE C,
            COL_2(10)       TYPE C,
            COL_3(40)       TYPE C,
            COL_4(40)       TYPE C,
            COL_5(10)       TYPE C,
            COL_6(19)       TYPE C,
            COL_7(19)       TYPE C,
            COL_8(19)       TYPE C,
            COL_9(19)       TYPE C,
            COL_10(19)      TYPE C,
            COL_11(19)      TYPE C,
            COL_12(10)      TYPE C,
            COL_13(19)      TYPE C,
            COL_14(19)      TYPE C,
            COL_15(19)      TYPE C,
            COL_16(19)      TYPE C,
            COL_17(19)      TYPE C,
            COL_18(19)      TYPE C,
          END   OF GWA_MANUAL_DATA,
          GT_MANUAL_DATA LIKE TABLE OF GWA_MANUAL_DATA INITIAL SIZE 0.
    ** Variables for grand total of all heads.
    DATA : GV_T_UPART        TYPE I,
           GV_T_RPART        TYPE I,
           GV_T_RINACTIVE    TYPE I,
           GV_T_UINACTIVE    TYPE I,
           GV_UDEF_MTR       TYPE I,
           GV_RDEF_MTR       TYPE I,
           GV_UCON_LOAD(16)  TYPE P DECIMALS 2,
           GV_RCON_LOAD(16)  TYPE P DECIMALS 2,
           GV_UUNITS(16)     TYPE P DECIMALS 2,
           GV_RUNITS(16)     TYPE P DECIMALS 2,
           GV_UDEMAND(16)    TYPE P DECIMALS 2,
           GV_RDEMAND(16)    TYPE P DECIMALS 2,
           GV_UARREAR(16)    TYPE P DECIMALS 2,
           GV_RARREAR(16)    TYPE P DECIMALS 2,
           GV_UINACT_ARR(16) TYPE P DECIMALS 2,
           GV_RINACT_ARR(16) TYPE P DECIMALS 2,
           GV_U_SD_DMD(16)       TYPE P DECIMALS 2,
           GV_R_SD_DMD(16)       TYPE P DECIMALS 2,
           GV_U_SD_ARR(16)       TYPE P DECIMALS 2,
           GV_R_SD_ARR(16)       TYPE P DECIMALS 2,
           GV_UR_PART         TYPE I,
           GV_UR_DEF_MTR      TYPE I,
           GV_UR_CON_LOAD(16) TYPE P DECIMALS 2,
           GV_UR_UNITS(16)    TYPE P DECIMALS 2,
           GV_UR_DEMAND(16)   TYPE P DECIMALS 2,
           GV_UR_ARREARS(16)  TYPE P DECIMALS 2,
           GV_LOWDATE         TYPE SY-DATUM,
           GV_HIGHDATE        TYPE SY-DATUM,
           GV_YEAR   LIKE DBERCHV-EZ_ABRMENGE,
           GV_MONTH  LIKE DBERCHZ1-V_ABRMENGE,
           GV_MNTH_NAME TYPE T247-KTX.
    DATA:
    **total meter rent
          GV_UTOTMETERRENT TYPE P LENGTH 16 DECIMALS 2,
          GV_RTOTMETERRENT TYPE P LENGTH 16 DECIMALS 2,
    **for total surcharge
          GV_UTOTSURCHRG TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
          GV_RTOTSURCHRG TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
    **for total ED
          GV_UTOTED TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
          GV_RTOTED TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
    **for total ED Cess
          GV_UTOTEDCESS TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
          GV_RTOTEDCESS TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
    **for total other misc rev
          GV_UTOTMISCREV  TYPE P LENGTH 16 DECIMALS 2,
          GV_RTOTMISCREV TYPE P LENGTH 16 DECIMALS 2,
    **for total ED of Free agricultural pump
          GV_RTOTEDAGRI TYPE P LENGTH 16 DECIMALS 2,
          GV_UTOTEDAGRI TYPE P LENGTH 16 DECIMALS 2,
    **for ED cess of Free agriculture pump
          GV_RTOTCESSAGRI TYPE P LENGTH 16 DECIMALS 2,
          GV_UTOTCESSAGRI TYPE P LENGTH 16 DECIMALS 2,
    ***data for selection screen data validation
          GV_GSBER TYPE EVER-GSBER,
          GV_COKEY TYPE EVER-COKEY,
          DYFIELDS LIKE DYNPREAD OCCURS 0 WITH HEADER LINE,
          GT_INTERN_DATA TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
    RANGES: R_COKEY FOR TECOKT-COKEY.
    AT SELECTION-SCREEN.
    AT SELECTION-SCREEN ON SO_GSBER.
      IF NOT SO_GSBER-LOW IS INITIAL.
        SELECT SINGLE GSBER FROM TGSBT INTO GT_TGSBT-GSBER WHERE
        GSBER = SO_GSBER-LOW.
        IF SY-SUBRC <> 0.
          MESSAGE E007.
        ENDIF.
      ENDIF.
      IF NOT SO_GSBER-HIGH IS INITIAL .
        SELECT SINGLE GSBER FROM TGSBT INTO GT_TGSBT-GSBER WHERE
        GSBER = SO_GSBER-HIGH.
        IF SY-SUBRC <> 0.
          MESSAGE E007.
        ENDIF.
      ENDIF.
    AT SELECTION-SCREEN ON P_BMNTH.
    **check the validity of Billing month format and for valid billing month
      IF P_BMNTH CO '0123456789/'.
        IF P_BMNTH CP '++++/++'.
          IF P_BMNTH+5(2) > 12.
            MESSAGE E002 WITH 'from'.
          ENDIF.
    ** current year is less than year entered
          IF SY-DATUM(4) < P_BMNTH(4).
            MESSAGE E003 WITH 'from'.
          ELSEIF SY-DATUM(4) = P_BMNTH(4).
    ** month in future
            IF SY-DATUM+4(2) < P_BMNTH+5(2).
              MESSAGE E004 WITH 'from'.
            ENDIF.
          ENDIF.
        ELSE.
          MESSAGE E001 WITH 'from'.
        ENDIF.
      ELSE.
    **  entry have some invalid char
        MESSAGE E010.
      ENDIF.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_COKEY-LOW.
    **for geting the CO account assigment key of the entered Business area
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM DIVISON_DATA_GET CHANGING SO_COKEY-LOW.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_COKEY-HIGH.
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM DIVISON_DATA_GET CHANGING SO_COKEY-HIGH.
    *AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
    *  REFRESH: IT_TAB.
    ***Opens File Open Dialog Box for selecting input file.
    *  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    *    EXPORTING
    *      WINDOW_TITLE     = 'Select File'
    *      DEFAULT_FILENAME = '*.xls'
    *      MULTISELECTION   = ' '
    *    CHANGING
    *      FILE_TABLE       = IT_TAB
    *      RC               = GD_SUBRC.
    *  LOOP AT IT_TAB INTO P_FILE.
    **    so_fpath-sign = 'I'.
    **    so_fpath-option = 'EQ'.
    **    append so_fpath.
    *  ENDLOOP.
    AT SELECTION-SCREEN OUTPUT.
      LOOP AT SCREEN.
        IF SCREEN-GROUP1 = 'ACT'.
          IF P_INCLUD = ' '.
            SCREEN-INPUT = '0'.
          ELSE.
            SCREEN-INPUT = '1'.
          ENDIF.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.
    *              End of Selection screen processing
    TOP-OF-PAGE.
      DATA : LV_TEXT(70) TYPE C.
      FORMAT INTENSIFIED OFF.
      WRITE:/50 'CHHATTISGARH STATE ELECTRICITY BOARD',
            /42 'R-15 REPORT FOR LT CONSUMERS FOR THE MONTH OF',
                 GV_MNTH_NAME NO-GAP,'-' NO-GAP, P_BMNTH(4) NO-GAP,
            180 'PAGE-NO. -', SY-PAGNO LEFT-JUSTIFIED.
      SKIP.
      WRITE:/2 'RAO', 15 ':'.
      LOOP AT GT_TGSBT WHERE GSBER IN SO_GSBER.
        IF STRLEN( LV_TEXT ) > 60.
          WRITE: 16 LV_TEXT, / ''.
          CLEAR LV_TEXT.
        ENDIF.
        CONCATENATE LV_TEXT GT_TGSBT-GSBER '-' GT_TGSBT-GTEXT
          INTO LV_TEXT SEPARATED BY SPACE.
      ENDLOOP.
      WRITE: 16 LV_TEXT.
      CLEAR LV_TEXT.
      WRITE: /2 'Division',15 ':'.
      LOOP AT GT_TECOKT.
        IF STRLEN( LV_TEXT ) > 60.
          WRITE: 16 LV_TEXT, /.
          CLEAR LV_TEXT.
        ENDIF.
        CONCATENATE LV_TEXT GT_TECOKT-COKEY '-' GT_TECOKT-LTEXT
          INTO LV_TEXT SEPARATED BY SPACE.
      ENDLOOP.
      WRITE: 16 LV_TEXT.
      CLEAR LV_TEXT.
      WRITE: /2 'Group',15 ':'.
      LOOP AT GT_TE422 .
        IF STRLEN( LV_TEXT ) > 60.
          WRITE: 16 LV_TEXT, /.
          CLEAR LV_TEXT.
        ENDIF.
        CONCATENATE LV_TEXT GT_TE422-TERMSCHL '-' GT_TE422-TERMTEXT
          INTO LV_TEXT SEPARATED BY SPACE.
      ENDLOOP.
      WRITE: 16 LV_TEXT.
      CLEAR LV_TEXT.
    **legends
    *  write :/ text-028, 15 ':',16 text-029.
    **now write the headings on every page
      SET LEFT SCROLL-BOUNDARY COLUMN 50.
      FORMAT COLOR 1 ON.
      WRITE :/1(244) SY-ULINE.
      WRITE :/1 SY-VLINE,6 SY-VLINE,50 SY-VLINE, 58 SY-VLINE, 59
                '<----------------------------------',
                'U R B A N   A R E A',
                '----------------------------------->'.
      WRITE : 151 SY-VLINE, 152
                  '<----------------------------------',
                  'R U R A L   A R E A',
                  '----------------------------------->',
              244 SY-VLINE.
      WRITE :/1 SY-VLINE,
              2 'Slno',
              6 SY-VLINE,
              7 'Revenue Category',
              50 SY-VLINE,
              51 'A/C',
              58 SY-VLINE,
              59 'Cons-',
              67 SY-VLINE,
              68 'Deff',
              75 SY-VLINE,
              76 'Conn',
              89 SY-VLINE,
              90 'Sold',
              108 SY-VLINE,
              109 'Demand',
              129 SY-VLINE,
              130 'Previous',
              151 SY-VLINE,
              152 'Cons-',
              160 SY-VLINE,
              161 'Deff',
              168 SY-VLINE,
              169 'Conn',
              182 SY-VLINE,
              183 'Sold',
              201 SY-VLINE,
              202 'Demand',
              222 SY-VLINE,
              223 'Previous',
              244 SY-VLINE.
      WRITE :/1 SY-VLINE,
              6 SY-VLINE,
              50 SY-VLINE,
              51 'Code',
              58 SY-VLINE,
              59 'umers',
              67 SY-VLINE,
              68 'mtrs',
              75 SY-VLINE,
              76 'Load-KW',
              89 SY-VLINE,
              90 'Units',
              108 SY-VLINE,
              129 SY-VLINE,
              130 'Arrear',
              151 SY-VLINE,
              152 'umers',
              160 SY-VLINE,
              161 'mtrs',
              168 SY-VLINE,
              169 'Load-KW',
              182 SY-VLINE,
              183 'Units',
              201 SY-VLINE,
              222 SY-VLINE,
              223 'Arrear',
              244 SY-VLINE.
      WRITE :/1(244) SY-ULINE.
      SET LEFT SCROLL-BOUNDARY COLUMN 59.
    *              Start of Data Selection
    START-OF-SELECTION.
      SELECT GSBER GTEXT INTO TABLE GT_TGSBT FROM TGSBT
        WHERE SPRAS = SY-LANGU.
      SELECT IND_SECTOR TEXTLONG INTO TABLE GT_TB024
        FROM TB024 WHERE SPRAS = SY-LANGU
                     AND ( ( IND_SECTOR >= '01' AND IND_SECTOR <= '55' )
                      OR ( IND_SECTOR = '57' OR IND_SECTOR = '58'
                      OR IND_SECTOR = '94' ) ).
      SELECT SINGLE KTX INTO GV_MNTH_NAME FROM T247
       WHERE MNR = P_BMNTH+5(2) AND SPRAS = SY-LANGU.
    ***master data selection
      PERFORM CONSUMER_DATA_SELECTION.
    *&--Get Meter Status Connected Load & MF for each installation
      PERFORM OPERAND_DATA_SELECTION.
    *&--Get the Demand corresponding to each Print documents selected
      PERFORM BILLING_DATA_SELECTION.
    *&--Get the arrears corresponding to each Print document selected
      PERFORM ARREAR_DATA_SELECTION.
    *&--To include Mannual R-15 into computerized R-15.
      IF P_INCLUD = 'X'.
        OPEN DATASET P_FILE FOR INPUT IN TEXT MODE ENCODING DEFAULT.
        DO.
          READ DATASET P_FILE INTO GWA_MANUAL_DATA.
          IF SY-SUBRC <> 0.
            EXIT.
          ELSE.
            APPEND GWA_MANUAL_DATA TO GT_MANUAL_DATA.
          ENDIF.
        ENDDO.
        CLOSE DATASET P_FILE.
        DELETE DATASET P_FILE.
      ENDIF.
    END-OF-SELECTION.
    *              End of data Selection
    *            Start of Data Processing
      PERFORM FINAL_TABLE_PREPARE.
      PERFORM FINAL_OUTPUT_PREPARE.
      PERFORM FINAL_OUTPUT_DISPLAY.
    *              End of Data Processing
      PERFORM FREE_MEMORY.
    *&      Form  master_data_selection
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM CONSUMER_DATA_SELECTION .
      DATA: LV_MAX_DAYS TYPE I,
            LV_LAST_DAY(2) TYPE C,
            LV_IMONTH TYPE I,
            LV_IYEAR TYPE I,
            LV_BMNTH TYPE ZERDK_ERCHC-V_ABRMENGE,
            LV_BYEAR TYPE ZERDK_ERCHC-EZ_ABRMENGE,
    *&----Temporary tables for global internal tables.
            LT_DBERCHZ1_TEMP LIKE TABLE OF GWA_DBERCHZ1,
            LWA_DBERCHZ1_TEMP LIKE GWA_DBERCHZ1,
            LT_ERCH LIKE TABLE OF GWA_ERCH,
            LWA_ERCH LIKE GWA_ERCH,
            LT_EVER LIKE TABLE OF GWA_EVER.
    *DATA: lt_ever_fkkvkp like gwa_ever_eanlh_fkkvkp occurs 0.
      LV_IMONTH = P_BMNTH+5(2).
      LV_IYEAR  = P_BMNTH(4).
      LV_BMNTH  = P_BMNTH+5(2).
      LV_BYEAR  = P_BMNTH(4).
      CALL FUNCTION 'RTP_US_API_MAX_DAYS_IN_MONTH'
        EXPORTING
          I_DATE_MONTH = LV_IMONTH
          I_DATE_YEAR  = LV_IYEAR
        IMPORTING
          E_MAX_DAYS   = LV_MAX_DAYS.
      LV_LAST_DAY = LV_MAX_DAYS.
      CONCATENATE P_BMNTH(4) P_BMNTH+5(2)  LV_LAST_DAY INTO GV_HIGHDATE.
      IF SO_GPART[] IS INITIAL.
        SELECT VKONTO ANLAGE ABRSPERR
        INTO TABLE GT_EVER
        FROM EVER
        WHERE GSBER IN SO_GSBER
          AND COKEY IN SO_COKEY
          AND   BUKRS = 'CSEB'
          AND   SPARTE = '01'
          AND   KOFIZ  = '02'.
    **get installation no from contract data and check biling class in eanlh
        IF GT_EVER[] IS INITIAL.
    MESSAGE 'No Business Partner exist for entered selection data' TYPE 'A'.
        ENDIF.
        IF NOT GT_EVER[] IS INITIAL.
          SELECT VKONT KTOKL INTO TABLE GT_FKKVKP
            FROM FKKVKP
            FOR ALL ENTRIES IN GT_EVER
            WHERE VKONT = GT_EVER-VKONT
            AND   GPART IN SO_GPART.
          IF GT_FKKVKP[] IS INITIAL.
         MESSAGE 'No Business Partner exist for entered Selection' TYPE 'A'.
          ENDIF.
        ENDIF.
      ELSE.
        SELECT VKONT KTOKL INTO TABLE GT_FKKVKP
          FROM FKKVKP
          WHERE GPART IN SO_GPART.
        IF NOT GT_FKKVKP[] IS INITIAL.
          SELECT VKONTO ANLAGE INTO TABLE GT_EVER
            FROM EVER
            FOR ALL ENTRIES IN GT_FKKVKP
            WHERE VKONTO  EQ GT_FKKVKP-VKONT
              AND GSBER   IN SO_GSBER
              AND COKEY   IN SO_COKEY
              AND BUKRS   EQ 'CSEB'
              AND SPARTE  EQ '01'
              AND KOFIZ   EQ '02'.
        ENDIF.
      ENDIF.
      IF GT_EVER[] IS INITIAL AND GT_FKKVKP[] IS INITIAL.
        MESSAGE 'No Business Partner exist for entered Selection' TYPE 'A'.
      ENDIF.
      SELECT ANLAGE BRANCHE INTO TABLE GT_EANLH
        FROM EANLH
        FOR ALL ENTRIES IN GT_EVER
        WHERE ANLAGE EQ GT_EVER-ANLAGE
        AND   ABLEINH IN SO_MRU
        AND   AKLASSE EQ'0002'
        AND   AB <= GV_HIGHDATE
        AND   BIS => GV_HIGHDATE.
      IF GT_EANLH[] IS INITIAL.
        MESSAGE 'No Business Partner exist for entered Selection' TYPE 'A'.
      ENDIF.
      SORT : GT_EVER BY VKONT ANLAGE,
             GT_FKKVKP BY VKONT,
             GT_EANLH BY ANLAGE.
      LOOP AT GT_EANLH INTO GWA_EANLH.
        READ TABLE GT_EVER INTO GWA_EVER WITH KEY ANLAGE = GWA_EANLH-ANLAGE.
        IF SY-SUBRC = 0.
          READ TABLE GT_FKKVKP INTO GWA_FKKVKP
            WITH KEY VKONT = GWA_EVER-VKONT.
          IF SY-SUBRC = 0.
            GWA_EVER_EANLH_FKKVKP-VKONT = GWA_EVER-VKONT.
            GWA_EVER_EANLH_FKKVKP-ANLAGE = GWA_EVER-ANLAGE.
            GWA_EVER_EANLH_FKKVKP-ABRSPERR = GWA_EVER-ABRSPERR.
            GWA_EVER_EANLH_FKKVKP-BRANCHE  = GWA_EANLH-BRANCHE.
            GWA_EVER_EANLH_FKKVKP-KTOKL    = GWA_FKKVKP-KTOKL.
            APPEND GWA_EVER_EANLH_FKKVKP TO GT_EVER_EANLH_FKKVKP.
            CLEAR GWA_EVER_EANLH_FKKVKP.
          ENDIF.
        ENDIF.
      ENDLOOP.
      IF GT_EVER_EANLH_FKKVKP[] IS INITIAL.
        MESSAGE 'No Business Partner exist for Selection Data' TYPE 'A'.
      ENDIF.
    *&----get all the billdocuments for the busines partner's contract
    *&----account
      SELECT BELNR VKONT INTO TABLE GT_ERCH
        FROM ERCH
        FOR ALL ENTRIES IN GT_EVER_EANLH_FKKVKP
        WHERE VKONT EQ GT_EVER_EANLH_FKKVKP-VKONT.
    *&----get the BILL MONTH & BILL YEAR FOR THE BILLDOCUMENTS.
      IF NOT GT_ERCH[] IS INITIAL.
        SELECT BELNR EIN01 V_ABRMENGE INTO TABLE GT_DBERCHZ1
          FROM DBERCHZ1
          FOR ALL ENTRIES IN GT_ERCH
          WHERE BELNR EQ GT_ERCH-BELNR
            AND AKLASSE = '0002'
            AND ( ( EIN01 = 'BILL_MNTH1'
            AND V_ABRMENGE = P_BMNTH+5(2) )
            OR ( EIN01 = 'BILL_YEAR1'
            AND V_ABRMENGE = P_BMNTH(4) ) ).
    *&---- GET THOSE BILL DOCUMENTS WHICH ARE FOR THE ENTERED BILL MONTH
        IF NOT GT_DBERCHZ1[] IS INITIAL.
          LOOP AT GT_DBERCHZ1 INTO GWA_DBERCHZ1 WHERE EIN01 = 'BILL_MNTH1'
                                              AND V_ABRMENGE = P_BMNTH+5(2).
            READ TABLE GT_DBERCHZ1 INTO LWA_DBERCHZ1_TEMP
            WITH KEY BELNR = GWA_DBERCHZ1-BELNR EIN01 = 'BILL_YEAR1'
            V_ABRMENGE = P_BMNTH(4).
            IF SY-SUBRC = 0.
              APPEND LWA_DBERCHZ1_TEMP TO LT_DBERCHZ1_TEMP.
              CLEAR: LWA_DBERCHZ1_TEMP.
            ENDIF.
          ENDLOOP.
          GT_DBERCHZ1[] = LT_DBERCHZ1_TEMP[].
        ENDIF.
      ENDIF.
    *&---NOW FIND THE PRINT DOCUMENTS FOR THE SELECTED BILLDOCUMENTS.
      IF NOT GT_DBERCHZ1[] IS INITIAL.
        SELECT BELNR OPBEL BUDAT FROM ERCHC
          INTO TABLE GT_ERCHC
          FOR ALL ENTRIES IN GT_DBERCHZ1
          WHERE BELNR = GT_DBERCHZ1-BELNR
            AND INTOPBEL EQ SPACE
            AND SIMULATED EQ SPACE
            AND INVOICED EQ 'X'.
      ENDIF.
      IF NOT GT_ERCHC[] IS INITIAL.
        LOOP AT GT_ERCHC INTO GWA_ERCHC.
          READ TABLE GT_ERCH INTO GWA_ERCH WITH KEY BELNR = GWA_ERCHC-BELNR.
          IF SY-SUBRC = 0.
            APPEND GWA_ERCH TO LT_ERCH.
            CLEAR GWA_ERCH.
          ENDIF.
          CLEAR GWA_ERCHC.
        ENDLOOP.
      ENDIF.
      GT_ERCH[] = LT_ERCH[].
      FREE: LT_ERCH, LT_DBERCHZ1_TEMP,LWA_DBERCHZ1_TEMP.
      LOOP AT GT_EVER_EANLH_FKKVKP INTO GWA_EVER_EANLH_FKKVKP.
    *  READ TABLE gt_erdk_erchc INTO gwa_erdk_erchc
    *  WITH KEY vkont = gwa_ever_eanlh_fkkvkp-vkont.
        READ TABLE GT_ERCH INTO GWA_ERCH
          WITH KEY VKONT = GWA_EVER_EANLH_FKKVKP-VKONT.
        IF SY-SUBRC <> 0.
          IF GWA_EVER_EANLH_FKKVKP-ABRSPERR = SPACE.
            GWA_EVER_EANLH_FKKVKP-ABRSPERR = '01'.
            MODIFY GT_EVER_EANLH_FKKVKP FROM GWA_EVER_EANLH_FKKVKP
              TRANSPORTING ABRSPERR.
            APPEND GWA_EVER_EANLH_FKKVKP TO GT_EVER_EANLH_FKKVKP_INACT.
          ENDIF.
        ELSE.
          IF GWA_EVER_EANLH_FKKVKP-ABRSPERR <> SPACE.
            GWA_EVER_EANLH_FKKVKP-ABRSPERR = SPACE.
            MODIFY GT_EVER_EANLH_FKKVKP FROM GWA_EVER_EANLH_FKKVKP
              TRANSPORTING ABRSPERR.
          ENDIF.
        ENDIF.
        CLEAR GWA_ERCH.
      ENDLOOP.
      REFRESH GT_TECOKT[].
      IF NOT SO_COKEY[] IS INITIAL.
        SELECT COKEY LTEXT INTO TABLE GT_TECOKT
        FROM TECOKT
        WHERE COKEY IN SO_COKEY
          AND SPRAS = SY-LANGU .
    *    %_HINTS ORACLE '("TECOKT","TECOKT~1")'.
      ENDIF.
      IF NOT SO_MRU[] IS INITIAL.
        SELECT TERMSCHL TERMTEXT INTO TABLE GT_TE422
          FROM TE422
          WHERE TERMSCHL IN SO_MRU.
      ENDIF.
    *FREE lt_ever_fkkvkp[].
    ENDFORM.                    " consumer_data_selection
    *&      Form  Operand_data_selection
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM OPERAND_DATA_SELECTION .
      DATA: LT_EVER_EANLH_FKKVKP_ACT LIKE TABLE OF GWA_EVER_EANLH_FKKVKP.
    *  SORT gt_ever_eanlh_fkkvkp BY vkont.
      CHECK NOT GT_EVER_EANLH_FKKVKP[] IS INITIAL.
    **now depending upon the billing month check the time slice date
    **the last date of the billing month or the range of billing month
    *should fall in between the time slice of the installation
    ** billing month to is space
    **now select operands for processed installation
      LT_EVER_EANLH_FKKVKP_ACT[] = GT_EVER_EANLH_FKKVKP[].
      DELETE LT_EVER_EANLH_FKKVKP_ACT WHERE ABRSPERR NE SPACE.
      IF NOT LT_EVER_EANLH_FKKVKP_ACT[] IS INITIAL.
        SELECT ANLAGE OPERAND WERT1
        FROM ETTIFN
        INTO TABLE GT_ETTIFN
        FOR ALL ENTRIES IN LT_EVER_EANLH_FKKVKP_ACT
        WHERE ANLAGE = LT_EVER_EANLH_FKKVKP_ACT-ANLAGE
          AND OPERAND IN ('MTR_STS','CONN_LOAD','LOAD_CODE','KWH_MF')
          AND ( AB <= GV_HIGHDATE AND BIS >= GV_HIGHDATE ).
    *    %_HINTS ORACLE '("ETTIFN","ETTIFN~003")'.
      ENDIF.
    ENDFORM.                    " Operand_data_selection
    *&      Form  billing_data_selection
    *&------------------------------

    Hi,
    Please do run time analysis as Rob correctly mentioned or do SQL trace(ST05) to find where the program is consuming more time.
    Lanka

  • F4IF_INT_TABLE_VALUE_REQUEST with Maximum Number of Hits.

    Hi, all,
    Currently i'm doing a customized F4 help for a selection-option filed on a report by using the function module 'F4IF_INT_TABLE_VALUE_REQUEST'. When i execute my report and go to the selection-option filed just now i created and press F4, i can see a list of data in my search help. However when i go to the tab 'Restrictions', i can't see the 'Maximum No. of Hits' option.
    So anyone have any idea about this? or how to make the 'Maximum No. of Hits' box come out in my F4 help?
    Thanks in advance.

    My full code :-
    TABLES : BSIK , DDSHF4CTRL .
    DATA: BEGIN OF T_ZUONR OCCURS 0,
           ZUONR TYPE BSIK-ZUONR,
          END OF T_ZUONR.
    SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME  TITLE TEXT-001.
    SELECT-OPTIONS   : ASGN_CK FOR BSIK-ZUONR.
    SELECTION-SCREEN : END OF BLOCK B1.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR ASGN_CK-LOW.
      SELECT ZUONR FROM BSIK INTO TABLE T_ZUONR.
      SORT T_ZUONR BY ZUONR.
      DELETE ADJACENT DUPLICATES FROM T_ZUONR.
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
          RETFIELD         = 'DYNR'
          DYNPPROG         = SY-REPID
          DYNPNR           = SY-DYNNR
          VALUE_ORG        = 'S'
          CALLBACK_PROGRAM = SY-REPID
          CALLBACK_FORM    = 'F4CALLBACK'
        TABLES
          VALUE_TAB        = T_ZUONR.
         RETURN_TAB       = T_ZUONR.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR ASGN_CK-HIGH.
      SELECT ZUONR FROM BSIK INTO TABLE T_ZUONR.
      SORT T_ZUONR BY ZUONR.
      DELETE ADJACENT DUPLICATES FROM T_ZUONR.
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
          RETFIELD         = 'DYNR'
          DYNPPROG         = SY-REPID
          DYNPNR           = SY-DYNNR
          VALUE_ORG        = 'S'
          CALLBACK_PROGRAM = SY-REPID
          CALLBACK_FORM    = 'F4CALLBACK'
        TABLES
          VALUE_TAB        = T_ZUONR.
         RETURN_TAB       = T_ZUONR.
      PERFORM F4CALLBACK.
    *&      Form  F4CALLBACK
          text
    -->  p1        text
    <--  p2        text
    FORM F4CALLBACK.
    *TABLES   RECORD_TAB  STRUCTURE SEAHLPRES
    *CHANGING SHLP        TYPE SHLP_DESCR
            CALLCONTROL LIKE DDSHF4CTRL.
      DATA :  SHLP        TYPE SHLP_DESCR,
              CALLCONTROL LIKE DDSHF4CTRL.
      SHLP-INTDESCR-DIALOGTYPE = 'C'.             " Dialog type ( Dialog with value restriction )
      CALLCONTROL-NO_MAXDISP   = '500'.           " For getting Maximum no of hits tab
    ENDFORM.                    " F4CALLBACK
    *But it is not working, Please help. There is some problem with the Perform F4CALLBACK Module. Please help.

  • F4IF_INT_TABLE_VALUE_REQUEST - No of hits

    Hi,
    I am passing an internal table of more than 500 values to the function module F4IF_INT_TABLE_VALUE_REQUEST, but it's automatically restricting this to 500 entries. Kindly let me know, how I can customize this restriction to the value I need.
    Thanks and Regards,
    Ashok

    Hi,
    The actual problem is that only: I don't see that no of hits option when I click the downward arrow. Pls find the code that I have used to call this function module.
      select aufnr into table lt_aufnr
                   from aufk
                   where auart = 2000
                   and astkz = 'X'.
      if sy-subrc = 0.
      call function 'DYNP_GET_STEPL'
       IMPORTING
         POVSTEPL              = lv_stepl
       EXCEPTIONS
         STEPL_NOT_FOUND       = 1
         OTHERS                = 2
      if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
             WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      endif.
    *call function 'HELP_VALUES_GET_WITH_TABLE'
    EXPORTING
      FIELDNAME                           = 'AUFNR'
      TABNAME                             = 'AUFK'
    IMPORTING
      SELECT_VALUE                        = ZSDYN_ZCHECK2-AUFNR
    tables
       fields                              = lt_fields[]
       valuetab                            = lt_aufnr[]
    EXCEPTIONS
      FIELD_NOT_IN_DDIC                   = 1
      MORE_THEN_ONE_SELECTFIELD           = 2
      NO_SELECTFIELD                      = 3
      OTHERS                              = 4
    *if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    *endif.
        call function 'F4IF_INT_TABLE_VALUE_REQUEST'
             exporting
                  retfield        = 'AUFNR'
                  pvalkey         = ' '
                  dynpprog        = lv_repid
                  dynpnr          = lv_dynnr
                  dynprofield     = 'ZSDYN_ZCHECK2-AUFNR'
                  stepl           = lv_stepl
             tables
                  value_tab       = lt_aufnr[]
                  field_tab       = lt_fields[]
             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.

  • F4IF_INT_TABLE_VALUE_REQUEST and search in fields

    Hi Friends,
    I want to make a search operation with F4IF_INT_TABLE_VALUE_REQUEST. My code is;
      DATA:
      BEGIN OF HELP_LIST OCCURS 0,
             ID LIKE ZLIST-ID,
             NAME LIKE ZLIST-NAME,
            SNAME LIKE ZLIST-SNAME,
      END OF HELP_LIST,
      FIELD_TAB LIKE DFIES OCCURS 0 WITH HEADER LINE.
      CLEAR FIELD_TAB.
      FIELD_TAB-TABNAME = 'HELP_LIST'.
      FIELD_TAB-FIELDNAME = 'ID'.
      FIELD_TAB-POSITION = 0.
      FIELD_TAB-OFFSET = 0.
      FIELD_TAB-REPTEXT =  'ID'.
      FIELD_TAB-INTLEN = 9.
      FIELD_TAB-OUTPUTLEN = 9.
      APPEND FIELD_TAB.
      CLEAR FIELD_TAB.
      FIELD_TAB-TABNAME = 'HELP_LIST'.
      FIELD_TAB-FIELDNAME = 'NAME'.
      FIELD_TAB-POSITION = 1.
      FIELD_TAB-OFFSET = 9.
      FIELD_TAB-REPTEXT =  'Name'.
      FIELD_TAB-INTLEN = 50.
      FIELD_TAB-OUTPUTLEN = 50.
      APPEND FIELD_TAB.
    CLEAR FIELD_TAB.
      FIELD_TAB-TABNAME = 'HELP_LIST'.
      FIELD_TAB-FIELDNAME = 'SNAME'.
      FIELD_TAB-POSITION = 1.
      FIELD_TAB-OFFSET = 9.
      FIELD_TAB-REPTEXT =  'Surname'.
      FIELD_TAB-INTLEN = 50.
      FIELD_TAB-OUTPUTLEN = 50.
      APPEND FIELD_TAB.
      SELECT ID NAME SNAME
      FROM ZLIST
      INTO TABLE HELP_LIST.
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
           EXPORTING
                RETFIELD        = 'ID'
                VALUE_ORG       = 'S'
                DYNPPROG        = 'ZPROJECT'
                DYNPNR          = '0202'
                DYNPROFIELD     = 'TMP_ID'
                WINDOW_TITLE    = 'Search'
           TABLES
                VALUE_TAB       = HELP_LIST
                FIELD_TAB       = FIELD_TAB
           EXCEPTIONS
                PARAMETER_ERROR = 1
                NO_VALUES_FOUND = 2
                OTHERS          = 3.
    Respect to above code, I can list my values. And when I want to try 'H*' for Name field, I am getting error as : "Not possible to restrict with search pattern here"
    But, If I don't pass FIELD_TAB table, I don't get error. I need to pass this table for another reason. But also I need to search for name and surname fields.
    How can I do?
    Thanks.

    Hi Uwe,
        Thank you for your response. Yes, that is an option I was thinking of as an alternative.
        I want to display to the user the User_Addrs selection-window, with the names. Once they choose the multiple-selection list of names, I want them to be able to save the user address and the associated first/last names in the variant.
        The selection screen can be cut down to possibly one less selection-field: by combining the first/last name...but the update to screen-fields would likely still be a problem.
      Still working on this one, 
       Dan Perecky

  • F4IF_INT_TABLE_VALUE_REQUEST and first selection of mult

    Hi All,
       I am using F4IF_INT_TABLE_VALUE_REQUEST and it works well, except for the first time.This is a regular report type program.
        o If one item/line is selected the first time, nothing is returned to the screen fields.
        o If more than one item is selected, the first one is lost. The second and other lines make it back to the screen field.
           o The actual values are not displayed until I right-click and select the 'multiple selection' option.
        o The next multiple selects always returns correctly- Whatever is chosen makes it to the bottom of the screen field.
        Using StepL or not does not seem to make a difference.
      Call function 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
          retfield        = RtField
          dynpprog        = l_prog             
          dynpnr          = l_screen           
          dynprofield     = specifichlpfld
          Value_org       = 'C'       
          WINDOW_TITLE    = WinTitle
          MULTIPLE_CHOICE = 'X'
        TABLES
          field_Tab       = OutField_Tab
          value_tab       = OutUsrAddrs    
          RETURN_TAB      = RETURN_TAB.
       Thanks for any help,
                       Dan P.

    Hi All,
        This is the code that shows the problem. It can be cut/pasted into a program for demostration.
    *& Report  YDMP_TRY2F4IN_INT_TABLE_VAL_RE                              *
    *& Author: Daniel Perecky                                              *
    *& Test prg for function module call F4IF_INT_TABLE_VALUE_REQUEST.     *
    *& Works, kind of.                                                     *
    *& o If one item/line is selected the first time, nothing is           *
    *&   returned to the screen fields.                                    *
    *& o If more than one item is selected, the first one is lost. The     *
    *&   second and other lines make it back to the screen field.          *
    *&      o The actual values are not displayed until I right-click      *
    *&        and select the 'multiple selection' option.                  *
    *& o The next multiple selects always returns correctly- Whatever is   *
    *&   chosen makes it to the bottom of the screen field.                *
    REPORT  YDMP_TRY3F4IN_INT_TABLE_VAL_RE          .
    Tables: User_Addrs.
    Selection-Screen Begin of Block EMAILN.
    Selection-Screen Skip.
    Selection-screen Begin of Line.
    Selection-Screen Comment 1(25) Text-013.
    Selection-screen End of Line.
    Selection-screen Begin of Line.
    Selection-Screen Comment 1(12) Text-015.
    Selection-Screen Position 10.
    Select-Options: GnrlF for USER_ADDRS-Name_First.
    Selection-Screen Position 63.
    Select-Options: GnrlL for USER_ADDRS-NAME_Last.
    Selection-screen End of Line.
    Selection-screen Begin of Line.
    Selection-Screen Position 68.
    Select-Options: GnrlSpMl for User_Addrs-BName.
    Selection-screen End of Line.
    Selection-Screen Skip.
    Selection-Screen End of Block EMAILN.
    Include type pool SSCR
    TYPE-POOLS SSCR.
    Define the object to be passed to the RESTRICTION parameter
    DATA RESTRICT TYPE SSCR_RESTRICT.
    DATA OPT_LIST TYPE SSCR_OPT_LIST.
    DATA ASSRTD   TYPE SSCR_***.
          CLASS CX_RPTERR_EXCEPTION  DEFINITIO
    CLASS CX_RPTERR_EXCEPTION DEFINITION
                            INHERITING FROM CX_STATIC_CHECK.
    ENDCLASS.                    "CX_RPTERR_EXCEPTION  DEFINITIO
    Initialization.
    Used for function module: 'SELECT_OPTIONS_RESTRICT'
      Clear Opt_List.
      Move 'JUST_EQ' to Opt_List-Name.
      Move 'X' to Opt_List-Options-Eq.
      APPEND OPT_LIST TO RESTRICT-OPT_LIST_TAB.
      Clear Opt_List.
      Move 'NOINTERVLS' to Opt_List-Name.
      Move 'X' to: Opt_List-Options-CP,
                   Opt_List-Options-EQ,
                   Opt_List-Options-GE,
                   Opt_List-Options-GT,
                   Opt_List-Options-LE,
                   Opt_List-Options-LT,
                   Opt_List-Options-NE,
                   Opt_List-Options-NP.
      APPEND OPT_LIST TO RESTRICT-OPT_LIST_TAB.
      Clear Opt_List.
      Clear Assrtd.
      Move: 'B' to Assrtd-Kind,
            'EMAILN' to Assrtd-Name,
            'I'      to Assrtd-SG_Main,
           'N'      to Assrtd-SG_Addy,
            'JUST_EQ' to Assrtd-Op_Main,
          'NOINTERVLS' TO Assrtd-OP_ADDY.
      APPEND Assrtd TO RESTRICT-***_TAB.
    Call function module
      CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
           EXPORTING
                 RESTRICTION                = RESTRICT
              DB                          = ' '
           EXCEPTIONS
                 TOO_LATE                   = 1
                 REPEATED                   = 2
                 NOT_DURING_SUBMIT          = 3
                DB_CALL_AFTER_REPORT_CALL  = 4
                SELOPT_WITHOUT_OPTIONS     = 5
                 SELOPT_WITHOUT_SIGNS       = 6
                 INVALID_SIGN               = 7
                REPORT_CALL_AFTER_DB_ERROR = 8
                  EMPTY_OPTION_LIST          = 9
                 INVALID_KIND               = 10
                 REPEATED_KIND_A            = 11
                 OTHERS                     = 12.
    Exception handling
      IF SY-SUBRC NE 0.
      ENDIF.
    Use same form for all three fields. Update all fields every time.
    At Selection-Screen on Value-Request for GnrlF-Low.
      Perform GetFillUserInfo Tables GnrlF GnrlL GnrlSpMl.
    At Selection-Screen on Value-Request for GnrlL-Low.
      Perform GetFillUserInfo Tables GnrlF GnrlL GnrlSpMl.
    At Selection-Screen on Value-Request for GnrlSpMl-Low.
      Perform GetFillUserInfo Tables GnrlF GnrlL GnrlSpMl.
    Start-of-Selection.
      Try.
    Some regular report code goes here.
        Catch CX_ROOT.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
          Exit.
      EndTry.
    End-of-Selection.
    *=============================================================================================
    *| Form  GetFillUserInfo                                                                       |
    *| Get all user information from SAP tables and fill out Selection-Screen tables.              |
    *| Fill in all fields for user.                                                                |
    *=============================================================================================
    Form GetFillUserInfo Tables NameF Type Standard Table          NameL Type Standard Table
                                             SAPIds Type Standard Table.
      Data: NameFLoc Type Range of User_Addrs-Name_First with header line,
            NameLLoc Type Range of User_Addrs-Name_Last with header line,
           OutlookLoc Type Range of ZXX_Hrid-ZZ_EMail_Address with header line,
            SAPIdLoc Type Range of User_Addrs-BName with header line.
      data: step_line like sy-stepl.
      Types: Begin of UsrAddrsT.
      Types: BNAME Like User_Addrs-BName,
             NAME_LAST Like User_Addrs-Name_Last,
             NAME_FIRST Like User_Addrs-Name_First,
             NAME_TEXT Like User_Addrs-Name_Text,
             DEPARTMENT Like User_Addrs-Department.
      Types: End of UsrAddrsT.
      Data: UsrAddrsInt type standard table of UsrAddrsT with header line.
      Types: Begin of UsrAddrsT2.
      Types: Value(80) Type C.
      Types: End of UsrAddrsT2.
      Data: UsrAddrs type standard table of UsrAddrsT2 with header line.
      Data: Field_Tab type standard table of DFIES with header line.
      DATA: Return_Tab Type Standard table of ddshretval with HEADER LINE.
      Data: RtField Like DFIES-FIELDNAME,
            WinTitle(40) Type C.
    Generic F4 tables
      Data: OutField_Tab Type Standard table of DFIES with header line,
            OutUsrAddrs Type Standard table of UsrAddrsT2 with header line.
      Data: l_prog like syst-cprog,
            l_screen like syst-dynnr,
            specifichlpfld like Help_Info-Dynprofld.
      Data: TblSz Type I.
      l_prog = syst-cprog.
      l_screen = syst-dynnr.
        Select D2BName D2Name_First D2NAME_LAST D2Name_Text D2~Department
            From ( Usr21 as D1
              Inner Join User_Addrs as D2
              On  D1BName = D2BName )
              Appending Corresponding fields of table UsrAddrsInt
           Where D2~BName <> Space.
        Sort UsrAddrsInt by Name_Last Name_First BName.
        Delete UsrAddrsInt Where BName cs 'n/a' or ( BName = 'Z_USER' and Name_Text cs 'USER SAMPLE' ) or BName = 'SAMPLE'.
    Fill value table- one column data per row.
        Loop at UsrAddrsInt.
          If UsrAddrsInt-BName <> Space.
            Write UsrAddrsInt-BName to Usraddrs-Value.
          Else.
            Write space to UsrAddrs-Value.
          Endif.
          Append UsrAddrs.
          If UsrAddrsInt-NAME_TEXT <> Space.
            Write UsrAddrsInt-NAME_TEXT to Usraddrs-Value.
          Else.
            Write space to UsrAddrs-Value.
          Endif.
          Append UsrAddrs.
          If UsrAddrsInt-DEPARTMENT <> Space.
            Write UsrAddrsInt-DEPARTMENT to Usraddrs-Value.
          Else.
            Write space to UsrAddrs-Value.
          Endif.
          Append UsrAddrs.
        EndLoop.
        Select Distinct d1tabname D1fieldname D1Domname d1Datatype D1~position
               D1rollname D1inttype D1intlen D1leng D1Decimals D1outputLen
            From DD03M as D1
            appending corresponding fields of table Field_tab
          where
             DDLanguage = Syst-Langu  and
             d1~tabname = 'USER_ADDRS' and
             D1~fieldname in ('BNAME', 'NAME_TEXT', 'DEPARTMENT').
        Sort Field_Tab by position.
        Loop at Field_Tab.
          Select Single DDText
               Into Field_Tab-FieldText
            From DD03M
          Where Tabname = Field_Tab-Tabname and
             FieldName = Field_Tab-fieldName and
             DDLanguage = Syst-Langu.
            If Syst-Subrc = 0.
              Modify Field_Tab.
            Endif.
        EndLoop.
        RtField = 'BNAME'.
        WinTitle = 'Find Person(s) for SAP E-Mail'.
        specifichlpfld = 'USR21-BNAME'.
        Clear: OutField_Tab, OutUsrAddrs.  Refresh: OutField_Tab, OutUsrAddrs.
        OutField_Tab[] = Field_Tab[].
        OutUsrAddrs[] = UsrAddrs[].
      Call function 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
          retfield        = RtField
         stepL           = Step_Line
          dynpprog        = l_prog              " sy-cprog
          dynpnr          = l_screen            " sy-dynnr
          dynprofield     = specifichlpfld
          Value_org       = 'C'        "'S'
          WINDOW_TITLE    = WinTitle
          MULTIPLE_CHOICE = 'X'
        TABLES
          field_Tab       = OutField_Tab
          value_tab       = OutUsrAddrs      "SelFNames
          RETURN_TAB      = RETURN_TAB.
      If SY-SUBRC <> 0.
        If Syst-Batch = ' '.  " Online
          Sy-MsgTy = 'I'.
        Else.
          Sy-MsgTy = 'E'.
        Endif.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        If Syst-Batch = ' '.  " Online
          Raise Exception Type CX_RPTERR_EXCEPTION.
        Endif.
      Endif.
      CALL FUNCTION 'DYNP_GET_STEPL'
        IMPORTING
          POVSTEPL        = Step_Line
        EXCEPTIONS
          STEPL_NOT_FOUND = 1
          OTHERS          = 2.
      If SY-SUBRC <> 0.
        If Syst-Batch = ' '.  " Online
          Sy-MsgTy = 'I'.
        Else.
          Sy-MsgTy = 'E'.
        Endif.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        If Syst-Batch = ' '.  " Online
          Raise Exception Type CX_RPTERR_EXCEPTION.
        Endif.
      Endif.
          Loop at Return_Tab.
            Clear UsrAddrsInt.
            Read table UsrAddrsInt with key BName = Return_Tab-FIELDVAL.
            If Syst-Subrc = 0.
              NameFLoc-Low = UsrAddrsInt-Name_First.       " should be ok if blank- append anyway.
              NameLLoc-Low = UsrAddrsInt-Name_Last.
              sapIdLoc-Low = UsrAddrsInt-BName.
              Append: NameFLoc, NameLLoc, SapIdLoc.
              Clear: NameFLoc, NameLLoc, SapIdLoc.
            Endif.
          EndLoop.
      Loop at NameFLoc.
        NameFLoc-High = space.   NameFLoc-Sign = 'I'.   NameFLoc-Option = 'EQ'.    Modify NameFLoc.
      EndLoop.
      Loop at NameLLoc.
        NameLLoc-High = space.   NameLLoc-Sign = 'I'.   NameLLoc-Option = 'EQ'.    Modify NameLLoc.
      EndLoop.
      Loop at SapIdLoc.
        SapIdLoc-High = space.   SapIdLoc-Sign = 'I'.   SapIdLoc-Option = 'EQ'.    Modify SapIdLoc.
      EndLoop.
      Loop at NameFLoc.
        Move-Corresponding NameFLoc to NameF.
        Append NameF.
        Add 1 to TblSz.
      EndLoop.
      Refresh NameFLoc. Clear: NameF, NameFLoc.
      Loop at NameLLoc.
        Move-Corresponding NameLLoc to NameL.
        Append NameL.
      EndLoop.
      Refresh NameLLoc. Clear: NameL, NameLLoc.
      Loop at SapIdLoc.
      Move-Corresponding SapIdLoc to SAPIds.
        Append SapIds.
      EndLoop.
      Refresh SapIdLoc.   Clear: SapIds, SapIdLoc.
    EndForm.                    " GetFillUserInfo

  • How to implement F4IF_INT_TABLE_VALUE_REQUEST in search help User Exit?

    Hi,
    I need to enhanse search help and add F4 functionality to display list of company codes when cursor is in PBUKR field. I put F4IF_INT_TABLE_VALUE_REQUEST
    into the user exit but nothing works.
    I get error that PROCESS is not defined. If I remove that line there is no error but nothing works.
    Can someone tell me what is wrong in the code below.
    Thank you.
    FUNCTION z_hr_shlp_wbs_element.
    ""Local interface:
    *"  TABLES
    *"      SHLP_TAB TYPE  SHLP_DESCR_TAB_T
    *"      RECORD_TAB STRUCTURE  SEAHLPRES
    *"  CHANGING
    *"     VALUE(SHLP) TYPE  SHLP_DESCR_T
    *"     VALUE(CALLCONTROL) LIKE  DDSHF4CTRL STRUCTURE  DDSHF4CTRL
      TABLES: prps.
      DATA: it_prps LIKE prps OCCURS 0 WITH HEADER LINE.
      DATA: status_tab LIKE jstat OCCURS 0 WITH HEADER LINE.
      DATA: l_posid LIKE prps-posid.
      DATA: l_subrc LIKE sy-subrc.
      DATA: l_pbukr LIKE prps-pbukr,   " Added by vr
            value TYPE DDSHIFACE-VALUE.
    EXIT immediately, if you do not want to handle this step
      IF callcontrol-step <> 'SELONE' AND
         callcontrol-step <> 'SELECT' AND
                                           " AND SO ON
         callcontrol-step <> 'DISP'.
        EXIT.
      ENDIF.
    ------------------------------------------------------ added by vr
    PROCESS ON VALUE-REQUEST.
    FIELD PRPS-PBUKR MODULE PBUKR.
      DATA: BEGIN OF VALUE_TAB OCCURS 0,
      LPBUKR LIKE PRPS-PBUKR,
      LPOSID LIKE PRPS-POSID,
      END OF VALUE_TAB.
    DATA: BEGIN OF RETURN_TAB OCCURS 0.
    INCLUDE STRUCTURE DDSHRETVAL.
    DATA END OF RETURN_TAB.
    SELECT PBUKR POSID FROM PRPS UP TO 20 ROWS
    INTO TABLE VALUE_TAB WHERE SLWID = 'QLT UDF'.
    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
    RETFIELD = 'PBUKR'
    WINDOW_TITLE = 'Statusselektion'
    VALUE_ORG = 'S' "hierdurch kann die Struktur genommen werden
    TABLES
    VALUE_TAB = VALUE_TAB
    RETURN_TAB = RETURN_TAB
    EXCEPTIONS
    PARAMETER_ERROR = 1
    NO_VALUES_FOUND = 2
    OTHERS = 3.
    end of additions
    STEP SELONE  (Select one of the elementary searchhelps)
    This step is only called for collective searchhelps. It may be used
    to reduce the amount of elementary searchhelps given in SHLP_TAB.
    The compound searchhelp is given in SHLP.
    If you do not change CALLCONTROL-STEP, the next step is the
    dialog, to select one of the elementary searchhelps.
    If you want to skip this dialog, you have to return the selected
    elementary searchhelp in SHLP and to change CALLCONTROL-STEP to
    either to 'PRESEL' or to 'SELECT'.
      IF callcontrol-step = 'SELONE'.
      PERFORM SELONE .........
        EXIT.
      ENDIF.
    STEP PRESEL  (Enter selection conditions)
    This step allows you, to influence the selection conditions either
    before they are displayed or in order to skip the dialog completely.
    If you want to skip the dialog, you should change CALLCONTROL-STEP
    to 'SELECT'.
    Normaly only SHLP-SELOPT should be changed in this step.
      IF callcontrol-step = 'PRESEL'.
      PERFORM PRESEL ..........
        EXIT.
      ENDIF.
    STEP SELECT    (Select values)
    This step may be used to overtake the data selection completely.
    To skip the standard seletion, you should return 'DISP' as following
    step in CALLCONTROL-STEP.
    Normally RECORD_TAB should be filled after this step.
    Standard function module F4UT_RESULTS_MAP may be very helpfull in this
    step.
      IF callcontrol-step = 'SELECT'.
    Maximum records are set to 0 because the counter for Max records keeps
    running, even if you filter out certain records. This is a similar
    problem as described in OSS Note 148525.
    Feb 3, 2004 LS: devk907353
                    (maxrecords = 0 defaults to maxrecords 500)
                    As of release 4.7, it appears that maxrecords is
                    being considered on the read of the view, rather
                    than prior to presenting the selection list.
                    When only 500 records are passed into this exit,
                    the subsequent evaluation yields very few records
                    in the selection list.  By setting maxrecords to
                    8000, the entire contents of the view are passed
                    to this user exit, and therefor the search help
                    yields a reasonable selection list to the user
                    (as was the case in release 4.6b).
      callcontrol-maxrecords = 0.        " devk907353
        callcontrol-maxrecords = 8000.     " devk907353
      PERFORM STEP_SELECT TABLES RECORD_TAB SHLP_TAB
                          CHANGING SHLP CALLCONTROL RC.
      IF RC = 0.
        CALLCONTROL-STEP = 'DISP'.
      ELSE.
        CALLCONTROL-STEP = 'EXIT'.
      ENDIF.
        EXIT. "Don't process STEP DISP additionally in this call.
      ENDIF.
    Added by vr, Nov. 2007 ---------------------------
      CALL FUNCTION 'F4UT_PARAMETER_VALUE_GET'
      EXPORTING
        PARAMETER               = 'PBUKR' " Reference to search help parameter
      IMPORTING
        VALUE                   = value
      TABLES
        SHLP_TAB                = shlp_tab
        RECORD_TAB              = record_tab
      CHANGING
        SHLP                    = shlp
        CALLCONTROL             = callcontrol.
      l_pbukr = value.
    End of additions by vr ---------------------------
    STEP DISP     (Display values)
    This step is called, before the selected data is displayed.
    You can e.g. modify or reduce the data in RECORD_TAB
    according to the users authority.
    If you want to get the standard display dialog afterwards, you
    should not change CALLCONTROL-STEP.
    If you want to overtake the dialog on you own, you must return
    the following values in CALLCONTROL-STEP:
    - "RETURN" if one line was selected. The selected line must be
      the only record left in RECORD_TAB. The corresponding fields of
      this line are entered into the screen.
    - "EXIT" if the values request should be aborted
    - "PRESEL" if you want to return to the selection dialog
    Standard function modules F4UT_PARAMETER_VALUE_GET and
    F4UT_PARAMETER_RESULTS_PUT may be very helpfull in this step.
      IF callcontrol-step = 'DISP'.
    DEVK909420 Begin
      SELECT * FROM prps INTO TABLE it_prps
         WHERE belkz = 'X'.
    Changed by vr, Nov. 2007
      IF l_pbukr <> ''.
        SELECT * FROM prps INTO TABLE it_prps
           WHERE belkz =  'X'
             AND fkstl <> ''
             AND pbukr = l_pbukr.
        ELSE.
        SELECT * FROM prps INTO TABLE it_prps
           WHERE belkz =  'X'
             AND fkstl <> ''.
        ENDIF.
    End of changes
    DEVK909420 End
        SORT it_prps BY posid.
        LOOP AT record_tab.
          l_posid = record_tab+96(24).
          READ TABLE it_prps WITH KEY posid = l_posid.
          IF sy-subrc = 0.
            CALL FUNCTION 'STATUS_READ'
                 EXPORTING
                      objnr       = it_prps-objnr
                      only_active = 'X'
                 TABLES
                      status      = status_tab.
    DEVK909329 Begin
            read table status_tab with key inact = ''
                                           stat  = 'E0001'.
            if sy-subrc is initial.
              read table status_tab with key inact = ''         "DEVK909345
                                             stat  = 'I0002'.   "DEVK909345
            endif.
    DEVK909329 End
          ENDIF.
          IF sy-subrc NE 0.
            DELETE record_tab.
          ELSE.
           IF record_tab+114(1) EQ '.' AND
              record_tab+115(1) EQ '9'.
             DELETE record_tab.
           ELSE.
    DEVK909420 Begin
            IF record_tab+102(1) EQ '9'.
              DELETE record_tab.
            ELSEIF record_tab+104(1) EQ '9'.
              DELETE record_tab.
            ENDIF.
    DEVK909420 End
           ENDIF.
          ENDIF.
        ENDLOOP.
        EXIT.
      ENDIF.
    ENDFUNCTION.

    Hi Vitaly,
    Process on Value Request and search help exit is entirely two idea to display the f4 values.please remove the PROCESS ON VALUE REQUEST from the function module.write the required select statements after   CHECK callcontrol-step EQ 'SELECT' . and pass the value to the function module
    CALL FUNCTION 'F4UT_RESULTS_MAP'
          TABLES
            shlp_tab          = shlp_tab
            record_tab        = record_tab
            source_tab        = l_record
          CHANGING
            shlp              = shlp
            callcontrol       = callcontrol
          EXCEPTIONS
            illegal_structure = 1
            OTHERS            = 2.
        IF sy-subrc <> 0.
          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        ENDIF.
        IF ( sy-subrc = 0 AND l_record IS INITIAL ).
          MESSAGE 'No values found' TYPE 'S'.
        ENDIF.
        callcontrol-step = 'DISP'.
    Find the documentaion for this function module for further help
    message edited by
    shibu

  • How I input selection criteria to the FM F4IF_INT_TABLE_VALUE_REQUEST

    Hi,
    i implemented one FM 'F4IF_INT_TABLE_VALUE_REQUEST' in my program to show F4 help.
    in that i given  MULTIPLE_CHOICE        = 'X' for multiple line selection, i got the desired output there is no problem with that.
    but i want to show the F4 help screen with some of the record already selected.
    For example.
    we have NAME as search help(values HARI,MADHU,RANI,SINDHU) ,
    at first i selected HARI and MADHU, and then when i press F4 again i need HARI and MADHU as already selected.
    Reg,
    HARIHARAN

    Hi Hariharan,
    Please use the Mark_tab parameter of the FM F4IF_INT_TABLE_VALUE_REQUEST as below.
    data: MARK_TAB TYPE DDSHMARKS.
    data: mark like line of mark_tab.
    mark = '2'.
    append mark to MARK_TAB.
    *-- Call fucntion for search help
    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
    retfield = l_retfld
    dynpprog = sy-repid
    dynpnr = sy-dynnr
    dynprofield = l_dynfld
    MULTIPLE_CHOICE = 'X'
    callback_program = sy-repid
    MARK_TAB = mark_tab
    TABLES
    value_tab = l_i_value
    field_tab = l_i_fields
    return_tab = l_i_return
    EXCEPTIONS
    parameter_error = 1
    no_values_found = 2
    OTHERS = 3.
    IF sy-subrc 0.
    MESSAGE i000
    WITH 'No search help found'(090) .
    ENDIF.
    Regards,
    Amit.

  • How to return marked values from the FM F4IF_INT_TABLE_VALUE_REQUEST

    Hello all.
    I'm using the FM F4IF_INT_TABLE_VALUE_REQUEST with multiple choise activated.
    My problem is: if I mark, for example - 2 choises from 5, and then press OK.
    If i go in to the same F4 button, I what to see the same marks like before..
    At the moment, if i go in again to the same F4, nothing is marked, as if i'm going in for the first time.
    Can someone help me?

    Hi Barak,
    I don't think you can achieve this functionality using this FM. Even I think this is not there in standard SAP help, please check.
    Regards,
    Atish

Maybe you are looking for

  • How to find out the table names related to fields of Transactions

    Hi All,    My Task is to extract the data from diff tables whose names i need to find out . I was given with the transactions like Me31k,Me32k,Migo,Miro etc. Can anyone Plz suggest me on how to do this apart from debugging the transaction or runnig t

  • Cloning Option in BI apps

    Dear All, I am bit curious regrading cloning of BI domain. I heard some where that in BI apps 11.1.1.7.1 onwards cloning of BI domain is possible. I mean to say If i have setup my dev instance and now want to create SIT then i can easily clone the de

  • PLEASE HELP?? java.lang.OutOfMemoryError: PermGen space

    I've been searching the net for days and have tried changing the eclipse.ini per everyone's instructions...but still keep crashing after small changes. java.lang.OutOfMemoryError: PermGen space -startup plugins/org.eclipse.equinox.launcher_1.1.1.R36x

  • Can I use a individual business?

    Hi. I'm Operating a business in Korea. My company employees are two people, but the only one that will use Creative Cloud. Then purchase a Individual License for commercial use is possible? And Promotion license (Photoshop CC + Lightroom 5) is possib

  • The effect if this virus

    Hi, the effect of this virus on my skype account as much as I can see is that the new messages does not appear for me. It appears in a pale colour. Is it a sign that my messages could been seen by hackers? What should I do? Thanks,