Vous êtes sur la page 1sur 11

ALV'S DINAMICOS

* DEFINICION DE TABLAS QUE VA LLEGAR A USAR EL PROGRAMA


Tables: EBAN,
LFA1.

--> ejemplo de tablas

TYPE-POOLS: SLIS,
SSCR.
* Definicin el layout
DATA:

LAYOUT

TYPE SLIS_LAYOUT_ALV.

* DEFINICION DE TABLA INTERNA DONDE SACAMOS LOS DATOS


DATA: BEGIN OF IT_DATOSLOTES OCCURS 0,
T_PROV(10) TYPE C,
.....,
END OF IT_DATOSLOTES.

--> tabla que contiene datos del ALV

* 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
SELECT-OPTIONS:
* PARAMETERS:
SELECTION-SCREEN

BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.


S_SOLPED FOR ZMMDPOSADJ-ID_PROPUESTA NO INTERVALS NO-EXTENSION.
S_SOLPED LIKE ZMMDPOSADJ-ID_PROPUESTA.
END OF BLOCK B1.

* Creacion del puntero para la asignacion dinamica


FIELD-SYMBOLS :<newtab> TYPE table,
<l_line> TYPE ANY,
<l_field> TYPE ANY..
* Creacion del puntero que usaremos para la asignacion
field-symbols: <fs_data> type ref to data.
data: lt_data type ref to data.
* Definicion de variables donde vamos a llevar los datos
data:
data:
data:
data:

wa_fieldcat TYPE slis_fieldcat_alv.


i_fieldcat TYPE slis_t_fieldcat_alv.
lt_fieldcatalog type lvc_t_fcat.
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 listado
data: 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 seleccin de datos puede variar dependiendo del report, estas condiciones dependen
de los chequeos que necesitemos para implementar 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
FORM comprobar_datos

USING

comprobar_datos

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.
* RELLENAMOS LA TABLA INTERNA

---> refrescamos la tabla

--> 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, bien recorriendo 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

USING

Form

carga_fieldcat

P_IT_DATOSLOTES.

REFRESH i_fieldcat .
CLEAR wa_fieldcat.
* Definicin 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'.
wa_fieldcat-fieldname = 'T_PROV'.
wa_fieldcat-key = space.
wa_fieldcat-ddictxt = 'L'.
wa_fieldcat-seltext_s = wa_fieldcat-seltext_m =
wa_fieldcat-seltext_l = TEXT-005.
APPEND wa_fieldcat TO i_fieldcat. CLEAR wa_fieldcat.
Columna 2
Columna 3
.......
*Ahora vamos a definir las columnas que son variables, nos podemos encontrar que tengamos
0, 1, 5, etc, este numero lo tenemos definidos en la variable creada en la cabecera
data: i type c. --> Creamos el contador para la asignacin ordenada de campos
data: NOMBRECAMPO TYPE C LENGTH 15. --> creamos la variable que contenga el nombre del
campo
i = '1'. --> actualizamos el contador a 1
* Creamos tantos campos como numero de variables haya, este proceso lo realizaremos a
traves de DO....ENDO
do NUM_LOT times.
* TEXT-003 --> definido en simbolo de texto como LOTE en este caso
* Concatena en nombrecampo el lote correspondiente, ejemplo: LOTE1,....LOTEN
******************************************************************************
*****
Definicin del catalogo de la tabla
concatenate TEXT-003 i into NOMBRECAMPO.
ls_fieldcatalog-fieldname = nombrecampo.
ls_fieldcatalog-DATATYPE = 'CURR'.
ls_fieldcatalog-DO_SUM = 'X'.
* Aadimos el lote al catalogo de la tabla
append ls_fieldcatalog to lt_fieldcatalog.
******************************************************************************
***** Definicin del catalogo del ALV
wa_fieldcat-fieldname = ls_fieldcatalog-fieldname.
CONCATENATE TEXT-003 I INTO wa_fieldcat-SELTEXT_S.
* Descripcion del tipo del campo, en este caso es de tipo moneda para hacer la suma
WA_fieldcat-DATATYPE = 'CURR'.
* Opcin del ALV, que nos realiza la suma de todas las columnas de forma automatica
WA_FIELDCAT-DO_SUM = 'X'.
* Aadimos el lote al catalogo del alv
append wa_fieldcat to i_fieldcat.
******************************************************************************
* Incrementamos el contador en 1.

