PARTE 3


IMPORTANTE:
SI DESEA UD. PUEDE INVOCAR LA MISMA CLASE, PERO ORIENTADO A OBJETOS (LOS METODOS TIENEN TERMINACION OO) , O SINO UN ALV GRID "NORMAL" COMO EN EL EJEMPLO.
ES IMPORTANTE SEÑALAR QUE LA VENTAJA DE UTILIZARLO DE ESTA MANERA ES QUE CON SOLO UNA 'X' PODEMOS DARLES LOS ATRIBUTOS QUE QUERRAMOS EN CUALQUIER PROGRAMA.



Por último, ahora en el programa invocamos a la clase:
DATA: ao_alv              TYPE REF TO zcl_alv_grid_main.
DATA: w_estruct TYPE tabname.

w_estruct = 'ZWCOMPARA'.   "la estructura del alv grid

** Después de haber procesado sus tablas internas

** llamo a este form.

PERFORM F_GENERA_ALV.

FORM f_genera_alv.

  CREATE OBJECT ao_alv.
  CALL METHOD ao_alv->init_alv

    EXPORTING
      p_program                      = sy-repid
      p_structure                    = w_estruct
*    p_hide_mc_fc_auf               =
*    p_hide_mc_fc_average           =
*    p_hide_mc_fc_back_classic      =
*    p_hide_mc_fc_call_abc          =
*    p_hide_mc_fc_call_chain        =
*    p_hide_mc_fc_call_crbatch      =
*    p_hide_mc_fc_call_crweb        =
*    p_hide_mc_fc_call_lineitems    =
*    p_hide_mc_fc_call_master_data  =
*    p_hide_mc_fc_call_more         =
*    p_hide_mc_fc_call_report       =
*    p_hide_mc_fc_call_xint         =
*    p_hide_mc_fc_call_xxl          =
*    p_hide_mc_fc_check             =
*    p_hide_mc_fc_col_invisible     =
*    p_hide_mc_fc_col_optimize      =
*    p_hide_mc_fc_count             =
*    p_hide_mc_fc_current_variant   =
*    p_hide_mc_fc_data_save         =
*    p_hide_mc_fc_delete_filter     =
*    p_hide_mc_fc_deselect_all      =
*    p_hide_mc_fc_detail            =
*    p_hide_mc_fc_excl_all          =
*    p_hide_mc_fc_expcrdata         =
*    p_hide_mc_fc_expcrdesig        =
*    p_hide_mc_fc_expcrtempl        =
*    p_hide_mc_fc_expmdb            =
*    p_hide_mc_fc_extend            =
*    p_hide_mc_fc_f4                =
*    p_hide_mc_fc_filter            =
*    p_hide_mc_fc_find              =
*    p_hide_mc_fc_fix_columns       =
*    p_hide_mc_fc_graph             =
*    p_hide_mc_fc_help              =
*    p_hide_mc_fc_html              =
*    p_hide_mc_fc_info              =
*    p_hide_mc_fc_load_variant      =
*    p_hide_mc_fc_loc_append_row    =
*    p_hide_mc_fc_loc_copy          =
*    p_hide_mc_fc_loc_copy_row      =
*    p_hide_mc_fc_loc_cut           =
*    p_hide_mc_fc_loc_delete_row    =
*    p_hide_mc_fc_loc_insert_row    =
*    p_hide_mc_fc_loc_move_row      =
*    p_hide_mc_fc_loc_paste         =
*    p_hide_mc_fc_loc_paste_new_row =
*    p_hide_mc_fc_loc_undo          =
*    p_hide_mc_fc_maintain_variant  =
*    p_hide_mc_fc_maximum           =
*    p_hide_mc_fc_minimum           =
*    p_hide_mc_fc_pc_file           =
*    p_hide_mc_fc_print             =
*    p_hide_mc_fc_print_back        =
*    p_hide_mc_fc_print_prev        =
*    p_hide_mc_fc_refresh           =
*    p_hide_mc_fc_reprep            =
*    p_hide_mc_fc_save_variant      =
*    p_hide_mc_fc_select_all        =
*    p_hide_mc_fc_send              =
*    p_hide_mc_fc_separator         =
*    p_hide_mc_fc_sort              =
*    p_hide_mc_fc_sort_asc          =
*    p_hide_mc_fc_sort_dsc          =
*    p_hide_mc_fc_subtot            =
*    p_hide_mc_fc_sum               =
*    p_hide_mc_fc_to_office         =
*    p_hide_mc_fc_to_rep_tree       =
*    p_hide_mc_fc_unfix_columns     =
*    p_hide_mc_fc_url_copy_to_clipb =
*    p_hide_mc_fc_variant_admin     =
*    p_hide_mc_fc_views             =
*    p_hide_mc_fc_view_crystal      =
*    p_hide_mc_fc_view_excel        =
*    p_hide_mc_fc_view_grid         =
*    p_hide_mc_fc_view_lotus        =
*    p_hide_mc_fc_word_processor    =     .

  PERFORM get_fieldcat.

  PERFORM get_layout.

  PERFORM get_events.

  PERFORM get_sort.

  PERFORM send_data.

  CALL METHOD ao_alv->display_alv.

