Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Tipo
NUMC-4
CHAR-9
CHAR-30
CHAR-30
CHAR-15
CHAR-75
CHAR-75
CHAR-75
CHAR-75
2. Tabla: ZBIBLIO_LIBROS
Campo
Cdigo de libro
Autor
Ttulo
Ejemplares disponibles
Ejemplares totales
Tipo
NUMC-8
CHAR-75
CHAR-125
INT-4
INT-4
3. Tabla: ZBIBLIO_PRESTAM
Campo
Cdigo de prstamo
Cdigo de socio
Cdigo de libro
Fecha inicio prstamo
Fecha estimada devolucin
Fecha real devolucin
Tipo
NUMC-12
(Clave externa con tabla de socios)
(Clave externa con tabla de socios)
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).
Seleccionamos el grupo de autorizacin y el grupo de funciones. Se recomienda que para cada tabla
tenga su propio grupo de funciones. En este caso, la llamamos igual que el nombre de la tabla.
Adems, asignamos la imagen resumen con un 9000 (Se recomienda que se empiece a contar a partir
de ese nmero).
Cdigo Socio
Cdigo Libro
3. Tabla: ZBIBLIO_PRESTAM
Campo
Cdigo de prstamo
Cdigo de socio
Cdigo de libro
Fecha inicio prstamo
Fecha estimada devolucin
Fecha real devolucin
Tipo
NUMC-12
(Clave externa con tabla de socios)
(Clave externa con tabla de socios)
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.
Objetivo:
Una Dynpro 9002 como ventana de dilogo modal, para introducir el cdigo de socio.
Una Dynpro 9003, como ventana de dilogo modal, para Modificar o Visualizar un socio de la
base de datos.
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.
Como se puede apreciar, en el PBO se aade un Status y un Ttulo, y en el PAI la salida del programa
cuando el usuario pulsa el botn Cancel.
Para crear el STATUS y el ttulo se pincha dos veces en el nombre:
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. Aadimos el botn BACK para volver al screen 9000 en el STATUS_9001.
2. El campo de entrada/salida se nombra con el nombre de la tabla ZBIBLIO_SOCIOS para
referenciar sus caractersticas.
Se necesita comprobar que el nuevo cdigo de socio no existe en la base de datos. Para ello recurrimos
al Process After Input (PAI) para comprobar si el valor introducido existe en la base de datos. Se indica
el campo con un CHAIN y el mdulo correspondiente a ejecutar (ver cdigo resultante al final).
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.
Esta misma Dynpro se va a utilizar para la accin de modificar o visualizar. Las diferencias con respecto
a la 9001 son:
1. El campo del cdigo de socio es solo output (El usuario ya ha sido introducido en la Dynpro
9002).
2. Todos los campos de entrada/salida, salvo el primero, tendrn un identificador de Grupo1
llamado ID1.
Identificador de grupo ID1 en todos los campos de entrada/salida salvo en cdigo de socio.
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.
" USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
*&
Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE status_9001 OUTPUT.
SET PF-STATUS 'STATUS_9001'.
" 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
Datos:
1. Base de datos ZBIBLIO_SOCIOS.
Aadimos una Dynpro 9000 con su correspondiente Status para salir del programa.
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
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.
Dynpro 9001 (Subscreen)
PROCESS BEFORE OUTPUT.
* MODULE STATUS_0110.
* Copiamos la tabla socios a g_it_socios_aux (una vez)
MODULE load_socios.
* Cargamos la tabla de control linea a linea.
LOOP AT g_it_socios_aux WITH CONTROL ct_9001_socios
CURSOR ct_9001_socios-current_line.
MODULE load_ct_9001.
ENDLOOP.
*
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0110.
* Cada vez que se hace un input, se actualiza la tabla de control
LOOP AT g_it_socios_aux.
MODULE update_ct_9001.
ENDLOOP.
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.
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
Modificar el texto de un botn una vez que que se haya introducido el texto en un campo
input/output.
Cada vez que se ejecuta el Process Before Output, el botn toma el valor del input/output.
Cdigos:
Dynpro
Report
*&---------------------------------------------------------------------*
*& Report Z_BOTON
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT z_boton.