Alv's dinamicos
* DEFINICION DE TABLAS QUE VA LLEGAR A USAR EL PROGRAMA
Tables: EBAN, --> ejemplo de tablas
LFA1.
TYPE-POOLS: SLIS,
SSCR.
* Definición el layout
DATA: LAYOUT TYPE SLIS_LAYOUT_ALV.
* DEFINICION DE TABLA INTERNA DONDE SACAMOS LOS DATOS
DATA: BEGIN OF IT_DATOSLOTES OCCURS 0, --> tabla que contiene datos del ALV
T_PROV(10)TYPE C,
.....,
END OF IT_DATOSLOTES.
* DEFINICION E LA VARIABLE QUE VA A CONTENER EL NUMERO DE COLUMNAS VARIABLES DEL ALV
DATA: NUM_LOT TYPE I. --> Nombre ejemplo
* DEFINICION DE LA PANTALLA DE SELECCION DE DATOS PRINCIPAL
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_SOLPED FOR ZMMDPOSADJ-ID_PROPUESTA NO INTERVALS NO-EXTENSION.
*PARAMETERS: S_SOLPED LIKE ZMMDPOSADJ-ID_PROPUESTA.
SELECTION-SCREEN END OF BLOCK B1.
* Creacion del puntero para la asignacion dinamica
FIELD-SYMBOLS : TYPE table,
TYPE ANY,
TYPE ANY..
* Creacion del puntero que usaremos para la asignacion
field-symbols: type ref to data.
data: lt_data type ref to data.
* Definicion de variables donde vamos a llevarlos datos
data: wa_fieldcat TYPE slis_fieldcat_alv.
data: i_fieldcat TYPE slis_t_fieldcat_alv.
data: lt_fieldcatalog type lvc_t_fcat.
data: ls_fieldcatalog type lvc_s_fcat.
* Creacion de una nueva linea de la tabla a mostrar
data: new_line TYPE REF TO data.
data: i_event TYPE slis_t_event,
wa_event TYPE slis_alv_event.
* Creacion de variable para ordenacion de listadodata: it_sortcat type slis_sortinfo_alv occurs 1,
wa_sort like line of it_sortcat.
data: numd LIKE ZMMDPOSADJ-IMPORTE_UNI.
data: intr type C.
DATA: gt_events TYPE slis_t_event WITH HEADER LINE.
* INICIAMOS LA SELECCION DE DATOS
START-OF-SELECTION.
* La selección de datos puede variar dependiendo del report, estas condiciones dependen de los chequeos que necesitemos paraimplementar nuestro caso.
************ EJEMPLO
* HACEMOS UN LLAMAMIENTO A FORM QUE REALIZA LA BUSQUEDA
PERFORM comprobar_datos USING S_SOLPED.
IF INTR EQ 'X'.
MESSAGE I154(ZCSPMM) WITH 'Introduce una solicitud de pedido'.
ELSE.
PERFORM BUSQUEDA_SOL.
ENDIF.
************ EJEMPLO
*&------------------------------------------------- Form comprobar_datos
FORMcomprobar_datos USING P_S_SOLPED.
******* Chequeo previo, codigo variante
ENDFORM. " comprobar_datos
*&------------------------------------------------- Form BUSQUEDA_SOL
FORM BUSQUEDA_SOL.
* BORRAMOS LA CABECERA DE DATOS PARA QUE NO SE DUPLIQUEN
CLEAR IT_DATOSLOTES. REFRESH IT_DATOSLOTES. ---> refrescamos la tabla
* RELLENAMOS LA TABLA INTERNA -->este caso puede valer de ejemplo
* Insertariamos la select que nos hiciera falta para coger los datos para el report.
SELECT * FROM .......
............
ENDSELECT.
* ORDENAMOS NUESTRA TABLA INTERNA
* INICIALIZAMOS LA VARIABLE A '0' QUE CUENTA CUENTA LAS COLUMNAS VARIABLES
* Actualizamos la variable que cuenta el numero de columnas variables que va a tener el ALV, bienrecorriendo la tabla, etc...
* Codigo ejempo
LOOP AT IT_DATOSLOTES.
IF IT_DATOSLOTES-T_LOTE GT NUM_LOT.
NUM_LOT = IT_DATOSLOTES-T_LOTE.
ENDIF.
ENDLOOP.
* codigo Ejemplo
* Llamamos al form que se encarga de crear el catalogo de campos del listado ALv
PERFORM carga_fieldcat USING IT_DATOSLOTES.
ENDFORM. " BUSQUEDA_SOL*&-------------------------------------------------- Form carga_fieldcat
FORM carga_fieldcat USING P_IT_DATOSLOTES.
REFRESH i_fieldcat .
CLEAR wa_fieldcat.
* Definición de los campos, en el caso de las columnas fijas se definen como siempre
Columna 1 .
ls_fieldcatalog-fieldname = 'T_PROV'.
append ls_fieldcatalog to lt_fieldcatalog.
CLEAR ls_fieldcatalog.
wa_fieldcat-tabname = 'IT_DATOSLOTES'....
Regístrate para leer el documento completo.