<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: How would you write/convert this procedural code (report) into OO code? in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/how-would-you-write-convert-this-procedural-code-report-into-oo-code/m-p/2705458#M626795</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Sougata&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here is a partially converted version of the report which hopefully shows you how you could proceed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;REPORT  zus_sdn_z_matmas_oo
        MESSAGE-ID z001.

* NOTE: OO-Version of Z_MATMAS (SDN)


*----------------------------------------------------------------------*
*/Tables                                                               *
*----------------------------------------------------------------------*

TABLES: marav,          "Database  View for using Logical Database MSM
        mbewv.          "Structure View for using Logical Database MSM
*----------------------------------------------------------------------*
*/Data                                                                 *
*----------------------------------------------------------------------*

TYPE-POOLS: slis,
            abap.


INCLUDE zus_sdn_z_matmas_oo_c0.  " class definition
INCLUDE zus_sdn_z_matmas_oo_c1.  " class implementation


DATA:
  go_matmas      TYPE REF TO lcl_matmas,
  go_alvgrid     TYPE REF TO lcl_alvgrid.




TYPES: BEGIN OF ty_matmas,
        matnr     TYPE matnr,
        maktx     TYPE maktx,
        ntgew     TYPE ntgew,
        uom1      TYPE gewei,
        brgew     TYPE brgew,
        uom2      TYPE gewei,
        volum     TYPE volum,
        uom3      TYPE voleh,
        wunit     TYPE umrez,
        wshpu     TYPE umrez,
        wpalt     TYPE umrez,
        mhdhb     TYPE mhdhb,
        prdha     TYPE prodh_d,
        werks     TYPE werks_d,
        stprs     TYPE stprs,
        uom4      TYPE waers,
        wwsal     TYPE kbetr,
        uom5      TYPE waers,
        vmsta     TYPE vmsta,
       END OF ty_matmas.

DATA: wa_matmas TYPE ty_matmas,
      gt_matmas TYPE STANDARD TABLE OF ty_matmas,
      wa_mvke   TYPE mvke,
      gt_mvke   TYPE STANDARD TABLE OF mvke,
      gt_marm   TYPE STANDARD TABLE OF marm.

DATA: werks_wa TYPE werks_d,
      vmsta_wa LIKE tvms-vmsta.

DATA: gs_alv_fieldcat   TYPE slis_fieldcat_alv.

*-----------------------------------------------------------------------
*
*/Macros
*
*-----------------------------------------------------------------------
*

DEFINE _set_fieldcat.
  clear gs_alv_fieldcat.
  gs_alv_fieldcat-tabname   = &amp;amp;1.
  gs_alv_fieldcat-fieldname = &amp;amp;2.
  gs_alv_fieldcat-outputlen = &amp;amp;3.
  gs_alv_fieldcat-seltext_l = &amp;amp;4.
  gs_alv_fieldcat-key       = space.
  gs_alv_fieldcat-no_out    = space.
END-OF-DEFINITION.

*----------------------------------------------------------------------*
*/Parameters &amp;amp; Select-options                                          *
*----------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK cus WITH FRAME TITLE text-s00.
SELECT-OPTIONS: s_werks  FOR werks_wa OBLIGATORY  DEFAULT '1000',
                s_vmsta  FOR vmsta_wa.
SELECTION-SCREEN SKIP.
PARAMETERS:     p_hrarcy AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK cus.

*----------------------------------------------------------------------*
*/Start-of-selection                                                   *
*----------------------------------------------------------------------*

START-OF-SELECTION.

**  PERFORM: get_mvke,
**           get_weights_marm.
* Replaced by:
  CREATE OBJECT:
    go_matmas,
    go_alvgrid.




*----------------------------------------------------------------------*
*/GET                                                                  *
*----------------------------------------------------------------------*

GET marav.

*----------------------------------------------------------------------*
*/GET                                                                  *
*----------------------------------------------------------------------*

GET mbewv.

  CHECK mbewv-bwkey IN s_werks.

**  PERFORM collect_marav.
* Replaced by:

  CALL METHOD go_matmas-&amp;gt;collect_marav
    EXPORTING
      is_marav = marav
    EXCEPTIONS
      rejected = 1.
  IF ( syst-subrc NE 0 ).
    REJECT 'MARAV'.
  ENDIF.
...&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&amp;amp;  Include           ZUS_SDN_Z_MATMAS_OO_C0&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;*---------------------------------------------------------------------*
*       CLASS lcl_matmas DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_matmas DEFINITION.

  PUBLIC SECTION.
    CLASS-DATA:
      md_meinh_ea     TYPE lrmei  VALUE 'EA',
      md_meinh_shu    TYPE lrmei  VALUE 'SHU',
      md_meinh_shp    TYPE lrmei  VALUE 'SHP'.

    METHODS:
      constructor
        IMPORTING
          value(id_calling_program)  TYPE syrepid DEFAULT sy-repid,

      collect_marav
        IMPORTING
          value(is_marav)  TYPE marav
        EXCEPTIONS
          rejected.

  PRIVATE SECTION.

    TYPES: BEGIN OF ty_matmas,
            matnr     TYPE matnr,
            maktx     TYPE maktx,
            ntgew     TYPE ntgew,
            uom1      TYPE gewei,
            brgew     TYPE brgew,
            uom2      TYPE gewei,
            volum     TYPE volum,
            uom3      TYPE voleh,
            wunit     TYPE umrez,
            wshpu     TYPE umrez,
            wpalt     TYPE umrez,
            mhdhb     TYPE mhdhb,
            prdha     TYPE prodh_d,
            werks     TYPE werks_d,
            stprs     TYPE stprs,
            uom4      TYPE waers,
            wwsal     TYPE kbetr,
            uom5      TYPE waers,
            vmsta     TYPE vmsta,
           END OF ty_matmas.

    DATA:
      ms_matmas       TYPE ty_matmas,
      mt_matmas       TYPE STANDARD TABLE OF ty_matmas.

    DATA:
      mt_selopts      TYPE rsparams_tt,
      ms_mvke         TYPE mvke,
      mt_mvke         TYPE STANDARD TABLE OF mvke,
      mt_marm         TYPE STANDARD TABLE OF marm.

    METHODS:
      get_mvke,
      get_weights_marm,

      transfer_gross_and_net_weights
        IMPORTING
          value(is_marav)   TYPE marav
        RETURNING
          value(rs_matmas)  TYPE ty_matmas.



ENDCLASS.                    "lcl_matmas DEFINITION

*---------------------------------------------------------------------*
*       CLASS lcl_alvgrid DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_alvgrid DEFINITION.

ENDCLASS.                    "lcl_alvgrid DEFINITION&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&amp;amp;  Include           ZUS_SDN_Z_MATMAS_OO_C1&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;*---------------------------------------------------------------------*
*       CLASS lcl_matmas IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_matmas IMPLEMENTATION.

  METHOD: constructor.

    CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
      EXPORTING
        curr_report           = id_calling_program
*     IMPORTING
*       SP                    =
      TABLES
        selection_table       = me-&amp;gt;mt_selopts
      EXCEPTIONS
        not_found             = 1
        no_report             = 2
        OTHERS                = 3.
    IF sy-subrc &amp;lt;&amp;gt; 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

    get_mvke( ).
    get_weights_marm( ).

  ENDMETHOD.                    "constructor

  METHOD get_mvke.
*   define local data
    DATA:
      ls_rsparams    TYPE rsparams,
      lr_matnr       TYPE RANGE OF matnr,
      ls_rng_mat     LIKE LINE OF lr_matnr,
      lr_vmsta       TYPE RANGE OF vmsta,
      ls_rng_vms     LIKE LINE OF lr_vmsta.

    LOOP AT me-&amp;gt;mt_selopts INTO ls_rsparams
                           WHERE ( selname = 'MS_MATNR' ).
      MOVE-CORRESPONDING ls_rsparams TO ls_rng_mat.
      APPEND ls_rng_mat TO lr_matnr.
    ENDLOOP.

    LOOP AT me-&amp;gt;mt_selopts INTO ls_rsparams
                           WHERE ( selname = 'S_VMSTA' ).
      MOVE-CORRESPONDING ls_rsparams TO ls_rng_vms.
      APPEND ls_rng_vms TO lr_vmsta.
    ENDLOOP.

    SELECT * FROM mvke INTO TABLE me-&amp;gt;mt_mvke
                       WHERE matnr IN lr_matnr
                       AND   vmsta IN lr_vmsta
                       ORDER BY matnr.

  ENDMETHOD.                    "get_mvke

  METHOD get_weights_marm.
*   define local data
    DATA:
      ls_rsparams    TYPE rsparams,
      lr_matnr       TYPE RANGE OF matnr,
      ls_rng_mat     LIKE LINE OF lr_matnr,
      lr_vmsta       TYPE RANGE OF vmsta,
      ls_rng_vms     LIKE LINE OF lr_vmsta.

    LOOP AT me-&amp;gt;mt_selopts INTO ls_rsparams
                           WHERE ( selname = 'MS_MATNR' ).
      MOVE-CORRESPONDING ls_rsparams TO ls_rng_mat.
      APPEND ls_rng_mat TO lr_matnr.
    ENDLOOP.

    SELECT * FROM marm INTO TABLE me-&amp;gt;mt_marm
             WHERE matnr IN lr_matnr
**             AND   meinh IN ( 'EA', 'SHU', 'SHP')
             AND ( meinh EQ md_meinh_ea   OR
                   meinh EQ md_meinh_shu  OR
                   meinh EQ md_meinh_shp )
             ORDER BY matnr meinh.

  ENDMETHOD.                    "get_weights_marm


  METHOD collect_marav.
*   define local data
    DATA:
      ls_mvke      TYPE mvke,
      ls_matmas    TYPE ty_matmas.

    READ TABLE me-&amp;gt;mt_mvke INTO ls_mvke
         WITH KEY matnr = is_marav-matnr
         BINARY SEARCH.

    IF sy-subrc = 0.
*     Transfer gross &amp;amp; net weight
      ls_matmas = transfer_gross_and_net_weights( is_marav ).

*     Get Wholesale price
      PERFORM get_whsalprice.

*     Get standard price for each plant
      PERFORM get_stdprice.

    ELSE.
**    REJECT 'MARAV'.
      RAISE rejected.
    ENDIF.
  ENDMETHOD.                    "collect_marav

  METHOD transfer_gross_and_net_weights.

  ENDMETHOD.                    "transfer_gross_and_net_weights

ENDCLASS.                    "lcl_matmas IMPLEMENTATION

*---------------------------------------------------------------------*
*       CLASS lcl_alvgrid IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_alvgrid IMPLEMENTATION.

ENDCLASS.                    "lcl_alvgrid IMPLEMENTATION
&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;  Uwe&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 13 Aug 2007 05:03:43 GMT</pubDate>
    <dc:creator>uwe_schieferstein</dc:creator>
    <dc:date>2007-08-13T05:03:43Z</dc:date>
    <item>
      <title>How would you write/convert this procedural code (report) into OO code?</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/how-would-you-write-convert-this-procedural-code-report-into-oo-code/m-p/2705455#M626792</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Experts say "a mindshift" is required when coding business logic in ABAP OO...so let's find out the SDN-ers midshift towards it, shall we?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;See simple report program below, its written using the classical ABAP procedural approach. How would you write the same program using ABAP OO without coding anything in procedural and keeping in mind the basic principles of OO, i.e. data encapsulation, instantiation etc. etc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;lt;b&amp;gt;Note: Logical database MSM is used for the current report but you can avoid it when converting to ABAP OO if you wish.&amp;lt;/b&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I promise to reward a minimum of 6 points to anyone who gives it a try!!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Happy coding.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;report  z_matmas
        message-id z001.

*----------------------------------------------------------------------*
*/Tables                                                               *
*----------------------------------------------------------------------*

tables: marav,          "Database  View for using Logical Database MSM
        mbewv.          "Structure View for using Logical Database MSM
*----------------------------------------------------------------------*
*/Data                                                                 *
*----------------------------------------------------------------------*

type-pools: slis,
            abap.

types: begin of ty_matmas,
        matnr     type matnr,
        maktx     type maktx,
        ntgew     type ntgew,
        uom1      type gewei,
        brgew     type brgew,
        uom2      type gewei,
        volum     type volum,
        uom3      type voleh,
        wunit     type umrez,
        wshpu     type umrez,
        wpalt     type umrez,
        mhdhb     type mhdhb,
        prdha     type prodh_d,
        werks     type werks_d,
        stprs     type stprs,
        uom4      type waers,
        wwsal     type kbetr,
        uom5      type waers,
        vmsta     type vmsta,
       end of ty_matmas.

data: wa_matmas type ty_matmas,
      gt_matmas type standard table of ty_matmas,
      wa_mvke   type mvke,
      gt_mvke   type standard table of mvke,
      gt_marm   type standard table of marm.

