Additional Blogs by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
fmunozb
Active Participant

Después de tener el diseño el cual se expuso en el documento Programa tipo reporte usando POO Parte 2, usándolo como base vamos a llevar a cabo la implementación, la cual se describe en este documento.

Tabla de contenido general

Indice del documento

Implementación

Con base en el diseño de clases creado en el documento Programa tipo reporte usando POO Parte 2 se llevó a cabo la implementación de la solución, la codificación de la solución se muestra agrupando los objetos de desarrollo de manera jerárquica, desde el programa principal, pasando por cada uno de sus INCLUDE y llegando a cada una de las clases creadas.

INCLUDE YEJEMPLO1

*&---------------------------------------------------------------------*
*& Report  YEJEMPLO1
*& Programa de tipo report usando POO, el cual muestra el listado
*& de materiales usando el código de material, texto breve del material
*& y grupo de artículos como filtros de entrada
*&---------------------------------------------------------------------*
*& Autor: Fernando Muñoz Beltrán
*& Email: fmunozb@gmail.com
*&---------------------------------------------------------------------*

INCLUDE yejemplo1_top                     .    " Datos globales y definición de clases
INCLUDE yejemplo1_cla                     .    " Implementación de clases
INCLUDE yejemplo1_eve                     .    " Eventos del reporte

INCLUDE YEJEMPLO1_TOP

REPORT   yejemplo1.
*----------------------------------------------------------------------*
*       CLASS gcl_program DEFINITION
*----------------------------------------------------------------------*
* Clase encargada de  contener el llamado de eventos de un programa de
* tipo reporte en ABAP y de generar el ALV
*----------------------------------------------------------------------*
CLASS gcl_program DEFINITION.
  
PUBLIC SECTION.
    
"Atributos
    
CLASS-DATA: go_zcl_yejemplo1 TYPE REF TO zcl_yejemplo1, "Clase de control
                 go_data
TYPE REF TO data, "Referencia a los datos
                 gv_matnr
TYPE mara-matnr, "Tipo para parámetro de entrada
                 gv_maktx
TYPE makt-maktx, "Tipo para parámetro de entrada
                 gv_matkl
TYPE mara-matkl, "Tipo para parámetro de entrada
                 go_alv_table
TYPE REF TO cl_salv_table. "Instancia de CL_SALV_TABLE

    
"Métodos
    
CLASS-METHODS: start_of_selection, "Ejecución de la lógica inicial del programa
                    end_of_selection
, "Ejecución de la lógica final del programa
                    display_report
. "Muestra el resultado del reporte
ENDCLASS.                    "gcl_program DEFINITION

* Dynpro con los parámetros selección
SELECTION-SCREEN BEGIN OF BLOCK b_1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_matnr FOR gcl_program=>gv_matnr, "Código de material
                 s_maktx
FOR gcl_program=>gv_maktx, "Nombre del material
                 s_matkl
FOR gcl_program=>gv_matkl. "Grupo de artículos
SELECTION-SCREEN END OF BLOCK b_1.


INCLUDE YEJEMPLO1_CLA

*----------------------------------------------------------------------*
*       CLASS gcl_program IMPLEMENTATION
*----------------------------------------------------------------------*
* Clase usada para la modularizadión en POO
*----------------------------------------------------------------------*
CLASS gcl_program IMPLEMENTATION.

  
METHOD start_of_selection.
    
"Inicializa el objeto controlador de la clase con los parámetros de selección
    
CREATE OBJECT go_zcl_yejemplo1
      
EXPORTING
         it_matnr
= s_matnr[]
         it_maktx
= s_matkl[]
         it_matkl
= s_maktx[].

    
"Si extrae la información de la base de datos
    
IF go_zcl_yejemplo1->set_data( ) = abap_true.
      
"Obtiene la referencia a los datos extraidos
       go_data
= go_zcl_yejemplo1->get_data( ).
    
ELSE.
      
MESSAGE 'No se encontraron datos con los filtros seleccionados' TYPE 'I'.
    
ENDIF.
  
ENDMETHOD.                    "start_of_selection

  
METHOD end_of_selection.
    
"Muestra el reporte
     display_report
( ).
  
ENDMETHOD.                    "end_of_selection

  
METHOD display_report.
    
"Muestra el reporte en un ALV
    
DATA: lo_root TYPE REF TO cx_root, "Manejo de excepciones
           lv_mes
TYPE string. "Mensaje
    
FIELD-SYMBOLS: <fs_git_data> TYPE ANY TABLE. "Tabla con los datos

    
"Asigna el área de memoria de los datos al field symbol
    
ASSIGN go_data->* TO <fs_git_data>.
    
IF sy-subrc = 0.
      
"Si la asignación fue correcta imprime el ALV
      
TRY.
        
CALL METHOD cl_salv_table=>factory
          
IMPORTING
             r_salv_table
= go_alv_table
          
CHANGING
             t_table     
= <fs_git_data>.
        
