Alv's dinamicos

Solo disponible en BuenasTareas
  • Páginas : 10 (2314 palabras )
  • Descarga(s) : 0
  • Publicado : 21 de septiembre de 2010
Leer documento completo
Vista previa del texto
• 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'....
tracking img