Documente Academic
Documente Profesional
Documente Cultură
Datos previos:
Aadir una Dynpro (Screen) al Module Pool creado pulsando el botn derecho:
Descomentar los mdulos PBO y PAI, y crear ambos objetos pinchando dos veces en el nombre.
En nuestro programa principal se nos habrn creado los objetos PBO y PAI en el
cdigo del programa.
Activacin del botn Cancel cmo mnimo para salir del programa.
Pinchamos dos veces al Dynpro 9000 y vamos al Layout para editar la pantalla. Se
introducirn los botones de crear, modificar y visualizar:
Para poder ejecutar la pantalla creada, es necesario crear una transaccin. Hay
dos formas:
1.
En la SE93
2.
Directamente en el programa
Descripcin de la transaccin.
Creamos la Dynpro (Screen) 9001 tal y como creamos la 9000. Las nicas
diferencias son:
1.
2.
En este caso, dependiendo del botn pulsado en la Dynpro 9000, el botn tendr
como texto Modificar o Visualizarse, por tanto es necesario indicar el botn como
campo de salida.
2.
3.
Identificador de grupo ID1 en todos los campos de entrada/salida salvo en cdigo de socio.
Dynpro 9000
PROCESS BEFORE OUTPUT.
MODULE STATUS_9000.
*
PROCESS AFTER INPUT.
MODULE USER_COMMAND_9000.
Dynpro 9001
PROCESS BEFORE OUTPUT.
MODULE status_9001.
*
PROCESS AFTER INPUT.
CHAIN.
FIELD zbiblio_socios-cod_socio.
MODULE existe_socio.
ENDCHAIN.
MODULE user_command_9001.
Dynpro 9002
PROCESS BEFORE OUTPUT.
MODULE status_9002.
MODULE inicial_9002.
*
PROCESS AFTER INPUT.
CHAIN.
FIELD zbiblio_socios-cod_socio.
MODULE existe_socio.
ENDCHAIN.
MODULE user_command_9002.
Dynpro 9003
PROCESS BEFORE OUTPUT.
MODULE status_9003.
MODULE inicial_9003.
*
PROCESS AFTER INPUT.
MODULE user_command_9003.
Module Pool
*&---------------------------------------------------------------------*
*& Module Pool
ZBIBLIO_CREAR_MODIF_VISUAL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
PROGRAM zbiblio_crear_modif_visual.
TABLES: zbiblio_socios.
DATA: g_st_socios TYPE zbiblio_socios.
DATA: ok_code_9000 TYPE sy-ucomm,
ok_code_9001 TYPE sy-ucomm,
ok_code_9002 TYPE sy-ucomm,
ok_code_9003 TYPE sy-ucomm.
DATA: b_9002_boton(20) TYPE c, "Texto de los botones output
b_9003_boton(20) TYPE c.
DATA: g_wa_existe_socio TYPE c, "Bsqueda en dynpro 9002
g_wa_vuelta TYPE i. "Al iniciar PBO del dynpro 9003
*&---------------------------------------------------------------------*
*&
Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
SET PF-STATUS 'STATUS_9000'.
SET TITLEBAR 'TITLE_9000'.
ENDMODULE.
" STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
CASE ok_code_9000.
WHEN 'CANCEL'.
LEAVE PROGRAM.
WHEN 'CREAR'.
CALL SCREEN 9001.
WHEN 'MODIFICAR'.
CALL SCREEN 9002 STARTING AT 10 10.
WHEN 'VISUALIZAR'.
CALL SCREEN 9002 STARTING AT 10 10.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*&
Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE status_9001 OUTPUT.
SET PF-STATUS 'STATUS_9001'.
SET TITLEBAR 'TITLE_9001'.
ENDMODULE.
" STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE user_command_9001 INPUT.
CASE ok_code_9001.
WHEN 'BACK'.
CALL SCREEN 9000.
WHEN 'CANCEL'.
LEAVE PROGRAM.
WHEN 'CREAR'.
INSERT zbiblio_socios.
MESSAGE 'Usuario creado' type 'I'.
ENDCASE.
ENDMODULE.
" USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
*&
Module STATUS_9002 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE status_9002 OUTPUT.
SET PF-STATUS 'STATUS_9002'.
SET TITLEBAR 'TITLE_9002'.
ENDMODULE.
" STATUS_9002 OUTPUT
*&---------------------------------------------------------------------*
*&
Module MODIFICAR_VISUALIZAR OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE inicial_9002 OUTPUT.
PERFORM f_inicial.
ENDMODULE.
" MODIFICAR_VISUALIZAR OUTPUT
*&---------------------------------------------------------------------*
*&
Module VALIDA_SOCIO INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE existe_socio INPUT.
PERFORM f_existe_socio.
IF ok_code_9000 = 'CREAR' AND g_wa_existe_socio = 'X'.
MESSAGE 'El usuario ya existe' TYPE 'E'.
ELSEIF ( ok_code_9000 = 'MODIFICAR' OR
ok_code_9000 = 'VISUALIZAR' ) AND
g_wa_existe_socio <> 'X'.
MESSAGE 'El usuario no existe' TYPE 'E'.
ENDIF.
ENDMODULE.
" EXISTE_SOCIO INPUT
*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_9002 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE user_command_9002 INPUT.
CASE ok_code_9002.
WHEN 'BACK'.
CALL SCREEN 9000.
WHEN 'CANCEL'.
LEAVE PROGRAM.
CLEAR: g_st_socios, g_wa_existe_socio.
WHEN 'ACCION'.
IF g_wa_existe_socio = 'X'.
g_wa_vuelta = 1.
CALL SCREEN 9003 STARTING AT 10 10.
ENDIF.
ENDCASE.
ENDMODULE.
" USER_COMMAND_9002 INPUT
*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_9003 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE user_command_9003 INPUT.
CASE ok_code_9003.
WHEN 'BACK'.
CALL SCREEN 9000.
WHEN 'CANCEL'.
LEAVE PROGRAM.
WHEN 'ACCION'.
IF ok_code_9000 = 'MODIFICAR'.
PERFORM f_modificar.
ENDIF.
ENDCASE.
ENDMODULE.
" USER_COMMAND_9003 INPUT
*&---------------------------------------------------------------------*
*&
Module STATUS_9003 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE status_9003 OUTPUT.
SET PF-STATUS 'STATUS_9003'.
IF ok_code_9000 = 'MODIFICAR'.
SET TITLEBAR 'TITLE_9003_1'.
ELSEIF ok_code_9000 = 'VISUALIZAR'.
SET TITLEBAR 'TITLE_9003_2'.
ENDIF.
ENDMODULE.
" STATUS_9002 OUTPUT
*&---------------------------------------------------------------------*
*&
Module INICIAL_9003 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE inicial_9003 OUTPUT.
PERFORM f_inicial.
IF g_wa_vuelta = 1.
PERFORM f_ver_socio.
g_wa_vuelta = g_wa_vuelta + 1.
ENDIF.
ENDMODULE.
" INICIAL_9003 OUTPUT
*&---------------------------------------------------------------------*
*&
Form F_INICIAL
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM f_inicial.
* Cambiar el texto del botn
IF ok_code_9000 = 'MODIFICAR'.
b_9002_boton = 'Modificar'.
b_9003_boton = 'Modificar'.
ELSEIF ok_code_9000 = 'VISUALIZAR'.
b_9002_boton = 'Visualizar'.
b_9003_boton = 'Visualizar'.
* No editable cuando es visualizacin
LOOP AT SCREEN.
IF screen-group1 = 'ID1'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM.
" F_INICIAL
*&---------------------------------------------------------------------*
*&
Form F_EXISTE_SOCIO
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM f_existe_socio .
DATA: l_st_socios TYPE zbiblio_socios.
IF zbiblio_socios-cod_socio IS NOT INITIAL.
SELECT SINGLE * FROM zbiblio_socios
INTO l_st_socios
WHERE cod_socio = zbiblio_socios-cod_socio.
IF sy-subrc = 0.
g_wa_existe_socio = 'X'.
ELSEIF sy-subrc <> 0.
CLEAR g_wa_existe_socio.
ENDIF.
ENDIF.
ENDFORM.
" F_EXISTE_SOCIO
*&---------------------------------------------------------------------*
*&
Form F_MODIFICAR_9002
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM f_modificar.
* Los datos del input se actualizan a la base datos (mismo nombre)
UPDATE zbiblio_socios.
MESSAGE 'Usuario modificado' TYPE 'I'.
ENDFORM.
" F_MODIFICAR
*&---------------------------------------------------------------------*
*&
Form F_VER_SOCIO
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM f_ver_socio .
DATA l_st_socio TYPE zbiblio_socios.
SELECT SINGLE * FROM zbiblio_socios
INTO l_st_socio
WHERE cod_socio = zbiblio_socios-cod_socio.
zbiblio_socios = l_st_socio.
ENDFORM.
" F_VER_SOCIO
Navegamos en el rbol hasta la pestaa GUI Status>STANDARD. Pinchamos con el botn derecho
y lo copiamos a nuestro programa.
Pinchamos dos veces en STANDARD y veremos los botones disponibles. En esta nueva ventana
aadimos un nuevo botn, asignndole un nombre, un icono y un atajo del teclado (No asignar el
atajo F4, ya que el botn no funcionara).
Asignamos un icono.
Ya tenemos el GUI Status listo para incorporar. Se va a mostrar un cdigo en el que se muestran
los cuatro primeros campos de la tabla SFLIGHT con un nuevo botn en el men. Cuando se pulsa
el botn, saldr un mensaje de notificacin.
El cdigo es el siguiente:
REPORT z_test.
* Cargar la tabla SFLIGHT de la base de datos
TABLES: sflight.
* Cargamos los datos tipo slis
TYPES: slis.
* Definicin de variables
DATA: g_it_sflight TYPE TABLE OF sflight,
g_st_sflight TYPE sflight.
DATA: g_it_fieldcat TYPE slis_t_fieldcat_alv,
*&
Form mi_standard
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
FORM mi_standard USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD'. "Nombre del Status GUI
ENDFORM.
"mi_standard
Crear un Tabstrip, y en una pestaa mostrar los socios en una tabla de control
2.
3.
Ejecutar con un Batch Input la modificacin de cada uno de los socios seleccionados a
travs de un Module Pool creado anteriormente.
Datos:
1.
2.
Aadimos una Dynpro 9000 con su correspondiente Status para salir del programa.
2.
3.
4.
Al haber indicado tres secciones en el Tabstrip, automticamente se nos habr generado tres
Dynpros subscreen y la siguiente programacin de dilogo con sus correspondientes mdulos en el
Report:
PROCESS BEFORE OUTPUT.
*&SPWIZARD: PBO FLOW LOGIC FOR TABSTRIP 'TS_9000'
MODULE TS_9000_ACTIVE_TAB_SET.
CALL SUBSCREEN TS_9000_SCA
INCLUDING G_TS_9000-PROG G_TS_9000-SUBSCREEN.
MODULE STATUS_9000.
*
PROCESS AFTER INPUT.
*&SPWIZARD: PAI FLOW LOGIC FOR TABSTRIP 'TS_9000'
CALL SUBSCREEN TS_9000_SCA.
MODULE TS_9000_ACTIVE_TAB_GET.
MODULE USER_COMMAND_9000.
Para editar la pestaa de Socios, tendremos que ir al subscreen 9001.
Introducimos una tabla de control y un botn.
A continuacin nos interesa saber cul es la secuencia del Batch Input para ejecutar cada una de
las modificaciones seleccionadas.
Para ello vamos a la transacci SM35 y creamos una nueva grabacin:
Se habr ejecutado la transaccin indicada anteriormente. A partir de este paso, hay que realizar la
modificacin de solo un usuario sin hacer un paso de mas, ya que se grabara. Cuando hayamos
acabado, cerramos la transaccin y aparecer una tabla BDCDATA de la grabacin:
Con esta tabla, hay que identificar los cambios a realizar y generarla en nuestro programa para
modificar todos los usuarios que hayamos seleccionado con el Checkbox.
Los cdigos son los siguientes.
Dynpro 9000
Report
*&---------------------------------------------------------------------*
*& Report ZBIBLIO_MODIF_VARIOS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zbiblio_modif_varios.
CONTROLS: ct_9001_socios TYPE TABLEVIEW USING SCREEN 9001.
TABLES: zbiblio_socios.
* Aadimos un campo string (Checkbox) a la tabla interna de socios.
DATA: BEGIN OF g_it_socios_aux OCCURS 0,
flag(1) TYPE c.
INCLUDE STRUCTURE zbiblio_socios.
DATA: END OF g_it_socios_aux.
* Tabla para el Batch Input
DATA: BEGIN OF g_it_bdcdata OCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA: END OF g_it_bdcdata.
DATA: cb_9001_flag TYPE c.
DATA: g_wa_vuelta TYPE i VALUE 1.
* Llamada a la Dynpro
CALL SCREEN 9000.
*&---------------------------------------------------------------------*
*&
Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
SET PF-STATUS 'STATUS_9000'.
SET TITLEBAR 'TITLE_9000'.
ENDMODULE.
g_ts_9000-subscreen = '9001'.
WHEN c_ts_9000-tab2.
g_ts_9000-subscreen = '9002'.
WHEN c_ts_9000-tab3.
g_ts_9000-subscreen = '9003'.
WHEN OTHERS.
*&SPWIZARD:
DO NOTHING
ENDCASE.
ENDMODULE.
"TS_9000_ACTIVE_TAB_SET OUTPUT
*&SPWIZARD: INPUT MODULE FOR TS 'TS_9000'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE ts_9000_active_tab_get INPUT.
ok_code_9000 = sy-ucomm.
CASE ok_code_9000.
WHEN c_ts_9000-tab1.
g_ts_9000-pressed_tab = c_ts_9000-tab1.
WHEN c_ts_9000-tab2.
g_ts_9000-pressed_tab = c_ts_9000-tab2.
WHEN c_ts_9000-tab3.
g_ts_9000-pressed_tab = c_ts_9000-tab3.
WHEN OTHERS.
*&SPWIZARD:
DO NOTHING
ENDCASE.
ENDMODULE.
"TS_9000_ACTIVE_TAB_GET INPUT
*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
CASE ok_code_9000.
WHEN 'CANCEL'.
LEAVE PROGRAM.
WHEN 'MODIFICAR'.
PERFORM f_modificar_socios.
ENDCASE.
ENDMODULE.
" USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
*&
Module LOAD_SOCIOS OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE load_socios OUTPUT.
IF g_wa_vuelta = 1.
SELECT * FROM zbiblio_socios
INTO CORRESPONDING FIELDS OF TABLE g_it_socios_aux.
g_wa_vuelta = g_wa_vuelta + 1.
ENDIF.
ENDMODULE.
" LOAD_SOCIOS OUTPUT
*&---------------------------------------------------------------------*
*&
Module LOAD_CT_9001 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE load_ct_9001 OUTPUT.
cb_9001_flag = g_it_socios_aux-flag.
MOVE-CORRESPONDING g_it_socios_aux TO zbiblio_socios.
ENDMODULE.
" LOAD_CT_9001 OUTPUT
*&---------------------------------------------------------------------*
*&
Module UPDATE_CT_9001 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE update_ct_9001 INPUT.
g_it_socios_aux-flag = cb_9001_flag.
MOVE-CORRESPONDING zbiblio_socios TO g_it_socios_aux.
MODIFY g_it_socios_aux INDEX ct_9001_socios-current_line.
ENDMODULE.
" UPDATE_CT_9001 INPUT
*&---------------------------------------------------------------------*
*&
Form F_MODIFICAR_SOCIOS
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM f_modificar_socios .
LOOP AT g_it_socios_aux.
IF g_it_socios_aux-flag = 'X'.
*
*
ENDFORM.
" F_MODIFICAR_SOCIOS
*&---------------------------------------------------------------------*
*&
Form F_GEN_BDCDATA
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_IT_SOCIOS_AUX text
*----------------------------------------------------------------------*
FORM f_gen_bdcdata USING p_it_socios_aux LIKE LINE OF g_it_socios_aux.
FREE g_it_bdcdata.
* Dynpro 9000
g_it_bdcdata-program = 'ZBIBLIO_CREAR_MODIF_VISUAL'.
g_it_bdcdata-dynpro = 9000.
g_it_bdcdata-dynbegin = 'X'.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'BDC_OKCODE'.
g_it_bdcdata-fval = '=MODIFICAR'.
APPEND g_it_bdcdata.
* Dynpro 9002
clear g_it_bdcdata.
g_it_bdcdata-program = 'ZBIBLIO_CREAR_MODIF_VISUAL'.
g_it_bdcdata-dynpro = 9002.
g_it_bdcdata-dynbegin = 'X'.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'BDC_CURSOR'.
g_it_bdcdata-fval = 'ZBIBLIO_SOCIOS-COD_SOCIO'.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'BDC_OKCODE'.
g_it_bdcdata-fval = '=ACCION'.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'ZBIBLIO_SOCIOS-COD_SOCIO'.
g_it_bdcdata-fval = p_it_socios_aux-cod_socio.
APPEND g_it_bdcdata.
* Dynpro 9003
clear g_it_bdcdata.
g_it_bdcdata-program = 'ZBIBLIO_CREAR_MODIF_VISUAL'.
g_it_bdcdata-dynpro = 9003.
g_it_bdcdata-dynbegin = 'X'.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'BDC_CURSOR'.
g_it_bdcdata-fval = 'ZBIBLIO_SOCIOS-COD_SOCIO'.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'BDC_OKCODE'.
g_it_bdcdata-fval = '=ACCION'.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'ZBIBLIO_SOCIOS-DNI'.
g_it_bdcdata-fval = p_it_socios_aux-dni.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'ZBIBLIO_SOCIOS-NOMBRE'.
g_it_bdcdata-fval = p_it_socios_aux-nombre.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'ZBIBLIO_SOCIOS-APELLIDO'.
g_it_bdcdata-fval = p_it_socios_aux-apellido.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'ZBIBLIO_SOCIOS-TELEFONO'.
g_it_bdcdata-fval = p_it_socios_aux-telefono.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-fnam = 'ZBIBLIO_SOCIOS-DIR1'.
g_it_bdcdata-fval = p_it_socios_aux-dir1.
APPEND g_it_bdcdata.
clear g_it_bdcdata.
g_it_bdcdata-program = 'ZBIBLIO_CREAR_MODIF_VISUAL'.
g_it_bdcdata-dynpro = 9003.
g_it_bdcdata-dynbegin = 'X'.
APPEND g_it_bdcdata.
g_it_bdcdata-fnam = 'BDC_OKCODE'.
g_it_bdcdata-fval = '=CANCEL'.
APPEND g_it_bdcdata.
ENDFORM.
" F_GEN_BDCDATA
Enviar por correo electrnico Escribe un blog Compartir con Twitter Compartir con Facebook
* Funcin ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = g_it_fieldcat[]
TABLES
t_outtab
= g_it_sflight[]
EXCEPTIONS
program_error = 1
OTHERS
= 2.
1.
2.
Helve 10pt
3.
Introducir el parmetro CARRID entre & (Escribir &carrid& en la ventana, no directamente en el texto).
Aadir dos tipos de linea (HEADER y MAIN) e indicar la separacin de las columnas.
Aadir a cada celda su elemento de texto correspondiente. El nombre de la columna en HEADER, y el valor de la tabla en MAIN.
1.
*----------------------------------------------------------------------*
FORM imprime_smartform .
DATA: fm_name TYPE rs38l_fnam,
l_st_control_parameters TYPE ssfctrlop,
l_st_output_options TYPE ssfcompop.
DATA: l_wa_pa_form LIKE ssfscreen-fname .
l_st_output_options-tdnewid = 'X'.
l_st_output_options-tdimmed = 'X'.
l_st_output_options-tddelete = 'X'.
l_st_control_parameters-no_dialog = ' '.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname
= 'ZSMARTFORM'
IMPORTING
fm_name
= fm_name
EXCEPTIONS
no_form
=1
no_function_module = 2
OTHERS
= 3.
CALL FUNCTION fm_name
EXPORTING
carrid
= p_carrid
TABLES
it_sflight = g_it_sflight.
ENDFORM.
" IMPRIME_SMARTFORM
A continuacin, se recorre un LOOP AT SCREEN y almacenamos los datos en una tabla auxiliar
para ver los datos iniciales:
LOOP AT SCREEN.
APPEND screen TO g_it_screen.
ENDLOOP.
Una vez conocido los datos de la tabla interna, cambiaremos las propiedades de los campos
INPUT en el primer SELECTION-OPTIONS con un IF.
El cdigo es el siguiente:
REPORT z_sflight.
* Cargar la tabla SFLIGHT de la base de datos
TABLES: sflight.
* Definicin de variables
DATA: g_it_sflight TYPE TABLE OF sflight,
g_st_sflight TYPE sflight.
DATA: g_it_screen TYPE TABLE OF screen.
* Pantalla de seleccin
SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME.
SELECT-OPTIONS: p01 FOR sflight-carrid,
p02 FOR sflight-connid,
p03 FOR sflight-fldate.
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS: p04 FOR sflight-price.
SELECTION-SCREEN: END OF BLOCK b01.
INITIALIZATION.
* Deshabilitar un campo
LOOP AT SCREEN.
IF screen-name = 'P01-LOW'.
screen-input = 0.
ELSEIF screen-name = 'P01-HIGH'.
screen-input = 0.
ENDIF.
MODIFY SCREEN.
APPEND screen TO g_it_screen.
ENDLOOP.
START-OF-SELECTION.
BREAK-POINT.
Se observa que ahora los campos input del primer parmetro se han desactivado.
El truco est en utilizar el evento AT SELECTION SCREEN OUTPUT y modificar las propiedades
de la tabla interna SCREEN. En este caso, se utilizar un identificador en el campo SCREENGROUP1 y se desactivar los campos correspondientes del SELECT-OPTIONS segn el tipo de
bsqueda seleccionado.
REPORT z_sflight.
* Cargar la tabla SFLIGHT de la base de datos
TABLES: sflight.
* Definicin de variables
DATA: g_it_sflight TYPE TABLE OF sflight,
g_st_sflight TYPE sflight.
DATA: g_it_screen TYPE TABLE OF screen.
* Pantalla de seleccin
PARAMETERS: p01 RADIOBUTTON GROUP rb1 USER-COMMAND uc DEFAULT 'X' .
SELECT-OPTIONS: so1 FOR sflight-carrid MODIF ID MD1,
so2 FOR sflight-connid MODIF ID MD1,
so3 FOR sflight-fldate MODIF ID MD1.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p02 RADIOBUTTON GROUP rb1.
SELECT-OPTIONS: so4 FOR sflight-carrid MODIF ID MD2,
so5 FOR sflight-connid MODIF ID MD2,
so6 FOR sflight-fldate MODIF ID MD2.
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS: so7 FOR sflight-price MODIF ID MD2,
so8 FOR sflight-currency MODIF ID MD2,
so9 FOR sflight-planetype MODIF ID MD2.
AT SELECTION-SCREEN OUTPUT.
IF p01 = 'X'.
LOOP AT SCREEN.
IF screen-group1 = 'MD2'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT SCREEN.
IF screen-group1 = 'MD1'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
APPEND screen TO g_it_screen.
START-OF-SELECTION.
BREAK-POINT.
Que diferencias hay entre los eventos AT SELECTION SCREEN y AT SELECTION SCREEN
OUTPUT? En el primero, el evento se ejecuta cuando se ha dado al botn de ejecutar, mientras
que en el segundo se ejecuta cada vez que se ha hecho un cambio en la pantalla de seleccin.
Campo
Tipo
Cdigo de socio
NUMC-4
DNI
CHAR-9
Nombre
CHAR-30
Apellido
CHAR-30
Telfono
CHAR-15
Direccin 1
CHAR-75
Direccin 2
CHAR-75
Direccin 3
CHAR-75
Direccin 4
CHAR-75
2. Tabla: ZBIBLIO_LIBROS
Campo
Tipo
Cdigo de libro
NUMC-8
Autor
CHAR-75
Ttulo
CHAR-125
Ejemplares disponibles
INT-4
Ejemplares totales
INT-4
3. Tabla: ZBIBLIO_PRESTAM
Campo
Tipo
Cdigo de prstamo
NUMC-12
Cdigo de socio
Cdigo de libro
DAT
DAT
DAT
El primer paso es crear todos los dominios en la SE11. Habr tantos dominios como tipo de
variables, es decir, un dominio para CHAR-9, otro para CHAR-15 y as sucesivamente con cada
uno de los tipos de las tres tablas.
Creacin de un dominio.
Caractersticas de un dominio.
A continuacin, se crean los tipos de datos. Por tanto, volvemos a la SE11 para crear los tipos de
datos.
En este ejemplo, tendremos que crear todos los tipos de datos de las tres tablas y asignarle el
dominio correspondiente. Este dominio se puede repetir, como es el caso de los campos Nombre y
Apellido en la tabla Z_BIBLIO_SOCIOS, ya que su tipo es un CHAR-30. La nica diferencia entre
los tipos de datos Nombre y Apellido es las descripciones.
Se aconseja rellenar las descripciones del campo, ya que ayudar a la visualizacin cuando se
utilicen ALVs.
Una vez con todos los tipos de datos creados, pasamos a crear la base de datos en la SE11.
Seleccionamos la clase e introducimos los campos de la tabla.
Todo tabla debe de comenzar por el mandante, con lo que asignamos el elemento MANDT al
primer campo.
Pulsamos el botn de ajustes tcnicos de la tabla para asignar la clase APPL0 y un tamao de
registro categora 0 (780 registros).
Un input/output que solo mostrar el texto del elemento pulsado del Tree.
No ser necesario crear un Custom Control para el Docking ni para el Tree, ya que el Docking se
incorporar a la izquierda de la pantalla, y el contenedor del Tree es el propio Docking.
*&---------------------------------------------------------------------*
*& Report Z_FLIGHT_OBJETOS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT z_flight_objetos MESSAGE-ID tree_control_msg.
TABLES sflight.
DATA: g_it_sflight TYPE TABLE OF sflight,
"LCL_APPLICATION DEFINITION
*----------------------------------------------------------------------*
*
CLASS LCL_APPLICATION IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_application IMPLEMENTATION.
METHOD handle_node_double_click.
" this method handles the node double click event of the tree
" control instance
io_9000_click = node_key.
FREE g_it_sflight.
SELECT * FROM sflight INTO TABLE g_it_sflight
WHERE carrid = node_key
OR planetype = node_key.
CALL METHOD g_ob_alv->set_table_for_first_display
EXPORTING
i_structure_name = 'SFLIGHT'
CHANGING
it_outtab
= g_it_sflight.
ENDMETHOD.
"HANDLE_NODE_DOUBLE_CLICK
METHOD handle_expand_no_children.
" this method handles the expand no children event of the tree
" control instance
IF node_key = g_c_nodekey-carrid.
g_wa_node = 1.
PERFORM f_expandir_nodo USING g_wa_node.
ELSEIF node_key = g_c_nodekey-planetype.
g_wa_node = 2.
PERFORM f_expandir_nodo USING g_wa_node.
ENDIF.
ENDMETHOD.
ENDCLASS.
"HANDLE_EXPAND_NO_CHILDREN
"LCL_APPLICATION IMPLEMENTATION
START-OF-SELECTION.
CREATE OBJECT g_ob_application.
CALL SCREEN 9000.
*&---------------------------------------------------------------------*
*&
Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM f_create_and_init_tree .
DATA: l_it_node_table TYPE g_tt_node_table_type,
l_it_events TYPE cntl_simple_events,
l_st_event TYPE cntl_simple_event.
* create a tree control in the docking
CREATE OBJECT g_ob_tree
EXPORTING
parent
= g_ob_docking
node_selection_mode
= cl_gui_simple_tree=>node_sel_mode_single
EXCEPTIONS
lifetime_error
=1
cntl_system_error
=2
create_error
=3
failed
=4
illegal_node_selection_mode = 5.
IF sy-subrc <> 0.
MESSAGE a000.
ENDIF.
* define the events which will be passed to the backend
" node double click
l_st_event-eventid = cl_gui_simple_tree=>eventid_node_double_click.
l_st_event-appl_event = 'X'. " process PAI if event occurs
APPEND l_st_event TO l_it_events.
" expand no children
l_st_event-eventid = cl_gui_simple_tree=>eventid_expand_no_children.
l_st_event-appl_event = 'X'.
APPEND l_st_event TO l_it_events.
CALL METHOD g_ob_tree->set_registered_events
EXPORTING
events
= l_it_events
EXCEPTIONS
cntl_error
=1
cntl_system_error
=2
illegal_event_combination = 3.
IF sy-subrc <> 0.
MESSAGE a000.
ENDIF.
* assign event handlers in the application class to each desired event
SET HANDLER g_ob_application->handle_node_double_click FOR g_ob_tree.
SET HANDLER g_ob_application->handle_expand_no_children FOR g_ob_tree.
PERFORM f_build_node_table USING l_it_node_table.
*
*
*
*
node_table_structure_name
= 'MTREESNODE'
A programmer using the tree control must create a structure in the
dictionary. This structure must include the structure TREEV_NODE
and must contain a character field with the name 'TEXT'.
CALL METHOD g_ob_tree->add_nodes
EXPORTING
table_structure_name
= 'MTREESNODE'
node_table
= l_it_node_table
EXCEPTIONS
failed
=1
error_in_node_table
=2
dp_error
=3
table_structure_name_not_found = 4
OTHERS
= 5.
IF sy-subrc <> 0.
MESSAGE a000.
ENDIF.
ENDFORM.
" CREATE_AND_INIT_TREE
*&---------------------------------------------------------------------*
*&
Form F_BUILD_NODE_TABLE
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_IT_NODE_TABLE text
*----------------------------------------------------------------------*
FORM f_build_node_table USING p_it_node_table TYPE g_tt_node_table_type.
DATA: l_st_node LIKE mtreesnode.
* Node with key 'Root'
l_st_node-node_key = g_c_nodekey-root.
" Key of the node
CLEAR l_st_node-relatkey.
" A root node has no parent node
CLEAR l_st_node-relatship.
l_st_node-hidden = ' '.
" The node is visible,
l_st_node-disabled = ' '.
" selectable,
l_st_node-isfolder = 'X'.
" a folder.
CLEAR l_st_node-n_image.
" use default.
CLEAR l_st_node-exp_image.
" use default
CLEAR l_st_node-expander.
" see below.
l_st_node-text = 'Root'(roo).
APPEND l_st_node TO p_it_node_table.
* Node with key 'Carrid'
l_st_node-node_key = g_c_nodekey-carrid.
" Key of the node
" Node is inserted as child of the node with key 'Root'.
l_st_node-relatkey = g_c_nodekey-root.
l_st_node-relatship = cl_gui_simple_tree=>relat_last_child.
l_st_node-hidden = ' '.
l_st_node-disabled = ' '.
l_st_node-isfolder = 'X'.
CLEAR l_st_node-n_image.
CLEAR l_st_node-exp_image.
l_st_node-expander = 'X'.
l_st_node-text = 'Carrid'(ch1).
l_st_node-style = cl_gui_simple_tree=>style_emphasized_positive.
APPEND l_st_node TO p_it_node_table.
* Node with key 'Planetype'
l_st_node-node_key = g_c_nodekey-planetype.
" Key of the node
" Node is inserted as child of the node with key 'Root'.
l_st_node-relatkey = g_c_nodekey-root.
l_st_node-relatship = cl_gui_simple_tree=>relat_last_child.
l_st_node-hidden = ' '.
l_st_node-disabled = ' '.
l_st_node-isfolder = 'X'.
CLEAR l_st_node-n_image.
CLEAR l_st_node-exp_image.
l_st_node-expander = 'X'.
l_st_node-text = 'Plane type'(ch2).
l_st_node-style = cl_gui_simple_tree=>style_emphasized_positive.
APPEND l_st_node TO p_it_node_table.
ENDFORM.
" BUILD_NODE_TABLE
*&---------------------------------------------------------------------*
*&
Form F_EXPANDIR_NODO
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM f_expandir_nodo USING p_wa_node TYPE c.
DATA: l_it_node_table TYPE g_tt_node_table_type,
l_st_node TYPE mtreesnode.
DATA: l_it_sflight TYPE TABLE OF sflight WITH HEADER LINE.
IF p_wa_node = 1.
SELECT carrid FROM sflight
INTO CORRESPONDING FIELDS OF TABLE l_it_sflight.
SORT l_it_sflight BY carrid.
DELETE ADJACENT DUPLICATES FROM l_it_sflight COMPARING carrid.
LOOP AT l_it_sflight.
* Node with key 'Carrid'
CLEAR l_st_node.
l_st_node-node_key = l_it_sflight-carrid.
l_st_node-relatkey = g_c_nodekey-carrid.
l_st_node-relatship = cl_gui_simple_tree=>relat_last_child.
l_st_node-isfolder = ' '.
l_st_node-text = l_it_sflight-carrid.
APPEND l_st_node TO l_it_node_table.
ENDLOOP.
ELSEIF p_wa_node = 2.
SELECT planetype FROM sflight
INTO CORRESPONDING FIELDS OF TABLE l_it_sflight.
SORT l_it_sflight BY planetype.
DELETE ADJACENT DUPLICATES FROM l_it_sflight COMPARING planetype.
LOOP AT l_it_sflight.
* Node with key 'Planetype'
CLEAR l_st_node.
l_st_node-node_key = l_it_sflight-planetype.
l_st_node-relatkey = g_c_nodekey-planetype.
l_st_node-relatship = cl_gui_simple_tree=>relat_last_child.
l_st_node-isfolder = ' '.
l_st_node-text = l_it_sflight-planetype.
APPEND l_st_node TO l_it_node_table.
ENDLOOP.
ENDIF.
CALL METHOD g_ob_tree->add_nodes
EXPORTING
table_structure_name
= 'MTREESNODE'
node_table
= l_it_node_table
EXCEPTIONS
failed
=1
error_in_node_table
=2
dp_error
=3
table_structure_name_not_found = 4
OTHERS
= 5.
IF sy-subrc <> 0.
MESSAGE a000.
ENDIF.
ENDFORM.
" F_EXPANDIR_NODO
Cdigo Socio
Cdigo Libro
1. Tabla: ZBIBLIO_SOCIOS
Campo
Tipo
Cdigo de socio
NUMC-4
DNI
CHAR-9
Nombre
CHAR-30
Apellido
CHAR-30
Telfono
CHAR-15
Direccin 1
CHAR-75
Direccin 2
CHAR-75
Direccin 3
CHAR-75
Direccin 4
CHAR-75
2. Tabla: ZBIBLIO_LIBROS
Campo
Tipo
Cdigo de libro
NUMC-8
Autor
CHAR-75
Ttulo
CHAR-125
Ejemplares disponibles
INT-4
Ejemplares totales
INT-4
3. Tabla: ZBIBLIO_PRESTAM
Campo
Tipo
Cdigo de prstamo
NUMC-12
Cdigo de socio
Cdigo de libro
DAT
DAT
DAT
En la tabla 3, seleccionamos el campo para indicar como clave externa y pinchamos en el botn de
la llave:
Introducir la tabla donde est definido el campo y pinchar en el botn de generar propuesta.
Enviar por correo electrnico Escribe un blog Compartir con Twitter Compartir con Facebook
Navegamos en el rbol hasta la pestaa GUI Status>STANDARD. Pinchamos con el botn derecho
y lo copiamos a nuestro programa.
Pinchamos dos veces en STANDARD y veremos los botones disponibles. En esta nueva ventana
aadimos un nuevo botn, asignndole un nombre, un icono y un atajo del teclado (No asignar el
atajo F4, ya que el botn no funcionara).
Asignamos un icono.
Ya tenemos el GUI Status listo para incorporar. Se va a mostrar un cdigo en el que se muestran
los cuatro primeros campos de la tabla SFLIGHT con un nuevo botn en el men. Cuando se pulsa
el botn, saldr un mensaje de notificacin.
El cdigo es el siguiente:
REPORT z_test.
* Cargar la tabla SFLIGHT de la base de datos
TABLES: sflight.
* Cargamos los datos tipo slis
TYPES: slis.
* Definicin de variables
DATA: g_it_sflight TYPE TABLE OF sflight,
g_st_sflight TYPE sflight.
DATA: g_it_fieldcat TYPE slis_t_fieldcat_alv,
*&
Form mi_standard
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
FORM mi_standard USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD'. "Nombre del Status GUI
ENDFORM.
"mi_standard
2.
3.
El cdigo es el siguiente:
REPORT z_sflight.
* Cargar la tabla SFLIGHT de la base de datos
TABLES: sflight.
* Cargamos los datos tipo slis
TYPES: slis.
* Definicin de variables
DATA: g_it_sflight TYPE TABLE OF sflight,
g_st_sflight TYPE sflight.
DATA: g_it_fieldcat TYPE slis_t_fieldcat_alv,
g_st_fieldcat TYPE slis_fieldcat_alv.
DATA: g_repid TYPE sy-repid.
* SQL para copiar la tabla sflight a la tabla interna
SELECT * FROM sflight INTO TABLE g_it_sflight.
* Variable con el nombre del programa
g_repid = sy-repid.
* Datos del fieldcat para el ALV
g_st_fieldcat-fieldname = 'CARRID'.
g_st_fieldcat-seltext_s = 'Comp.'.
APPEND g_st_fieldcat TO g_it_fieldcat.
g_st_fieldcat-fieldname = 'CONNID'.
g_st_fieldcat-seltext_s = 'Vuelo'.
APPEND g_st_fieldcat TO g_it_fieldcat.
g_st_fieldcat-fieldname = 'FLDATE'.
g_st_fieldcat-seltext_s = 'Fecha'.
APPEND g_st_fieldcat TO g_it_fieldcat.
g_st_fieldcat-fieldname = 'PRICE'.
g_st_fieldcat-seltext_s = 'Tarifa'.
APPEND g_st_fieldcat TO g_it_fieldcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program
= g_repid
i_callback_top_of_page = 'MI_TOP_OF_PAGE'
it_fieldcat
= g_it_fieldcat[]
TABLES
t_outtab
= g_it_sflight[]
EXCEPTIONS
program_error
=1
OTHERS
= 2.
*&---------------------------------------------------------------------*
*&
Form mi_top_of_page
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
FORM mi_top_of_page.
*ALV Header declarations
DATA: l_it_header TYPE slis_t_listheader,
l_st_header TYPE slis_listheader,
l_it_line LIKE l_st_header-info,
ld_lines TYPE i,
ld_linesc(10) TYPE c.
* Tipo H para escribir con la fuente grande
l_st_header-typ = 'H'.
l_st_header-info = 'SFLIGHT DATA'.
APPEND l_st_header TO l_it_header.
CLEAR l_st_header.
* Tipo S para indicar parmetro clave y su valor (fecha)
l_st_header-typ = 'S'. "Selection
l_st_header-key = 'Date: '.
CONCATENATE sy-datum+6(2) '.'
sy-datum+4(2) '.'
sy-datum(4) INTO l_st_header-info. "Fecha de hoy
APPEND l_st_header TO l_it_header.
CLEAR: l_st_header.
* Tipo A para escribir en cursiva
l_st_header-typ = 'A'. "Action
"mi_top_of_page
REPORT z_sflight.
* Cargar la tabla SFLIGHT de la base de datos
TABLES: sflight.
* Cargamos los datos tipo slis
TYPES: slis.
* Definicin de variables
DATA: g_it_sflight TYPE TABLE OF sflight,
g_st_sflight TYPE sflight.
DATA: g_it_fieldcat TYPE slis_t_fieldcat_alv,
g_st_fieldcat TYPE slis_fieldcat_alv.
Data: g_st_layout type slis_layout_alv.
* SQL para copiar la tabla sflight a la tabla interna
SELECT * FROM sflight INTO TABLE g_it_sflight.
* Datos del is_layout para el ALV
g_st_layout-zebra = 'X'.
g_st_layout-colwidth_optimize = 'X'.
* Datos del fieldcat para el ALV
g_st_fieldcat-fieldname = 'CARRID'.
g_st_fieldcat-seltext_s = 'Comp.'.
APPEND g_st_fieldcat TO g_it_fieldcat.
g_st_fieldcat-fieldname = 'CONNID'.
g_st_fieldcat-seltext_s = 'Vuelo'.
APPEND g_st_fieldcat TO g_it_fieldcat.
g_st_fieldcat-fieldname = 'FLDATE'.
g_st_fieldcat-seltext_s = 'Fecha'.
APPEND g_st_fieldcat TO g_it_fieldcat.
g_st_fieldcat-fieldname = 'PRICE'.
g_st_fieldcat-seltext_s = 'Tarifa'.
APPEND g_st_fieldcat TO g_it_fieldcat.
* Funcin ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout
= g_st_layout
it_fieldcat = g_it_fieldcat[]
TABLES
t_outtab
= g_it_sflight[]
EXCEPTIONS
program_error = 1
OTHERS
= 2.
REPORT z_sflight.
* Cargar la tabla SFLIGHT de la base de datos
TABLES: sflight.
* Definicin de variables
DATA: g_it_sflight TYPE TABLE OF sflight,
g_st_sflight TYPE sflight.
* Pantalla de seleccin
SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME.
SELECT-OPTIONS: p01 FOR sflight-carrid,
p02 FOR sflight-connid,
p03 FOR sflight-fldate.
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS: p04 FOR sflight-price.
SELECTION-SCREEN: END OF BLOCK b01.
INITIALIZATION.
p01-sign = 'I'. "Incluir
p01-option = 'EQ'. "=
p01-low = 'AA'.
APPEND p01.
p01-sign = 'I'.
p01-option = 'EQ'.
p01-low = 'DL'.
APPEND p01.
START-OF-SELECTION.
* Copiado de los datos a la tabla con los filtros
SELECT * FROM sflight INTO TABLE g_it_sflight
2.
3.
4.
Si ejecutamos, veremos que en la pantalla de seleccin aparecen los nombres de las variables.
Para poder editarlo tenemos que ir a los textos de seleccin:
REPORT z_fecha.
DATA texto TYPE string.
CONCATENATE sy-datum+6(2) sy-datum+4(2) sy-datum+0(4) INTO texto SEPARATED
BY '/'.
WRITE: texto.
En el valor 20131119 nos situamos en las posiciones 6, 4 y 0 con longitud de 2, 2 y 4
respectivamente, y separamos los textos por el carcter "/".
* Tipos
TYPES: BEGIN OF g_ty_encabezado,
nombre(20) TYPE c,
apellido(20) TYPE c,
telefono(9) TYPE n,
END OF g_ty_encabezado.
* Declaracin de la tabla
DATA: BEGIN OF g_it_mitabla OCCURS 0,
campo1(9) TYPE c,
campo2(9) TYPE c,
END OF g_it_mitabla.
* Copiado de la cabecera:
DATA: g_st_encabezado_copia LIKE LINE OF g_it_mitabla.
* Copiado de la tabla:
DATA: g_it_mitabla_copia LIKE g_it_mitabla OCCURS 0 WITH HEADER LINE.
Como se puede apreciar, si se quiere copiar el encabezado de una tabla, la sentencia LIKE LINE
OFfunciona para ambos mtodos. Sin embargo, las sentencias son distintas cuando se copia la
tabla interna.
Para ver las diferencias entre ambos mtodos en un loop, se recomienda ver esta entrada.
Nombre
Apellido
Telfono
Juan
Prez
612345678
Lucas
Garca
698765432
Mara
Gutirrez
600111222
Primera forma:
REPORT z_tabla1.
* Tipos
TYPES: BEGIN OF g_ty_encabezado,
nombre(20) TYPE c,
apellido(20) TYPE c,
telefono(9) TYPE n,
END OF g_ty_encabezado.
TYPES: g_tt_mitabla TYPE TABLE OF g_ty_encabezado.
* Declaracin de variables
DATA: g_st_encabezado TYPE g_ty_encabezado,
g_it_mitabla TYPE g_tt_mitabla.
* Rellenado de la tabla
g_st_encabezado-nombre = 'Juan'.
g_st_encabezado-apellido = 'Prez'.
g_st_encabezado-telefono = '612345678'.
APPEND g_st_encabezado TO g_it_mitabla.
g_st_encabezado-nombre = 'Lucas'.
g_st_encabezado-apellido = 'Garca'.
g_st_encabezado-telefono = '698765432'.
APPEND g_st_encabezado TO g_it_mitabla.
g_st_encabezado-nombre = 'Mara'.
g_st_encabezado-apellido = 'Gutirrez'.
g_st_encabezado-telefono = '600111222'.
APPEND g_st_encabezado TO g_it_mitabla.
* Mostrar en pantalla la tabla
LOOP AT g_it_mitabla INTO g_st_encabezado.
WRITE:/ g_st_encabezado-nombre,
AT 22 g_st_encabezado-apellido,
AT 44 g_st_encabezado-telefono.
ENDLOOP.
Segunda forma:
REPORT z_tabla2.
* Declarado de variables
DATA: BEGIN OF g_it_mitabla OCCURS 0,
nombre(20) TYPE c,
apellido(20) TYPE c,
telefono(9) TYPE n,
END OF g_it_mitabla.
* Rellenado de la tabla
g_it_mitabla-nombre = 'Juan'.
g_it_mitabla-apellido = 'Prez'.
g_it_mitabla-telefono = '612345678'.
APPEND g_it_mitabla.
g_it_mitabla-nombre = 'Lucas'.
g_it_mitabla-apellido = 'Garca'.
g_it_mitabla-telefono = '698765432'.
APPEND g_it_mitabla.
g_it_mitabla-nombre = 'Mara'.
g_it_mitabla-apellido = 'Gutirrez'.
g_it_mitabla-telefono = '600111222'.
APPEND g_it_mitabla.
* Mostrar en pantalla la tabla
LOOP AT g_it_mitabla.
WRITE:/ g_it_mitabla-nombre,
AT 22 g_it_mitabla-apellido,
AT 44 g_it_mitabla-telefono.
ENDLOOP.
Se aprecia que en el primer mtodo se crea primero el encabezado y la tabla con TYPES, y a
continuacin se declaran las variables. Sin embargo, en el segundo mtodo se crea directamente
la tabla.
Ntese que a la hora de hacer un LOOP a la tabla, en el primer mtodo se indica la tabla y el
encabezado, mientras que en el segundo caso slo se indica el nombre de la tabla, ya que el
nombre del encabezado y tabla interna es el mismo.