"Imprime el reporte
         go_alv_table
->display( ).
      
CATCH cx_salv_msg INTO lo_root.
        
"Si genera error
         lv_mes
= lo_root->get_text( ).
        
MESSAGE lv_mes TYPE 'E'.
      
ENDTRY.
    
ENDIF.
  
ENDMETHOD.                    "display_report
ENDCLASS.                    "gcl_program IMPLEMENTATION


CLASS ZCL_YEJEMPLO1

*----------------------------------------------------------------------*
*       CLASS ZCL_YEJEMPLO1 DEFINITION
*----------------------------------------------------------------------*
* Clase generada desde la SE24
*----------------------------------------------------------------------*
CLASS zcl_yejemplo1 DEFINITION
  
PUBLIC
   FINAL
  
CREATE PUBLIC .

  
PUBLIC SECTION.
*"* public components of class ZCL_YEJEMPLO1
*"* do not include other source files here!!!

    
METHODS constructor
      
IMPORTING
         !it_matnr
TYPE ANY TABLE
         !it_maktx
TYPE ANY TABLE
         !it_matkl
TYPE ANY TABLE .
    
METHODS set_data
       RETURNING
        
value(rp_ok) TYPE boolean .
    
METHODS get_data
       RETURNING
        
value(rt_data) TYPE REF TO data .
  
PROTECTED SECTION.
*"* protected components of class ZCL_YEJEMPLO1
*"* do not include other source files here!!!
  
PRIVATE SECTION.
*"* private components of class ZCL_YEJEMPLO1
*"* do not include other source files here!!!

    
TYPES:
      
BEGIN OF gty_data.
        
INCLUDE TYPE mara.
        
INCLUDE TYPE makt AS mak RENAMING WITH SUFFIX mak.
    
TYPES END OF gty_data .

    
DATA: git_data TYPE TABLE OF gty_data .
    
DATA gr_matnr TYPE fip_t_matnr_range .
    
DATA gr_maktx TYPE fip_t_maktx_range .
    
DATA gr_matkl TYPE fip_t_matkl_range .
ENDCLASS.                    "ZCL_YEJEMPLO1 DEFINITION

*----------------------------------------------------------------------*
*       CLASS ZCL_YEJEMPLO1 IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS zcl_yejemplo1 IMPLEMENTATION.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_YEJEMPLO1->CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* | [--->] IT_MATNR                       TYPE        ANY TABLE
* | [--->] IT_MAKTX                       TYPE        ANY TABLE
* | [--->] IT_MATKL                       TYPE        ANY TABLE
* +--------------------------------------------------------------------------------------</SIGNATURE>
  
METHOD constructor.
    
"Inicialzia los atributos para la selección de los datos
     gr_matnr
= it_matnr.
    
gr_matkl = it_matkl.
     gr_maktx
= it_maktx.
  
ENDMETHOD.                    "CONSTRUCTOR


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_YEJEMPLO1->GET_DATA
* +-------------------------------------------------------------------------------------------------+
* | [<-()] RT_DATA                        TYPE REF TO DATA
* +--------------------------------------------------------------------------------------</SIGNATURE>
  
METHOD get_data.
    
"Obtiene el apuntador (Dirección de memoria) de IT_DATA
    
GET REFERENCE OF git_data INTO rt_data.
  
ENDMETHOD.                    "get_data


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_YEJEMPLO1->SET_DATA
* +-------------------------------------------------------------------------------------------------+
* | [<-()] RP_OK                          TYPE        BOOLEAN
* +--------------------------------------------------------------------------------------</SIGNATURE>
  
METHOD set_data.
    
"Extrae la información de base de datos, trae todos los campos por eso se usa *
    
SELECT *
    
INTO TABLE git_data
    
FROM mara
     INNER
JOIN makt ON makt~matnr = mara~matnr
    
WHERE mara~matnr IN gr_matnr
    
AND mara~matkl IN gr_matkl
    
AND makt~maktx IN gr_maktx
    
.
    
IF sy-subrc = 0.
      
"Si obtuvo datos retorna verdadero
       rp_ok
= abap_true.
    
ELSE.
      
"Si no obtuvo datos retorna falso
       rp_ok
= abap_false.
    
ENDIF.
  
ENDMETHOD.                    "set_data
ENDCLASS.                    "ZCL_YEJEMPLO1 IMPLEMENTATION


INCLUDE YEJEMPLO1_EVE

*&---------------------------------------------------------------------*
*&  Include           YEJEMPLO1_EVE
*&---------------------------------------------------------------------*

* Evento ejecutado después de ingresar los parámetros de entrada
START-OF-SELECTION.
"Coloca los datos desde la base de datos en el atributo GIT_DATA
gcl_program
=>start_of_selection( ).

* Evento ejecutado despues de seleccionar los datos de la base de datos
END-OF-SELECTION.
"Ejecuta la lógica de impresión
gcl_program
=>end_of_selection( ).

3 Comments