ENDFORM.                    " f_genera_alv

*&---------------------------------------------------------------------
*&      Form  get_fieldcat
*&---------------------------------------------------------------------

FORM get_fieldcat.

  DATA: r TYPE sytabix.

  FIELD-SYMBOLS: <fs1> TYPE slis_fieldcat_alv.

  LOOP AT ao_alv->at_it_fieldcat ASSIGNING <fs1>.

    r = sy-tabix.
    <fs1>-no_out    = ''.

* Execute fieldcat rewrite

    IF  <fs1>-fieldname = 'XFELD'.
      <fs1>-no_out    = 'X'.
    ENDIF.

*****************************************

    IF <fs1>-fieldname = 'COLOR_LINE' OR
     <fs1>-fieldname = 'NOMBRE_EMP'.
      <fs1>-no_out    = 'X'.
    ENDIF.

    MODIFY ao_alv->at_it_fieldcat INDEX r FROM <fs1>.

  ENDLOOP.

ENDFORM.                    " get_fieldcat

*&---------------------------------------------------------------------
*&      Form  get_layout
*&---------------------------------------------------------------------
*       text
*----------------------------------------------------------------------
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------

FORM get_layout.

  CALL METHOD ao_alv->charge_structures_alv
    EXPORTING
*    p_i_interface_check            =
*    p_i_bypassing_buffer           =
*    p_i_buffer_active              =
      p_i_callback_program           = sy-repid
*    p_i_callback_pf_status_set     =
*    p_i_callback_user_command      =
*    p_i_callback_top_of_page       =
*    p_i_callback_html_top_of_page  =
*    p_i_callback_html_end_of_list  =
*    p_i_structure_name             =
*    p_i_background_id              =
*    p_i_grid_title                 =
*    p_i_grid_settings              =
*    p_layout_dummy                 =
*    p_layout_no_colhead            =
*    p_layout_no_hotspot            =
      p_layout_zebra                 = 'X'
*    p_layout_no_vline              =
*    p_layout_no_hline              =
*    p_layout_cell_merge            =
*    p_layout_edit                  =
*    p_layout_edit_mode             =
*    p_layout_numc_sum              =
*    p_layout_no_input              =
*    p_layout_f2code                =
*    p_layout_reprep                =
*    p_layout_no_keyfix             =
*    p_layout_expand_all            =
*    p_layout_no_author             =
*    p_layout_def_status            =
*    p_layout_item_text             =
      p_layout_countfname            = 'ZCOUNT'
      p_layout_colwidth_optimize     = 'X'
*    p_layout_no_min_linesize       =
*    p_layout_min_linesize          =
*    p_layout_max_linesize          =
      p_layout_window_titlebar       = text-t01
