Tabla Interna Dinamica

posted under by Antonio Lopez


Codigo para la generacion de una tabla interna de forma dinamica en tiempo de ejecucion, cuando no se conocen los campos que esta va a contener en tiempo de diseño.

En este caso solo lo hice para guardar los meses del año, pero segun la logica de programacion de cada situacion, esto puede ser ajustado a las necesidades del desarrollo.


Espero sea de utilidad.

*&---------------------------------------------------------------------*
*& Report ZPRUEBAS_ABAP
*&---------------------------------------------------------------------*
*& reporte para la creacion de una tabla interna dinamica.
*&---------------------------------------------------------------------*

REPORT ZPRUEBAS_ABAP.
DATA: t_fieldcat TYPE lvc_t_fcat,
t_fieldcat_wa TYPE LINE OF lvc_t_fcat.

DATA: tabla TYPE REF TO data,
EP_TABLE TYPE REF TO data,
EP_line TYPE REF TO data.

DATA: BEGIN OF MESES OCCURS 0,
MES(12) TYPE C,
END OF MESES.

TYPE-POOLS: slis.

FIELD-SYMBOLS:
<l_table> TYPE STANDARD TABLE
<l_line> TYPE ANY
<l_field> TYPE ANY


START-OF-SELECTION.

MESES-MES = 'ENERO'. APPEND MESES.
MESES-MES = 'FEBRERO'. APPEND MESES.
MESES-MES = 'MARZO'. APPEND MESES.
MESES-MES = 'ABRIL'. APPEND MESES.
MESES-MES = 'MAYO'. APPEND MESES.
MESES-MES = 'JUNIO'. APPEND MESES.
MESES-MES = 'JULIO'. APPEND MESES.
MESES-MES = 'AGOSTO'. APPEND MESES.
MESES-MES = 'SEPTIEMBRE'. APPEND MESES.
MESES-MES = 'OCTUBRE'. APPEND MESES.
MESES-MES = 'NOVIEMBRE'. APPEND MESES.
MESES-MES = 'DICIEMBRE'. APPEND MESES.

LOOP AT MESES.
t_fieldcat_wa-col_pos = SY-TABIX.
t_fieldcat_wa-fieldname = MESES-MES.
APPEND t_fieldcat_wa TO t_fieldcat.
ENDLOOP.

CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = t_fieldcat
IMPORTING
ep_table = tabla
EXCEPTIONS
GENERATE_SUBPOOL_DIR_FULL = 1
others = 2
.
IF sy-subrc = 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ASSIGN tabla->* TO <l_table>.
CREATE DATA ep_line LIKE LINE OF <l_table>.
ASSIGN ep_line->* TO <l_line>.


LOOP AT MESES.
assign component MESES-MES of structure <l_line> to <l_field>.
<l_field> = SY-TABIX.
ENDLOOP.
insert <l_line> into table <l_table>.

LOOP AT MESES.
assign component meses-mes of structure <l_line> to <l_field>.
write: / MESES-MES, ': ', <l_field>.
ENDLOOP.

Iconos para Reportes

posted under by Antonio Lopez
REPORT ZICONS .
TABLES: ICON.
INCLUDE .
FIELD-SYMBOLS: .

SELECT * FROM ICON.
ASSIGN (ICON-NAME) TO .
WRITE: /(5) , 20 '@',21 ICON-ID+1(2),23 '@',ICON-OLENG,
ICON-BUTTON,ICON-STATUS,ICON-MESSAGE,ICON-FUNCTION,
ICON-NAME.
ENDSELECT.

Reporte Generador de Datos para BC_TRAVEL

posted under by Antonio Lopez
Para Generar los datos del modelo BC_TRAVEL es necesario llenar las tablas SPFLI, SLIGHT, SBOOK, esto lo podemos hacer mediante el programa/reporte S_FLIGHT_MODEL_DATA_GENERATOR.


Cuando lo ejecutemos nos pedira seleccionar una opcion de 5 disponibles:
* Borrar datos de las tablas
* Establecer datos minimos
* Establecer datos estandar
* Establecer datos maximos
* Establecer datos gigantes/monstruosos

Seleccionamos la opcion que queremos hacer y listo... tenemos llena nuestra base de datos para los ejemplos tanto de la clase de desarrollo SLIS como de la transaccion DWDM.

Colores

posted under by Antonio Lopez

Reporte Basico

posted under by Antonio Lopez
REPORT ZANTONIO2 NO STANDARD PAGE HEADING.


*tablas de la base de datos a utilizar
TABLES: ZPEDIDOS, ZPRODXPED, ZPRODUCTO, ZMTLXPROD.

*VARIABLES Y TABLAS INTERNAS
DATA: BEGIN OF T_MAT OCCURS 0,
ID_PEDIDO LIKE ZPEDIDOS-ID_PEDIDO,
ID_PRODUCTO LIKE ZPRODUCTO-ID_PRODUCTO,
CANTIDAD LIKE ZPRODXPED-CANTIDAD,
DESCRIPCION LIKE ZPRODUCTO-DESCRIPCION,
FECHA LIKE ZPEDIDOS-FECHA,
SUM_MATERIALES TYPE P,
SUM_CANTIDAD TYPE P,
END OF T_MAT.
DATA: BEGIN OF T_AUX OCCURS 0,
ID_PRODUCTO2 LIKE ZPRODUCTO-ID_PRODUCTO,
DESCRIPCION2 LIKE ZPRODUCTO-DESCRIPCION,
CANTIDAD2 LIKE ZPRODXPED-CANTIDAD,
FECHA2 LIKE ZPEDIDOS-FECHA,
END OF T_AUX.
DATA: BEGIN OF T_AUX2 OCCURS 0,
ID_MATERIAL LIKE ZMTLXPROD-ID_MATERIAL,
CANTIDAD LIKE ZMTLXPROD-CANTIDAD,
END OF T_AUX2.
DATA: LMAT LIKE LINE OF T_MAT.
DATA: LAUX LIKE LINE OF T_AUX.
DATA: VAR TYPE P.
DATA: TPEDIDOS LIKE ZPEDIDOS OCCURS 0 WITH HEADER LINE.

