Creación de un ALV utilizando cualquier Itab

Hola, bueno primero que nada este es mi primer post y quisiera compartir con ustedes el siguiente programa que hice yo, para mostrar un reporte simple, pasando como parámetros la tabla y sus descripciones que finalmente muestra un reporte con un breve titulo.

*&---------------------------------------------------------------------*
*& Report  ZAHM_SIMPLE_ALV
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

report  zahm_simple_alv.
type-pools: slis.

*&---------------------------------------------------------------------*
*&      Form  MOSTRAR_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_ITAB  text
*----------------------------------------------------------------------*
form mostrar_alv  using    p_itab type standard table
                           wa_itab type any
                           itab_desc type standard table
                           titulo type data.
types:
       begin of ty_descrip,
         campo(20) type c,
       end of ty_descrip.

data:
      struc_desc             type ref to cl_abap_structdescr,
      lt_layout              type slis_layout_alv,
      ls_lvc_fieldcatalogue  type lvc_s_fcat,
      lt_lvc_fieldcatalogue  type lvc_t_fcat,
      ls_fieldcatalogue      type slis_fieldcat_alv,
      lt_fieldcatalogue      type slis_t_fieldcat_alv.

field-symbols:
               <str_comp> type abap_compdescr,
               <fs> type any.

data wa_itab_desc type ty_descrip.
  • Obtener lo campos de la estructura
  assign wa_itab to <fs>.  "asignar la estructura
  struc_desc ?= cl_abap_typedescr=>describe_by_data( <fs> ).
  loop at struc_desc->components assigning <str_comp>.
  ls_lvc_fieldcatalogue-fieldname = <str_comp>-name.
  ls_lvc_fieldcatalogue-tabname   = 'itab'.
  append ls_lvc_fieldcatalogue to lt_lvc_fieldcatalogue.

  ls_fieldcatalogue-fieldname   = <str_comp>-name.
  ls_fieldcatalogue-tabname   = 'itab'.
  clear wa_itab_desc.
  read table itab_desc index sy-tabix into wa_itab_desc.
  if sy-subrc = 0.
    ls_fieldcatalogue-seltext_l     = wa_itab_desc-campo.
    else.
    ls_fieldcatalogue-seltext_l     = <str_comp>-name.
    endif.
    append ls_fieldcatalogue to lt_fieldcatalogue.
  endloop.
  • LAYOUT del ALV
  lt_layout-zebra = 'X'.
  lt_layout-colwidth_optimize = 'X'.
  lt_layout-window_titlebar = titulo.

  • MOSTRAR el ALV
  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      is_layout     = lt_layout
      it_fieldcat   = lt_fieldcatalogue
    tables
      t_outtab      = p_itab
    exceptions
      program_error = 1
      others        = 2.
endform.                    " MOSTRAR_ALV

##Como funciona
Crear otro programa que ejecutara el perform del programa anterior…

report  zahm_alv_reporte.

types:
       begin of ty_descrip,
         campo(20) type c,
       end of ty_descrip.

data: it_mean type standard table of mean,
      wa_mean like line of it_mean.

data: itab_desc type standard table of ty_descrip,
      wa_itab_desc like line of itab_desc,

*|||||||||||||||||||||||||||||||||||||||||||||||||||||||
*|||||||||||||||||||||||||||||||||||||||||||||||||||||||
*|||||||||||||||TABLA MEAN||||||||||||
*|||||||||||||||||||||||||||||||||||||||||||||||||||||||
*|||||||||||||||||||||||||||||||||||||||||||||||||||||||
clear itab_desc.
  • Obtener datos para la tabla
select * from mean into table it_mean.

Tabla de Descripciones (crear un metodo para agregar descricpciones) " por default nombre de los campos se11.

*wa_itab_desc-campo = 'Clase'.
*append wa_itab_desc to itab_desc.
  • Crear ALV
perform mostrar_alv(zahm_simple_alv) using it_mean wa_mean itab_desc 'prueba ALV dinamico MEAN'. 

Saludos!!

6 Me gusta

Perfecto @armandomateu, resultará muy útil al grupo de @Abapers.
Edité el formato del código … para hacerlo más legible.
Si hay algun error, puedes editar tu propio mensaje, o bien me comentas, y lo vamos corrigiendo.

Veo que eres muy nuevo en la comunidad, aún no te has presentado, así que por favor, rompe el hielo :wink:

Saludos!

Gran aporte @armandomateu !!!

20 ptos amigo mio.

Saludos…

Muchas gracias @SidV, ya revise como me ayudaste en la edición para futuros aportes, pues no sabia como hacerlo.

Que bueno que te gusto @johnny282, estoy tratando de programar así, para reutilizar códigos y solo invocarlos cuando se requieran. Si conoces de algo similar que pueda leer de ello para mejorar te lo agradecería.

No hay problema :thumbsup:

Fijate aca:

1 me gusta

Prueba con la clase cl_salv_table creo que es más cómodo y rápido :wink:

2 Me gusta

hola Sid

El codigo que dices que corregiste en donde lo posteaste Sid me puedes indicar, gracias

Gracias por el aporte armando.

Un gusto conocerte y adelante yo tambien se algo de abap cuando gustes un saludo y bendicion desde mexico

Muchas gracias @borja87.
encontre este link de como utilizarlo (no se, si es correcto hacer esto para la comunidad)
http://goo.gl/BkfEcx

Lo que realmente buscaba, es crear mis propias clases (programas) y que pueda reutilizarlas en cualquier momento, Pues esto acostumbrado a crear mis propias clases para solo consumir los métodos algo tipo Orientado a Objetos.

1 me gusta

Gracias por el aporte lo estoy revisando y hare unas pruebas con programas Zs de antemano gracias armando, excelente miercoles

1 me gusta

A todos:

Están desvirtuando el tema.

Las dudas sobre el tutorial, deben crearlas como consulta nueva en Consultas SAP.

:information_source: El aporte se agradece a @armandomateu, pero más que responder a este tema dando las gracias, deben darle “me gusta” a su mensaje inicial. :thumbsup:

El código es el mismo, no lo corregí, solo le di “formato”.

Cierro esto así no se sigue desvirtuando.

Saludos.

1 me gusta