Вы находитесь на странице: 1из 48

Crear bases de datos

Crear las siguientes tablas:


1. Tabla: ZBIBLIO_SOCIOS
Campo
Cdigo de socio
DNI
Nombre
Apellido
Telfono
Direccin 1
Direccin 2
Direccin 3
Direccin 4

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.

Finalmente se habrn creado los siguientes dominios:

Lista de dominios creados.

A continuacin, se crean los tipos de datos. Por tanto, volvemos a la SE11 para crear los tipos de datos.

Creacin del tipo 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.

Asignando un dominio creado al tipo de datos.

Se aconseja rellenar las descripciones del campo, ya que ayudar a la visualizacin cuando se utilicen
ALVs.

Creando etiquetas de descripcin para mostrar en 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.

Creamos una base de datos.

Asignamos la clase y navegacin de datos.

Todo tabla debe de comenzar por el mandante, con lo que asignamos el elemento MANDT al primer
campo.

Aadimos el mandante y los campos (asignando los tipos creados previamente).

Pulsamos el botn de ajustes tcnicos de la tabla para asignar la clase APPL0 y un tamao de registro
categora 0 (780 registros).

Asignar clase de datos y el nmero de registros que tendr la tabla.

A continuacin, seleccionamos la categora de ampliacin de la tabla en Detalles:

Categora de ampliacin en Detalles.

Seleccionamos ampliable de cualquier manera.

Y finalmente, vamos al generador de actualizador de tabla en Utilidades:

Ir al generador de mantenimiento de tabla en utilidades.

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).

Seleccionamos categora de actualizacin, el grupo de funciones y la imagen resumen.

Pinchamos en crear, grabamos y activamos la tabla.


Se repite cada uno de los pasos con las otras dos tablas.
Las claves externas se explican en esta entrada.
Para introducir datos en la tabla de forma manual, iremos a la transaccin SM30

Clave externa en bases de datos


Introducir la clave externa en los siguientes campos de la tabla 3:

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:

Campo socio seleccionado y pinchar en el botn de clave externa.

Introducir la tabla donde est definido el campo y pinchar en el botn de generar propuesta.

Comprobacin de las claves externas:

Comprobacin de la clave externa en la tabla.

Crear Dynpros para crear, modificar y visualizar datos en una


base de datos.
Datos previos:

Base de datos ZBIBLIO_SOCIOS

Objetivo:

Una Dynpro 9000 con tres botones (Crear, Modificar y Visualizar).

Una Dynpro 9001 para aadir datos a la base de datos.

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.

Esquema de las cuatro dynpros:

Esquema de los dynpros.

El primer paso es crear un Module Pool en la SE38:

Crear un Module Pool en la SE38

Aadir una Dynpro (Screen) al Module Pool creado pulsando el botn derecho:

Aadir una Dynpro al Module Pool creado.

Indicar el nmero de pantalla (se recomienda a partir de 9000).

Crear el elemento tipo OK de la pantalla 9000.

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.

Objetos PBO y PAI en el 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:

Descripcin del Status

Activacin del botn Cancel cmo mnimo para salir del programa.

Descripcin del ttulo 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:

Ir al Layout para editar la pantalla.

Escribir el cdigo de funcin del botn.

Botones creados en el Dynpro 9000.

Para poder ejecutar la pantalla creada, es necesario crear una transaccin. Hay dos formas:

1. En la SE93
2. Directamente en el programa

Crear la transaccin en la SE93.

Crear la transaccin directamente en el programa.

Se indicar la descripcin, el nombre del Module Pool y la pantalla.

Descripcin de la transaccin.

Module Pool y Dynpro para que la transaccin lo ejecute.

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.

Aadimos el botn Back.

Nombras el campo de entrada/salida con el mismo nombre para referenciar.

Dynpro 9001 resultante.

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).

PROCESS BEFORE OUTPUT.


MODULE status_9001.
*
PROCESS AFTER INPUT.
CHAIN.
FIELD zbiblio_socios-cod_socio.
MODULE existe_socio.
ENDCHAIN.
MODULE user_command_9001.
A continuacin creamos la Dynpro 9002 con sus correspondientes campos como ventana de dilogo
modal. En este caso, el Status tiene que ser del mismo tipo:

Status 9002 como dilogo modal.

Aadimos el cdigo para cuando el usuario pulsa X para salir.

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.

Botn como campo output en el Dynpro 9002.

Finalmente creamos la Dynpro 9003 como ventana de dilogo modal.

Dynpro 9003 como ventana de dilogo modal.

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.

Si se da al botn de visualizar, ningn campo es editable, por lo tanto identificamos


con ID1 los campos a modificar esa opcin.

3. El botn ser un campo de salida, tal y como en el Dynpro 9002.

El campo input del cdigo de socio es solo output.

