Está en la página 1de 5

*&---------------------------------------------------------------------*

*& Report  Z_PROGRAMA3_CURSO
*&
*&---------------------------------------------------------------------*
*&
*&Este programa es para la creación de tablas internas
*&---------------------------------------------------------------------*

REPORT Z_PROGRAMA3_CURSO.

INCLUDE Z_PROGRAMA3_CURSO_TOP.  "Declaración de variables"
INCLUDE Z_PROGRAMA3_CURSO_F01.  "Declaración de subrutinas"
*&---------------------------------------------------------------------*
*&  Include           Z_PROGRAMA3_CURSO_TOP
*&---------------------------------------------------------------------*
*Declaración de variables
DATA: A TYPE I VALUE 3,
      B TYPE I VALUE 4,
      RESULTADO TYPE F.

*Declaracaión de tabla interna con cabecera
DATA: BEGIN OF TI_DATOS OCCURS 0,
  NOMBRE TYPE C LENGTH 20,
  APELLIDO(20) TYPE C,
  EDAD(4) TYPE I,
  END OF TI_DATOS.

*Declaracaión de tabla interna sin cabecera
DATA: BEGIN OF ST_DATOS,
  NOMBRE TYPE C LENGTH 20,
  APELLIDO(20) TYPE C,
  EDAD(4) TYPE I,
  END OF ST_DATOS.

*Referencia de una tabla interna
DATA: TI_DATOS2 LIKE TABLE OF ST_DATOS WITH HEADER LINE.

*Declaración de parametros
PARAMETERS: P_SUMA RADIOBUTTON GROUP OPER,
P_RESTA RADIOBUTTON GROUP OPER,
P_DIVI RADIOBUTTON GROUP OPER,
P_MULTI RADIOBUTTON GROUP OPER,
P_VALORA TYPE N LENGTH 6 OBLIGATORY DEFAULT 25,
P_VALORB TYPE N LENGTH 6.
*&---------------------------------------------------------------------*
*&  Include           Z_PROGRAMA3_CURSO_F01
*&---------------------------------------------------------------------*
*Validación que los valores no esten vacios
IF P_VALORA IS NOT INITIAL AND P_VALORB IS NOT INITIAL.
  A = P_VALORA.
  B = P_VALORB.
ENDIF.

*Se manda a llamar la subrutina calculo
PERFORM CALCULO USING A B CHANGING RESULTADO.

*Se imprime resultado
WRITE RESULTADO.

*Declaración de codigo de la subrutina (Case y operaciones)
FORM CALCULO USING INPUTA INPUTB CHANGING OUTPUT.
  CASE 'X'.
  WHEN P_SUMA.
    OUTPUT = INPUTA + INPUTB.
  WHEN P_RESTA.
    OUTPUT = INPUTA - INPUTB.
  WHEN P_DIVI.
    OUTPUT = INPUTA / INPUTB.
  WHEN P_MULTI.
    OUTPUT = INPUTA * INPUTB.
  WHEN OTHERS.
ENDCASE.
  ENDFORM.

*Declaración de valores para la tabla con cabecera
TI_DATOS-NOMBRE = 'ARMANDO'.
TI_DATOS-APELLIDO = 'JIMENEZ'.
TI_DATOS-EDAD = 23.

*Se limpian datos
CLEAR TI_DATOS-NOMBRE.

*Se valida que no vengan vacios
IF TI_DATOS IS INITIAL.
APPEND TI_DATOS.
ENDIF.

*Declaración de valores para la tabla con cabecera
TI_DATOS-NOMBRE = 'OSCAR'.
TI_DATOS-APELLIDO = 'OLMOS'.
TI_DATOS-EDAD = 28.

*Se almacen los datos a la tabla
APPEND TI_DATOS.

*Declaración de valores para la tabla con cabecera
TI_DATOS-NOMBRE = 'XOCHIL'.
TI_DATOS-APELLIDO = 'ARROYO'.
TI_DATOS-EDAD = 25.

*Se almacen los datos a la tabla
APPEND TI_DATOS.

*Declaración de valores para la tabla con cabecera
TI_DATOS-NOMBRE = 'JULIETA'.
TI_DATOS-APELLIDO = 'CRUZ'.
TI_DATOS-EDAD = 25.

*Se almacen los datos a la tabla
APPEND TI_DATOS.

*Se muestran los datos almacenados
LOOP AT TI_DATOS.
  WRITE / TI_DATOS-NOMBRE.
  WRITE / TI_DATOS-APELLIDO.
  WRITE / TI_DATOS-EDAD.

  WRITE: / TI_DATOS-NOMBRE,
    TI_DATOS-APELLIDO,
    TI_DATOS-EDAD.
ENDLOOP.

*Declaración de valores para la tabla sin cabecera
TI_DATOS2-NOMBRE = 'MOISES'.
TI_DATOS2-APELLIDO = 'MOISES'.
TI_DATOS2-EDAD = 35.

*Se almacen los datos a la tabla
APPEND TI_DATOS2.

*Se muestran los datos almacenados
LOOP AT TI_DATOS2.
  WRITE / TI_DATOS2-NOMBRE.
  WRITE / TI_DATOS2-APELLIDO.
  WRITE / TI_DATOS2-EDAD.

  WRITE: / TI_DATOS2-NOMBRE,
    TI_DATOS2-APELLIDO,
    TI_DATOS2-EDAD.
ENDLOOP.

También podría gustarte