data: werks_wa type werks_d,
      vmsta_wa like tvms-vmsta.

data: gs_alv_fieldcat   type slis_fieldcat_alv.

*-----------------------------------------------------------------------*
*/Macros                                                                *
*-----------------------------------------------------------------------*

define _set_fieldcat.
  clear gs_alv_fieldcat.
  gs_alv_fieldcat-tabname   = &amp;amp;1.
  gs_alv_fieldcat-fieldname = &amp;amp;2.
  gs_alv_fieldcat-outputlen = &amp;amp;3.
  gs_alv_fieldcat-seltext_l = &amp;amp;4.
  gs_alv_fieldcat-key       = space.
  gs_alv_fieldcat-no_out    = space.
end-of-definition.

*----------------------------------------------------------------------*
*/Parameters &amp;amp; Select-options                                          *
*----------------------------------------------------------------------*

selection-screen begin of block cus with frame title text-s00.
select-options: s_werks  for werks_wa obligatory  default '1000',
                s_vmsta  for vmsta_wa.
selection-screen skip.
parameters:     p_hrarcy as checkbox.
selection-screen end of block cus.

*----------------------------------------------------------------------*
*/Start-of-selection                                                   *
*----------------------------------------------------------------------*

start-of-selection.

  perform: get_mvke,
           get_weights_marm.

*----------------------------------------------------------------------*
*/GET                                                                  *
*----------------------------------------------------------------------*

get marav.

 *----------------------------------------------------------------------*
*/GET                                                                  *
*----------------------------------------------------------------------*

get mbewv.

  check mbewv-bwkey in s_werks.

  perform collect_marav.

*----------------------------------------------------------------------*
*/End-of-selection                                                     *
*----------------------------------------------------------------------*

end-of-selection.


*----------------------------------------------------------------------*
*            Display the report in ALV                                 *
*----------------------------------------------------------------------*

  perform disp_alv.


*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  collect_marav
*&amp;amp;---------------------------------------------------------------------*
form  collect_marav.

  read table gt_mvke into wa_mvke with key matnr = marav-matnr
                                  binary search.
  if sy-subrc = 0.
* Transfer gross &amp;amp; net weight
    perform trnsf_weights.
* Get Wholesale price
    perform get_whsalprice.
* Get standard price for each plant
    perform get_stdprice.
  else.
    reject 'MARAV'.
  endif.

endform.                    "COLLECT_MARAV
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  get_whsalprice
*&amp;amp;---------------------------------------------------------------------*
form get_whsalprice.

  data: l_kpein type kpein.

  select k~kbetr k~kpein up to 1 rows
         into (wa_matmas-wwsal, l_kpein)
         from       konp as k
         inner join a304 as a
         on k~knumh = a~knumh
         where  a~kappl =  'V'            and
                a~kschl =  'ZPRC'         and
                a~vkorg =  wa_mvke-vkorg  and
                a~vtweg =  wa_mvke-vtweg  and
                a~matnr =  wa_mvke-matnr  and
                a~kfrst =  space          and
                a~datbi &amp;gt;= sy-datum.
  endselect.

  check sy-subrc = 0.

  wa_matmas-wwsal = wa_matmas-wwsal / l_kpein.

  select single waers
         into wa_matmas-uom5
         from       t001k as a
         inner join t001  as b
         on a~bukrs = b~bukrs
         where a~bwkey = mbewv-bwkey.

endform.                    "GET_WHSALPRICE
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  get_stdprice
*&amp;amp;---------------------------------------------------------------------*
form get_stdprice.

  if mbewv-bwtar is initial.
    select single werks
           from marc
           into wa_matmas-werks
           where matnr = marav-matnr
           and   werks = mbewv-bwkey.
    wa_matmas-stprs = mbewv-stprs / mbewv-peinh.
    if not wa_matmas-stprs is initial.
      if not wa_matmas-uom5 is initial.
        wa_matmas-uom4  = wa_matmas-uom5.
      else.
        select single waers
               into wa_matmas-uom4
               from       t001k as a
               inner join t001  as b
               on a~bukrs = b~bukrs
               where a~bwkey = mbewv-bwkey.
      endif.
    endif.
  endif.

  move   wa_mvke-vmsta to wa_matmas-vmsta.
  append wa_matmas     to gt_matmas.
  clear  wa_matmas.

endform.                    "GET_STDPRICE
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  trnsf_weights
*&amp;amp;---------------------------------------------------------------------*
form trnsf_weights.

  data: lw_marm type marm.

  move-corresponding marav to wa_matmas.
  if not wa_matmas-ntgew is initial.
    move marav-gewei to wa_matmas-uom1.
  endif.
  if not wa_matmas-brgew is initial.
    move marav-gewei to wa_matmas-uom2.
  endif.
  if not wa_matmas-volum is initial.
    call function 'CONVERSION_EXIT_CUNIT_OUTPUT'
      exporting
        input          = marav-voleh
        language       = sy-langu
      importing
        output         = wa_matmas-uom3
      exceptions
        unit_not_found = 1
        others         = 2.
  endif.

  shift wa_matmas-matnr left deleting leading '0'.

  check marav-meins = 'CS'.

  loop at gt_marm into lw_marm where matnr = marav-matnr.
    case lw_marm-meinh.
      when 'EA'.
        wa_matmas-wunit = lw_marm-umren / lw_marm-umrez.
      when 'SHU'.
        wa_matmas-wshpu = lw_marm-umrez / lw_marm-umren.
      when 'SHP'.
        wa_matmas-wpalt = lw_marm-umrez / lw_marm-umren.
      when others.
    endcase.
  endloop.

endform.                    "TRNSF_WEIGHTS
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  disp_alv
*&amp;amp;---------------------------------------------------------------------*
form disp_alv .

  data: ls_layout      type slis_layout_alv,
        lt_events      type slis_t_event,
        lt_fieldcat    type slis_t_fieldcat_alv,
        li_sort        type slis_t_sortinfo_alv.

* Sort if user has opted to sort by Product Hierarchy
  if not p_hrarcy is initial.
    sort gt_matmas by prdha.
  endif.

* Check to see that we have data
  describe table gt_matmas[] lines sy-tfill.
  if sy-tfill = 0.
    message i016.
    exit.
  endif.

* Layout
  perform get_layout changing ls_layout.

* Get the field catalog
  perform get_fieldcat changing lt_fieldcat.

* Sorting
  perform fill_sort changing li_sort.

* Display the report
  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      i_callback_program     = sy-repid
      i_callback_top_of_page = 'TOP_OF_PAGE'
      is_layout              = ls_layout
      it_fieldcat            = lt_fieldcat
      i_save                 = 'A'
      it_sort                = li_sort
      it_events              = lt_events
    tables
      t_outtab               = gt_matmas
    exceptions
      program_error          = 1
      others                 = 2.

  if sy-subrc &amp;lt;&amp;gt; 0.
    message id sy-msgid type sy-msgty number sy-msgno
            with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  endif.

endform.                    " disp_alv
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  get_layout
*&amp;amp;---------------------------------------------------------------------*
form get_layout  changing ps_layout type slis_layout_alv.

* Set the layout structure
  ps_layout-zebra             = abap_true.
  ps_layout-get_selinfos      = abap_true.
  ps_layout-colwidth_optimize = abap_true.

endform.                    " get_layout
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  get_fieldcat
*&amp;amp;---------------------------------------------------------------------*
form get_fieldcat  changing pt_fieldcat type slis_t_fieldcat_alv.

  field-symbols:
    &amp;lt;fs_sr&amp;gt;                type abap_compdescr,
    &amp;lt;fcat&amp;gt;                 type line of slis_t_fieldcat_alv.

  data:
    lv_pos                 type sy-tabix,
    lo_strucdesc           type ref to cl_abap_structdescr,
    lt_fc_sr               type abap_compdescr_tab,
    lv_fieldcat            type slis_t_fieldcat_alv.

* Read fields of structure 'wa_matmas'
  lo_strucdesc ?= cl_abap_typedescr=&amp;gt;describe_by_data( wa_matmas ).
  lt_fc_sr = lo_strucdesc-&amp;gt;components.

  loop at lt_fc_sr assigning &amp;lt;fs_sr&amp;gt;.
    lv_pos = sy-tabix.
    read table lv_fieldcat assigning &amp;lt;fcat&amp;gt;
         with key fieldname = &amp;lt;fs_sr&amp;gt;-name.
    if sy-subrc eq 0.
      &amp;lt;fcat&amp;gt;-col_pos = lv_pos.
      &amp;lt;fcat&amp;gt;-tabname = 'GT_MATMAS'.
      append &amp;lt;fcat&amp;gt; to pt_fieldcat[].
    else.
      _set_fieldcat 'GT_matmas'
                     &amp;lt;fs_sr&amp;gt;-name
                     &amp;lt;fs_sr&amp;gt;-length
                     space.
      gs_alv_fieldcat-col_pos = lv_pos.
      case &amp;lt;fs_sr&amp;gt;-name.
        when 'MATNR'.
          gs_alv_fieldcat-reptext_ddic = 'Material Code'(801).
          gs_alv_fieldcat-key          = abap_true.
        when 'MAKTX'.
          gs_alv_fieldcat-reptext_ddic = 'Description'(802).
        when 'NTGEW'.
          gs_alv_fieldcat-reptext_ddic = 'Net Weight'(803).
          gs_alv_fieldcat-no_zero      = abap_true.
        when 'UOM1' or 'UOM2' or 'UOM3'.
          gs_alv_fieldcat-reptext_ddic = 'UoM'(824).
        when 'UOM4' or 'UOM5'.
          gs_alv_fieldcat-reptext_ddic = 'Currency'(825).
        when 'BRGEW'.
          gs_alv_fieldcat-reptext_ddic = 'Gross Weight'(804).
          gs_alv_fieldcat-no_zero      = abap_true.
        when 'VOLUM'.
          gs_alv_fieldcat-reptext_ddic = 'Case Volume'(805).
          gs_alv_fieldcat-no_zero      = abap_true.
        when 'WUNIT'.
          gs_alv_fieldcat-reptext_ddic = 'Each/Case'(806).
          gs_alv_fieldcat-no_zero      = abap_true.
        when 'WSHPU'.
          gs_alv_fieldcat-reptext_ddic = 'Case/Shipping Unit'(807).
          gs_alv_fieldcat-no_zero      = abap_true.
        when 'WPALT'.
          gs_alv_fieldcat-reptext_ddic = 'Case/Pallet'(808).
          gs_alv_fieldcat-no_zero      = abap_true.
        when 'MHDHB'.
          gs_alv_fieldcat-reptext_ddic = 'Total Shelf Life'(809).
          gs_alv_fieldcat-no_zero      = abap_true.
        when 'PRDHA'.
          gs_alv_fieldcat-reptext_ddic = 'Product Hierarchy'(810).
        when 'WERKS'.
          gs_alv_fieldcat-reptext_ddic = 'Delivery Plant'(811).
        when 'STPRS'.
          gs_alv_fieldcat-reptext_ddic = 'Standard Price'(812).
          gs_alv_fieldcat-no_zero      = abap_true.
        when 'WWSAL'.
          gs_alv_fieldcat-reptext_ddic = 'Wholesale Price'(815).
          gs_alv_fieldcat-no_zero      = abap_true.
        when 'VMSTA'.
          gs_alv_fieldcat-reptext_ddic = 'Sales Stat'(813).
      endcase.
      append gs_alv_fieldcat to pt_fieldcat[].
    endif.
  endloop.

endform.                    " get_fieldcat

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  top_of_page
*&amp;amp;---------------------------------------------------------------------*
form top_of_page.

  call function 'Z_ALV_REPORT_HEADER'
    exporting
      report_name = sy-repid.

endform.                    "top_of_page
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  fill_sort
*&amp;amp;---------------------------------------------------------------------*
form fill_sort  changing ci_sort type slis_t_sortinfo_alv.

  data lw_sort     type slis_sortinfo_alv.

* Sort by material number or product hierarchy
  lw_sort-spos = 1.
  if p_hrarcy is initial.
    lw_sort-fieldname = 'MATNR'.
  else.
    lw_sort-fieldname = 'PRDHA'.
  endif.
  append lw_sort to ci_sort.

endform.                    " fill_sort
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  get_mvke
*&amp;amp;---------------------------------------------------------------------*
form get_mvke .

  select * from mvke into table gt_mvke
                     where matnr in ms_matnr
                     and   vmsta in s_vmsta
                     order by matnr.

endform.                    " get_mvke
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  get_weights_marm
*&amp;amp;---------------------------------------------------------------------*
form get_weights_marm .

  select * from marm into table gt_marm
           where matnr in ms_matnr
           and   meinh in ('EA', 'SHU', 'SHP')
           order by matnr meinh.