Identificador de grupo ID1 en todos los campos de entrada/salida salvo en cdigo de socio.

Botn como campo de salida.

Los cdigos son los siguientes:


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.
" USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
*&
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

Ejemplo de Batch Input


Objetivos:
1. Crear un Tabstrip, y en una pestaa mostrar los socios en una tabla de control
2. Seleccionar los socios a modificar con un checkbox
3. Ejecutar con un Batch Input la modificacin de cada uno de los socios seleccionados a travs
de un Module Pool creado anteriormente.

Objetivo del REPORT

Datos:
1. Base de datos ZBIBLIO_SOCIOS.

2. Module Pool ZBIBLIO_CREAR_MODIF_VISUAL con la transaccin ZBIBLIO_01 (paso anterior)


Creamos un nuevo Report en la SE38.

Crear un nuevo Report con la SE38

Aadimos una Dynpro 9000 con su correspondiente Status para salir del programa.

Aadimos una Dynpro.

Accin de salir para poder cerrar el Dynpro.

Dentro de la Dynpro 9000 creamos un Tapstrip usando el asistente donde se indicar:


1. Nombre del Tapstrip: TS_9000.
2. Las secciones del Tapstrip.
3. Cdigo de funcin al pinchar en las secciones.
4. Si se desea introducir los modulos en includes.

Proceso para crear las pestaas en una Dynpro.

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.

Aadiendo los campos Input/output referenciando con la base de datos.

Tabla de control y botn resultante en el dynpro 9001.

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:

Nueva grabacin en la transaccin SM35.

Nueva grabacin para iniciar el proceso

Asignar el nombre de la grabacin y la transaccin.

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:

Tabla BDCDATA generada con 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.

" STATUS_9000 OUTPUT

*&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TS_9000'


CONSTANTS: BEGIN OF c_ts_9000,
tab1 LIKE sy-ucomm VALUE 'TS_9000_FC1',
tab2 LIKE sy-ucomm VALUE 'TS_9000_FC2',
tab3 LIKE sy-ucomm VALUE 'TS_9000_FC3',
END OF c_ts_9000.
*&SPWIZARD: DATA FOR TABSTRIP 'TS_9000'
CONTROLS: ts_9000 TYPE TABSTRIP.
DATA:
BEGIN OF g_ts_9000,
subscreen LIKE sy-dynnr,
prog
LIKE sy-repid VALUE 'ZBIBLIO_MODIF_VARIOS',
pressed_tab LIKE sy-ucomm VALUE c_ts_9000-tab1,
END OF g_ts_9000.
DATA:
ok_code_9000 LIKE sy-ucomm.
*&SPWIZARD: OUTPUT MODULE FOR TS 'TS_9000'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: SETS ACTIVE TAB

MODULE ts_9000_active_tab_set OUTPUT.


ts_9000-activetab = g_ts_9000-pressed_tab.
CASE g_ts_9000-pressed_tab.
WHEN c_ts_9000-tab1.
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'.
*

Generamos la tabla BDCDATA


PERFORM f_gen_bdcdata USING g_it_socios_aux.
Ejecutamos el programa con la tabla BDCDATA.
CALL TRANSACTION 'ZBIBLIO_01' USING g_it_bdcdata.
ENDIF.
ENDLOOP.

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


Objetivo:

Modificar el texto de un botn una vez que que se haya introducido el texto en un campo
input/output.

Creamos una dynpro con un campo texto, un input/output y un botn.

Las caractersticas ms importantes son:

1. Maysculas y minsculas en el campo input/output.


2. Campo de salida en el botn.

Admitimos minsculas y maysculas en el campo input/output

El botn se indica que es un campo de salida.

Cada vez que se ejecuta el Process Before Output, el botn toma el valor del input/output.
Cdigos:

Dynpro

PROCESS BEFORE OUTPUT.


MODULE status_9000.
MODULE load_text.
*
PROCESS AFTER INPUT.
MODULE user_command_9000.

Report

*&---------------------------------------------------------------------*
*& Report Z_BOTON
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT z_boton.

DATA: ok_code_9000 TYPE sy-ucomm,


b_9000(20) TYPE c,
io_9000(20) TYPE c value 'Default Text'.
CALL SCREEN 9000.
*&---------------------------------------------------------------------*
*&
Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
SET PF-STATUS 'STATUS_9000'.
SET TITLEBAR 'TITLE_9000'.
ENDMODULE.
" STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
Module LOAD_TEXT OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE load_text OUTPUT.
b_9000 = io_9000.
ENDMODULE.
" LOAD_TEXT OUTPUT
*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
CASE ok_code_9000.
WHEN 'CANCEL'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
" USER_COMMAND_9000 INPUT
Resultado:

Texto inicial del botn.

Texto de prueba tras introducir el texto en el campo input/output.

Вам также может понравиться