*    p_layout_no_uline_hs           =
*    p_layout_lights_fieldname      =
*    p_layout_lights_tabname        =
*    p_layout_lights_rollname       =
*    p_layout_lights_condense       =
*    p_layout_no_sumchoice          =
*    p_layout_no_totalline          =
*    p_layout_no_subchoice          =
*    p_layout_no_subtotals          =
*    p_layout_no_unit_splitting     =
*    p_layout_totals_before_items   =
*    p_layout_totals_only           =
*    p_layout_totals_text           =
*    p_layout_subtotals_text        =
*    p_layout_box_fieldname         =
*    p_layout_box_tabname           =
*    p_layout_box_rollname          =
*    p_layout_expand_fieldname      =
*    p_layout_hotspot_fieldname     =
*    p_layout_confirmation_prompt   =
*    p_layout_key_hotspot           =
*    p_layout_flexible_key          =
*    p_layout_group_buttons         =
*    p_layout_get_selinfos          =
      p_layout_group_change_edit     = 'X'
*    p_layout_no_scrolling          =
*    p_layout_detail_popup          =
*    p_layout_detail_initial_lines  =
      p_layout_detail_titlebar       = text-t01
*    p_layout_header_text           =
*    p_layout_default_item          =
      p_layout_info_fieldname        = 'COLOR_LINE'
*    p_layout_coltab_fieldname      =
*    p_layout_list_append           =
*    p_layout_xifunckey             =
*    p_layout_xidirect              =
*    p_layout_dtc_layout            =
*    p_layout_allow_switch_to_list  =
*    p_hide_mode                    =
*    p_hide_t_entries               =
      p_i_default                    = 'X'
      p_i_save                       = 'A'
*    p_variant_report               =
*    p_variant_handle               =
*    p_variant_log_group            =
*    p_variant_username             =
*    p_variant_variant              =
*    p_variant_text                 =
*    p_variant_dependvars           =
*    p_print_print                  =
*    p_print_prnt_title             =
*    p_print_footline               =
*    p_print_prnt_info              =
*    p_print_no_print_selinfos      =
*    p_print_no_coverpage           =
*    p_print_no_new_page            =
*    p_print_reserve_lines          =
*    p_print_no_print_listinfos     =
*    p_print_no_change_print_params =
*    p_print_no_print_hierseq_item  =
*    p_print_print_ctrl             =
*    p_reprepid_tool                =
*    p_reprepid_appl                =
*    p_reprepid_subc                =
*    p_reprepid_onam                =
*    p_i_screen_start_column        =
*    p_i_screen_start_line          =
*    p_i_screen_end_column          =
*    p_i_screen_end_line            =
*    p_i_html_height_top            =
*    p_i_html_height_end            =
*    p_ir_salv_fullscreen_adapter   =

      .

ENDFORM.                    " get_layout

*&---------------------------------------------------------------------
*&      Form  get_events
*&---------------------------------------------------------------------
*       text
*----------------------------------------------------------------------
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------

FORM get_events.

  CALL METHOD ao_alv->define_events

    EXPORTING

*    p_item_data_expand    =
*    p_reprep_sel_modify   =
*    p_caller_exit         =
*    p_user_command        =
      p_top_of_page         = 'X'
*    p_data_changed        =
*    p_top_of_coverpage    =
*    p_end_of_coverpage    =
*    p_foreign_top_of_page =
*    p_foreign_end_of_page =
      p_pf_status_set       = 'X'
*    p_list_modify         =
    p_top_of_list         = 'X'
    p_end_of_page         = 'X'
    p_end_of_list         = 'X'
*    p_after_line_output   =
*    p_before_line_output  =
      p_subtotal_text       = 'X'
*    p_grouplevel_change   =
*    p_context_menu        =
      .

ENDFORM.                    " get_events

*&---------------------------------------------------------------------
*&      Form  get_sort
*&---------------------------------------------------------------------
*       text
*----------------------------------------------------------------------
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------

FORM get_sort.

  DATA: d_sort TYPE slis_sortinfo_alv.
  CLEAR:d_sort.