endform.                    " get_weights_marm&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Aug 2007 04:24:47 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/how-would-you-write-convert-this-procedural-code-report-into-oo-code/m-p/2705455#M626792</guid>
      <dc:creator>Sougata</dc:creator>
      <dc:date>2007-08-10T04:24:47Z</dc:date>
    </item>
    <item>
      <title>Re: How would you write/convert this procedural code (report) into OO code?</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/how-would-you-write-convert-this-procedural-code-report-into-oo-code/m-p/2705456#M626793</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'd break the task down into stages.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;First I'd get the ALV part into OO as this is relatively straight forward.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'll assume you've got some sort of a structure where you can load your data in to --standard SAP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;OK here's the ALV part.  I'd create a basic screen 100 (SE51) with a single custom container on it called CCONTAINER1. I'd create a standard STATUS as well (SE41)  with the standard SAP buttons on it --bog standard --no need to code.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Then run this type of program.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I haven't shown the selection screens etc you need as this won't change.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You still need to get your data into a table to display it.&lt;/P&gt;&lt;P&gt;I've generated a dynamic table from your structure and then use a CLASS to display / manipulate it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Program  ZJIMBOTESTX.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Generic editable ALV prog with dynamic structure and FCAT.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Jimbo 2007.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DEFINE col_name.&lt;/P&gt;&lt;P&gt; READ TABLE it_fldcat INTO  wa_it_fldcat INDEX &amp;amp;1.&lt;/P&gt;&lt;P&gt; wa_it_fldcat-coltext = &amp;amp;2.&lt;/P&gt;&lt;P&gt; wa_it_fldcat-outputlen = &amp;amp;3.&lt;/P&gt;&lt;P&gt; MODIFY it_fldcat FROM wa_it_fldcat INDEX &amp;amp;1.&lt;/P&gt;&lt;P&gt;END-OF-DEFINITION.&lt;/P&gt;&lt;P&gt;FIELD-SYMBOLS :&lt;/P&gt;&lt;P&gt;  &amp;lt;fs1&amp;gt;           TYPE  ANY,&lt;/P&gt;&lt;P&gt;  &amp;lt;dyn_table&amp;gt;    TYPE  STANDARD TABLE,&lt;/P&gt;&lt;P&gt;  &amp;lt;orig_table&amp;gt;   TYPE  STANDARD TABLE,&lt;/P&gt;&lt;P&gt;  &amp;lt;dyn_wa&amp;gt;.&lt;/P&gt;&lt;P&gt;INCLUDE ZZJIMBOXX_INCL.&lt;/P&gt;&lt;P&gt;INCLUDE  &amp;lt;icon&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: types: begin of ty_matmas,&lt;/P&gt;&lt;P&gt;        matnr     type matnr,&lt;/P&gt;&lt;P&gt;        maktx     type maktx,&lt;/P&gt;&lt;P&gt;        ntgew     type ntgew,&lt;/P&gt;&lt;P&gt;        uom1      type gewei,&lt;/P&gt;&lt;P&gt;        brgew     type brgew,&lt;/P&gt;&lt;P&gt;        uom2      type gewei,&lt;/P&gt;&lt;P&gt;        volum     type volum,&lt;/P&gt;&lt;P&gt;        uom3      type voleh,&lt;/P&gt;&lt;P&gt;        wunit     type umrez,&lt;/P&gt;&lt;P&gt;        wshpu     type umrez,&lt;/P&gt;&lt;P&gt;        wpalt     type umrez,&lt;/P&gt;&lt;P&gt;        mhdhb     type mhdhb,&lt;/P&gt;&lt;P&gt;        prdha     type prodh_d,&lt;/P&gt;&lt;P&gt;        werks     type werks_d,&lt;/P&gt;&lt;P&gt;        stprs     type stprs,&lt;/P&gt;&lt;P&gt;        uom4      type waers,&lt;/P&gt;&lt;P&gt;        wwsal     type kbetr,&lt;/P&gt;&lt;P&gt;        uom5      type waers,&lt;/P&gt;&lt;P&gt;        vmsta     type vmsta,&lt;/P&gt;&lt;P&gt;       end of ty_matmas.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;data: wa_matmas type ty_matmas,&lt;/P&gt;&lt;P&gt;      gt_matmas type standard table of ty_matmas.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA:  z_object           TYPE REF TO zcl_alv_test,  "Instantiate our class&lt;/P&gt;&lt;P&gt;       it_fldcat          TYPE lvc_t_fcat,&lt;/P&gt;&lt;P&gt;       i_gridtitle        TYPE lvc_title,&lt;/P&gt;&lt;P&gt;       wa_it_fldcat       TYPE lvc_s_fcat,&lt;/P&gt;&lt;P&gt;       new_table          TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;       dy_table           TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;       my_line            TYPE wa_matmas,&lt;/P&gt;&lt;P&gt;       inserted_tab       TYPE lvc_t_moce,&lt;/P&gt;&lt;P&gt;       deleted_tab        TYPE LVC_T_MOCE,&lt;/P&gt;&lt;P&gt;       changed_tab        TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;       modified_cells_tab TYPE LVC_T_MODI,&lt;/P&gt;&lt;P&gt;       dy_line            TYPE REF TO DATA.&lt;/P&gt;&lt;P&gt;START-OF-SELECTION.&lt;/P&gt;&lt;P&gt;CALL SCREEN 100.&lt;/P&gt;&lt;P&gt;END-OF-SELECTION.&lt;/P&gt;&lt;P&gt;MODULE status_0100 OUTPUT.&lt;/P&gt;&lt;P&gt;CREATE OBJECT z_object&lt;/P&gt;&lt;P&gt;      EXPORTING z_object = z_object.&lt;/P&gt;&lt;P&gt;CALL METHOD z_object-&amp;gt;build_dynamic_structures&lt;/P&gt;&lt;P&gt;     EXPORTING&lt;/P&gt;&lt;P&gt;       my_line = my_line&lt;/P&gt;&lt;P&gt;       calling_program = sy-repid&lt;/P&gt;&lt;P&gt;     IMPORTING&lt;/P&gt;&lt;P&gt;       dy_table = dy_table&lt;/P&gt;&lt;P&gt;     CHANGING&lt;/P&gt;&lt;P&gt;       it_fldcat = it_fldcat.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Here before displaying you can change the field catalog to&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;adjust your own column names.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*col_name  col-nr 'your name' output length.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;change these to YOUR values you want in your column headings&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;you can add other bits to the macro if you want&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;other options such as no display etc.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;expand the field-catalog table and add the variables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;   col_name 2 'Carrier' 5.&lt;/P&gt;&lt;P&gt;   col_name 3 'Flt' 4.&lt;/P&gt;&lt;P&gt;   col_name 4 'Dep Ctry' 8.&lt;/P&gt;&lt;P&gt;   col_name 5 'Dep City'  8.&lt;/P&gt;&lt;P&gt;   col_name 6 'Airport'  6.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;fill dynmic table and display&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;PERFORM populate_dynamic_itab.&lt;/P&gt;&lt;P&gt; CALL METHOD z_object-&amp;gt;display_grid&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      g_outtab = &amp;lt;dyn_table&amp;gt;&lt;/P&gt;&lt;P&gt;      g_fldcat = it_fldcat&lt;/P&gt;&lt;P&gt;    CHANGING&lt;/P&gt;&lt;P&gt;      it_fldcat = it_fldcat&lt;/P&gt;&lt;P&gt;      gt_outtab = &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;P&gt;  SET PF-STATUS '001'.&lt;/P&gt;&lt;P&gt;  SET TITLEBAR '000'.&lt;/P&gt;&lt;P&gt;ENDMODULE.&lt;/P&gt;&lt;P&gt;MODULE user_command_0100 INPUT.&lt;/P&gt;&lt;P&gt;  CASE sy-ucomm.&lt;/P&gt;&lt;P&gt;    WHEN 'BACK'.&lt;/P&gt;&lt;P&gt;      LEAVE PROGRAM.&lt;/P&gt;&lt;P&gt;    WHEN 'EXIT'.&lt;/P&gt;&lt;P&gt;      LEAVE PROGRAM.&lt;/P&gt;&lt;P&gt;    WHEN 'RETURN'.&lt;/P&gt;&lt;P&gt;      LEAVE PROGRAM.&lt;/P&gt;&lt;P&gt;    WHEN OTHERS.&lt;/P&gt;&lt;P&gt;  ENDCASE.&lt;/P&gt;&lt;P&gt;ENDMODULE.&lt;/P&gt;&lt;P&gt;FORM populate_dynamic_itab.&lt;/P&gt;&lt;P&gt; ASSIGN dy_table-&amp;gt;* TO &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;P&gt; break-point 1.&lt;/P&gt;&lt;P&gt; CREATE DATA dy_line LIKE LINE OF &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;P&gt; ASSIGN dy_line-&amp;gt;* TO &amp;lt;dyn_wa&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;******************&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;/P&gt;&lt;P&gt; SELECT *&lt;/P&gt;&lt;P&gt;       UP TO 200 rows&lt;/P&gt;&lt;P&gt;       FROM *************I&lt;/P&gt;&lt;P&gt;       INTO  CORRESPONDING FIELDS OF TABLE &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Collect your data here&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;&amp;lt;dyn-table&amp;gt; at this point will have all the fields&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;of your structure for example &amp;lt;dyn-table&amp;gt;-werks&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;so you can fill it as per your program&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;**************************************************&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; save a copy (original table). Use same fcat as ist table.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;create 2nd Dyn table to hold original data (optional)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;CALL METHOD cl_alv_table_create=&amp;gt;create_dynamic_table&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;         it_fieldcatalog = it_fldcat&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;         ep_table = dy_table.&lt;/P&gt;&lt;P&gt; ASSIGN dy_table-&amp;gt;* TO &amp;lt;orig_table&amp;gt;.&lt;/P&gt;&lt;P&gt; CREATE DATA dy_line LIKE LINE OF &amp;lt;orig_table&amp;gt;.&lt;/P&gt;&lt;P&gt; ASSIGN dy_line-&amp;gt;* TO &amp;lt;dyn_wa&amp;gt;.&lt;/P&gt;&lt;P&gt;  &amp;lt;orig_table&amp;gt; = &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;P&gt;ENDFORM.&lt;/P&gt;&lt;P&gt;FORM DATA_CHANGED&lt;/P&gt;&lt;P&gt;   USING&lt;/P&gt;&lt;P&gt;     changed_tab&lt;/P&gt;&lt;P&gt;     inserted_tab&lt;/P&gt;&lt;P&gt;     deleted_tab&lt;/P&gt;&lt;P&gt;     modified_cells_tab.&lt;/P&gt;&lt;P&gt;break-point 1.&lt;/P&gt;&lt;P&gt;ASSIGN  changed_tab-&amp;gt;* TO &amp;lt;fs1&amp;gt;.&lt;/P&gt;&lt;P&gt;ENDFORM.&lt;/P&gt;&lt;P&gt;FORM process.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Orig table is in dynamic table &amp;lt;orig_table&amp;gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ALV GRID changed table is in &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Loop AT &amp;lt;orig_table&amp;gt;  INTO  &amp;lt;dyn_wa&amp;gt;.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Do what you want&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;end&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.&lt;/P&gt;&lt;P&gt;FORM refresh.&lt;/P&gt;&lt;P&gt; break-point 1.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;change data for example delete some lines.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DELETE  &amp;lt;dyn_table&amp;gt; from 1 to 16.&lt;/P&gt;&lt;P&gt;CALL METHOD z_object-&amp;gt;refresh_grid.&lt;/P&gt;&lt;P&gt;ENDFORM.&lt;/P&gt;&lt;P&gt;FORM dubbleklik&lt;/P&gt;&lt;P&gt;     USING&lt;/P&gt;&lt;P&gt;        e_row       TYPE lvc_s_row&lt;/P&gt;&lt;P&gt;        e_column    TYPE lvc_s_col&lt;/P&gt;&lt;P&gt;        es_row_no   TYPE  lvc_s_roid.&lt;/P&gt;&lt;P&gt;     SET TITLEBAR '001'.&lt;/P&gt;&lt;P&gt;     break-point 2.&lt;/P&gt;&lt;P&gt;     i_gridtitle = 'Grid Title Changed'.&lt;/P&gt;&lt;P&gt;     CALL METHOD  z_object-&amp;gt;change_title&lt;/P&gt;&lt;P&gt;         EXPORTING&lt;/P&gt;&lt;P&gt;         i_gridtitle = i_gridtitle.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     PERFORM refresh.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here's the class which you can modify to select your own events / procedures&lt;/P&gt;&lt;P&gt;(this is the INCLUDE component)  -- You can add bits to the layout if you want 'ZEBRA' etc but the base class works well.  There's also a built in DOWNLOAD to EXCEL which is often useful.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You should be able to use this class for almost ANY structure --DDIC or not so all your ABAP has to do is populate the table with data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CLASS zcl_alv_test DEFINITION.&lt;/P&gt;&lt;P&gt;PUBLIC SECTION.&lt;/P&gt;&lt;P&gt; METHODS:&lt;/P&gt;&lt;P&gt;  constructor&lt;/P&gt;&lt;P&gt;     IMPORTING&lt;/P&gt;&lt;P&gt;       z_object TYPE REF TO zcl_alv_test,&lt;/P&gt;&lt;P&gt;  display_grid&lt;/P&gt;&lt;P&gt;   IMPORTING&lt;/P&gt;&lt;P&gt;      g_outtab TYPE STANDARD TABLE&lt;/P&gt;&lt;P&gt;      g_fldcat TYPE lvc_t_fcat&lt;/P&gt;&lt;P&gt;    CHANGING&lt;/P&gt;&lt;P&gt;      it_fldcat TYPE lvc_t_fcat&lt;/P&gt;&lt;P&gt;      GT_OUTTAB TYPE STANDARD TABLE,&lt;/P&gt;&lt;P&gt;   change_title&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      i_gridtitle TYPE lvc_title,&lt;/P&gt;&lt;P&gt;   refresh_grid,&lt;/P&gt;&lt;P&gt;   build_dynamic_structures&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      my_line TYPE ANY&lt;/P&gt;&lt;P&gt;      calling_program TYPE sy-repid&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      dy_table TYPE REF TO DATA&lt;/P&gt;&lt;P&gt;    CHANGING&lt;/P&gt;&lt;P&gt;      it_fldcat TYPE lvc_t_fcat .&lt;/P&gt;&lt;P&gt;  PRIVATE SECTION.&lt;/P&gt;&lt;P&gt;  DATA:&lt;/P&gt;&lt;P&gt;   lr_rtti_struc           TYPE REF TO cl_abap_structdescr,&lt;/P&gt;&lt;P&gt;   zog                     LIKE LINE OF lr_rtti_struc-&amp;gt;components,&lt;/P&gt;&lt;P&gt;   zogt                    LIKE table of zog,&lt;/P&gt;&lt;P&gt;   wa_it_fldcat            TYPE lvc_s_fcat,&lt;/P&gt;&lt;P&gt;   it_fldcat               TYPE lvc_t_fcat,&lt;/P&gt;&lt;P&gt;   dy_table                TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;   dy_line                 TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;   struct_grid_lset        TYPE lvc_s_layo,&lt;/P&gt;&lt;P&gt;   e_row                   TYPE lvc_s_row,&lt;/P&gt;&lt;P&gt;   e_column                TYPE lvc_s_col,&lt;/P&gt;&lt;P&gt;   es_rowid                TYPE lvc_s_roid,&lt;/P&gt;&lt;P&gt;   grid_container1         TYPE REF TO cl_gui_custom_container,&lt;/P&gt;&lt;P&gt;   grid1                   TYPE REF TO cl_gui_alv_grid,&lt;/P&gt;&lt;P&gt;   ls_layout               TYPE kkblo_layout,&lt;/P&gt;&lt;P&gt;   lt_fieldcat_wa          TYPE kkblo_fieldcat,&lt;/P&gt;&lt;P&gt;   gt_outtab               TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;   l_mode                  TYPE raw4,&lt;/P&gt;&lt;P&gt;   celltab                 TYPE lvc_t_styl,&lt;/P&gt;&lt;P&gt;   wa_celltab              TYPE lvc_s_styl,&lt;/P&gt;&lt;P&gt;   lt_fieldcat             TYPE kkblo_t_fieldcat,&lt;/P&gt;&lt;P&gt;   l_tabname               TYPE slis_tabname,&lt;/P&gt;&lt;P&gt;   ls_toolbar              TYPE stb_button,&lt;/P&gt;&lt;P&gt;   inserted_tab            TYPE lvc_t_moce,&lt;/P&gt;&lt;P&gt;   deleted_tab             TYPE lvc_t_moce,&lt;/P&gt;&lt;P&gt;   changed_tab             TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;   caller                  TYPE sy-repid,&lt;/P&gt;&lt;P&gt;   modified_cells_tab      TYPE lvc_t_modi,&lt;/P&gt;&lt;P&gt;   g_outtab1               TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;   g_fldcat1               TYPE REF TO DATA.&lt;/P&gt;&lt;P&gt; EVENTS: before_user_command.&lt;/P&gt;&lt;P&gt;METHODS:&lt;/P&gt;&lt;P&gt; on_user_command&lt;/P&gt;&lt;P&gt;    FOR EVENT before_user_command OF cl_gui_alv_grid&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      e_ucomm&lt;/P&gt;&lt;P&gt;      sender,&lt;/P&gt;&lt;P&gt; on_toolbar&lt;/P&gt;&lt;P&gt;    FOR EVENT toolbar OF cl_gui_alv_grid&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      e_object&lt;/P&gt;&lt;P&gt;      e_interactive,&lt;/P&gt;&lt;P&gt; on_dubbelklik&lt;/P&gt;&lt;P&gt;    FOR EVENT double_click OF cl_gui_alv_grid&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;       e_row&lt;/P&gt;&lt;P&gt;       e_column&lt;/P&gt;&lt;P&gt;       es_row_no,&lt;/P&gt;&lt;P&gt; handle_data_changed&lt;/P&gt;&lt;P&gt;    FOR EVENT data_changed OF cl_gui_alv_grid&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      er_data_changed,&lt;/P&gt;&lt;P&gt; handle_data_changed_finished&lt;/P&gt;&lt;P&gt;    FOR EVENT data_changed_finished OF cl_gui_alv_grid&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      e_modified&lt;/P&gt;&lt;P&gt;      et_good_cells,&lt;/P&gt;&lt;P&gt; process,&lt;/P&gt;&lt;P&gt; dubbelklik&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;       e_row       TYPE lvc_s_row&lt;/P&gt;&lt;P&gt;       e_column    TYPE lvc_s_col&lt;/P&gt;&lt;P&gt;       es_row_no   TYPE lvc_s_roid,&lt;/P&gt;&lt;P&gt; return_structure&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      my_line      TYPE ANY,&lt;/P&gt;&lt;P&gt; create_dynamic_fcat&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      it_fldcat    TYPE lvc_t_fcat,&lt;/P&gt;&lt;P&gt; create_dynamic_table&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;       it_fldcat   TYPE lvc_t_fcat&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      dy_table     TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt; download_to_excel,&lt;/P&gt;&lt;P&gt; refresh.&lt;/P&gt;&lt;P&gt;ENDCLASS.&lt;/P&gt;&lt;P&gt;CLASS zcl_alv_test IMPLEMENTATION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;METHOD constructor.&lt;/P&gt;&lt;P&gt; CREATE OBJECT grid_container1&lt;/P&gt;&lt;P&gt;     EXPORTING&lt;/P&gt;&lt;P&gt;        container_name = 'CCONTAINER1'.&lt;/P&gt;&lt;P&gt;  CREATE OBJECT  grid1&lt;/P&gt;&lt;P&gt;     EXPORTING&lt;/P&gt;&lt;P&gt;        i_parent = grid_container1.&lt;/P&gt;&lt;P&gt;  SET HANDLER z_object-&amp;gt;on_user_command for grid1.&lt;/P&gt;&lt;P&gt;  SET HANDLER z_object-&amp;gt;on_toolbar for grid1.&lt;/P&gt;&lt;P&gt;  SET HANDLER Z_OBJECT-&amp;gt;handle_data_changed FOR grid1.&lt;/P&gt;&lt;P&gt;  SET HANDLER Z_OBJECT-&amp;gt;handle_data_changed_finished FOR grid1.&lt;/P&gt;&lt;P&gt;  SET HANDLER Z_OBJECT-&amp;gt;on_dubbelklik FOR grid1.&lt;/P&gt;&lt;P&gt;  CALL METHOD grid1-&amp;gt;register_edit_event&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;         i_event_id = cl_gui_alv_grid=&amp;gt;mc_evt_enter.&lt;/P&gt;&lt;P&gt;ENDMETHOD.&lt;/P&gt;&lt;P&gt;METHOD on_dubbelklik.&lt;/P&gt;&lt;P&gt; CALL METHOD me-&amp;gt;dubbelklik&lt;/P&gt;&lt;P&gt;     EXPORTING&lt;/P&gt;&lt;P&gt;        e_row  = e_row&lt;/P&gt;&lt;P&gt;        e_column =  e_column&lt;/P&gt;&lt;P&gt;        es_row_no = es_row_no.&lt;/P&gt;&lt;P&gt; break-point 1.&lt;/P&gt;&lt;P&gt;ENDMETHOD.&lt;/P&gt;&lt;P&gt;METHOD  handle_data_changed.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Insert user code here if required&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;this METHOD is entered if user ENTERS DATA.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;break-point 2.&lt;/P&gt;&lt;P&gt; changed_tab  = er_data_changed-&amp;gt;mp_mod_rows.&lt;/P&gt;&lt;P&gt; inserted_tab = er_data_changed-&amp;gt;mt_inserted_rows.&lt;/P&gt;&lt;P&gt; deleted_tab  = er_data_changed-&amp;gt;mt_deleted_rows.&lt;/P&gt;&lt;P&gt; modified_cells_tab = er_data_changed-&amp;gt;mt_mod_cells.&lt;/P&gt;&lt;P&gt; PERFORM data_changed  IN PROGRAM (caller) IF FOUND&lt;/P&gt;&lt;P&gt;    USING changed_tab&lt;/P&gt;&lt;P&gt;          inserted_tab&lt;/P&gt;&lt;P&gt;           deleted_tab&lt;/P&gt;&lt;P&gt;           modified_cells_tab.&lt;/P&gt;&lt;P&gt;ENDMETHOD.&lt;/P&gt;&lt;P&gt;METHOD handle_data_changed_finished.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Insert user code here if required&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;METHOD entered here after data entry has finished.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;ENDMETHOD.&lt;/P&gt;&lt;P&gt;METHOD return_structure.&lt;/P&gt;&lt;P&gt;  lr_rtti_struc ?= cl_abap_structdescr=&amp;gt;DESCRIBE_BY_DATA( my_line ).&lt;/P&gt;&lt;P&gt;  zogt[]  = lr_rtti_struc-&amp;gt;components.&lt;/P&gt;&lt;P&gt; ENDMETHOD.&lt;/P&gt;&lt;P&gt;METHOD create_dynamic_fcat.&lt;/P&gt;&lt;P&gt;    LOOP AT zogt INTO zog.&lt;/P&gt;&lt;P&gt;      CLEAR wa_it_fldcat.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-fieldname = zog-name .&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-dataTYPE = zog-TYPE_kind.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-intTYPE = zog-TYPE_kind.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-intlen = zog-length.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-decimals = zog-decimals.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-coltext = zog-name.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-lowercase = 'X'.&lt;/P&gt;&lt;P&gt;      APPEND wa_it_fldcat TO it_fldcat .&lt;/P&gt;&lt;P&gt;      ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDMETHOD.&lt;/P&gt;&lt;P&gt;METHOD  download_to_excel.&lt;/P&gt;&lt;P&gt; field-symbols:&lt;/P&gt;&lt;P&gt;    &amp;lt;fs0&amp;gt; TYPE standard table,&lt;/P&gt;&lt;P&gt;    &amp;lt;fs1&amp;gt; TYPE standard table.&lt;/P&gt;&lt;P&gt;  assign g_outtab1-&amp;gt;* to &amp;lt;fs0&amp;gt;.&lt;/P&gt;&lt;P&gt;  assign g_fldcat1-&amp;gt;* to &amp;lt;fs1&amp;gt;.&lt;/P&gt;&lt;P&gt; break-point 5.&lt;/P&gt;&lt;P&gt;  CALL FUNCTION  'LVC_TRANSFER_TO_KKBLO'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      it_fieldcat_lvc   = &amp;lt;fs1&amp;gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    is_layout_lvc     = m_cl_variant-&amp;gt;ms_layout&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;       is_tech_complete  = ' '&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      es_layout_kkblo   = ls_layout&lt;/P&gt;&lt;P&gt;      et_fieldcat_kkblo = lt_fieldcat.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;   LOOP AT lt_fieldcat INTO lt_fieldcat_wa.&lt;/P&gt;&lt;P&gt;    CLEAR lt_fieldcat_wa-tech_complete.&lt;/P&gt;&lt;P&gt;    IF lt_fieldcat_wa-tabname IS initial.&lt;/P&gt;&lt;P&gt;       lt_fieldcat_wa-tabname = '1'.&lt;/P&gt;&lt;P&gt;       MODIFY lt_fieldcat FROM lt_fieldcat_wa.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;    l_tabname = lt_fieldcat_wa-tabname.&lt;/P&gt;&lt;P&gt;   ENDLOOP.&lt;/P&gt;&lt;P&gt;CALL FUNCTION 'ALV_XXL_CALL'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      i_tabname           = l_tabname&lt;/P&gt;&lt;P&gt;      is_layout           = ls_layout&lt;/P&gt;&lt;P&gt;      it_fieldcat         = lt_fieldcat&lt;/P&gt;&lt;P&gt;      i_title             = sy-title&lt;/P&gt;&lt;P&gt;    TABLES&lt;/P&gt;&lt;P&gt;      it_outtab           = &amp;lt;fs0&amp;gt;&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      fatal_error         = 1&lt;/P&gt;&lt;P&gt;      no_display_possible = 2&lt;/P&gt;&lt;P&gt;      others              = 3.&lt;/P&gt;&lt;P&gt;  IF  sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;     message id sy-msgid TYPE 'S' number sy-msgno&lt;/P&gt;&lt;P&gt;            with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; ENDMETHOD.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;METHOD CHANGE_TITLE.&lt;/P&gt;&lt;P&gt;CALL METHOD grid1-&amp;gt;set_gridtitle&lt;/P&gt;&lt;P&gt;     EXPORTING&lt;/P&gt;&lt;P&gt;         i_gridtitle =  i_gridtitle.&lt;/P&gt;&lt;P&gt;ENDMETHOD.&lt;/P&gt;&lt;P&gt;METHOD create_dynamic_table.&lt;/P&gt;&lt;P&gt; CALL METHOD cl_alv_table_create=&amp;gt;create_dynamic_table&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;         it_fieldcatalog = it_fldcat&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;         ep_table = dy_table.&lt;/P&gt;&lt;P&gt;ENDMETHOD.&lt;/P&gt;&lt;P&gt;METHOD build_dynamic_structures.&lt;/P&gt;&lt;P&gt; caller = calling_program.&lt;/P&gt;&lt;P&gt; CALL METHOD me-&amp;gt;return_structure&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;         my_line = my_line.&lt;/P&gt;&lt;P&gt; CALL METHOD me-&amp;gt;create_dynamic_fcat&lt;/P&gt;&lt;P&gt;   IMPORTING&lt;/P&gt;&lt;P&gt;         it_fldcat = it_fldcat.&lt;/P&gt;&lt;P&gt; CALL METHOD me-&amp;gt;create_dynamic_table&lt;/P&gt;&lt;P&gt;   EXPORTING&lt;/P&gt;&lt;P&gt;         it_fldcat = it_fldcat&lt;/P&gt;&lt;P&gt;   IMPORTING&lt;/P&gt;&lt;P&gt;         dy_table        = dy_table.&lt;/P&gt;&lt;P&gt; ENDMETHOD.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;METHOD display_grid.&lt;/P&gt;&lt;P&gt; break-point 1.&lt;/P&gt;&lt;P&gt; GET REFERENCE OF g_outtab INTO g_outtab1.&lt;/P&gt;&lt;P&gt; GET REFERENCE OF g_fldcat INTO g_fldcat1.&lt;/P&gt;&lt;P&gt;  struct_grid_lset-edit = 'X'. "To enable editing in ALV&lt;/P&gt;&lt;P&gt;  struct_grid_lset-grid_title = 'TEST ALV USE generic class'.&lt;/P&gt;&lt;P&gt;  struct_grid_lset-ctab_fname = 'T_CELLCOLORS'.&lt;/P&gt;&lt;P&gt;  struct_grid_lset-stylefname = 'CELLTAB'.&lt;/P&gt;&lt;P&gt;   CALL METHOD grid1-&amp;gt;set_ready_for_input&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;           i_ready_for_input = '1'.&lt;/P&gt;&lt;P&gt;   CALL METHOD grid1-&amp;gt;set_table_for_first_display&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;           is_layout       = struct_grid_lset&lt;/P&gt;&lt;P&gt;      CHANGING&lt;/P&gt;&lt;P&gt;           it_outtab       = gt_outtab&lt;/P&gt;&lt;P&gt;           it_fieldcatalog = it_fldcat.&lt;/P&gt;&lt;P&gt;ENDMETHOD.&lt;/P&gt;&lt;P&gt;METHOD on_user_command.&lt;/P&gt;&lt;P&gt;   break-point 2.&lt;/P&gt;&lt;P&gt;  CASE e_ucomm.&lt;/P&gt;&lt;P&gt;     WHEN 'EXIT'.&lt;/P&gt;&lt;P&gt;        LEAVE PROGRAM.&lt;/P&gt;&lt;P&gt;     WHEN 'EXCEL'.&lt;/P&gt;&lt;P&gt;      CALL METHOD me-&amp;gt;download_to_excel.&lt;/P&gt;&lt;P&gt;     WHEN 'SAVE'.&lt;/P&gt;&lt;P&gt;     WHEN 'PROC'.&lt;/P&gt;&lt;P&gt;      CALL METHOD me-&amp;gt;process.&lt;/P&gt;&lt;P&gt;     WHEN 'REFR'.&lt;/P&gt;&lt;P&gt;      CALL METHOD me-&amp;gt;refresh.&lt;/P&gt;&lt;P&gt;  ENDCASE.&lt;/P&gt;&lt;P&gt;ENDMETHOD.&lt;/P&gt;&lt;P&gt;METHOD on_toolbar.&lt;/P&gt;&lt;P&gt; CLEAR ls_toolbar.&lt;/P&gt;&lt;P&gt;  MOVE 0 TO ls_toolbar-butn_TYPE.&lt;/P&gt;&lt;P&gt;  MOVE 'EXIT' TO ls_toolbar-function.&lt;/P&gt;&lt;P&gt;  MOVE SPACE TO ls_toolbar-disabled.&lt;/P&gt;&lt;P&gt;  MOVE icon_system_end TO ls_toolbar-icon.&lt;/P&gt;&lt;P&gt;  MOVE 'Click2Exit' TO ls_toolbar-quickinfo.&lt;/P&gt;&lt;P&gt;  APPEND ls_toolbar TO e_object-&amp;gt;mt_toolbar.&lt;/P&gt;&lt;P&gt;  CLEAR ls_toolbar.&lt;/P&gt;&lt;P&gt;  MOVE  0 TO ls_toolbar-butn_TYPE.&lt;/P&gt;&lt;P&gt;  MOVE 'SAVE' TO ls_toolbar-function.&lt;/P&gt;&lt;P&gt;  MOVE SPACE TO ls_toolbar-disabled.&lt;/P&gt;&lt;P&gt;  MOVE  icon_system_save TO ls_toolbar-icon.&lt;/P&gt;&lt;P&gt;  MOVE 'Save data' TO ls_toolbar-quickinfo.&lt;/P&gt;&lt;P&gt;  APPEND ls_toolbar TO e_object-&amp;gt;mt_toolbar.&lt;/P&gt;&lt;P&gt;  CLEAR ls_toolbar.&lt;/P&gt;&lt;P&gt;  MOVE  0 TO ls_toolbar-butn_TYPE.&lt;/P&gt;&lt;P&gt;  MOVE 'EDIT' TO ls_toolbar-function.&lt;/P&gt;&lt;P&gt;  MOVE  SPACE TO ls_toolbar-disabled.&lt;/P&gt;&lt;P&gt;  MOVE  icon_toggle_display_change TO ls_toolbar-icon.&lt;/P&gt;&lt;P&gt;  MOVE 'Edit data' TO ls_toolbar-quickinfo.&lt;/P&gt;&lt;P&gt;  MOVE  'EDIT' TO ls_toolbar-text.&lt;/P&gt;&lt;P&gt;  APPEND ls_toolbar TO e_object-&amp;gt;mt_toolbar.&lt;/P&gt;&lt;P&gt;  CLEAR ls_toolbar.&lt;/P&gt;&lt;P&gt;  MOVE  0 TO ls_toolbar-butn_TYPE.&lt;/P&gt;&lt;P&gt;  MOVE 'PROC' TO ls_toolbar-function.&lt;/P&gt;&lt;P&gt;  MOVE  SPACE TO ls_toolbar-disabled.&lt;/P&gt;&lt;P&gt;  MOVE   icon_businav_process to ls_toolbar-icon.&lt;/P&gt;&lt;P&gt;  MOVE 'Process.' TO ls_toolbar-quickinfo.&lt;/P&gt;&lt;P&gt;  MOVE  'PROC' TO ls_toolbar-text.&lt;/P&gt;&lt;P&gt;  APPEND ls_toolbar TO e_object-&amp;gt;mt_toolbar.&lt;/P&gt;&lt;P&gt;  CLEAR ls_toolbar.&lt;/P&gt;&lt;P&gt;  MOVE  0 TO ls_toolbar-butn_TYPE.&lt;/P&gt;&lt;P&gt;  MOVE 'EXCEL' TO ls_toolbar-function.&lt;/P&gt;&lt;P&gt;  MOVE  SPACE TO ls_toolbar-disabled.&lt;/P&gt;&lt;P&gt;  MOVE  icon_xxl TO ls_toolbar-icon.&lt;/P&gt;&lt;P&gt;  MOVE 'Excel' TO ls_toolbar-quickinfo.&lt;/P&gt;&lt;P&gt;  MOVE  'EXCEL' TO ls_toolbar-text.&lt;/P&gt;&lt;P&gt;  APPEND ls_toolbar TO e_object-&amp;gt;mt_toolbar.&lt;/P&gt;&lt;P&gt;  MOVE  0 TO ls_toolbar-butn_TYPE.&lt;/P&gt;&lt;P&gt;  MOVE 'REFR' TO ls_toolbar-function.&lt;/P&gt;&lt;P&gt;  MOVE  SPACE TO ls_toolbar-disabled.&lt;/P&gt;&lt;P&gt;  MOVE  icon_refresh TO ls_toolbar-icon.&lt;/P&gt;&lt;P&gt;  MOVE  'Refresh' TO ls_toolbar-quickinfo.&lt;/P&gt;&lt;P&gt;  MOVE  'REFR' TO ls_toolbar-text.&lt;/P&gt;&lt;P&gt;  APPEND ls_toolbar TO e_object-&amp;gt;mt_toolbar.&lt;/P&gt;&lt;P&gt;ENDMETHOD.&lt;/P&gt;&lt;P&gt;METHOD refresh_grid.&lt;/P&gt;&lt;P&gt;CALL METHOD cl_gui_cfw=&amp;gt;flush.&lt;/P&gt;&lt;P&gt;  CALL METHOD grid1-&amp;gt;refresh_table_display.&lt;/P&gt;&lt;P&gt;ENDMETHOD.&lt;/P&gt;&lt;P&gt;METHOD refresh.&lt;/P&gt;&lt;P&gt;   PERFORM refresh IN PROGRAM (caller) IF FOUND.&lt;/P&gt;&lt;P&gt; ENDMETHOD.&lt;/P&gt;&lt;P&gt;METHOD process.&lt;/P&gt;&lt;P&gt;   PERFORM process IN PROGRAM (caller) IF FOUND.&lt;/P&gt;&lt;P&gt;   LEAVE PROGRAM.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.&lt;/P&gt;&lt;P&gt;  METHOD dubbelklik.&lt;/P&gt;&lt;P&gt;  perform dubbelklik IN PROGRAM (caller) IF FOUND.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.&lt;/P&gt;&lt;P&gt;ENDCLASS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can use the CLASS over and over again in almost any program where you want to display / edit a table.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Cheers&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Jimbo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Aug 2007 11:31:07 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/how-would-you-write-convert-this-procedural-code-report-into-oo-code/m-p/2705456#M626793</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-08-10T11:31:07Z</dc:date>
    </item>
    <item>
      <title>Re: How would you write/convert this procedural code (report) into OO code?</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/how-would-you-write-convert-this-procedural-code-report-into-oo-code/m-p/2705457#M626794</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for your input James but what I'm after is coding the business logic in OO methodology.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Anyone else wants to contribute? &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;lt;b&amp;gt;Any (useful) post earns 6 points minimum!&amp;lt;/b&amp;gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Aug 2007 23:50:19 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/how-would-you-write-convert-this-procedural-code-report-into-oo-code/m-p/2705457#M626794</guid>
      <dc:creator>Sougata</dc:creator>
      <dc:date>2007-08-12T23:50:19Z</dc:date>
    </item>
    <item>
      <title>Re: How would you write/convert this procedural code (report) into OO code?</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/how-would-you-write-convert-this-procedural-code-report-into-oo-code/m-p/2705458#M626795</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Sougata&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here is a partially converted version of the report which hopefully shows you how you could proceed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;REPORT  zus_sdn_z_matmas_oo
        MESSAGE-ID z001.

