Hierarchical ALV - enabling row/column input

Hello,
I'm going to incoporate the hierarchical ALV in a report.  Let's say I have 5 item rows for a header row, is it possible to make individiual rows input enabled?  Meaning, of the 5 item rows, I wish to make two of them editable, but not the other three. 
I've done the standard ALV and made columns input enabled when building the fieldcat, but this applied to all rows, which I don't want in my scenario.
Any help would be appreciated.
Thanks

Hello,
Input enable is a parameter of fieldcat but you have to specify the internal table that you used in header row or item row.
You create a data ZHEAD and ZITEM that you transfer in fieldcat data "table"
Don't forget the clear when youo fill this internal table
Regards
sebastien

Similar Messages

  • Hiding zero in ALV(Particular Row/Column alone)

    I use ALV Grid  for displaying the output in the tabular form. It has one key field and 4 numeric fields. Always it will have only 7 rows. Now I should not display 0 if the row 4 does not have any values(Since it is a numeric field, by default zero will come). Rest of the rows should contain zero value if there is no value.
    If I should not display zero for all the rows, then I can simply pass no_zero = u2018Xu2019 in the field catalog. But this should happen only for the particular row (4th row alone). Please advise me.

    Hi Selva,
    I am posting a example code, in this some paticular cells of ALV Grid are in editable mode. just analyse this example this may help you..
    FORM build_fieldcatalog.
      wa_fieldcat-fieldname   = 'EBELN'.
      wa_fieldcat-scrtext_m   = 'Purchase Order'.
      wa_fieldcat-col_pos     = 0.
      wa_fieldcat-outputlen   = 10.
      wa_fieldcat-emphasize   = 'X'.
      wa_fieldcat-key         = 'X'.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR  wa_fieldcat.
      wa_fieldcat-fieldname   = 'EBELP'.
      wa_fieldcat-scrtext_m   = 'PO Item'.
      wa_fieldcat-col_pos     = 1.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR  wa_fieldcat.
      wa_fieldcat-fieldname   = 'MEINS'.
      wa_fieldcat-scrtext_m   = 'Order Unit'.
      wa_fieldcat-col_pos     = 6.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR  wa_fieldcat.
      wa_fieldcat-fieldname   = 'NETPR'.
      wa_fieldcat-scrtext_m   = 'Net Price'.
      wa_fieldcat-edit        = 'X'. "sets whole column to be editable
      wa_fieldcat-col_pos     = 7.
      wa_fieldcat-outputlen   = 15.
      wa_fieldcat-datatype     = 'CURR'.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR  wa_fieldcat.
      wa_fieldcat-fieldname   = 'PEINH'.
      wa_fieldcat-scrtext_m   = 'Price Unit'.
      wa_fieldcat-col_pos     = 8.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR  wa_fieldcat.
    ENDFORM.                    " BUILD_FIELDCATALOG
    FORM build_layout.
    * Set layout field for field attributes(i.e. input/output)
      gd_layout-stylefname = 'FIELD_STYLE'.
      gd_layout-zebra             = 'X'.
    ENDFORM.                    " BUILD_LAYOUT
    FORM display_alv_report.
      gd_repid = sy-repid.
    *  call function 'REUSE_ALV_GRID_DISPLAY'
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
           EXPORTING
                i_callback_program      = gd_repid
                i_callback_user_command =  USER_COMMAND
                is_layout_lvc               = gd_layout
                it_fieldcat_lvc             = it_fieldcat
                i_save                  = 'X'
           TABLES
                t_outtab                = it_ekko
           EXCEPTIONS
                program_error           = 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.
    ENDFORM.                    " DISPLAY_ALV_REPORT
    FORM data_retrieval.
      SELECT ebeln ebelp statu aedat matnr menge meins netpr peinh
       UP TO 10 ROWS
        FROM ekpo
        INTO  CORRESPONDING FIELDS OF TABLE it_ekko.
    ENDFORM.                    " DATA_RETRIEVAL
    form set_specific_field_attributes .
      DATA ls_stylerow TYPE lvc_s_styl .
      DATA lt_styletab TYPE lvc_t_styl .
    " Populate style variable (FIELD_STYLE) with style properties
    " The NETPR field/column has been set to editable in the fieldcatalog...
    " The following code sets it to be disabled(display only) if 'NETPR'
    " is gt than 10.
      LOOP AT it_ekko INTO wa_ekko.
        IF wa_ekko-netpr GT 10.
          ls_stylerow-fieldname = 'NETPR' .
          ls_stylerow-style = cl_gui_alv_grid=>mc_style_disabled.
                                                 "set field to disabled
          APPEND ls_stylerow  TO wa_ekko-field_style.
          MODIFY it_ekko FROM wa_ekko.
        ENDIF.
      ENDLOOP.
    endform.                    " set_specific_field_attributes
    FORM USER_COMMAND.
    CASE SY-UCOMM.
       WHEN 'ENTER'.
       ENDCASE.
      ENDFORM.
    Regards,
    Murthy

  • How to alv grid rows&columns

    Hey,
    How to know number of rows and columns in alv grid are used.

    Hi,
    You can count the number of rows , by using describe statemet,
    describe table itab lines v_lines.
    itab is table used to display in ALV
    Thanks & Regards,
    Navneeth K.

  • Set specific rows in ALV grid ready for input

    Hi everyone,
      I have a question about how to set specific rows in ALV grid ready for input.
      I know that I can make some columns ready for input before the ALV displayed,but I have no idea how to make specific rows displayed in the ALV ready for input.

    Hello Aaron
    For editable columns we can use the fieldcatalog (LVC_S_FCAT-EDIT = 'X') but for rows you need to define editability on cell level.
    The required steps are documented in sample report BCALV_EDIT_02. Below I point out a few crucial points:
    *§1.Extend your output table for a field, e.g., CELLTAB, that holds
    *   information about the edit status of each cell for the
    *   corresponding row (the table type is SORTED!).
    DATA: BEGIN OF gt_outtab occurs 0.  "with header line
            include structure sflight.
    DATA: celltab type LVC_T_STYL.
    DATA: END OF gt_outtab.
    *§3.Provide the fieldname of the celltab field by using field
    *   STYLEFNAME of the layout structure.
       gs_layout-stylefname = 'CELLTAB'.
       CALL METHOD grid1->set_table_for_first_display
             EXPORTING i_structure_name = 'SFLIGHT'
                       is_layout        = gs_layout
             CHANGING  it_outtab        = gt_outtab[].
    Note: in the sample report only field SEATSMAX is editable. In your case you need
    to fill CELLTAB for all fields in a row.
    *§2.After selecting data, set edit status for each row in a loop
    *   according to field SEATSMAX.
      LOOP AT gt_outtab.
        l_index = sy-tabix.
        refresh lt_celltab.
        if gt_outtab-seatsmax ge 300.
            perform fill_celltab using 'RW'
                                 changing lt_celltab.
        else.
            perform fill_celltab using 'RO'
                                 changing lt_celltab.
        endif.
    *§2c.Copy your celltab to the celltab of the current row of gt_outtab.
        INSERT LINES OF lt_celltab INTO TABLE gt_outtab-celltab.
        MODIFY gt_outtab INDEX l_index.
      ENDLOOP.
    ENDFORM.                               " SELECT_DATA_AND_INIT_STYLE
    NOTE: LVC_T_STYL is a SORTED table type. Thus, take care that you are using the
    INSERT ... INTO TABLE statement and not APPEND (because then nothing is appended
    to the CELLTAB itab).
      IF p_mode EQ 'RW'.
    *§2a.Use attribute CL_GUI_ALV_GRID=>MC_STYLE_ENABLED to set a cell
    *    to status "editable".
        l_mode = cl_gui_alv_grid=>mc_style_enabled.
      ELSE. "p_mode eq 'RO'
    *§2b.Use attribute CL_GUI_ALV_GRID=>MC_STYLE_DISABLED to set a cell
    *    to status "non-editable".
        l_mode = cl_gui_alv_grid=>mc_style_disabled.
      ENDIF.
      ls_celltab-fieldname = 'SEATSMAX'.
      ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
      INSERT ls_celltab INTO TABLE pt_celltab.
    Regards
      Uwe

  • Changing totals value in hierarchical alv for a particular level/row

    Hi,
    I am displaying a hierarchical ALV having 4 levels.
    Using field catalog, totals for all dynamic columns are found out.
    I have a requirement not to display totals value for first and second levels.
    And if possible, to display another value.
    Tried using CL_GUI_ALV_TREE->change_node.
    But it not updating.
    Please suggest a solution.
    Thanks,
    Nisha Vengal.

    Hi Ten Mariga,
                     I wonder why the second select Query is needed at all instead you can use
    ---> Not Needed
    FORM DATA_RETRIEVAL1.
    SELECT * FROM zcontact INTO TABLE it_zcontact WHERE id EQ wa_zcontact-id.
    ENDFORM.
    ----> Instead you can do
       READ TABLE it_zcontact INTO wa_zcontact INDEX p_seltab-tabindex.
      Append wa_zcontact to Second_table.
    And you can use the Second_table to display the second ALV. The second Select Query will affect the performance too.
    Cheers,
    Krishnakumar B.

  • Detect selected row/column in ALV when clicking my button

    Hello,
    I use the cl_salv_table to display my ALV. I have implemented some double click events an so one. But now I like to be able detect u201Cselected  row and coll when I press a button I my Application toolbar.
    How do I get the selected row/column when pressing my button?
    Regards,
    Kenneth

    Give this a try:
    class lcl_disp_code definition.
      public section.
        methods: disp_code
                   for event double_click
                   of cl_gui_alv_grid
                   importing es_row_no
                             e_column.
    endclass.                    "lcl_disp_code DEFINITION
    *       CLASS lcl_disp_code IMPLEMENTATION
    class lcl_disp_code implementation.
      method disp_code.
        perform restrict_data
          using es_row_no-row_id.
      endmethod.                    "on_double_click
    endclass.                    "lcl_disp_code IMPLEMENTATION
    Rob

  • Input enable query column using Planning function

    Is it possible to input enable a column in query based on user action in Radio button group or button group by calling a planning function or WAD?
    By default the column property for query will be Planning not allowed, but a user action should change the mode to Planning allowed using planning function or entries.
    Thanks

    Hi Ravi,
    you could try to write an exit data slice and a planning function which sets the data slice to not lock the data during runtime. You can find several threads in this forum. how an exit data slice can be used to control the locking of data during runtime.
    Together with the command I mentioned in my last answer this may work, but it still depends on your requirements. A dataslice checks only the combination of characteristics. If you can identiy a characteristic for each column this may work. If not, there is no characteristic combination which can be locked. Please consider this when designing your application. This may lead to an additional characteristic which is used just to identify which column should be locked.
    Hope this helps ...
    Regards Matthias Nutt
    SAP Consulting Switzerland

  • Hierarchical ALV Column Seperator

    Hello Friends,
    I have a report which displays the data in Hierarchical ALV.
    Now the fields shown in the output are not sperated (by a line). I can see an option in the PF Status.
    Settings > Columns > Automatic Seperator.
    This option when checked, seperates the fields by a vertical line.
    My requirement is: I want this seperation by default.
    Thanks for the help in advance..

    Try to give one of the following value to
    is_layout-no_vline = '2'. " Separator always on
    is_layout-no_vline = '3'. " Automatic separator
    That works in some versions. Be aware this is not a function opened and documented by SAP. If that don't work on your version, you could try to update the layout using field-symbol during the set status routine.
    Regards

  • In Alv table, a column is editable mode, but want few cells in read only

    Hi All,
    I have a ALV table which column A and B.
    Both are in editable mode. I want to make fews in column B, to be read only.
    How to make it. Please help me.
    Thanks
    Vimalraj

    hi,
    refer this program,
    *& Report  ZALV_COLOR_DISPLAY_EDIT
    REPORT  zalv_color_display_edit.
    TYPE-POOLS: slis.
    TABLES : zcust_master2.
    INTERNAL TABLE DECLARATION
    TYPES : BEGIN OF wi_zcust_master2,
            zcustid LIKE zcust_master2-zcustid,
            zcustname LIKE zcust_master2-zcustname,
            zaddr LIKE zcust_master2-zaddr,
            zcity LIKE zcust_master2-zcity,
            zstate LIKE zcust_master2-zstate,
            zcountry LIKE zcust_master2-zcountry,
            zphone LIKE zcust_master2-zphone,
            zemail LIKE zcust_master2-zemail,
            zfax LIKE zcust_master2-zfax,
            zstat LIKE zcust_master2-zstat,
            field_style  TYPE lvc_t_styl,
    END OF wi_zcust_master2.
    DATA: it_wi_zcust_master2 TYPE STANDARD TABLE OF wi_zcust_master2
                                                     INITIAL SIZE 0,
          wa_zcust_master2 TYPE wi_zcust_master2.
    *ALV data declarations
    DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE.
    DATA: it_fieldcat TYPE lvc_t_fcat,     "slis_t_fieldcat_alv WITH HEADER
    line,
          wa_fieldcat TYPE lvc_s_fcat,
          gd_tab_group TYPE slis_t_sp_group_alv,
          gd_layout    TYPE lvc_s_layo,     "slis_layout_alv,
          gd_repid     LIKE sy-repid.
    START-OF-SELECTION.
      PERFORM data_retrieval.
      PERFORM set_specific_field_attributes.
      PERFORM build_fieldcatalog.
      PERFORM build_layout.
      PERFORM display_alv_report.
    *&      Form  BUILD_FIELDCATALOG
          Build Fieldcatalog for ALV Report
    FORM build_fieldcatalog.
      wa_fieldcat-fieldname   = 'ZCUSTID'.
      wa_fieldcat-scrtext_m   = 'CUSTOMER ID'.
      wa_fieldcat-col_pos     = 0.
      wa_fieldcat-outputlen   = 10.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR  wa_fieldcat.
      wa_fieldcat-fieldname   = 'ZCUSTNAME'.
      wa_fieldcat-scrtext_m   = 'CUSTOMER NAME'.
      wa_fieldcat-col_pos     = 1.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR  wa_fieldcat.
      wa_fieldcat-fieldname   = 'ZADDR'.
      wa_fieldcat-scrtext_m   = 'ADDRESS'.
      wa_fieldcat-col_pos     = 2.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR  wa_fieldcat.
      wa_fieldcat-fieldname   = 'ZCITY'.
      wa_fieldcat-scrtext_m   = 'CITY'.
      wa_fieldcat-col_pos     = 3.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR  wa_fieldcat.
      wa_fieldcat-fieldname   = 'ZSTATE'.
      wa_fieldcat-scrtext_m   = 'STATE'.
      wa_fieldcat-col_pos     = 4.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR  wa_fieldcat.
      wa_fieldcat-fieldname   = 'ZCOUNTRY'.
      wa_fieldcat-scrtext_m   = 'COUNTRY'.
      wa_fieldcat-col_pos     = 5.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR  wa_fieldcat.
      wa_fieldcat-fieldname   = 'ZPHONE'.
      wa_fieldcat-scrtext_m   = 'PHONE NUMBER'.
      wa_fieldcat-col_pos     = 6.
    wa_fieldcat-edit        = 'X'. "sets whole column to be editable
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR  wa_fieldcat.
      wa_fieldcat-fieldname   = 'ZEMAIL'.
      wa_fieldcat-scrtext_m   = 'EMAIL'.
      wa_fieldcat-edit        = 'X'. "sets whole column to be editable
      wa_fieldcat-col_pos     = 7.
      wa_fieldcat-outputlen   = 15.
      wa_fieldcat-datatype     = 'CURR'.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR  wa_fieldcat.
      wa_fieldcat-fieldname   = 'ZFAX'.
      wa_fieldcat-scrtext_m   = 'FAX'.
      wa_fieldcat-col_pos     = 8.
      wa_fieldcat-edit        = 'X'. "sets whole column to be editable
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR  wa_fieldcat.
      wa_fieldcat-fieldname   = 'ZSTAT'.
      wa_fieldcat-scrtext_m   = 'STATUS'.
      wa_fieldcat-col_pos     = 9.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR  wa_fieldcat.
    ENDFORM.                    " BUILD_FIELDCATALOG
    *&      Form  BUILD_LAYOUT
          Build layout for ALV grid report
    FORM build_layout.
    Set layout field for field attributes(i.e. input/output)
      gd_layout-stylefname = 'FIELD_STYLE'.
      gd_layout-zebra             = 'X'.
    ENDFORM.                    " BUILD_LAYOUT
    *&      Form  DISPLAY_ALV_REPORT
          Display report using ALV grid
    FORM display_alv_report.
      gd_repid = sy-repid.
    call function 'REUSE_ALV_GRID_DISPLAY'
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
        EXPORTING
          i_callback_program = gd_repid
          is_layout_lvc      = gd_layout
          it_fieldcat_lvc    = it_fieldcat
          i_save             = 'X'
        TABLES
          t_outtab           = it_wi_zcust_master2
        EXCEPTIONS
          program_error      = 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.
    ENDFORM.                    " DISPLAY_ALV_REPORT
    *&      Form  DATA_RETRIEVAL
          text
    -->  p1        text
    <--  p2        text
    FORM data_retrieval .
      DATA: ld_color(1) TYPE c.
      SELECT zcustid zcustname zaddr zcity zstate zcountry zphone zemail
    zfax zstat UP TO 10 ROWS FROM zcust_master2 INTO CORRESPONDING FIELDS OF
    TABLE it_wi_zcust_master2.
    ENDFORM.                    "data_retrieval
    *&      Form  set_specific_field_attributes
          populate FIELD_STYLE table with specific field attributes
    FORM set_specific_field_attributes .
      DATA ls_stylerow TYPE lvc_s_styl .
      DATA lt_styletab TYPE lvc_t_styl .
    Populate style variable (FIELD_STYLE) with style properties
    The following code sets it to be disabled(display only) if 'ZFAX'
    is NOT INITIAL.
      LOOP AT it_wi_zcust_master2 INTO  wa_zcust_master2.
        IF  wa_zcust_master2-zfax IS NOT INITIAL.
          ls_stylerow-fieldname = 'ZFAX' .
          ls_stylerow-style = cl_gui_alv_grid=>mc_style_disabled.
                                          "set field to disabled
          APPEND ls_stylerow  TO  wa_zcust_master2-field_style.
          MODIFY it_wi_zcust_master2  FROM  wa_zcust_master2.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    "set_specific_field_attributes
    Regards,
    K.Tharani.

  • Webdynpro :: Hierarchical ALV display

    Hello All,
    I am new to Webdynpro ABAP. I am having a problem in ALV Hierarchical List display.
    As per my requirement, I need to display an ALV Hierarchical List with first column as Hierarchical column.
    Hierarchical level shpuld be up to 6 levels.
    I have made the table as Hierarchical table , set the column as hierarchy.
    I am able to display only one node and one leaf.
    Sample Code:
    data : alv_config_table type ref to CL_SALV_WD_CONFIG_TABLE.
      wd_this->alv_config_table->if_salv_wd_table_settings~set_display_type(
                if_salv_wd_c_table_settings=>display_type_hierarchy ).
      DATA : lr_column_hier  TYPE REF TO cl_salv_wd_column.
    lr_column_hier = wd_this->alv_config_table->if_salv_wd_column_settings~get_column( 'NODE_CONTENT' ).
      lr_column_hier->if_salv_wd_column_hierarchy~set_hierarchy_column( abap_true ).
    Anyone can suggest, how I can display multi level hierarchy for the same column.
    Thanks in advance for yours inputs.
    Hari Gajula

    Hi,
    You can refer this article: [ALV and Standard Table as Hierarchy in Web Dynpro ABAP|http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/c060fcb4-2c62-2b10-d2b2-f32407a5cc6f].
    I hope it helps.
    Regards
    Arjun

  • Urgent: Add a custom line in Hierarchical ALV.

    Hi
    I am using the FM 'REUSE_ALV_HIERSEQ_LIST_DISPLAY' to display the header and item table details.  However I would like to add a custom line below the item details of each section so that I can calculate the total (total of a particular field in the item table) and print it in this line....How do I do this....
    Thanks..
    Vijay

    Hi,
    See the attached report which is used to display Hierarchial display for header and item;
    REPORT  zwmr_pick_status_report NO STANDARD PAGE HEADING
                                    MESSAGE-ID zw.
    Type Pools                                                          
    TYPE-POOLS: icon, slis.
    Tables                                                              
    TABLES: tvst,
            likp,
            t30b,
            vekp,
            zhu_to_link,                                       
            zpallettr,
            vttk,                                              
            zvantr.
    Types                                                               
    TYPES:
      BEGIN OF ty_data,
         lgtor       LIKE likp-lgtor,             " door
         vbeln       LIKE likp-vbeln,             " delivery
         wbstk       LIKE vbuk-wbstk,             " Goods movement status
         kostk       LIKE vbuk-kostk,             " Picking status
         posnr       LIKE lips-posnr,             " item
         route       LIKE likp-route,             " route
         wadat       LIKE likp-wadat,             " goods issue date
         lvsta       LIKE vbup-lvsta,             " warehouse status
         packvorschr LIKE vekp-packvorschr,       " pack mnemonic
         exidv       LIKE vekp-exidv,             " handling unit
         zpallet_no(10),  "like zpallettr-zpallet_no,   " pallet no
         zdep_point  LIKE zpallettr-zdep_point,   "Departur Point "Jvdm01
         zcount_check LIKE zpallettr-zcount_check," count check flag
         zvan_no(10),     "like zvantr-zvan_no,         " van no
         zvan_print  LIKE zvantr-zvan_print,      " van manifest print
         tknum       LIKE vttk-tknum,             " Shipment No  "ANV 11523
         zeod_print  LIKE zvantr-zeod_print,      " eod manifest print
         zzpackclass LIKE vekp-zzpackclass,       " package class
         zzti        LIKE vekp-zzti,              " T.I. value
         vstel       LIKE likp-vstel,             "Shipping point RM050906
         anzpk       TYPE znopack,            "No of packages in dlv MB01+
      END OF ty_data.
    TYPES:BEGIN OF x_likp ,
          vbeln LIKE likp-vbeln,
          vstel LIKE likp-vstel,                              
          lgtor LIKE likp-lgtor,
          zzroute2lgtor LIKE likp-zzroute2lgtor,               
          route LIKE likp-route,
          wadat LIKE likp-wadat,
          zz2route LIKE likp-zz2route,                         
          zzexproute LIKE likp-zzexproute,                     
          zzroute2 LIKE likp-zzroute2,                        
          anzpk    LIKE likp-anzpk,
          END OF x_likp.
    TYPES: BEGIN OF x_vbuk,
           vbeln TYPE vbuk-vbeln,
           wbstk TYPE vbuk-wbstk,             " Goods movement status
           kostk TYPE vbuk-kostk,             " Picking status
           END OF x_vbuk.
    TYPES: BEGIN OF x_lips,
          vbeln TYPE lips-vbeln,             " delivery
          posnr TYPE lips-posnr,             " item
          pstyv TYPE lips-pstyv,
          matnr TYPE lips-matnr,
          charg TYPE lips-charg,
          END OF x_lips.
    TYPES: BEGIN OF x_vbup,
           vbeln TYPE vbup-vbeln,             " delivery
           posnr TYPE vbup-posnr,             " item
           lvsta TYPE vbup-lvsta,             " warehouse status
           END OF x_vbup.
    TYPES: BEGIN OF x_vepo,
           venum TYPE vepo-venum,             "Internal Handling Unit
    Number
           vepos TYPE vepo-vepos,             "Handling Unit Item
           vbeln TYPE vepo-vbeln,             " delivery
           posnr TYPE vepo-posnr,             " item
           exidv TYPE vekp-exidv,
           END OF x_vepo.
    TYPES: BEGIN OF x_vepo1,
           venum TYPE vekp-venum,             "Internal Handling Unit
    Number
           exidv TYPE vekp-exidv,
           END OF x_vepo1.
    Start of changes by ANV SR#11523
    TYPES: BEGIN OF x_vttp,
             tknum TYPE tknum,                  " Shipment No
             tpnum TYPE tpnum,                  " Item No
             vbeln TYPE vbup-vbeln,             " delivery
             laufk LIKE vttk-laufk,             " leg indicator MB01+
           END OF x_vttp.
    End of changes by ANV SR#11523
    Data                                                                
    RANGES: r_del   FOR likp-vbeln,
            r_lgtor FOR likp-lgtor.
    RANGES: r_vanno FOR zvantr-zvan_no,
            r_palno FOR zpallettr-zpallet_no.
    DATA: BEGIN OF number_range OCCURS 0,
             mark(1),
             id(3),
             num(10) TYPE n,
             desc LIKE zpalletmd-zdesc,
          END OF number_range.
    DATA: t_disp_tab  TYPE STANDARD TABLE OF zpickdisp,
          t_data_tab  TYPE ty_data  OCCURS 0 WITH HEADER LINE,
          it_likp TYPE x_likp OCCURS 0 WITH HEADER LINE,         "SUM
          it_vbuk TYPE x_vbuk OCCURS 0 WITH HEADER LINE,         "SUM
          it_lips TYPE x_lips OCCURS 0 WITH HEADER LINE,         "SUM
          it_vbup TYPE x_vbup OCCURS 0 WITH HEADER LINE,         "SUM
          it_vepo TYPE x_vepo OCCURS 0 WITH HEADER LINE,         "SUM
          it_vepo2 TYPE x_vepo OCCURS 0 WITH HEADER LINE,        "SUM
    *{   INSERT         UKMK900355                                        3
          t_vepo_low TYPE x_vepo OCCURS 0 WITH HEADER LINE,     " AS01
    *}   INSERT
          it_vepo1 TYPE x_vepo1 OCCURS 0 WITH HEADER LINE,       "SUM
          it_vttp TYPE x_vttp OCCURS 0 WITH HEADER LINE,
    t_disp_head TYPE STANDARD TABLE OF zpickhead.
    DATA wa_item_tab TYPE zpickdisp OCCURS 0 WITH HEADER LINE.
    "ANV SR#11113
    DATA: w_numrnge LIKE number_range,
          w_number(10) TYPE n.
    DATA: t_likp     LIKE likp      OCCURS 0 WITH HEADER LINE,
          t_lips     LIKE lips      OCCURS 0 WITH HEADER LINE,
          t_vbuk     LIKE vbuk      OCCURS 0 WITH HEADER LINE,
          t_vbup     LIKE vbup      OCCURS 0 WITH HEADER LINE,
          t_vepo     LIKE vepo      OCCURS 0 WITH HEADER LINE,
          t_vekp     LIKE vekp      OCCURS 0 WITH HEADER LINE,
          t_vantr    LIKE zvantr    OCCURS 0 WITH HEADER LINE,
          t_pallettr LIKE zpallettr OCCURS 0 WITH HEADER LINE,
         w_likp     like likp,
         w_lips     LIKE lips,
         w_vbuk     LIKE vbuk,
         w_vbup     LIKE vbup,
         w_vepo     LIKE vepo,
          w_vekp     LIKE vekp,
          w_vepo     TYPE x_vepo1,
          w_vbup     TYPE x_vbup,
          w_vttp     TYPE x_vttp,    " ANV SR#11523
          w_lips     TYPE x_lips,
          w_vbuk     TYPE x_vbuk,
          w_likp     TYPE x_likp,                               "MB01-+
          w_tplst    LIKE vttk-tplst.                           "MB01+
    DATA: s_variant  LIKE disvariant,                           "MB01+
          def_variant LIKE disvariant.
    ALV DATA *****
    DATA:
         g_grid             TYPE REF TO cl_gui_alv_grid,
         g_sort             TYPE slis_t_sortinfo_alv,
         g_custom_container TYPE REF TO cl_gui_custom_container,
         g_layout           TYPE slis_layout_alv,
         gt_fieldcat        TYPE slis_t_fieldcat_alv,
         t_fldcat           LIKE LINE OF gt_fieldcat,
         g_keyinfo          TYPE slis_keyinfo_alv,
         gt_events          TYPE slis_t_event,
         gs_event           TYPE slis_alv_event,
         w_sy_repid         LIKE sy-repid.
    DATA: BEGIN OF seltab OCCURS 0.
            INCLUDE STRUCTURE rsparams.
    DATA: END OF seltab.
    SYSTEM GENERATED TABLE CONTROL DATA ********
    DECLARATION OF TABLECONTROL 'TC_TABCON' ITSELF
    CONTROLS: tc_tabcon TYPE TABLEVIEW USING SCREEN 0100.
    LINES OF TABLECONTROL 'TC_TABCON'
    DATA:     g_tc_tabcon_lines  LIKE sy-loopc.
    DATA:     ok_code LIKE sy-ucomm.
    Constants                                                           
    CONSTANTS: c_data_class LIKE klah-class VALUE 'DG_DATA',
               c_mat_class  LIKE rmclf-klart VALUE '001',
               c_pack       LIKE lips-mtart VALUE 'VERP',
               c_a(1)            VALUE 'A',
               c_b(1)            VALUE 'B',
               c_c(1)            VALUE 'C',
               c_yes(1)          VALUE 'X',
               c_no(1)           VALUE ' '.
    Selection screen                                                    
    standard report select options block
    SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-002.
    SELECT-OPTIONS:
      s_wadat FOR likp-wadat NO-EXTENSION OBLIGATORY.  " Goods Issue Date
    *parameters:                                           "TR01-
    p_vstel like tvst-vstel obligatory. " Shipping Point "TR01-
    SELECT-OPTIONS:                                             "TR01+
      p_vstel FOR tvst-vstel.            " Shipping Point  "TR01+
    SELECT-OPTIONS:
      s_lfart FOR likp-lfart,            " Delivery type
      s_lgtor FOR t30b-lgtor,            " Door selection
      s_exidv FOR vekp-exidv,            " Handling Unit
      s_vbeln FOR likp-vbeln,            " Delivery            "MB01-+
      s_lfdat FOR likp-lfdat.            " Delivery date
    PARAMETERS:
      p_exdata AS CHECKBOX.              " Show extra columns flag
    SELECTION-SCREEN END OF BLOCK a.
    van/pallet specific select options block
    SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-001.
    SELECT-OPTIONS:
      s_palno FOR zpallettr-zpallet_no, " no-extension,
      s_vanno FOR zvantr-zvan_no.       " no-extension.
    SELECT-OPTIONS:
      s_deppnt FOR zpallettr-zdep_point,                        "Jvdm01
      s_tplst  FOR vttk-tplst.                                  "MB01
    SELECTION-SCREEN END OF BLOCK b.
    MB01 - START - Display variant
    SELECTION-SCREEN BEGIN OF BLOCK c WITH FRAME TITLE text-019.
    PARAMETERS: p_vari LIKE disvariant-variant.
    SELECTION-SCREEN END OF BLOCK c.
    MB01 - END
    Value Request Events                                                
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_palno-low.
      CLEAR: number_range, w_number .
      REFRESH number_range.
    select numbers and display pop up screen for selection
      PERFORM select_pal_nos.
      s_palno-low = w_number.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_palno-high.
      CLEAR: number_range, w_number .
      REFRESH number_range.
    select numbers and display pop up screen for selection
      PERFORM select_pal_nos.
      s_palno-high = w_number.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_vanno-low.
      CLEAR: number_range, w_number .
      REFRESH number_range.
    select numbers and display pop up screen for selection
      PERFORM select_van_nos.
      s_vanno-low = w_number.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_vanno-high.
      CLEAR: number_range, w_number .
      REFRESH number_range.
    select numbers and display pop up screen for selection
      PERFORM select_van_nos.
      s_vanno-high = w_number.
    MB01 - START - display variant
    F4-Help for variant
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
      PERFORM f4_for_variant.
    MB01 - END
    At Selection Screen                                                 
    AT SELECTION-SCREEN.
      PERFORM validate_selections.
    Initialization                                                      
    INITIALIZATION.
    MB01 - START INSERT
    1.  Transportation planning point
    Import transportation planning point from user parameters and
    populate
    select option.
      GET PARAMETER ID 'TDP' FIELD w_tplst.
      MOVE: 'I'      TO s_tplst-sign,
             'EQ'     TO s_tplst-option,
             w_tplst TO s_tplst-low.
      APPEND s_tplst.
    2.  Display variant
      CLEAR s_variant.
      s_variant-report = sy-repid.
    Get default variant
    s_def_variante = s_variant.
      CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
           EXPORTING
                i_save     = 'A'
           CHANGING
                cs_variant = s_variant
           EXCEPTIONS
                not_found  = 2.
      IF sy-subrc = 0.
        p_vari = s_variant-variant.
      ENDIF.
    MB01 - END INSERT
    Start of selection                                                  
    START-OF-SELECTION.
    clear all data tables
      CLEAR: t_likp,
            it_likp,
             t_lips,
             t_vbuk,
             t_vbup,
             t_vepo,
             t_vantr,
             t_pallettr,
             w_likp,
             w_lips,
             w_vbuk,
             w_vbup,
             w_vepo,
             w_vekp.
      REFRESH: t_likp,
              it_likp,
               t_lips,
               t_vbuk,
               t_vbup,
               t_vepo,
               t_vantr,
               t_pallettr.
    select data for ALV
    due to different input parameters being used, to streamline the data
    selection process, different selection methods are required
      IF NOT s_vanno IS INITIAL
      OR NOT s_palno IS INITIAL
      OR NOT s_deppnt IS INITIAL.                               "Jvdm01
      if selecting by van/pallet number, need to select the data from the
      handling unit upwards to delivery
        PERFORM select_data_up.
      ELSE.
      otherwise the data can be selected from the delivery downwards
        PERFORM select_data_down.
      ENDIF.
    End of selection                                                    
    END-OF-SELECTION.
    call hierarchical ALV display function module
      CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
           EXPORTING
                i_callback_program       = 'ZWMR_PICK_STATUS_REPORT'
                i_callback_pf_status_set = 'SET_STATUS'
                i_callback_user_command =
                   'USER_COMMAND' "custom gui status form
                is_layout                = g_layout  "user command form
                it_fieldcat              = gt_fieldcat
                it_sort                  = g_sort
                i_save                   = 'X'                  "MB01+
                is_variant               = s_variant
                it_events                = gt_events
                i_tabname_header         = 't_disp_head'
                i_tabname_item           = 't_disp_tab'
                i_structure_name_header  = 'ZPICKHEAD'
                i_structure_name_item    = 'ZPICKDISP'
                is_keyinfo               = g_keyinfo
           TABLES
                t_outtab_header          = t_disp_head
                t_outtab_item            = t_disp_tab.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
                                FORMS                                   
    Includes inserted by Screen Painter Wizard. DO NOT CHANGE THIS LINE!
    INCLUDE zwmr_pick_o01.
      INCLUDE zwmr_pick_status_reporto01 .
    INCLUDE zwmr_pick_i01.
      INCLUDE zwmr_pick_status_reporti01 .
    INCLUDE zwmr_pick_f01.
      INCLUDE zwmr_pick_status_reportf01 .
    *&      Form  select_pal_nos
          select pallet numbers for search help
    FORM select_pal_nos.
      DATA: BEGIN OF t_palno OCCURS 0,
              zpallet_no LIKE zpallettr-zpallet_no,
            END OF t_palno.
    select all available pallet numbers
      SELECT DISTINCT zpallet_no FROM zpallettr
                      INTO CORRESPONDING FIELDS OF TABLE t_palno.
      LOOP AT t_palno.
      get pallet id
        SELECT SINGLE zpallet_id FROM zpallettr
                      INTO number_range-id
                      WHERE zpallet_no = t_palno-zpallet_no.
      get pallet description
        SELECT SINGLE zdesc FROM zpalletmd
                      INTO number_range-desc
                      WHERE zpallet_id = number_range-id.
        number_range-num = t_palno-zpallet_no.
      append to search help table
        APPEND number_range.
      ENDLOOP.
    call pop up dialog box
      CALL SCREEN 0100 STARTING AT 5 5.
    ENDFORM.                    " select_pal_nos
    *&      Form  select_van_nos
          select van numbers for search help
    FORM select_van_nos.
      DATA: BEGIN OF t_vanno OCCURS 0,
              zvan_no LIKE zvantr-zvan_no,
            END OF t_vanno.
    select available van numbers
      SELECT DISTINCT zvan_no FROM zvantr
                      INTO CORRESPONDING FIELDS OF TABLE t_vanno.
      LOOP AT t_vanno.
      select van id
        SELECT SINGLE zvan_id FROM zvantr
                      INTO number_range-id
                      WHERE zvan_no = t_vanno-zvan_no.
      select van description (maintained in pallet tables)
        SELECT SINGLE zdesc FROM zpalletmd
                      INTO number_range-desc
                      WHERE zpallet_id = number_range-id.
        number_range-num = t_vanno-zvan_no.
      append to search help table
        APPEND number_range.
      ENDLOOP.
    call pop up dialog box
      CALL SCREEN 0100 STARTING AT 5 5.
    ENDFORM.                    " select_van_nos
    *&      Form  select_data_down
          select data if selecting from delivery down
    FORM select_data_down.
    select all deliveries from LIKP that fulfill selection criteria
    Start SU01 optmization changes
    SELECT vbeln vstel lgtor route wadat                      "RM050906
      SELECT vbeln vstel lgtor route wadat
             zzroute2lgtor zz2route zzexproute zzroute2 anzpk      "MB01-+
               FROM likp INTO CORRESPONDING FIELDS OF TABLE it_likp"MB01-+
                         WHERE vbeln IN s_vbeln
                         AND   vstel IN p_vstel
                         AND   lfart IN s_lfart
                         AND   wadat IN s_wadat
                         AND   lfdat IN s_lfdat                    "MB01+
                         AND
                 ( lgtor IN s_lgtor OR zzroute2lgtor IN s_lgtor ) ."MB01+
      IF sy-subrc NE 0.
      no data found
        MESSAGE i007.
        EXIT.
      ENDIF.
    IF NOT t_likp[] IS INITIAL.                             "SUM
      IF NOT it_likp[] IS INITIAL.
        SORT it_likp BY vbeln.                                  "SUM
      select sales document headers from VBUK
        SELECT vbeln wbstk kostk
                    FROM vbuk INTO TABLE it_vbuk
                     FOR ALL ENTRIES IN it_likp                "SUM
                     WHERE vbeln EQ it_likp-vbeln.             "SUM
        SORT it_vbuk BY vbeln.
      select all relevant delivery items from LIPS
        SELECT vbeln posnr pstyv matnr charg
                    FROM lips INTO TABLE it_lips
                      FOR ALL ENTRIES IN it_likp
                      WHERE vbeln EQ it_likp-vbeln
                      AND   pckpf NE 'B'           "cannot be packed  "AS05
                    AND   pstyv NE 'ZPAC'                           "AS05
                    AND   pstyv NE 'ZGDP'                    "TR02+ "AS05
                      AND   lfimg GT 0.                         "TR01+
      ENDIF.
      IF NOT it_lips[] IS INITIAL.
      select all sales document line items from VBUP
        SORT it_lips BY vbeln posnr.                      "SUM
        SELECT vbeln posnr lvsta
                    FROM vbup INTO TABLE it_vbup
                      FOR ALL ENTRIES IN it_lips
                      WHERE vbeln EQ it_lips-vbeln
                      AND   posnr = it_lips-posnr.
        SORT it_vbup BY vbeln posnr.
      select corresponding handling unit ID's (venum)
    TR03 Replace
    start
       select * from vepo appending corresponding fields of table t_vepo
                     for all entries in t_lips
                     where vbeln = t_lips-vbeln
                     and   posnr = t_lips-posnr
                     and   matnr = t_lips-matnr
                     and   charg = t_lips-charg.
       SELECT vepoVENUM vepoVEPOS vepovbeln vepoposnr
                     FROM vepo as vepo
                     INNER JOIN vekp as vekp ON vepovenum = vekpvenum
                     APPENDING corresponding fields of table it_vepo
                     FOR ALL ENTRIES IN it_lips
                     WHERE vepo~vbeln = it_lips-vbeln
                     AND   vepo~posnr = it_lips-posnr
                     AND   vepo~matnr = it_lips-matnr
                     AND   vepo~charg = it_lips-charg
                     AND   vekp~exidv IN s_exidv.
        SELECT venum vepos vbeln posnr
                      FROM vepo INTO TABLE it_vepo2
                      FOR ALL ENTRIES IN it_lips
                      WHERE vbeln = it_lips-vbeln
                      AND   posnr = it_lips-posnr
                      AND   matnr = it_lips-matnr
                      AND   charg = it_lips-charg.
        SORT it_vepo2 BY venum vepos.
    *{   INSERT         UKMK900355                                        1
      Ice-multis: replace lower-level HUs with highest level       " AS01
        PERFORM replace_highest_hu.                             " AS01
    *}   INSERT
    Start of changes by ANV SR#11523
    MB01 - extract shipment header as well to populate leg indicator
    Therefore, join vttp with vttk
    Limit as well by transportation planning point
        SELECT vttptknum vttptpnum vttpvbeln vttklaufk
                      FROM vttp INNER JOIN vttk
                      ON vttptknum = vttktknum
                      INTO  TABLE it_vttp
                      FOR ALL ENTRIES IN it_lips
                      WHERE vttp~vbeln = it_lips-vbeln
                      AND   vttk~tplst IN s_tplst.
    MB01 - END
    End of changes by ANV SR#11523
        IF NOT it_vepo2[] IS INITIAL.
          SELECT venum exidv
                        FROM vekp INTO TABLE it_vepo1
                        FOR ALL ENTRIES IN it_vepo2
                        WHERE venum = it_vepo2-venum
                        AND   exidv IN s_exidv.
        ENDIF.
        SORT it_vepo1 BY venum.
        CLEAR: w_vepo, it_vepo.
        LOOP AT it_vepo1.
          READ TABLE it_vepo2 WITH KEY venum = it_vepo1-venum.
          IF sy-subrc = 0.
            it_vepo2-exidv = it_vepo1-exidv.
            MODIFY it_vepo2 TRANSPORTING exidv
               WHERE venum = it_vepo1-venum .
          ENDIF.
        ENDLOOP.
        DELETE it_vepo2 WHERE exidv IS initial.
        it_vepo[] = it_vepo2[].
    TR03 Replace end
      ENDIF.
    build process table
      PERFORM move_to_table.
    ENDFORM.   "select_data_down
    *&      Form  select_data_up
          select data if selecting from van/pallet up
    FORM select_data_up.
      IF NOT s_vanno IS INITIAL.
      if van then select van numbers and hence pallet numbers
        SELECT * FROM zvantr INTO TABLE t_vantr
                              WHERE zvan_no IN s_vanno.
                            and   vstel   eq p_vstel."TR01-
        IF NOT t_vantr[] IS INITIAL.
          SORT t_vantr BY zvan_id zvan_no vstel zpallet_no.  "SUM
          SELECT * FROM zpallettr INTO TABLE t_pallettr
                                  FOR ALL ENTRIES IN t_vantr
                                  WHERE zpallet_no EQ t_vantr-zpallet_no
                                    AND zdep_point IN s_deppnt. "Jvdm01
                                and   vstel      eq p_vstel."TR01-
        ENDIF.
      ELSE.
      otherwise can get pallet numbers directly
        SELECT * FROM zpallettr INTO TABLE t_pallettr
                                WHERE zpallet_no IN s_palno
                                  AND zdep_point IN s_deppnt.   "Jvdm01
                              and   vstel      eq p_vstel."TR01-
      ENDIF.
      IF NOT t_pallettr[] IS INITIAL.
      from the pallet nos. we can select the handling units
        SORT t_pallettr BY zpallet_id zpallet_no vstel exidv.   "SUM
        SELECT * FROM vekp INTO TABLE t_vekp
                           FOR ALL ENTRIES IN t_pallettr
                           WHERE exidv EQ t_pallettr-exidv
                           AND   exidv NE space
                           AND   exidv IN s_exidv               "TR03+
                           AND ( exida = 'E'                    "TR01+
                           OR    exida = 'F' ).                 "TR01+
      ENDIF.
      SORT t_vekp BY venum.                                    "SUM
      IF NOT t_vekp[] IS INITIAL.
      build vbeln range from t_vekp.
        LOOP AT t_vekp.
          r_del-sign = 'I'.
          r_del-option = 'EQ'.
          r_del-low = t_vekp-vpobjkey.
          APPEND r_del.
        ENDLOOP.
      select all deliveries from LIKP that correspond to HU's
       SELECT * FROM likp INTO TABLE t_likp
                          WHERE vbeln IN r_del
                          AND   wadat IN s_wadat
                          AND   lfart IN s_lfart.
    ENDIF.
    MB01- START
       SELECT vbeln lgtor route wadat
                    FROM likp INTO TABLE it_likp
                        WHERE vbeln IN r_del
                        AND   wadat IN s_wadat
                        AND   lfart IN s_lfart.
        SELECT vbeln vstel lgtor route wadat
               zzroute2lgtor zz2route zzexproute zzroute2 anzpk "MB01-+
                 FROM likp INTO CORRESPONDING FIELDS OF TABLE it_likp
                           WHERE vbeln IN r_del
                           AND   lfart IN s_lfart
                           AND   wadat IN s_wadat               "MB01-+
                           AND   lfdat IN s_lfdat.              "MB01+
    MB01- END
      ENDIF.
      IF NOT it_likp[] IS INITIAL.
        SORT it_likp BY vbeln .                                   "SUM
      select sales document headers from VBUK
       SELECT * FROM vbuk INTO TABLE t_vbuk
                     FOR ALL ENTRIES IN t_likp
                     WHERE vbeln EQ t_likp-vbeln.
        SELECT vbeln wbstk kostk
                  FROM vbuk INTO TABLE it_vbuk
                     FOR ALL ENTRIES IN it_likp
                     WHERE vbeln EQ it_likp-vbeln.
        SORT it_vbuk BY vbeln.                                   "SUM
      select all relevant delivery items from LIPS
       SELECT * FROM lips INTO TABLE t_lips
                     FOR ALL ENTRIES IN t_likp
                     WHERE vbeln EQ t_likp-vbeln
                     AND   pstyv NE 'ZPAC'
                     AND   pstyv NE 'ZGDP'                     "TR02+
                     AND   lfimg GT 0.                         "TR01+
        SELECT vbeln posnr pstyv matnr charg
                          FROM lips INTO TABLE it_lips
                          FOR ALL ENTRIES IN it_likp
                          WHERE vbeln EQ it_likp-vbeln
                          AND   pckpf NE 'B'       "cannot be packed  "AS05
                        AND   pstyv NE 'ZPAC'                       "AS05
                        AND   pstyv NE 'ZGDP'                "TR02+ "AS05
                          AND   lfimg GT 0.                     "TR01+
      ENDIF.
      IF NOT it_lips[] IS INITIAL.
        SORT it_lips BY vbeln posnr.                              "SUM
      select all sales document line items from VBUP
       SELECT * FROM vbup INTO TABLE t_vbup
                     FOR ALL ENTRIES IN t_lips
                     WHERE vbeln EQ t_lips-vbeln
                     AND   posnr = t_lips-posnr.
    Start of changes by ANV SR#11523
    MB01 - START
    join vttp with vttk to obtain leg indicator
       SELECT tknum tpnum vbeln
                     FROM vttp INTO TABLE it_vttp
                     FOR ALL ENTRIES IN it_lips
                     WHERE vbeln = it_lips-vbeln.
        SELECT vttptknum vttptpnum vttpvbeln vttklaufk
                      FROM vttp INNER JOIN vttk
                      ON vttptknum = vttktknum
                      INTO  TABLE it_vttp
                      FOR ALL ENTRIES IN it_lips
                      WHERE vttp~vbeln = it_lips-vbeln
                      AND   vttk~tplst IN s_tplst.
    MB01 - END
    End of changes by ANV SR#11523
        SELECT vbeln posnr lvsta
                    FROM vbup INTO TABLE it_vbup
                    FOR ALL ENTRIES IN it_lips
                      WHERE vbeln EQ it_lips-vbeln
                      AND   posnr = it_lips-posnr.
        SORT t_vbup BY vbeln posnr.                                "SUM
      select corresponding handling unit ID's (venum)
       SELECT * FROM vepo APPENDING CORRESPONDING FIELDS OF TABLE t_vepo
                     FOR ALL ENTRIES IN t_lips
                     WHERE vbeln = t_lips-vbeln
                     AND   posnr = t_lips-posnr
                     AND   matnr = t_lips-matnr
                     AND   charg = t_lips-charg.
        SELECT venum vepos vbeln posnr
        FROM vepo APPENDING CORRESPONDING FIELDS OF TABLE it_vepo
                         FOR ALL ENTRIES IN it_lips
                         WHERE vbeln = it_lips-vbeln
                         AND   posnr = it_lips-posnr
                         AND   matnr = it_lips-matnr
                         AND   charg = it_lips-charg.
    *{   INSERT         UKMK900355                                        1
        it_vepo2[] = it_vepo[].                                 " DS01
        PERFORM replace_highest_hu.                             " DS01
        it_vepo[] = it_vepo2[].                                 " DS01
    *}   INSERT
      ENDIF.
    build process table
      PERFORM move_to_table.
    ENDFORM.   "select_data_up
    *&      Form  move_to_table
          move data to processing table
    FORM move_to_table.
      LOOP AT it_vepo.
        CLEAR t_data_tab.
      delivery lines.
        CLEAR w_lips.
        READ TABLE it_lips WITH KEY vbeln = it_vepo-vbeln
                                   posnr = it_vepo-posnr
                                   INTO w_lips BINARY SEARCH.     "SUM
        MOVE-CORRESPONDING w_lips TO t_data_tab.
      sales document line items
        CLEAR w_vbup.
        READ TABLE it_vbup WITH KEY vbeln = it_vepo-vbeln
                                   posnr = it_vepo-posnr
                                   INTO w_vbup BINARY SEARCH.     "SUM
      if w_vbup-kosta = space.                   "TR01-
        not relevant for picking
        delete t_vepo.                           "TR01-
        continue.                                "TR01-
      else.                                      "TR01-
        MOVE-CORRESPONDING w_vbup TO t_data_tab.
      endif.                                     "TR01-
      sales doc header
        CLEAR w_vbuk.
        READ TABLE it_vbuk WITH KEY vbeln = it_vepo-vbeln
                               INTO w_vbuk   BINARY SEARCH.       "SUM
        MOVE-CORRESPONDING w_vbuk TO t_data_tab.
      delivery header
        CLEAR w_likp.
        READ TABLE it_likp WITH KEY vbeln = it_vepo-vbeln
                               INTO w_likp BINARY SEARCH.         "SUM
        MOVE-CORRESPONDING w_likp TO t_data_tab.
    MB01 - START
      DATA: w_routetype TYPE i. "0=non-global,1=1st route,2=2nd
    route,3=both
    At this point move DOOR2 if it falls within the global route scenario
    and the door2 is satisfies the selection criteria for door
    1.   Does delivery fall within global route scenario
        CLEAR w_routetype.
        IF  w_likp-zz2route = 'Y' .
    1.a. First route - does door1 satisfy the selection criteria
          IF w_likp-lgtor IN s_lgtor.
            w_routetype = 1.
            MOVE w_likp-zzexproute TO t_data_tab-route.
    1.b. Second route - does door2 satisfy the selection criteria
          ELSEIF w_likp-zzroute2lgtor IN s_lgtor.
      here we need to move door2 to lgtor
            w_routetype = 2.
            MOVE w_likp-zzroute2lgtor TO t_data_tab-lgtor.
            MOVE w_likp-zzroute2 TO t_data_tab-route.
          ENDIF.
    If both routes satsify the criteria, append for 2nd leg  ***REVISIT!
          IF w_likp-lgtor IN s_lgtor AND w_likp-zzroute2lgtor IN s_lgtor.
            w_routetype = 3.
          ENDIF.
        ENDIF.
    MB01 - END
    Start of changes by ANV SR#11523
    MB01 - If the delivery falls within the global route scenario... need
    to select either preliminary shipment leg OR subsequent leg
    when laufk= 1 (prelim) and linked to route1, if laufk = 2 (subseq) &
    linked to route2
      Shipment Number
        SORT it_vttp BY vbeln laufk.
        CLEAR w_vttp.
        CASE w_routetype.
          WHEN 0.
            READ TABLE it_vttp WITH KEY vbeln = it_vepo-vbeln
                                   INTO w_vttp BINARY SEARCH.
          WHEN 1.
            READ TABLE it_vttp WITH KEY vbeln = it_vepo-vbeln
                                        laufk  = '1'
                                   INTO w_vttp BINARY SEARCH.
          WHEN 2.
            READ TABLE it_vttp WITH KEY vbeln = it_vepo-vbeln
                                        laufk  = '3'
                                   INTO w_vttp BINARY SEARCH.
          WHEN 3.  "REVISIT
        ENDCASE.
        MOVE w_vttp-tknum TO t_data_tab-tknum.
    MB01 - END
    End of changes by ANV SR#11523
      select handling unit info using vepo entry
        CLEAR w_vekp.
        IF t_vekp[] IS INITIAL.
          SELECT SINGLE * FROM vekp INTO w_vekp
                                    WHERE venum = it_vepo-venum.
        ELSE.
          READ TABLE t_vekp WITH KEY venum = it_vepo-venum
                                     INTO w_vekp  BINARY SEARCH.     "SUM
          IF sy-subrc NE 0.
            SELECT SINGLE * FROM vekp INTO w_vekp
                            WHERE venum = t_vepo-venum.
          ENDIF.
        ENDIF.
        MOVE-CORRESPONDING w_vekp TO t_data_tab.
    *{   INSERT         UKMK900355                                        2
      WM status for HU                                              "AS03
        SELECT SINGLE * FROM zhu_to_link WHERE lgnum EQ w_vekp-lgnum"AS03
                                         AND   exidv EQ w_vekp-exidv."AS03
        IF  sy-subrc EQ 0.                                      "AS03
          IF zhu_to_link-zpick_comp EQ space.                   "AS03
            t_data_tab-lvsta = 'B'.                             "AS03
          ELSE.                                                 "AS03
            t_data_tab-lvsta = 'C'.                             "AS03
          ENDIF.                                                "AS03
        ENDIF.                                                  "AS03
    *}   INSERT
      select pallet / van load information                     "Jvdm01-
       SELECT SINGLE zpallet_no zcount_check FROM zpallettr    "Jvdm01-
                                INTO (t_data_tab-zpallet_no,   "Jvdm01-
                                      t_data_tab-zcount_check) "Jvdm01-
                                WHERE exidv EQ w_vekp-exidv.   "Jvdm01-
        PERFORM read_pallet.                                     "MB01+
       SELECT SINGLE zpallet_no zcount_check zdep_point        "Jvdm01+
                                FROM zpallettr                 "Jvdm01+
                                INTO (t_data_tab-zpallet_no,   "Jvdm01+
                                      t_data_tab-zcount_check, "Jvdm01+
                                      t_data_tab-zdep_point)   "Jvdm01+
                                WHERE exidv EQ w_vekp-exidv.   "Jvdm01+
                                WHERE exidv EQ w_vekp-exidv    "MB

  • Dragdrop within ALV on certain column

    Hi,
    In a report I enabled drag & drop. It works fine. Whatever row/column I drag the event is picked up. The handle is given in the layout structure of the ALV (GS_LAYALV-S_DRAGDROP-ROW_DDID = HANDLE_ALV).
    I want to limit drag & drop to a specific column. According to my info you have to fill the field dragdropid of the fieldcat (lvc_s_fcat) with the handle. I did that but now drag & drop does not function anymore.
    Anyone there who knoes the steps to make d&d work for only a specific column within an ALV or has some clues to point me in the right direction.
    Bert

    Hi,
    Check this link.
    http://sap.ittoolbox.com/code/d.asp?d=2703&a=s
    This is an Example of two ALV Grid controls with drag and drop functionality between them. The user can drag any line from either ALV Grid and drop it to the other.

  • Editable fields in Hierarchical ALV output

    Hi Experts,
    I have developed a report using hierarchical ALV display. I wanted to make some of the fields(in a particular column) editable in the output of Hierarchical ALV. Please provide your suggestions with examples.
    Regards,
    Rajesh

    I am not getting what u mean,.
    Coz I have done the editable property in my hierarcical ALV only...
    I have header line and correspodning item lines.
    In all header line I will make the 3rd column as editable...
    CHECK below
    *& Report  ZFIR_WRITE_OFF
    REPORT  zfir_write_off
                    NO STANDARD PAGE HEADING
                    MESSAGE-ID zles.
    TYPE-POOLS
    TYPE-POOLS:slis.
    TABLES
    TABLES: kna1, t001, zdunning_data, bsid, t052.
    INTERNAL TABLES
    To check for bukrs in selection screen
    DATA: BEGIN OF t_t001 OCCURS 0,
            bukrs TYPE t001-bukrs,
          END OF t_t001.
    To check for the customer in selection screen
    DATA: BEGIN OF t_kna1 OCCURS 0,
            kunnr TYPE kna1-kunnr,
            name1 TYPE kna1-name1,
          END OF t_kna1.
    *Data from BSID table
    DATA: BEGIN OF t_bsid OCCURS 0,
          bukrs LIKE bsid-bukrs,
          budat LIKE bsid-budat,
          kunnr LIKE bsid-kunnr,
          belnr LIKE bsid-belnr,
          zfbdt LIKE bsid-zfbdt,
          zterm LIKE bsid-zterm,
          dmbtr LIKE bsid-dmbtr,
          waers LIKE bsid-waers,
          vbeln LIKE bsid-vbeln,
          END OF t_bsid.
    *Data from ZDunning_data
    DATA: BEGIN OF t_zdunning OCCURS 0,
          belnr LIKE zdunning_data-belnr,
          kunnr LIKE zdunning_data-kunnr,
          zdef_notice_flg LIKE zdunning_data-zdef_notice_flg,
          zterm_notice_flg LIKE zdunning_data-zterm_notice_flg,
          END OF t_zdunning.
    *Data from t052 for base line days
    DATA: BEGIN OF t_t052 OCCURS 0,
          zterm LIKE t052-zterm,
          ztag1 LIKE  t052-ztag1,
          END OF t_t052.
    *with duedate and date for write off calculation
    DATA: BEGIN OF t_data OCCURS 0,
          belnr LIKE bsid-belnr,
          kunnr LIKE bsid-kunnr,
          zterm LIKE bsid-zterm,
          zfbdt LIKE bsid-zfbdt,
          ztag1 LIKE t052-ztag1,
          duedate LIKE bsid-zfbdt,
          wdate LIKE bsid-zfbdt,
          vbeln LIKE bsid-vbeln,
          dmbtr LIKE bsid-dmbtr,
          waers LIKE bsid-waers,
          budat LIKE bsid-budat,
          vbelv like vbfa-vbelv,
          Name1 like kna1-name1,
          END OF t_data.
    *Output display in ALV report
    DATA: BEGIN OF t_output OCCURS 0,
          Flag type C,
          bukrs LIKE bsid-bukrs,
          kunnr LIKE bsid-kunnr,
          vbeln LIKE bsid-vbeln,  "Invoice
          posnv like vbfa-posnv,
          wdate LIKE bsid-zfbdt,
          belnr LIKE bsid-belnr,
          dmbtr LIKE bsid-dmbtr,
          waers LIKE bsid-waers,
          budat LIKE bsid-budat,
          vbelv like vbfa-vbelv, "Contract
          name1 like kna1-name1,
          duedate like  bsid-zfbdt,
          END OF t_output.
    To get contract number for the billing document number
    DATA: BEGIN OF t_vbfa OCCURS 0,
          vbelv LIKE vbfa-vbelv,
          vbeln LIKE vbfa-vbeln,
          POSNV like vbfa-POSNV,
          END OF t_vbfa.
    data: begin of t_cust occurs 0,
          KUNNR like kna1-kunnr,
          name1 like kna1-name1,
          end of t_cust.
    data: begin of t_head occurs 0,
          VBELv like vbfa-vbelv,
          posnv like vbfa-posnv,
          VKUEGRU type ZLIST_WO_RCANCEL,
          end of t_head.
    data: begin of it_veda occurs 0,
          VBELn LIKE Veda-VBELN,
          POSNR LIKE Veda-VPOSN,
          VKUEGRU LIKE Veda-VKUEGRU,
          end of it_veda.
                            VARIABLE DECLARATION
    DATA: l_duedate  LIKE bsid-zfbdt,
          l_wdate LIKE bsid-zfbdt.
                            VARIABLE FOR ALV DISPLAY
    DATA: t_fieldcat TYPE slis_t_fieldcat_alv,
          wa_fieldcat TYPE slis_fieldcat_alv.
    DATA: t_fieldcat1 TYPE slis_t_fieldcat_alv WITH HEADER LINE,
          wa_fieldcat1 TYPE slis_fieldcat_alv.
    DATA: t_layout TYPE slis_layout_alv.
    DATA: g_repid LIKE sy-repid.
                             SELECTION-SCREEN
    *Selection Screen Parameters for user input
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    PARAMETERS:
    *Company Code
              p_bukrs LIKE t001-bukrs OBLIGATORY.
    SELECT-OPTIONS:
    *Customer Number
              s_kunnr FOR kna1-kunnr OBLIGATORY DEFAULT '0' TO 'ZZZZZZZZZZ'.
    PARAMETERS:
    *Write Off Date
              p_wodate TYPE sy-datum OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK b1 .
                            AT SELECTION-SCREEN
    *Selection Screen validation for Company code
    AT SELECTION-SCREEN ON p_bukrs.
      SELECT SINGLE bukrs FROM t001                             "#EC *
           INTO t_t001
           WHERE bukrs = p_bukrs.
      IF sy-subrc NE 0.
    *Error message for Invalid Company Code
        MESSAGE e000 WITH text-002.
      ENDIF.
    *Selection Screen Validation for Customer
    AT SELECTION-SCREEN ON s_kunnr.
      IF NOT s_kunnr IS INITIAL.
        SELECT SINGLE kunnr name1
             FROM kna1                                          "#EC *
             INTO t_kna1
             WHERE kunnr IN s_kunnr.
        IF sy-subrc NE 0.
    *Error message for Invalid Customer Number
          MESSAGE e000 WITH text-003.
        ENDIF.
      ENDIF.
    AT SELECTION-SCREEN ON p_wodate.
      IF p_wodate IS INITIAL.
        p_wodate = sy-datum.
      ENDIF.
                           INITIALIZATION
    INITIALIZATION.
      PERFORM clear_data.
                           START-OF-SELECTION
    START-OF-SELECTION.
    *Get the Accounting Document Number and base line date  from BSID
      SELECT bukrs kunnr belnr budat zfbdt zterm dmbtr waers  vbeln
                  FROM bsid
                  INTO corresponding fields of TABLE t_bsid
                 WHERE kunnr IN s_kunnr AND
                        bukrs = p_bukrs.
      IF NOT t_bsid[] IS INITIAL.
    *Get the Dunning data based on the Accounting Document Number from BSID
        SELECT  belnr kunnr zdef_notice_flg zterm_notice_flg
                    FROM zdunning_data
                    INTO TABLE t_zdunning
                    FOR ALL ENTRIES IN t_bsid
                    WHERE kunnr = t_bsid-kunnr AND
                          belnr = t_bsid-belnr AND
                          zdef_notice_flg = 'Y' AND
                          zterm_notice_flg = 'Y'.
    *Get the base line days from t052 table based on BSID data
        SELECT zterm ztag1
                    FROM t052
                    INTO TABLE t_t052
                    FOR ALL ENTRIES IN t_bsid
                    WHERE zterm = t_bsid-zterm.
    *Calculate the due date(bse line date BSID-ZFBDT + base line days
    *T052-ZTAG )
        IF NOT t_zdunning[] IS INITIAL.
    Get the customer name
        Select KUNNR NAME1 from KNA1
                  INTO table t_cust
                  for all entries in t_zdunning
                  where kunnr = t_zdunning-kunnr.
         LOOP AT t_zdunning.
          LOOP AT t_bsid.
            CLEAR t_zdunning.
            READ TABLE t_zdunning WITH KEY belnr = t_bsid-belnr
                                       kunnr = t_bsid-kunnr.
            CHECK sy-subrc = 0.
            CLEAR t_t052.
            READ TABLE t_t052 WITH KEY zterm = t_bsid-zterm.
            IF sy-subrc = 0 .
              t_data-belnr = t_zdunning-belnr.
              t_data-kunnr = t_zdunning-kunnr.
            Clear t_cust.
            read table t_cust with key kunnr = t_zdunning-kunnr.
             if sy-subrc = 0.
             t_data-name1 = t_cust-name1.
             endif.
              t_data-zterm = t_bsid-zterm.
              t_data-zfbdt = t_bsid-zfbdt.
              t_data-ztag1 = t_t052-ztag1.
              t_data-vbeln = t_bsid-vbeln.
              t_data-dmbtr = t_bsid-dmbtr.
              t_data-waers = t_bsid-waers.
              t_data-budat = t_bsid-budat.
    *calculate duedate
              CLEAR l_duedate.
              l_duedate = t_bsid-zfbdt + t_t052-ztag1.
              t_data-duedate = l_duedate.
    *calculate date for write off
              CLEAR l_wdate.
              l_wdate = l_duedate + 180.
              t_data-wdate = l_wdate.
              APPEND t_data.
              CLEAR l_wdate.
              CLEAR l_duedate.
            ENDIF.
          ENDLOOP.
        ELSE.
          MESSAGE s000 WITH text-005.
        ENDIF.
    *Check the wdate with write off date in the selection screen value.
    *If this calculated date is Greater than value enetred in selection
    *screen, display the corresponding data in ALV report.
        IF NOT t_data[] IS INITIAL.
          SELECT vbelv vbeln
          POSNV
                    FROM vbfa
                    INTO TABLE t_vbfa
                    FOR ALL ENTRIES IN t_data
                    WHERE vbeln = t_data-vbeln.
                   and
                         VBTYP_V = 'G'.
    *If reason for cancelation is there, no writeoff.
       Select VBELn VPOSN VKUEGRU from Veda
             into table it_veda
             for all entries in t_vbfa
             where vbeln = t_vbfa-vbelv.
       SELECT vbelv
          POSNV
                    FROM vbfa
                    INTO TABLE t_Head
                    FOR ALL ENTRIES IN t_data
                    WHERE vbeln = t_data-vbeln
                   and
                         VBTYP_V = 'G'.
    loop at t_head.
    clear it_veda.
    Read table it_veda with key vbeln = t_head-vbelv
                                posnr = t_head-posnv.
    if not it_veda-VKUEGRU is initial.
    Delete  t_head where vbelv = it_veda-vbeln and
                              posnv = it_veda-posnr.
    endif.
    endloop.
          LOOP AT t_data.
            IF t_data-wdate LE p_wodate.
              t_output-bukrs = p_bukrs.
              t_output-kunnr = t_data-kunnr.
              CLEAR t_vbfa.
              READ TABLE t_vbfa WITH KEY vbeln = t_data-vbeln.
              read table t_head with key vbelv = t_vbfa-vbelv
                                         posnv = t_vbfa-posnv.
              if sy-subrc = 0.
                t_output-vbelv = t_vbfa-vbelv.
                t_output-posnv = t_vbfa-posnv.
              t_output-name1 = t_data-name1.
              t_output-wdate = t_data-wdate.
              t_output-belnr = t_data-belnr.
              t_output-dmbtr = t_data-dmbtr.
              t_output-waers = t_data-waers.
              t_output-budat = t_data-budat.
              t_output-vbeln = t_data-vbeln.
              t_output-duedate  = t_data-duedate .
              APPEND t_output.
              ENDIF.
              clear t_output.
            ENDIF.
          ENDLOOP.
        ELSE.
          MESSAGE s000 WITH text-006.
        ENDIF.
    *ALV display for the output records
        IF NOT t_output[] IS INITIAL.
          PERFORM alv_display.
        ELSE.
          MESSAGE s000 WITH text-006.
        ENDIF.
      ELSE.
        MESSAGE s000 WITH text-004.
      ENDIF.
    *&      Form  clear_data
          text
    -->  p1        text
    <--  p2        text
    FORM clear_data .
      CLEAR:t_t001,
            t_kna1,
            t_bsid,
            t_zdunning,
            t_t052,
            t_data,
            t_output,
            wa_fieldcat,
            t_layout,
            t_fieldcat,
            t_vbfa.
      REFRESH:t_t001,
              t_kna1,
              t_bsid,
              t_zdunning,
              t_t052,
              t_data,
              t_output,
              t_fieldcat,
              t_vbfa.
    clear:t_head,
          it_veda.
    Refresh:t_head,
          it_veda.
    Clear T_cust.
    Refresh t_data.
    ENDFORM.                    " clear_data
    *&      Form  alv_display
          text
    -->  p1        text
    <--  p2        text
    FORM alv_display .
    *To build the field catalogue
      PERFORM build_fieldcatalog1.
      PERFORM build_fieldcatalog.
    *To build the ALV layout
      PERFORM build_layout.
    *To displayt the data in ALV report
      PERFORM display_alv_report.
    ENDFORM.                    " alv_display
    *&      Form  build_fieldcatalog
          text
    -->  p1        text
    <--  p2        text
    FORM build_fieldcatalog1 .
      REFRESH t_fieldcat1.
    CLEAR wa_fieldcat.
      wa_fieldcat-col_pos    = '1'.
      wa_fieldcat-fieldname  = 'VBELV'.
      wa_fieldcat-tabname = 'T_HEAD'.
      wa_fieldcat-seltext_l  = 'Contract Number'.
    wa_fieldcat-Checkbox = 'X'.
    wa_fieldcat-edit = 'X'.
    wa_fieldcat-no_out = 'X'.
      wa_fieldcat-outputlen  = '15'.
      APPEND wa_fieldcat TO t_fieldcat.
    CLEAR wa_fieldcat.
       wa_fieldcat-col_pos    = '2'.
      wa_fieldcat-fieldname  = 'POSNV'.
      wa_fieldcat-tabname = 'T_HEAD'.
      wa_fieldcat-seltext_l  = 'Item Number'.
      wa_fieldcat-outputlen  = '15'.
      APPEND wa_fieldcat TO t_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos    = '3'.
      wa_fieldcat-fieldname  = 'VKUEGRU'.
      wa_fieldcat-edit = 'X'.
      wa_fieldcat-input = 'X'.
      wa_fieldcat-tabname = 'T_HEAD'.
    wa_fieldcat-drdn_hndl = '1'.
      wa_fieldcat-seltext_l  = 'Reason for Cancel'.
      wa_fieldcat-outputlen  = '25'.
      APPEND wa_fieldcat TO t_fieldcat.
      CLEAR wa_fieldcat.
    endform.
    FORM build_fieldcatalog .
    REFRESH t_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos    = '4'.
      wa_fieldcat-fieldname  = 'KUNNR'.
      wa_fieldcat-tabname = 'T_OUTPUT'.
      wa_fieldcat-seltext_l  = 'Customer Number'.
      wa_fieldcat-outputlen  = '15'.
      APPEND wa_fieldcat TO t_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos    = '5'.
      wa_fieldcat-fieldname  = 'NAME1'.
      wa_fieldcat-tabname = 'T_OUTPUT'.
      wa_fieldcat-seltext_l  = 'Customer Name'.
      wa_fieldcat-outputlen  = '30'.
      APPEND wa_fieldcat TO t_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos    = '6'.
      wa_fieldcat-fieldname  = 'VBELV'.
      wa_fieldcat-tabname = 'T_OUTPUT'.
      wa_fieldcat-seltext_l  = 'Contract Number'.
      wa_fieldcat-outputlen  = '20'.
      APPEND wa_fieldcat TO t_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos    = '7'.
      wa_fieldcat-fieldname  = 'VBELN'.
      wa_fieldcat-tabname = 'T_OUTPUT'.
      wa_fieldcat-seltext_l  = 'Invoice No.'.
      wa_fieldcat-outputlen  = '10'.
      APPEND wa_fieldcat TO t_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos    = '8'.
      wa_fieldcat-fieldname  = 'BELNR'.
      wa_fieldcat-tabname = 'T_OUTPUT'.
      wa_fieldcat-seltext_l  = 'Acc doc Number'.
      wa_fieldcat-outputlen  = '20'.
      APPEND wa_fieldcat TO t_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos    = '9'.
      wa_fieldcat-fieldname  = 'WAERS'.
      wa_fieldcat-tabname = 'T_OUTPUT'.
      wa_fieldcat-seltext_l  = 'Currency'.
      wa_fieldcat-outputlen  = '15'.
      APPEND wa_fieldcat TO t_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos    = '10'.
      wa_fieldcat-fieldname  = 'DMBTR'.
      wa_fieldcat-tabname = 'T_OUTPUT'.
      wa_fieldcat-do_sum        = 'X'.   "SUM UPON DISPLAY
      wa_fieldcat-datatype = 'CURR'.
      wa_fieldcat-seltext_l  = 'Amount'.
      wa_fieldcat-outputlen  = '15'.
      APPEND wa_fieldcat TO t_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos    = '11'.
      wa_fieldcat-fieldname  = 'DUEDATE'.
      wa_fieldcat-tabname = 'T_OUTPUT'.
      wa_fieldcat-seltext_l  = 'Due Date'.
      wa_fieldcat-outputlen  = '20'.
      APPEND wa_fieldcat TO t_fieldcat.
    data: lt_dropdown type lvc_t_drop,
            ls_dropdown type lvc_s_drop.
    First listbox (handle '1').
      ls_dropdown-handle = '1'.
      ls_dropdown-value = 'KG'.
      append ls_dropdown to lt_dropdown.
      ls_dropdown-handle = '1'.
      ls_dropdown-value = 'G'.
      append ls_dropdown to lt_dropdown.
    call method g_grid->set_drop_down_table
               exporting it_drop_down = lt_dropdown.
    ENDFORM.                    " build_fieldcatalog
    *&      Form  build_layout
          text
    -->  p1        text
    <--  p2        text
    FORM build_layout .
      t_layout-no_input          = 'X'.
      t_layout-colwidth_optimize = 'X'.
    ENDFORM.                    " build_layout
    *&      Form  display_alv_report
          text
    -->  p1        text
    <--  p2        text
    FORM display_alv_report .
      g_repid = sy-repid.
      data g_keyinfo type SLIS_KEYINFO_ALV.
      g_keyinfo-HEADER01 = 'VBELV'.
      g_keyinfo-ITEM01 = 'VBELV'.
      g_keyinfo-HEADER02 = 'POSNV'.
      g_keyinfo-ITEM02 = 'POSNV'.
    CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
        EXPORTING
          i_interface_check              = 'I'
          i_callback_program             = g_repid
          i_callback_pf_status_set       = 'SET_STATUS'
          i_callback_user_command        = 'USER_COMMAND'
         is_layout                      = gs_layout
          it_fieldcat                    = t_fieldcat[]
         i_default                      = ' '
          i_save                         = 'A'
          i_tabname_header               = 'T_HEAD'
          i_tabname_item                 = 'T_OUTPUT'
         i_structure_name_header        = v_headers_table
         i_structure_name_item          = v_items_table
          is_keyinfo                     = g_keyinfo
         i_bypassing_buffer             = 'X'
        TABLES
          t_outtab_header                = t_head[]
         t_outtab_item                  = i_result
          t_outtab_item                  = t_output[]
        EXCEPTIONS
          program_error                  = 1
          OTHERS                         = 2.
      REFRESH: t_fieldcat[].
      refresh t_fieldcat1[].
    ENDFORM.                    " display_alv_report
    form SET_STATUS using extab TYPE slis_t_extab.
      SET PF-STATUS  'ZEO_S1' .
    endform.
    *&      Form  Top_Of_Page
    Top_Of_Page event in ALV
    FORM top_of_page .
      DATA: t_header TYPE slis_t_listheader,
            wa_header TYPE slis_listheader.
    Title
      wa_header-typ  = 'H'.
      wa_header-info = ' Write Off Worklist'.
      APPEND wa_header TO t_header.
      CLEAR wa_header.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
        EXPORTING
          it_list_commentary = t_header.
    ENDFORM.                    "Top_Of_Page
    *User Command for the button
    form user_command using r_ucomm type syucomm
                              ls_selfield type SLIS_SELFIELD.
                              Break-point.
    case r_ucomm.
    when 'EXEC'.
    data: begin of lt_cancel occurs 0.
          include structure ZCANCEL.
    data  end of lt_cancel.
    Clear lt_cancel.
    Refresh lt_cancel.
         Data: ref1 type ref to cl_gui_alv_grid.
         CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
           IMPORTING
             E_GRID = ref1.
         call method ref1->check_changed_data.
          loop at t_Head where VKUEGRU is not initial.
           if ( t_HEAD-VKUEGRU  NE '1' ) or
               ( t_Head-VKUEGRU  NE '2' ) or
               ( t_head-VKUEGRU  NE '3' ).
             Clear t_head-vkuegru.
             message e000 with text-110.
           endif.
            lt_cancel-vbeln = t_head-vbelv.
            lt_cancel-posnr = t_head-posnv.
            lt_cancel-VKUEGRU = t_head-VKUEGRU.
            Append lt_cancel.
            Clear lt_cancel.
          Endloop.
           CALL FUNCTION 'ZSD_CNTR_CANCEL'
             TABLES
               zcancel       = lt_cancel.
    message s000 .
    endcase.
    endform.

  • Using ALV Grid for data Input

    Hi experts.
    Can someone assist me with information on using ALV grid for data input. Please give a simple example if possible.
    I am mainly interested in the part in which we can transfer data from the grid changing the internal table's data.

    Try this code:
    REPORT z_demo_alv_jg.
    TYPE-POOLS                                                          *
    TYPE-POOLS: slis.
    INTERNAL TABLES/WORK AREAS/VARIABLES                                *
    DATA: i_fieldcat TYPE slis_t_fieldcat_alv,
          i_index TYPE STANDARD TABLE OF i WITH HEADER LINE,
          w_field TYPE slis_fieldcat_alv,
          p_table LIKE dd02l-tabname,
          dy_table TYPE REF TO data,
          dy_tab TYPE REF TO data,
          dy_line TYPE REF TO data.
    FIELD-SYMBOLS                                                       *
    FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
                   <dyn_wa> TYPE ANY,
                   <dyn_field> TYPE ANY,
                   <dyn_tab_temp> TYPE STANDARD TABLE.
    SELECTION SCREEN                                                    *
    PARAMETERS: tabname(30) TYPE c,
                lines(5)  TYPE n.
    START-OF-SELECTION                                                  *
    START-OF-SELECTION.
    Storing table name
      p_table = tabname.
    Create internal table dynamically with the stucture of table name
    entered in the selection screen
      CREATE DATA dy_table TYPE STANDARD TABLE OF (p_table).
      ASSIGN dy_table->* TO <dyn_table>.
      IF sy-subrc <> 0.
        MESSAGE i000(z_zzz_ca_messages) WITH ' No table found'.
        LEAVE TO LIST-PROCESSING.
      ENDIF.
    Create workarea for the table
      CREATE DATA dy_line LIKE LINE OF <dyn_table>.
      ASSIGN dy_line->* TO <dyn_wa>.
    Create another temp. table
      CREATE DATA dy_tab TYPE STANDARD TABLE OF (p_table).
      ASSIGN dy_tab->* TO <dyn_tab_temp>.
      SORT i_fieldcat BY col_pos.
    Select data from table
      SELECT * FROM (p_table)
      INTO TABLE <dyn_table>
      UP TO lines ROWS.
      REFRESH <dyn_tab_temp>.
    Display report
      CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
        EXPORTING
          i_callback_program       = sy-repid
          i_structure_name         = p_table
          i_callback_user_command  = 'USER_COMMAND'
          i_callback_pf_status_set = 'SET_PF_STATUS'
        TABLES
          t_outtab                 = <dyn_table>
        EXCEPTIONS
          program_error            = 1
          OTHERS                   = 2.
      IF sy-subrc <> 0.
      ENDIF.
    *&      Form  SET_PF_STATUS
          Setting custom PF-Status
         -->RT_EXTAB   Excluding table
    FORM set_pf_status USING rt_extab TYPE slis_t_extab.
      SET PF-STATUS 'Z_STANDARD'.
    ENDFORM.                    "SET_PF_STATUS
    *&      Form  user_command
          Handling custom function codes
         -->R_UCOMM      Function code value
         -->RS_SELFIELD  Info. of cursor position in ALV
    FORM user_command  USING    r_ucomm LIKE sy-ucomm
                               rs_selfield TYPE slis_selfield.
    Local data declaration
      DATA: li_tab TYPE REF TO data,
            l_line TYPE REF TO data.
    Local field-symbols
      FIELD-SYMBOLS:<l_tab> TYPE table,
                    <l_wa>  TYPE ANY.
    Create table
      CREATE DATA li_tab TYPE STANDARD TABLE OF (p_table).
      ASSIGN li_tab->* TO <l_tab>.
    Create workarea
      CREATE DATA l_line LIKE LINE OF <l_tab>.
      ASSIGN l_line->* TO <l_wa>.
      CASE r_ucomm.
      When a record is selected
        WHEN '&IC1'.
        Read the selected record
          READ TABLE <dyn_table> ASSIGNING <dyn_wa> INDEX
          rs_selfield-tabindex.
          IF sy-subrc = 0.
          Store the record in an internal table
            APPEND <dyn_wa> TO <l_tab>.
          Fetch the field catalog info
            CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
              EXPORTING
                i_program_name         = 'Z_DEMO_PDF_JG'
                i_structure_name       = p_table
              CHANGING
                ct_fieldcat            = i_fieldcat
              EXCEPTIONS
                inconsistent_interface = 1
                program_error          = 2
                OTHERS                 = 3.
            IF sy-subrc = 0.
            Make all the fields input enabled except key fields*
              w_field-input = 'X'.
              MODIFY i_fieldcat FROM w_field TRANSPORTING input
              WHERE key IS INITIAL.
            ENDIF.
          Display the record for editing purpose
            CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
              EXPORTING
                i_callback_program    = sy-repid
                i_structure_name      = p_table
                it_fieldcat           = i_fieldcat
                i_screen_start_column = 10
                i_screen_start_line   = 15
                i_screen_end_column   = 200
                i_screen_end_line     = 20
              TABLES
                t_outtab              = <l_tab>
              EXCEPTIONS
                program_error         = 1
                OTHERS                = 2.
            IF sy-subrc = 0.
            Read the modified data
              READ TABLE <l_tab> INDEX 1 INTO <l_wa>.
            If the record is changed then track its index no.
            and populate it in an internal table for future
            action
              IF sy-subrc = 0 AND <dyn_wa> <> <l_wa>.
                <dyn_wa> = <l_wa>.
                i_index = rs_selfield-tabindex.
                APPEND i_index.
              ENDIF.
            ENDIF.
          ENDIF.
      When save button is pressed
        WHEN 'SAVE'.
        Sort the index table
          SORT i_index.
        Delete all duplicate records
          DELETE ADJACENT DUPLICATES FROM i_index.
          LOOP AT i_index.
          Find out the changes in the internal table
          and populate these changes in another internal table
            READ TABLE <dyn_table> ASSIGNING <dyn_wa> INDEX i_index.
            IF sy-subrc = 0.
              APPEND <dyn_wa> TO <dyn_tab_temp>.
            ENDIF.
          ENDLOOP.
        Lock the table
          CALL FUNCTION 'ENQUEUE_E_TABLE'
            EXPORTING
              mode_rstable   = 'E'
              tabname        = p_table
            EXCEPTIONS
              foreign_lock   = 1
              system_failure = 2
              OTHERS         = 3.
          IF sy-subrc = 0.
          Modify the database table with these changes
            MODIFY (p_table) FROM TABLE <dyn_tab_temp>.
            REFRESH <dyn_tab_temp>.
          Unlock the table
            CALL FUNCTION 'DEQUEUE_E_TABLE'
              EXPORTING
                mode_rstable = 'E'
                tabname      = p_table.
          ENDIF.
      ENDCASE.
      rs_selfield-refresh = 'X'.
    ENDFORM.                    "user_command

  • Urgent:Grand total in hierarchical alv

    I am printing a hierarchical alv with subtotals. I want to print the grand total for the whole numeric columns ...
    Can anyone explain me how i can do this.
    Thanks and regards,
    Subhakar

    Hi,
    In this case you not only require the totals but the subtotals also.
    For achieving this output you will have to sort the alv on the first column and also give subtotals there.
    use
    data: SORTF TYPE SLIS_SORTINFO_ALV,
             TSORT TYPE SLIS_T_SORTINFO_ALV.
    in the function module reuse_alv_grid_display give
    it_sort = tsort.
    eg:
    FORM ALV_SHOW.
      LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
      LAYOUT-BOX_TABNAME = 'IT_DISPLAY'.
      LAYOUT-INFO_FIELDNAME = 'LINE_COLOR'.
      LAYOUT-ZEBRA = 'X'.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          I_CALLBACK_PROGRAM        = SY-REPID
         I_CALLBACK_USER_COMMAND   = 'USER_COMMAND'
          IS_LAYOUT                 = LAYOUT
          IT_FIELDCAT               = TCATALOG
          IS_VARIANT                = VAR1
          I_SAVE                    = 'A'
          IT_SORT                   = TSORT
          IT_EVENTS                 = TEVENT[]
        TABLES
          T_OUTTAB                  = IT_DISPLAY.
    ENDFORM .                    "ALV_SHOW
    and write a subroutine for sort...
    form sort.
    CLEAR SORTF.
      SORTF-spos = 1.
      SORTF-fieldname = 'column_1'.
      SORTF-tabname = 'IT_table used for display in alv'.
      SORTF-up = 'X'.
      SORTF-subtot = 'X'.
    APPEND SORTF TO TSORT.
    endform.
    If this doesn't help I will send you the whole source of a sample program..
    Abdullah

Maybe you are looking for