*

  CALL METHOD ao_alv->charge_t_sort
    EXPORTING
*    p_spos       =
      p_fieldname  = 'PERNR'
      p_tabname    =  'TI_COMP_DET'
      p_up         = 'X'.
*    p_down       =
*        p_group      = '01'
*        p_subtot     = 'X'
*    p_comp       =
*    p_expa       =
*    p_obligatory =
*        .
*
ENDFORM.                    "get_sort

*&---------------------------------------------------------------------*
*&      Form  top_of_page
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM top_of_page. "

  DATA: d_line      TYPE slis_listheader,
        v_txt(50)   TYPE c,
        wendda(11) TYPE c,
        wbegda(11) TYPE c.

REFRESH t_heading.
  d_line-typ  = 'H'.
  d_line-key  = '01'.

  IF p_com = 'X'.
    d_line-info = text-t30.
  ELSE.
    d_line-info = text-t31.
  ENDIF.

  APPEND d_line TO t_heading.
  CLEAR: d_line.
  CLEAR v_txt.

  CONCATENATE 'Fecha Búsqueda: ' wbegda '-' wendda
  INTO v_txt SEPARATED BY space.

  d_line-typ  = 'S'.
  d_line-info = v_txt.

  APPEND d_line TO t_heading.

  CLEAR d_line.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = t_heading.
ENDFORM.                    "top_of_page

*&---------------------------------------------------------------------*
*&      Form  end_of_page
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM end_of_page.

ENDFORM.                    "end_of_page

*&---------------------------------------------------------------------*
*&      Form  top_of_list
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM top_of_list.

  DATA: ls_page_num TYPE string,
        ls_periodo TYPE string.
*  ls_page_num = sy-pagno.
*
*  CONCATENATE 'Pag. ' ls_page_num INTO ls_page_num RESPECTING BLANKS.
***  WRITE:/(40) LS_PERIODO LEFT-JUSTIFIED, (30) GS_RVART_VTXT CENTERED, (30) LS_PAGE_NUM RIGHT-JUSTIFIED.
*
*  WRITE:/(70) text-t02, (30) ls_page_num RIGHT-JUSTIFIED.
ENDFORM.                    "top_of_list

*&---------------------------------------------------------------------*
*&      Form  end_of_list
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM end_of_list.
  DATA: gs_user(40) TYPE c.
  gs_user = sy-uname.
  CONCATENATE 'EMITIDO POR:' gs_user INTO gs_user SEPARATED BY space.
  WRITE:/ gs_user.
ENDFORM.                    "end_of_list

*&---------------------------------------------------------------------*
*&      Form  pf_status_set
*&---------------------------------------------------------------------*

FORM pf_status_set USING rt_extab TYPE slis_t_extab.

************************************************************************
* Example:
* SET PF-STATUS 'MAIN' EXCLUDING rt_extab.
  SET PF-STATUS 'MENU'.   "botones activados menu
  SET TITLEBAR 'TITLE_0001'.   "titulo
************************************************************************
ENDFORM.                    " pf_status_set

*&---------------------------------------------------------------------
*&      Form  f_print_alv
*&---------------------------------------------------------------------
*       text
*----------------------------------------------------------------------
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------

FORM send_data.

  DATA: t_tabla TYPE REF TO data.
  FIELD-SYMBOLS: <ta> TYPE table.
  CREATE DATA t_tabla TYPE TABLE OF (w_estruct).
  ASSIGN t_tabla->* TO <ta>.

************************************************
  SORT ti_comp_det BY pernr.    "tabla interna que se va a mostrar en el alv grid
  INSERT LINES OF ti_comp_det INTO TABLE <ta>.
  CALL METHOD ao_alv->send_data
    EXPORTING
      p_nodetab = t_tabla.
ENDFORM.                    " f_print_alv

*********************************************************************************************

TERMINADO. SI NECESITAN ALGUNA AYUDA, DEJAR SU MAIL QUE LES CONTESTARE PRONTO..

No hay comentarios:

Publicar un comentario