* NOTE: OO-Version of Z_MATMAS (SDN)


*----------------------------------------------------------------------*
*/Tables                                                               *
*----------------------------------------------------------------------*

TABLES: marav,          "Database  View for using Logical Database MSM
        mbewv.          "Structure View for using Logical Database MSM
*----------------------------------------------------------------------*
*/Data                                                                 *
*----------------------------------------------------------------------*

TYPE-POOLS: slis,
            abap.


INCLUDE zus_sdn_z_matmas_oo_c0.  " class definition
INCLUDE zus_sdn_z_matmas_oo_c1.  " class implementation


DATA:
  go_matmas      TYPE REF TO lcl_matmas,
  go_alvgrid     TYPE REF TO lcl_alvgrid.




TYPES: BEGIN OF ty_matmas,
        matnr     TYPE matnr,
        maktx     TYPE maktx,
        ntgew     TYPE ntgew,
        uom1      TYPE gewei,
        brgew     TYPE brgew,
        uom2      TYPE gewei,
        volum     TYPE volum,
        uom3      TYPE voleh,
        wunit     TYPE umrez,
        wshpu     TYPE umrez,
        wpalt     TYPE umrez,
        mhdhb     TYPE mhdhb,
        prdha     TYPE prodh_d,
        werks     TYPE werks_d,
        stprs     TYPE stprs,
        uom4      TYPE waers,
        wwsal     TYPE kbetr,
        uom5      TYPE waers,
        vmsta     TYPE vmsta,
       END OF ty_matmas.

