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
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.
*&---------------------------------------------------------------------*
*& 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
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.
*----------------------------------------------------------------------*
* 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 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
*&---------------------------------------------------------------------*
* 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( ).
User | Count |
---|---|
2 | |
1 | |
1 | |
1 | |
1 |