I = I + 1.
* Limpiamos las variables para no contener datos de asignaciones anteriores.
CLEAR wa_fieldcat. CLEAR ls_fieldcatalog.
enddo.
assign lt_data to <fs_data>.
* CREAMOS LA TABLA CON LA ESTRUCTURA DINMICA
call method cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog
= lt_fieldcatalog
IMPORTING
ep_table
= <fs_data>
EXCEPTIONS
generate_subpool_dir_full = 1
others
= 2.
if sy-subrc <> 0.
endif.
* EN <NEWTAB> TENEMOS NUESTRA ESTRUCTURA DE LA TABLA QUE QUEREMOS
assign <fs_data>->* to <newtab>.
CREATE DATA new_line LIKE LINE OF <newtab>.
ASSIGN new_line->* TO <l_line>.
* HEMOS CREADO UNA LNEA DE ESA TABLA PARA IR RECORRIENDO LOS CAMPOS E IR RELLENANDO CON
INFORMACIN
DATA: NUMCAMPOS TYPE I.
NUMCAMPOS = NUM_LOT + 2.
DATA: AUX_IT_DATOSLOTES LIKE LINE OF IT_DATOSLOTES,
AUX_IT_DATOSLOTES2 LIKE LINE OF IT_DATOSLOTES.
* RECORREMOS LA TABLA IMPORTES QUE TENEMOS RELLENADA CON LA INFORMACIN NECESARIA.
* POR CADA CENTRO LOGSTICO VAMOS RELLENANDO SUS DIFERENTES LOTES.
LOOP AT IT_DATOSLOTES INTO AUX_IT_DATOSLOTES.
IF AUX_IT_DATOSLOTES-T_PROV EQ AUX_IT_DATOSLOTES2-T_PROV.
CONTINUE.
ENDIF.
*
*
LO HACEMOS DOS VECES PORQUE SON 2 COLUMNAS: CENTRO Y NOMBRE DE CENTRO LOG.
DO 2 TIMES.
*
"BAJAMOS" HASTA EL CAMPO QUE SE VA A RELLENAR
ASSIGN COMPONENT SY-INDEX
OF STRUCTURE <l_line> TO <l_field>.
*
SI ESTAMOS EN LA PRIMERA COLUMNA -> WERKS
IF SY-INDEX EQ 1.
<L_FIELD> = AUX_IT_DATOSLOTES-T_PROV.
*
SI ESTAMOS EN LA SEGUNDA COLUMNA -> NOMBRE DE WERKS
ELSEIF SY-INDEX EQ 2.
<L_FIELD> = AUX_IT_DATOSLOTES-N_PROV.
ENDIF.
ENDDO.
*
RECORREMOS LA TABLA IMPORTES DE ESE CENTRO
*
Y VAMOS RELLENANDO LOS LOTES DE ESE CENTRO.
LOOP AT IT_DATOSLOTES INTO AUX_IT_DATOSLOTES2
WHERE T_PROV EQ AUX_IT_DATOSLOTES-T_PROV.
NUMCAMPOS = AUX_IT_DATOSLOTES2-T_LOTE + 2.
ASSIGN COMPONENT NUMCAMPOS
OF STRUCTURE <L_LINE> TO <L_FIELD>.
<L_FIELD> = AUX_IT_DATOSLOTES2-T_IMPORTE.
ENDLOOP.
*
AADIMOS LA LNEA A LA TABLA
append <l_line> to <newtab>.
CLEAR <L_LINE>.
ENDLOOP.

****************EVENTS USED IN ALV

*
EVENTOS DEL ALV (ORDENACIN, ETC...)
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0 " 0-simple list, 1-hierarchial list.
IMPORTING
et_events
= i_event.
SORT i_event.
READ TABLE i_event
WITH KEY name = slis_ev_top_of_page
"TOP_OF_PAGE event
INTO wa_event.
* Definimos el layout que va a tener el listado ALV
PERFORM carga_layout.
* LLAMAMOS AL ALV CON EL TTULO, EL CATLOGO DE CAMPOS Y LA TABLA DINMICA.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = 'ZPRMM_INF_PROVLOT'
I_GRID_TITLE = TEXT-004
i_callback_user_command = 'USER_COMMAND'
* Cargamos el status gui del programa
i_callback_pf_status_set = 'PF_STATUS_SET'
* Cargamos a la cabecera del alv
I_CALLBACK_TOP_OF_PAGE = 'TOP-OF-PAGE'
* Cargamos el formato del alv
IS_LAYOUT = LAYOUT
it_events
= i_event
IT_FIELDCAT
= i_fieldcat
*
it_sort
= it_sortcat
* Tabla con el contenido asignado anteriormente
TABLES
t_outtab
= <newtab>.
ENDFORM.
" carga_fieldcat
*&------------------------------------------------