DATA: wa_matmas TYPE ty_matmas,
      gt_matmas TYPE STANDARD TABLE OF ty_matmas,
      wa_mvke   TYPE mvke,
      gt_mvke   TYPE STANDARD TABLE OF mvke,
      gt_marm   TYPE STANDARD TABLE OF marm.

DATA: werks_wa TYPE werks_d,
      vmsta_wa LIKE tvms-vmsta.

DATA: gs_alv_fieldcat   TYPE slis_fieldcat_alv.

*-----------------------------------------------------------------------
*
*/Macros
*
*-----------------------------------------------------------------------
*

DEFINE _set_fieldcat.
  clear gs_alv_fieldcat.
  gs_alv_fieldcat-tabname   = &amp;amp;1.
  gs_alv_fieldcat-fieldname = &amp;amp;2.
  gs_alv_fieldcat-outputlen = &amp;amp;3.
  gs_alv_fieldcat-seltext_l = &amp;amp;4.
  gs_alv_fieldcat-key       = space.
  gs_alv_fieldcat-no_out    = space.
END-OF-DEFINITION.

*----------------------------------------------------------------------*
*/Parameters &amp;amp; Select-options                                          *
*----------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK cus WITH FRAME TITLE text-s00.
SELECT-OPTIONS: s_werks  FOR werks_wa OBLIGATORY  DEFAULT '1000',
                s_vmsta  FOR vmsta_wa.