*OPCIONES DE SELECCION (FECHA INICIAL Y FECHA FINAL)
SELECT-OPTIONS: RANGO FOR T_MAT-FECHA.

*CODIGO
WRITE 10'PERIODO:'.
WRITE: 60'REPORTE DE CONSUMO DE MATERIAL' COLOR 2 ON.
WRITE: /'DE', RANGO-LOW, 'AL', RANGO-HIGH.
WRITE: 63 'FECHA ACTUAL : ' INVERSE COLOR 6, SY-DATUM INVERSE COLOR 6,
SY-ULINE.
SKIP 2.

*QUERY DE SELECCION Y COPIA A TABLA INTERNA.
SELECT * INTO TABLE TPEDIDOS FROM ZPEDIDOS WHERE ZPEDIDOS~FECHA IN RANGO.
SELECT ZPRODXPED~ID_PRODUCTO ZPRODUCTO~DESCRIPCION ZPRODXPED~CANTIDAD
ZPEDIDOS~FECHA INTO TABLE T_AUX FROM ZPRODXPED
JOIN ZPEDIDOS ON ZPRODXPED~ID_PEDIDO = ZPEDIDOS~ID_PEDIDO
JOIN ZPRODUCTO ON ZPRODXPED~ID_PRODUCTO = ZPRODUCTO~ID_PRODUCTO
WHERE ZPEDIDOS~FECHA IN RANGO.

*IMPRESION DE LA TABLA DE PEDIDOS (TABLA 1)
VAR = 5.
WRITE 'PEDIDOS ACTUALES' COLOR 4 ON.
WRITE / ' '.
ULINE AT 6(100).
WRITE / ' '.
LOOP AT TPEDIDOS.
AT END OF ID_PEDIDO.
IF VAR >= 100.
VAR = 5.
WRITE /' '.
ENDIF.
WRITE: AT VAR ' ', TPEDIDOS-ID_PEDIDO, ' '.
VAR = VAR + 10.
ENDAT.
ENDLOOP.
SKIP 2.


*IMPRESION DE LA TABLA DE PRODUCTOS (TABLA 2)
WRITE 'CANTIDAD DE PRODUCTO' COLOR 4 ON.
WRITE /' '.
ULINE AT 6(46).
WRITE: /' '.
WRITE: /5 ' ', 10 'Id' COLOR 2 ON, 15 'Descripcion' COLOR 2 ON, 40
'Cantidad' COLOR 2 ON, 50 ' '.
WRITE: /' '.
ULINE AT 6(46).
WRITE /' '.
SORT T_AUX BY ID_PRODUCTO2.
LOOP AT T_AUX.
MOVE T_AUX TO LAUX.
AT END OF ID_PRODUCTO2.
SUM.
WRITE: /5 ' ', T_AUX-ID_PRODUCTO2, LAUX-DESCRIPCION2,
T_AUX-CANTIDAD2, 50 ' '.
******************************************************************
PERFORM RUTINA_MTLS USING T_AUX-ID_PRODUCTO2 T_AUX-CANTIDAD2.
******************************************************************
ENDAT.
ENDLOOP.
SKIP 2.

*IMPRESION DE LA TABLA DE MATERIALES (TABLA 3)
VAR = 1.
WRITE 'CANTIDAD DE MATERIALES Y COSTOS' COLOR 4 ON.
WRITE /' '.
ULINE AT 11(26).
WRITE: /10' ', 13 'MATERIAL' COLOR 2 ON, 21 ' ', 25 'CANTIDAD' COLOR
2 ON, 35' '.
write /' '.
ULINE AT 11(26).
WRITE /' '.
SORT T_AUX2 BY ID_MATERIAL.
LOOP AT T_AUX2.
AT END OF ID_MATERIAL.
SUM.
WRITE: /10 ' ', T_AUX2-ID_MATERIAL, 20 ' ', T_AUX2-CANTIDAD, 35
' '.
ENDAT.
AT LAST.
SUM.
WRITE: 50 'TOTAL DE DINERO REQUERIDO = ' COLOR 6 ON, T_AUX2-CANTIDAD
COLOR 6 ON.
ENDAT.
ENDLOOP.
SKIP 5.

************************************************************************
*RUTINA
************************************************************************
FORM RUTINA_MTLS USING P_PROD P_CANT.
SELECT * INTO ZMTLXPROD FROM ZMTLXPROD WHERE ID_PRODUCTO = P_PROD.
T_AUX2-ID_MATERIAL = ZMTLXPROD-ID_MATERIAL.
T_AUX2-CANTIDAD = P_CANT * ZMTLXPROD-CANTIDAD.
APPEND T_AUX2.
ENDSELECT.
ENDFORM.

Google
 
top