Form

carga_layout

FORM carga_layout .
layout-zebra = 'X'.
layout-colwidth_optimize = 'X'.
ENDFORM.
" carga_layout
*-------------------------------------------------------------------------*
*&---------------------------------------------------

FORM TOP-OF-PAGE

FORM TOP-OF-PAGE.
DATA: HEADER TYPE SLIS_T_LISTHEADER,
WA TYPE SLIS_LISTHEADER.
WA-TYP = 'H'.
CONCATENATE TEXT-006 SY-UNAME INTO WA-INFO SEPARATED BY SPACE.
APPEND WA TO HEADER.
WA-TYP = 'S'.
WA-KEY = 'FECHA'.
CONCATENATE SY-DATUM+6(2) '/' SY-DATUM+4(2) '/' SY-DATUM(4) INTO
WA-INFO.
APPEND WA TO HEADER.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = HEADER.
* I_LOGO = 'ENJOYSAP_LOGO'.
* I_END_OF_LIST_GRID =
ENDFORM.

EJEMPLO:

* DEFINICION DE TABLAS QUE VA LLEGAR A USAR EL PROGRAMA


Tables: ZMMDPOSADJ,
ZMMDCABSOL,
EBAN,
LFA1.
TYPE-POOLS: SLIS,
SSCR.
* Definicin el layout
DATA: LAYOUT TYPE SLIS_LAYOUT_ALV.
* DEFINICION DE TABLA INTERNA DONDE SACAMOS LOS DATOS
DATA: BEGIN OF IT_DATOSLOTES OCCURS 0,
T_PROV(10) TYPE C,
N_PROV(35) TYPE C,
T_LOTE(3) TYPE C,
T_IMPORTE LIKE ZMMDPOSADJ-IMPORTE_UNI,
END OF IT_DATOSLOTES.
* DEFINICION E LA VARIABLE QUE VA A CONTENER EL NUMERO DE COLUMNAS VARIABLES DEL
ALV
DATA: NUM_LOT TYPE I.
* 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 :<newtab> TYPE table,
<l_line> TYPE ANY,
<l_field> TYPE ANY..
* Creacion del puntero que usaremos para la asignacion
field-symbols: <fs_data> type ref to data.
data: lt_data type ref to data.
* Definicion de variables donde vamos a llevar los 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 listado


data: 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.
* 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.

*&------------------------------------------------- Form comprobar_datos


FORM comprobar_datos USING P_S_SOLPED.
clear intr.
if P_S_SOLPED EQ ''.
intr = 'X'.
endif.
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
SELECT * FROM ZMMDPOSADJ WHERE ID_PROPUESTA IN S_SOLPED.
IF SY-SUBRC EQ 0.
IF ZMMDPOSADJ-PROVEEDOR_SELECC NE ''.
MOVE: ZMMDPOSADJ-PROVEEDOR_SELECC TO IT_DATOSLOTES-T_PROV,
ZMMDPOSADJ-IMPORTE_UNI TO IT_DATOSLOTES-T_IMPORTE.
SELECT SINGLE NAME1 INTO IT_DATOSLOTES-N_PROV FROM LFA1
WHERE LIFNR EQ IT_DATOSLOTES-T_PROV.
SELECT SINGLE Z_NLOTE INTO IT_DATOSLOTES-T_LOTE FROM EBAN
WHERE BANFN EQ ZMMDPOSADJ-ID_PROPUESTA AND BNFPO EQ ZMMDPOSADJ-BNFPO.
COLLECT IT_DATOSLOTES.
ENDIF.
* hacemos la insercion de los datos, pero sumandolos los proveedores y lotes
ENDIF.
ENDSELECT.
* ORDENAMOS NUESTRA TABLA INTERNA