SELECTION-SCREEN SKIP.
PARAMETERS:     p_hrarcy AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK cus.

*----------------------------------------------------------------------*
*/Start-of-selection                                                   *
*----------------------------------------------------------------------*

START-OF-SELECTION.

**  PERFORM: get_mvke,
**           get_weights_marm.
* Replaced by:
  CREATE OBJECT:
    go_matmas,
    go_alvgrid.




*----------------------------------------------------------------------*
*/GET                                                                  *
*----------------------------------------------------------------------*

GET marav.

*----------------------------------------------------------------------*
*/GET                                                                  *
*----------------------------------------------------------------------*

GET mbewv.

  CHECK mbewv-bwkey IN s_werks.

**  PERFORM collect_marav.
* Replaced by:

  CALL METHOD go_matmas-&amp;gt;collect_marav
    EXPORTING
      is_marav = marav
    EXCEPTIONS
      rejected = 1.
  IF ( syst-subrc NE 0 ).
    REJECT 'MARAV'.
  ENDIF.
...&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&amp;amp;  Include           ZUS_SDN_Z_MATMAS_OO_C0&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;*---------------------------------------------------------------------*
*       CLASS lcl_matmas DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_matmas DEFINITION.

  PUBLIC SECTION.
    CLASS-DATA:
      md_meinh_ea     TYPE lrmei  VALUE 'EA',
      md_meinh_shu    TYPE lrmei  VALUE 'SHU',
      md_meinh_shp    TYPE lrmei  VALUE 'SHP'.

    METHODS:
      constructor
        IMPORTING
          value(id_calling_program)  TYPE syrepid DEFAULT sy-repid,

      collect_marav
        IMPORTING
          value(is_marav)  TYPE marav
        EXCEPTIONS
          rejected.

  PRIVATE SECTION.

    TYPES: BEGIN OF ty_matmas,
            matnr     TYPE matnr,
            maktx     TYPE maktx,
            ntgew     TYPE ntgew,
            uom1      TYPE gewei,
            brgew     TYPE brgew,
            uom2      TYPE gewei,
            volum     TYPE volum,
            uom3      TYPE voleh,
            wunit     TYPE umrez,
            wshpu     TYPE umrez,
            wpalt     TYPE umrez,
            mhdhb     TYPE mhdhb,
            prdha     TYPE prodh_d,
            werks     TYPE werks_d,
            stprs     TYPE stprs,
            uom4      TYPE waers,
            wwsal     TYPE kbetr,
            uom5      TYPE waers,
            vmsta     TYPE vmsta,
           END OF ty_matmas.

    DATA:
      ms_matmas       TYPE ty_matmas,
      mt_matmas       TYPE STANDARD TABLE OF ty_matmas.

    DATA:
      mt_selopts      TYPE rsparams_tt,
      ms_mvke         TYPE mvke,
      mt_mvke         TYPE STANDARD TABLE OF mvke,
      mt_marm         TYPE STANDARD TABLE OF marm.

    METHODS:
      get_mvke,
      get_weights_marm,

      transfer_gross_and_net_weights
        IMPORTING
          value(is_marav)   TYPE marav
        RETURNING
          value(rs_matmas)  TYPE ty_matmas.



ENDCLASS.                    "lcl_matmas DEFINITION

*---------------------------------------------------------------------*
*       CLASS lcl_alvgrid DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_alvgrid DEFINITION.

ENDCLASS.                    "lcl_alvgrid DEFINITION&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&amp;amp;  Include           ZUS_SDN_Z_MATMAS_OO_C1&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;*---------------------------------------------------------------------*
*       CLASS lcl_matmas IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_matmas IMPLEMENTATION.

  METHOD: constructor.

    CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
      EXPORTING
        curr_report           = id_calling_program
*     IMPORTING
*       SP                    =
      TABLES
        selection_table       = me-&amp;gt;mt_selopts
      EXCEPTIONS
        not_found             = 1
        no_report             = 2
        OTHERS                = 3.
    IF sy-subrc &amp;lt;&amp;gt; 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

    get_mvke( ).
    get_weights_marm( ).

  ENDMETHOD.                    "constructor

  METHOD get_mvke.
*   define local data
    DATA:
      ls_rsparams    TYPE rsparams,
      lr_matnr       TYPE RANGE OF matnr,
      ls_rng_mat     LIKE LINE OF lr_matnr,
      lr_vmsta       TYPE RANGE OF vmsta,
      ls_rng_vms     LIKE LINE OF lr_vmsta.

    LOOP AT me-&amp;gt;mt_selopts INTO ls_rsparams
                           WHERE ( selname = 'MS_MATNR' ).
      MOVE-CORRESPONDING ls_rsparams TO ls_rng_mat.
      APPEND ls_rng_mat TO lr_matnr.
    ENDLOOP.

    LOOP AT me-&amp;gt;mt_selopts INTO ls_rsparams
                           WHERE ( selname = 'S_VMSTA' ).
      MOVE-CORRESPONDING ls_rsparams TO ls_rng_vms.
      APPEND ls_rng_vms TO lr_vmsta.
    ENDLOOP.

    SELECT * FROM mvke INTO TABLE me-&amp;gt;mt_mvke
                       WHERE matnr IN lr_matnr
                       AND   vmsta IN lr_vmsta
                       ORDER BY matnr.

  ENDMETHOD.                    "get_mvke

  METHOD get_weights_marm.
*   define local data
    DATA:
      ls_rsparams    TYPE rsparams,
      lr_matnr       TYPE RANGE OF matnr,
      ls_rng_mat     LIKE LINE OF lr_matnr,
      lr_vmsta       TYPE RANGE OF vmsta,
      ls_rng_vms     LIKE LINE OF lr_vmsta.

    LOOP AT me-&amp;gt;mt_selopts INTO ls_rsparams
                           WHERE ( selname = 'MS_MATNR' ).
      MOVE-CORRESPONDING ls_rsparams TO ls_rng_mat.
      APPEND ls_rng_mat TO lr_matnr.
    ENDLOOP.

    SELECT * FROM marm INTO TABLE me-&amp;gt;mt_marm
             WHERE matnr IN lr_matnr
**             AND   meinh IN ( 'EA', 'SHU', 'SHP')
             AND ( meinh EQ md_meinh_ea   OR
                   meinh EQ md_meinh_shu  OR
                   meinh EQ md_meinh_shp )
             ORDER BY matnr meinh.

  ENDMETHOD.                    "get_weights_marm


  METHOD collect_marav.
*   define local data
    DATA:
      ls_mvke      TYPE mvke,
      ls_matmas    TYPE ty_matmas.

    READ TABLE me-&amp;gt;mt_mvke INTO ls_mvke
         WITH KEY matnr = is_marav-matnr
         BINARY SEARCH.

    IF sy-subrc = 0.
*     Transfer gross &amp;amp; net weight
      ls_matmas = transfer_gross_and_net_weights( is_marav ).

*     Get Wholesale price
      PERFORM get_whsalprice.

*     Get standard price for each plant
      PERFORM get_stdprice.

    ELSE.
**    REJECT 'MARAV'.
      RAISE rejected.
    ENDIF.
  ENDMETHOD.                    "collect_marav

  METHOD transfer_gross_and_net_weights.

  ENDMETHOD.                    "transfer_gross_and_net_weights

ENDCLASS.                    "lcl_matmas IMPLEMENTATION

*---------------------------------------------------------------------*
*       CLASS lcl_alvgrid IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_alvgrid IMPLEMENTATION.

ENDCLASS.                    "lcl_alvgrid IMPLEMENTATION
&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;  Uwe&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 13 Aug 2007 05:03:43 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/how-would-you-write-convert-this-procedural-code-report-into-oo-code/m-p/2705458#M626795</guid>
      <dc:creator>uwe_schieferstein</dc:creator>
      <dc:date>2007-08-13T05:03:43Z</dc:date>
    </item>
    <item>
      <title>Re: How would you write/convert this procedural code (report) into OO code?</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/how-would-you-write-convert-this-procedural-code-report-into-oo-code/m-p/2705459#M626796</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Sougata&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have somewhat elaborated my sample coding. Please note that there are still some flaws and shortcomings, e.g:&lt;/P&gt;&lt;P&gt;- itab MT_MATMAS of class LCL_MATMAS should be defined as READ-ONLY (However, when call method cl_salv_table=&amp;gt;factory the output itab must be changeable)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;- the entire processing of the ALV list (including layout, fieldcatalog, variants) should be encapsulated within a separate class&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Yet I hope the sample gives you a "taste" of OO-like coding.&lt;/P&gt;&lt;P&gt;When thinking about OO-programming think in terms of &amp;lt;b&amp;gt;responsibilities&amp;lt;/b&amp;gt;.&amp;lt;i&amp;gt; "Is my class really responsible of knowing these details or being capable of doing something?"&amp;lt;/i&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;===================================================&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;REPORT  zus_sdn_z_matmas_oo
        MESSAGE-ID z001.

* NOTE: OO-Version of Z_MATMAS (SDN)


*----------------------------------------------------------------------*
*/Tables                                                               *
*----------------------------------------------------------------------*

TABLES: marav,          "Database  View for using Logical Database MSM
        mbewv.          "Structure View for using Logical Database MSM
*----------------------------------------------------------------------*
*/Data                                                                 *
*----------------------------------------------------------------------*

TYPE-POOLS: slis,
            abap.


INCLUDE zus_sdn_z_matmas_oo_c0.  " class definition
INCLUDE zus_sdn_z_matmas_oo_c1.  " class implementation


DATA:
  go_matmas      TYPE REF TO lcl_matmas,
  go_alvgrid     TYPE REF TO lcl_alvgrid.




