************************************************************************
* Programa : Z_PRUEBA_ABAP
* Módulo : FI - Finanzas
* Documento:
* Usuario responsable:
* Consultor funcional:
* Consultor ABAP : Alvaro Tejada Galindo
* Descripción: Programa de Ejemplo de ABAP
* Transacción:
* Juego de datos:
************************************************************************
REPORT Z_PRUEBA_ABAP.
*=======================================================================
* Tablas
*=======================================================================
"Definimos las tablas que vamos a leer
TABLES: BKPF,BSEG.
*=======================================================================
* Estructuras
*=======================================================================
"Creamos una tabla interna con los campos necesarios
"El OCCURS 0 indica que es una tabla dinámica
DATA: BEGIN OF T_DATOS OCCURS 0,
BUKRS LIKE BKPF-BUKRS,
BELNR LIKE BKPF-BELNR,
GJAHR LIKE BKPF-GJAHR,
BLART LIKE BKPF-BLART,
WAERS LIKE BKPF-WAERS,
DMBTR LIKE BSEG-DMBTR,
END OF T_DATOS.
*=======================================================================
* Variables
*=======================================================================
"Una variable a modo de contador
DATA: CONTADOR TYPE I.
*=======================================================================
* Selection screen
*=======================================================================
"Estos son los parámetros de selección de nuestro programa
SELECTION-SCREEN BEGIN OF BLOCK DATA WITH FRAME TITLE TEXT-T01.
"Podemos elegir un rango de valores
SELECT-OPTIONS:
S_BUKRS FOR BKPF-BUKRS,
S_BELNR FOR BKPF-BELNR.
"Podemos elegir solamente un valor
"OBLIGATORY indica que es obligatorio para ejecutar el programa
PARAMETERS:
P_GJAHR LIKE BKPF-GJAHR OBLIGATORY.
SELECTION-SCREEN END OF BLOCK DATA.
*=======================================================================
* Start-of-selection
*=======================================================================
"Comienza la ejecución del programa
START-OF-SELECTION.
"Llamamos a las funciones que hemos creado
PERFORM OBTENER_DATOS.
PERFORM IMPRIMIR_DATOS.
*=======================================================================
* Subrutinas
*=======================================================================
*&---------------------------------------------------------------------*
*& Form OBTENER_DATOS
*&---------------------------------------------------------------------*
* Obtenemos los datos de las tablas BKPF y BSEG.
*----------------------------------------------------------------------*
FORM OBTENER_DATOS.
"Seleccionamos los valores de la tabla BKPF que cumplan con los
"requisitos y los guardamos en nuestra tabla interna.
"El APPEND sirve para almacenar los valores en la ultima fila
"de la tabla interna
SELECT BUKRS BELNR GJAHR BLART WAERS
INTO T_DATOS
FROM BKPF
WHERE BUKRS IN S_BUKRS
AND BELNR IN S_BELNR
AND GJAHR EQ P_GJAHR.
APPEND T_DATOS.
ENDSELECT.
"Hacemos un LOOP para recorrer todos los registros de nuestra
"tabla interna
LOOP AT T_DATOS.
"El SY-TABIX es una variable del sistema que nos indica el número
"de vueltas que ha dado un LOOP.
CONTADOR = SY-TABIX.
"Seleccionamos un dato y lo almacenamos en uno de los campos
"de nuestra tabla interna. El SINGLE indica que solo queremos un
"valor
SELECT SINGLE DMBTR
INTO T_DATOS-DMBTR
FROM BSEG
WHERE BUKRS EQ T_DATOS-BUKRS
AND BELNR EQ T_DATOS-BELNR
AND GJAHR EQ T_DATOS-GJAHR.
"El MODIFY modifica la tabla interna, para agregar el valor
"que hemos obtenido en el query anterior, utilizando como
"indice, el número de vuelta del LOOP
MODIFY T_DATOS INDEX CONTADOR.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form IMPRIMIR_DATOS
*&---------------------------------------------------------------------*
* Imprimimos en pantalla los datos generados
*----------------------------------------------------------------------*
FORM IMPRIMIR_DATOS.
"Imprimimos una pequeña cabecera con los titulos
WRITE:/1 'Sociedad',15 'Doc. Contable',30 'Año',37 'Moneda',
55 'Monto'.
"Recorremos nuestra tabla interna e imprimimos en pantalla
"registro por registro...
LOOP AT T_DATOS.
WRITE:/1 T_DATOS-BUKRS,15 T_DATOS-BELNR,30 T_DATOS-GJAHR,
38 T_DATOS-WAERS,45 T_DATOS-DMBTR.
ENDLOOP.
ENDFORM.