SORT IT_DATOSLOTES BY T_LOTE.


* INICIALIZAMOS EL NUMERO DE LOTES.
NUM_LOT = 0.
* Actualizamos la variable que cuenta el numero de columnas variables que va a tener el ALV
LOOP AT IT_DATOSLOTES.
IF IT_DATOSLOTES-T_LOTE GT NUM_LOT.
NUM_LOT = IT_DATOSLOTES-T_LOTE.
ENDIF.
ENDLOOP.
* 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.
* Definicin 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'.
wa_fieldcat-fieldname = 'T_PROV'.
wa_fieldcat-key = space.
wa_fieldcat-ddictxt = 'L'.
wa_fieldcat-seltext_s = wa_fieldcat-seltext_m =
wa_fieldcat-seltext_l = TEXT-005.
APPEND wa_fieldcat TO i_fieldcat. CLEAR wa_fieldcat.
Columna 2
Columna 3
.......

*Ahora vamos a definir las columnas que son variables, nos podemos encontrar que
tengamos 0, 1, 5, etc, este numero lo tenemos definidos en la variable creada en
la cabecera
data: i type c. --> Creamos el contador para la asignacin ordenada de campos
data: NOMBRECAMPO TYPE C LENGTH 15. --> creamos la variable que contenga el nombre del campo
i = '1'. --> actualizamos el contador a 1

* Creamos tantos campos como numero de variables haya, este proceso lo realizaremos a traves
de DO....ENDO
do NUM_LOT times.
* TEXT-003 --> definido en simbolo de texto como LOTE en este caso
* Concatena en nombrecampo el lote correspondiente, ejemplo: LOTE1, LOTE2....LOTEN

*********************************************************************************
***** Definicin del catalogo de la tabla
concatenate TEXT-003 i into NOMBRECAMPO.
ls_fieldcatalog-fieldname = nombrecampo.
ls_fieldcatalog-DATATYPE = 'CURR'.
ls_fieldcatalog-DO_SUM = 'X'.
* Aadimos el lote al catalogo de la tabla
append ls_fieldcatalog to lt_fieldcatalog.
*********************************************************************************
***** Definicin del catalogo del ALV
wa_fieldcat-fieldname = ls_fieldcatalog-fieldname.
CONCATENATE TEXT-003 I INTO wa_fieldcat-SELTEXT_S.
* Descripcion del tipo del campo, en este caso es de tipo moneda para hacer la suma
WA_fieldcat-DATATYPE = 'CURR'.
* Opcin del ALV, que nos realiza la suma de todas las columnas de forma automatica
WA_FIELDCAT-DO_SUM = 'X'.
* Aadimos el lote al catalogo del alv
append wa_fieldcat to i_fieldcat.
**********************************************************************************
* Incrementamos el contador en 1.
I = I + 1.
* Limpiamos las variables para que no contenga datos de asignaciones anteriores.
CLEAR wa_fieldcat. CLEAR ls_fieldcatalog.
enddo.
*
assign lt_data to <fs_data>.
* CREAMOS LA TABLA CON LA ESTRUCTURA DINMICA
call method cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog
= lt_fieldcatalog
IMPORTING
ep_table
= <fs_data>
EXCEPTIONS
generate_subpool_dir_full = 1
others
= 2.
if sy-subrc <> 0.
endif.
* EN <NEWTAB> TENEMOS NUESTRA ESTRUCTURA DE LA TABLA QUE QUEREMOS
assign <fs_data>->* to <newtab>.
CREATE DATA new_line LIKE LINE OF <newtab>.
ASSIGN new_line->* TO <l_line>.
* HEMOS CREADO UNA LNEA DE ESA TABLA PARA IR RECORRIENDO LOS CAMPOS E IR
RELLENANDO
* CON INFORMACIN
DATA: NUMCAMPOS TYPE I.
NUMCAMPOS = NUM_LOT + 2.
DATA: AUX_IT_DATOSLOTES LIKE LINE OF IT_DATOSLOTES,
AUX_IT_DATOSLOTES2 LIKE LINE OF IT_DATOSLOTES.

* RECORREMOS LA TABLA IMPORTES QUE TENEMOS RELLENADA CON LA INFORMACIN