TYPES: BEGIN OF ty_matmas,
        matnr     TYPE matnr,
        maktx     TYPE maktx,
        ntgew     TYPE ntgew,
        uom1      TYPE gewei,
        brgew     TYPE brgew,
        uom2      TYPE gewei,
        volum     TYPE volum,
        uom3      TYPE voleh,
        wunit     TYPE umrez,
        wshpu     TYPE umrez,
        wpalt     TYPE umrez,
        mhdhb     TYPE mhdhb,
        prdha     TYPE prodh_d,
        werks     TYPE werks_d,
        stprs     TYPE stprs,
        uom4      TYPE waers,
        wwsal     TYPE kbetr,
        uom5      TYPE waers,
        vmsta     TYPE vmsta,
       END OF ty_matmas.

DATA: wa_matmas TYPE ty_matmas,
      gt_matmas TYPE STANDARD TABLE OF ty_matmas.

DATA: werks_wa TYPE werks_d,
      vmsta_wa LIKE tvms-vmsta.

DATA: gs_alv_fieldcat   TYPE slis_fieldcat_alv.

*-----------------------------------------------------------------------
*
*/Macros
*
*-----------------------------------------------------------------------
*

DEFINE _set_fieldcat.
  clear gs_alv_fieldcat.
  gs_alv_fieldcat-tabname   = &amp;amp;1.
  gs_alv_fieldcat-fieldname = &amp;amp;2.
  gs_alv_fieldcat-outputlen = &amp;amp;3.
  gs_alv_fieldcat-seltext_l = &amp;amp;4.
  gs_alv_fieldcat-key       = space.
  gs_alv_fieldcat-no_out    = space.
END-OF-DEFINITION.

*----------------------------------------------------------------------*
*/Parameters &amp;amp; Select-options                                          *
*----------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK cus WITH FRAME TITLE text-s00.
SELECT-OPTIONS: s_werks  FOR werks_wa OBLIGATORY  DEFAULT '1000',
                s_vmsta  FOR vmsta_wa.
SELECTION-SCREEN SKIP.
PARAMETERS:     p_hrarcy AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK cus.

*----------------------------------------------------------------------*
*/Start-of-selection                                                   *
*----------------------------------------------------------------------*

START-OF-SELECTION.

**  PERFORM: get_mvke,
**           get_weights_marm.
* Replaced by:
  CREATE OBJECT:
    go_matmas,
    go_alvgrid.




*----------------------------------------------------------------------*
*/GET                                                                  *
*----------------------------------------------------------------------*

GET marav.

*----------------------------------------------------------------------*
*/GET                                                                  *
*----------------------------------------------------------------------*

GET mbewv.

  CHECK mbewv-bwkey IN s_werks.

**  PERFORM collect_marav.
* Replaced by:

  CALL METHOD go_matmas-&amp;gt;collect_marav
    EXPORTING
      is_marav = marav
      is_mbewv = mbewv
    EXCEPTIONS
      rejected = 1.
  IF ( syst-subrc NE 0 ).
    REJECT 'MARAV'.
  ENDIF.



*----------------------------------------------------------------------*
*/End-of-selection                                                     *
*----------------------------------------------------------------------*

* Check to see that we have data
  DESCRIBE TABLE go_matmas-&amp;gt;mt_matmas.
  IF sy-tfill = 0.
    MESSAGE i016.
    EXIT.
  ENDIF.

  go_matmas-&amp;gt;sort_by_hierarchy( ).

END-OF-SELECTION.


*----------------------------------------------------------------------*
*            Display the report in ALV                                 *
*----------------------------------------------------------------------*

  PERFORM disp_alv.





*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  disp_alv
*&amp;amp;---------------------------------------------------------------------*
FORM disp_alv .

  DATA: ls_layout      TYPE slis_layout_alv,
        lt_events      TYPE slis_t_event,
        lt_fieldcat    TYPE slis_t_fieldcat_alv,
        li_sort        TYPE slis_t_sortinfo_alv.

*** Sort if user has opted to sort by Product Hierarchy
**  IF NOT p_hrarcy IS INITIAL.
**    SORT gt_matmas BY prdha.
**  ENDIF.

  DATA:
    lo_table    TYPE REF TO cl_salv_table.

  TRY.
      CALL METHOD cl_salv_table=&amp;gt;factory
*      EXPORTING
*        LIST_DISPLAY   = IF_SALV_C_BOOL_SAP=&amp;gt;FALSE
*        R_CONTAINER    =
*        CONTAINER_NAME =
        IMPORTING
          r_salv_table   = lo_table
        CHANGING
          t_table        = go_matmas-&amp;gt;mt_matmas.
    CATCH cx_salv_msg .
  ENDTRY.

  CHECK ( lo_table IS BOUND ).
  lo_table-&amp;gt;display( ).



*** Layout
**  PERFORM get_layout CHANGING ls_layout.
**
*** Get the field catalog
**  PERFORM get_fieldcat CHANGING lt_fieldcat.
**
*** Sorting
**  PERFORM fill_sort CHANGING li_sort.

*** Display the report
**  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
**    EXPORTING
**      i_callback_program     = sy-repid
**      i_callback_top_of_page = 'TOP_OF_PAGE'
**      is_layout              = ls_layout
**      it_fieldcat            = lt_fieldcat
**      i_save                 = 'A'
**      it_sort                = li_sort
**      it_events              = lt_events
**    TABLES
**      t_outtab               = gt_matmas
**    EXCEPTIONS
**      program_error          = 1
**      OTHERS                 = 2.
**
**  IF sy-subrc &amp;lt;&amp;gt; 0.
**    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
**            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
**  ENDIF.

ENDFORM.                    " disp_alv
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  get_layout
*&amp;amp;---------------------------------------------------------------------*
FORM get_layout  CHANGING ps_layout TYPE slis_layout_alv.

* Set the layout structure
  ps_layout-zebra             = abap_true.
  ps_layout-get_selinfos      = abap_true.
  ps_layout-colwidth_optimize = abap_true.

ENDFORM.                    " get_layout
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  get_fieldcat
*&amp;amp;---------------------------------------------------------------------*
FORM get_fieldcat  CHANGING pt_fieldcat TYPE slis_t_fieldcat_alv.

  FIELD-SYMBOLS:
    &amp;lt;fs_sr&amp;gt;                TYPE abap_compdescr,
    &amp;lt;fcat&amp;gt;                 TYPE LINE OF slis_t_fieldcat_alv.

  DATA:
    lv_pos                 TYPE sy-tabix,
    lo_strucdesc           TYPE REF TO cl_abap_structdescr,
    lt_fc_sr               TYPE abap_compdescr_tab,
    lv_fieldcat            TYPE slis_t_fieldcat_alv.

* Read fields of structure 'wa_matmas'
  lo_strucdesc ?= cl_abap_typedescr=&amp;gt;describe_by_data( wa_matmas ).
  lt_fc_sr = lo_strucdesc-&amp;gt;components.

  LOOP AT lt_fc_sr ASSIGNING &amp;lt;fs_sr&amp;gt;.
    lv_pos = sy-tabix.
    READ TABLE lv_fieldcat ASSIGNING &amp;lt;fcat&amp;gt;
         WITH KEY fieldname = &amp;lt;fs_sr&amp;gt;-name.
    IF sy-subrc EQ 0.
      &amp;lt;fcat&amp;gt;-col_pos = lv_pos.
      &amp;lt;fcat&amp;gt;-tabname = 'GT_MATMAS'.
      APPEND &amp;lt;fcat&amp;gt; TO pt_fieldcat[].
    ELSE.
      _set_fieldcat 'GT_matmas'
                     &amp;lt;fs_sr&amp;gt;-name
                     &amp;lt;fs_sr&amp;gt;-length
                     space.
      gs_alv_fieldcat-col_pos = lv_pos.
      CASE &amp;lt;fs_sr&amp;gt;-name.
        WHEN 'MATNR'.
          gs_alv_fieldcat-reptext_ddic = 'Material Code'(801).
          gs_alv_fieldcat-key          = abap_true.
        WHEN 'MAKTX'.
          gs_alv_fieldcat-reptext_ddic = 'Description'(802).
        WHEN 'NTGEW'.
          gs_alv_fieldcat-reptext_ddic = 'Net Weight'(803).
          gs_alv_fieldcat-no_zero      = abap_true.
        WHEN 'UOM1' OR 'UOM2' OR 'UOM3'.
          gs_alv_fieldcat-reptext_ddic = 'UoM'(824).
        WHEN 'UOM4' OR 'UOM5'.
          gs_alv_fieldcat-reptext_ddic = 'Currency'(825).
        WHEN 'BRGEW'.
          gs_alv_fieldcat-reptext_ddic = 'Gross Weight'(804).
          gs_alv_fieldcat-no_zero      = abap_true.
        WHEN 'VOLUM'.
          gs_alv_fieldcat-reptext_ddic = 'Case Volume'(805).
          gs_alv_fieldcat-no_zero      = abap_true.
        WHEN 'WUNIT'.
          gs_alv_fieldcat-reptext_ddic = 'Each/Case'(806).
          gs_alv_fieldcat-no_zero      = abap_true.
        WHEN 'WSHPU'.
          gs_alv_fieldcat-reptext_ddic = 'Case/Shipping Unit'(807).
          gs_alv_fieldcat-no_zero      = abap_true.
        WHEN 'WPALT'.
          gs_alv_fieldcat-reptext_ddic = 'Case/Pallet'(808).
          gs_alv_fieldcat-no_zero      = abap_true.
        WHEN 'MHDHB'.
          gs_alv_fieldcat-reptext_ddic = 'Total Shelf Life'(809).
          gs_alv_fieldcat-no_zero      = abap_true.
        WHEN 'PRDHA'.
          gs_alv_fieldcat-reptext_ddic = 'Product Hierarchy'(810).
        WHEN 'WERKS'.
          gs_alv_fieldcat-reptext_ddic = 'Delivery Plant'(811).
        WHEN 'STPRS'.
          gs_alv_fieldcat-reptext_ddic = 'Standard Price'(812).
          gs_alv_fieldcat-no_zero      = abap_true.
        WHEN 'WWSAL'.
          gs_alv_fieldcat-reptext_ddic = 'Wholesale Price'(815).
          gs_alv_fieldcat-no_zero      = abap_true.
        WHEN 'VMSTA'.
          gs_alv_fieldcat-reptext_ddic = 'Sales Stat'(813).
      ENDCASE.
      APPEND gs_alv_fieldcat TO pt_fieldcat[].
    ENDIF.
  ENDLOOP.

ENDFORM.                    " get_fieldcat

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  top_of_page
*&amp;amp;---------------------------------------------------------------------*
FORM top_of_page.

**  CALL FUNCTION 'Z_ALV_REPORT_HEADER'
**    EXPORTING
**      report_name = sy-repid.

ENDFORM.                    "top_of_page
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  fill_sort
*&amp;amp;---------------------------------------------------------------------*
FORM fill_sort  CHANGING ci_sort TYPE slis_t_sortinfo_alv.

  DATA lw_sort     TYPE slis_sortinfo_alv.

* Sort by material number or product hierarchy
  lw_sort-spos = 1.
  IF p_hrarcy IS INITIAL.
    lw_sort-fieldname = 'MATNR'.
  ELSE.
    lw_sort-fieldname = 'PRDHA'.
  ENDIF.
  APPEND lw_sort TO ci_sort.

ENDFORM.                    " fill_sort&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;===============================================&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;  Include           ZUS_SDN_Z_MATMAS_OO_C0
*&amp;amp;---------------------------------------------------------------------*


*---------------------------------------------------------------------*
*       CLASS lcl_matmas DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_matmas DEFINITION.

  PUBLIC SECTION.

    TYPES: BEGIN OF ty_matmas,
            matnr     TYPE matnr,
            maktx     TYPE maktx,
            ntgew     TYPE ntgew,
            uom1      TYPE gewei,
            brgew     TYPE brgew,
            uom2      TYPE gewei,
            volum     TYPE volum,
            uom3      TYPE voleh,
            wunit     TYPE umrez,
            wshpu     TYPE umrez,
            wpalt     TYPE umrez,
            mhdhb     TYPE mhdhb,
            prdha     TYPE prodh_d,
            werks     TYPE werks_d,
            stprs     TYPE stprs,
            uom4      TYPE waers,
            wwsal     TYPE kbetr,
            uom5      TYPE waers,
            vmsta     TYPE vmsta,
           END OF ty_matmas.

    CLASS-DATA:
      mc_meins_cs     TYPE meins  VALUE 'CS'   READ-ONLY,
      mc_meinh_ea     TYPE lrmei  VALUE 'EA'   READ-ONLY,
      mc_meinh_shu    TYPE lrmei  VALUE 'SHU'  READ-ONLY,
      mc_meinh_shp    TYPE lrmei  VALUE 'SHP'  READ-ONLY.



    DATA:
      ms_matmas       TYPE ty_matmas,
      mt_matmas       TYPE STANDARD TABLE OF ty_matmas.

    METHODS:
      constructor
        IMPORTING
          value(id_calling_program)  TYPE syrepid DEFAULT sy-repid,

      collect_marav
        IMPORTING
          value(is_marav)  TYPE marav
          value(is_mbewv)  TYPE mbewv
        EXCEPTIONS
          rejected,

        sort_by_hierarchy.

  PRIVATE SECTION.

    DATA:
      mt_selopts      TYPE rsparams_tt,
      ms_mvke         TYPE mvke,
      mt_mvke         TYPE STANDARD TABLE OF mvke,
      mt_marm         TYPE STANDARD TABLE OF marm.

    METHODS:
      get_mvke,
      get_weights_marm,

      transfer_gross_and_net_weights
        IMPORTING
          value(is_marav)   TYPE marav
        RETURNING
          value(rs_matmas)  TYPE ty_matmas,

      get_whsalprice
        IMPORTING
          value(is_mvke)    TYPE mvke
          value(id_bwkey)   TYPE bwkey
        CHANGING
          value(cs_matmas)  TYPE ty_matmas,

      get_stdprice
        IMPORTING
          value(is_mbewv)   TYPE mbewv
        CHANGING
          value(cs_matmas)  TYPE ty_matmas.



