Académique Documents
Professionnel Documents
Culture Documents
TYPE-POOLS: SLIS,
SSCR.
* Definicin el layout
DATA:
LAYOUT
TYPE SLIS_LAYOUT_ALV.
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.
" 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
* 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.
*
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:
" BUSQUEDA_SOL
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.
" 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.