NECESARIA.
* POR CADA CENTRO LOGSTICO VAMOS RELLENANDO SUS DIFERENTES LOTES.
LOOP AT IT_DATOSLOTES INTO AUX_IT_DATOSLOTES.
IF AUX_IT_DATOSLOTES-T_PROV EQ AUX_IT_DATOSLOTES2-T_PROV.
CONTINUE.
ENDIF.
* *
LO HACEMOS DOS VECES PORQUE SON 2 COLUMNAS: CENTRO Y NOMBRE DE CENTRO LOG.
DO 2 TIMES.
* "BAJAMOS" HASTA EL CAMPO QUE SE VA A RELLENAR
ASSIGN COMPONENT SY-INDEX
OF STRUCTURE <l_line> TO <l_field>.
*
SI ESTAMOS EN LA PRIMERA COLUMNA -> WERKS
IF SY-INDEX EQ 1.
<L_FIELD> = AUX_IT_DATOSLOTES-T_PROV.
* SI ESTAMOS EN LA SEGUNDA COLUMNA -> NOMBRE DE WERKS
ELSEIF SY-INDEX EQ 2.
<L_FIELD> = AUX_IT_DATOSLOTES-N_PROV.
ENDIF.
ENDDO.
* RECORREMOS LA TABLA IMPORTES DE ESE CENTRO
* Y VAMOS RELLENANDO LOS LOTES DE ESE CENTRO.
LOOP AT IT_DATOSLOTES INTO AUX_IT_DATOSLOTES2
WHERE T_PROV EQ AUX_IT_DATOSLOTES-T_PROV.
NUMCAMPOS = AUX_IT_DATOSLOTES2-T_LOTE + 2.
ASSIGN COMPONENT NUMCAMPOS
OF STRUCTURE <L_LINE> TO <L_FIELD>.
<L_FIELD> = AUX_IT_DATOSLOTES2-T_IMPORTE.
ENDLOOP.
* AADIMOS LA LNEA A LA TABLA
append <l_line> to <newtab>.
CLEAR <L_LINE>.
ENDLOOP.
****************EVENTS USED IN ALV
* EVENTOS DEL ALV (ORDENACIN, ETC...)
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0 " 0-simple list, 1-hierarchial list.
IMPORTING
et_events = i_event.
SORT i_event.
READ TABLE i_event
WITH KEY name = slis_ev_top_of_page "TOP_OF_PAGE event
INTO wa_event.
* Definimos el layout que va a tener el listado ALV
PERFORM carga_layout.
* LLAMAMOS AL ALV CON EL TTULO, EL CATLOGO DE CAMPOS Y LA TABLA DINMICA.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = 'ZPRMM_INF_PROVLOT'
I_GRID_TITLE = TEXT-004
i_callback_user_command = 'USER_COMMAND'
* Cargamos el status gui del programa
i_callback_pf_status_set = 'PF_STATUS_SET'
* Cargamos a la cabecera del alv
I_CALLBACK_TOP_OF_PAGE = 'TOP-OF-PAGE'

* Cargamos el formato del alv


IS_LAYOUT = LAYOUT
it_events
= i_event
IT_FIELDCAT
= i_fieldcat
*
it_sort
= it_sortcat
* Tabla con el contenido asignado anteriormente
TABLES
t_outtab
= <newtab>.
ENDFORM.

" carga_fieldcat

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

Form carga_layout

FORM carga_layout .
layout-zebra = 'X'.
layout-colwidth_optimize = 'X'.
ENDFORM.
" carga_layout
*-------------------------------------------------------------------------*
*&---------------------------------------------------

FORM TOP-OF-PAGE

FORM TOP-OF-PAGE.
DATA: HEADER TYPE SLIS_T_LISTHEADER,
WA TYPE SLIS_LISTHEADER.
WA-TYP = 'H'.
CONCATENATE TEXT-006 SY-UNAME INTO WA-INFO SEPARATED BY SPACE.
APPEND WA TO HEADER.
WA-TYP = 'S'.
WA-KEY = 'FECHA'.
CONCATENATE SY-DATUM+6(2) '/' SY-DATUM+4(2) '/' SY-DATUM(4) INTO
WA-INFO.
APPEND WA TO HEADER.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = HEADER.
* I_LOGO = 'ENJOYSAP_LOGO'.
* I_END_OF_LIST_GRID =
ENDFORM.

Vous aimerez peut-être aussi