ENDCLASS.                    "lcl_matmas DEFINITION

*---------------------------------------------------------------------*
*       CLASS lcl_alvgrid DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_alvgrid DEFINITION.


ENDCLASS.                    "lcl_alvgrid DEFINITION&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;===========================================&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;  Include           ZUS_SDN_Z_MATMAS_OO_C1
*&amp;amp;---------------------------------------------------------------------*


*---------------------------------------------------------------------*
*       CLASS lcl_matmas IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_matmas IMPLEMENTATION.

  METHOD: constructor.

    CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
      EXPORTING
        curr_report           = id_calling_program
*     IMPORTING
*       SP                    =
      TABLES
        selection_table       = me-&amp;gt;mt_selopts
      EXCEPTIONS
        not_found             = 1
        no_report             = 2
        OTHERS                = 3.
    IF sy-subrc &amp;lt;&amp;gt; 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

    get_mvke( ).
    get_weights_marm( ).

  ENDMETHOD.                    "constructor

  METHOD get_mvke.
*   define local data
    DATA:
      ls_rsparams    TYPE rsparams,
      lr_matnr       TYPE RANGE OF matnr,
      ls_rng_mat     LIKE LINE OF lr_matnr,
      lr_vmsta       TYPE RANGE OF vmsta,
      ls_rng_vms     LIKE LINE OF lr_vmsta.

    LOOP AT me-&amp;gt;mt_selopts INTO ls_rsparams
                           WHERE ( selname = 'MS_MATNR' ).
      MOVE-CORRESPONDING ls_rsparams TO ls_rng_mat.
      APPEND ls_rng_mat TO lr_matnr.
    ENDLOOP.

    LOOP AT me-&amp;gt;mt_selopts INTO ls_rsparams
                           WHERE ( selname = 'S_VMSTA' ).
      MOVE-CORRESPONDING ls_rsparams TO ls_rng_vms.
      APPEND ls_rng_vms TO lr_vmsta.
    ENDLOOP.

    DELETE lr_matnr WHERE ( table_line IS INITIAL ).
    DELETE lr_vmsta WHERE ( table_line IS INITIAL ).

    SELECT * FROM mvke INTO TABLE me-&amp;gt;mt_mvke
                       WHERE matnr IN lr_matnr
                       AND   vmsta IN lr_vmsta
                       ORDER BY matnr.

  ENDMETHOD.                    "get_mvke

  METHOD get_weights_marm.
*   define local data
    DATA:
      ls_rsparams    TYPE rsparams,
      lr_matnr       TYPE RANGE OF matnr,
      ls_rng_mat     LIKE LINE OF lr_matnr,
      lr_vmsta       TYPE RANGE OF vmsta,
      ls_rng_vms     LIKE LINE OF lr_vmsta.

    LOOP AT me-&amp;gt;mt_selopts INTO ls_rsparams
                           WHERE ( selname = 'MS_MATNR' ).
      MOVE-CORRESPONDING ls_rsparams TO ls_rng_mat.
      APPEND ls_rng_mat TO lr_matnr.
    ENDLOOP.

    DELETE lr_matnr WHERE ( table_line IS INITIAL ).

    SELECT * FROM marm INTO TABLE me-&amp;gt;mt_marm
             WHERE matnr IN lr_matnr
**             AND   meinh IN ( 'EA', 'SHU', 'SHP')
             AND ( meinh EQ mc_meinh_ea   OR
                   meinh EQ mc_meinh_shu  OR
                   meinh EQ mc_meinh_shp )
             ORDER BY matnr meinh.

  ENDMETHOD.                    "get_weights_marm


  METHOD collect_marav.
*   define local data
    DATA:
      ls_mvke      TYPE mvke,
      ls_matmas    TYPE ty_matmas.

    READ TABLE me-&amp;gt;mt_mvke INTO ls_mvke
         WITH KEY matnr = is_marav-matnr
         BINARY SEARCH.

    IF sy-subrc = 0.
*     Transfer gross &amp;amp; net weight
      ls_matmas = transfer_gross_and_net_weights( is_marav ).

*     Get Wholesale price
      CALL METHOD me-&amp;gt;get_whsalprice
        EXPORTING
          is_mvke   = ls_mvke
          id_bwkey  = is_mbewv-bwkey
        CHANGING
          cs_matmas = ls_matmas.


*     Get standard price for each plant
      CALL METHOD me-&amp;gt;get_stdprice
        EXPORTING
          is_mbewv  = is_mbewv
        CHANGING
          cs_matmas = ls_matmas.

      MOVE   ls_mvke-vmsta TO ls_matmas-vmsta.
      APPEND ls_matmas     TO me-&amp;gt;mt_matmas.
      CLEAR  ls_matmas.

    ELSE.
**    REJECT 'MARAV'.
      RAISE rejected.
    ENDIF.
  ENDMETHOD.                    "collect_marav

  METHOD transfer_gross_and_net_weights.
    "   define local data
    DATA:
      ls_marm      TYPE marm.

    MOVE-CORRESPONDING is_marav TO rs_matmas.

    IF ( rs_matmas-ntgew IS NOT INITIAL ).
      MOVE is_marav-gewei TO rs_matmas-uom1.
    ENDIF.

    IF ( rs_matmas-brgew IS NOT INITIAL ).
      MOVE is_marav-gewei TO rs_matmas-uom2.
    ENDIF.

    IF ( rs_matmas-volum IS NOT INITIAL ).
      CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
        EXPORTING
          input          = is_marav-voleh
          language       = sy-langu
        IMPORTING
          output         = rs_matmas-uom3
        EXCEPTIONS
          unit_not_found = 1
          OTHERS         = 2.
    ENDIF.

    SHIFT rs_matmas-matnr LEFT DELETING LEADING '0'.

    CHECK is_marav-meins = 'CS'.

    LOOP AT me-&amp;gt;mt_marm INTO ls_marm
                        WHERE ( matnr = is_marav-matnr ).
      CASE ls_marm-meinh.
        WHEN mc_meinh_ea.
          rs_matmas-wunit = ls_marm-umren / ls_marm-umrez.
        WHEN mc_meinh_shu.
          rs_matmas-wshpu = ls_marm-umrez / ls_marm-umren.
        WHEN 'SHP'.
          rs_matmas-wpalt = ls_marm-umrez / ls_marm-umren.
        WHEN OTHERS.
      ENDCASE.
    ENDLOOP.

  ENDMETHOD.                    "transfer_gross_and_net_weights


  METHOD get_whsalprice.
    " define local data
    DATA:
      ld_kpein    TYPE kpein.

    SELECT k~kbetr k~kpein UP TO 1 ROWS
           INTO (cs_matmas-wwsal, ld_kpein)
           FROM       konp AS k
           INNER JOIN a304 AS a
           ON k~knumh = a~knumh
           WHERE  a~kappl =  'V'            AND
                  a~kschl =  'ZPRC'         AND
                  a~vkorg =  is_mvke-vkorg  AND
                  a~vtweg =  is_mvke-vtweg  AND
                  a~matnr =  is_mvke-matnr  AND
                  a~kfrst =  space          AND
                  a~datbi &amp;gt;= sy-datum.
    ENDSELECT.

    CHECK sy-subrc = 0.

    cs_matmas-wwsal = cs_matmas-wwsal / ld_kpein.

    SELECT SINGLE waers
           INTO cs_matmas-uom5
           FROM       t001k AS a
           INNER JOIN t001  AS b
           ON a~bukrs = b~bukrs
           WHERE a~bwkey = id_bwkey.
  ENDMETHOD.                    "get_whsalprice


  METHOD get_stdprice.

    IF ( is_mbewv-bwtar IS INITIAL ).
      SELECT SINGLE werks
             FROM marc
             INTO cs_matmas-werks
**           WHERE matnr = marav-matnr
             WHERE matnr = cs_matmas-matnr
             AND   werks = is_mbewv-bwkey.

      cs_matmas-stprs = is_mbewv-stprs / is_mbewv-peinh.

      IF ( cs_matmas-stprs IS NOT INITIAL ).
        IF ( cs_matmas-uom5 IS NOT INITIAL ).
          cs_matmas-uom4  = cs_matmas-uom5.
        ELSE.
          SELECT SINGLE waers
                 INTO cs_matmas-uom4
                 FROM       t001k AS a
                 INNER JOIN t001  AS b
                 ON a~bukrs = b~bukrs
                 WHERE a~bwkey = is_mbewv-bwkey.
        ENDIF.
      ENDIF.
    ENDIF.

**  MOVE   wa_mvke-vmsta TO wa_matmas-vmsta.
**  APPEND wa_matmas     TO gt_matmas.
**  CLEAR  wa_matmas.
* NOTE: It is highly intransparent that the output entries
*       are collected in a method called GET_STDPRICE.
* -&amp;gt; moved to calling method COLLECT_MARAV
  ENDMETHOD.                    "get_stdprice


  METHOD sort_by_hierarchy.
* Sort if user has opted to sort by Product Hierarchy
**    IF NOT p_hrarcy IS INITIAL.
**      SORT gt_matmas BY prdha.
**    ENDIF.
* NOTE: replaced by...

    DATA:
      ls_params    TYPE rsparams.

    READ TABLE me-&amp;gt;mt_selopts INTO ls_params
         WITH KEY selname = 'P_HRARCY'.
    CHECK ( syst-subrc = 0 ).

    IF ( ls_params-low = abap_true ).
      SORT me-&amp;gt;mt_matmas BY prdha.
    ENDIF.

  ENDMETHOD.                    "sort_by_hierarchy

ENDCLASS.                    "lcl_matmas IMPLEMENTATION

*---------------------------------------------------------------------*
*       CLASS lcl_alvgrid IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_alvgrid IMPLEMENTATION.

ENDCLASS.                    "lcl_alvgrid IMPLEMENTATION&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;  Uwe&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 14 Aug 2007 05:04:32 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/how-would-you-write-convert-this-procedural-code-report-into-oo-code/m-p/2705459#M626796</guid>
      <dc:creator>uwe_schieferstein</dc:creator>
      <dc:date>2007-08-14T05:04:32Z</dc:date>
    </item>
    <item>
      <title>Re: How would you write/convert this procedural code (report) into OO code?</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/how-would-you-write-convert-this-procedural-code-report-into-oo-code/m-p/2705460#M626797</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Sougata&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Have forgotten to mention the following link:&lt;/P&gt;&lt;P&gt;&amp;lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/2007/07/09/Understanding&lt;EM&gt;ABAP&lt;/EM&gt;Objects"&amp;gt;Understanding ABAP Objects&amp;lt;/a&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;  Uwe&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 14 Aug 2007 05:06:53 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/how-would-you-write-convert-this-procedural-code-report-into-oo-code/m-p/2705460#M626797</guid>
      <dc:creator>uwe_schieferstein</dc:creator>
      <dc:date>2007-08-14T05:06:53Z</dc:date>
    </item>
    <item>
      <title>Re: How would you write/convert this procedural code (report) into OO code?</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/how-would-you-write-convert-this-procedural-code-report-into-oo-code/m-p/2705461#M626798</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks Uwe, its much appreciated.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Cheers,&lt;/P&gt;&lt;P&gt;Sougata.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Aug 2007 00:49:53 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/how-would-you-write-convert-this-procedural-code-report-into-oo-code/m-p/2705461#M626798</guid>
      <dc:creator>Sougata</dc:creator>
      <dc:date>2007-08-15T00:49:53Z</dc:date>
    </item>
  </channel>
</rss>

