Vous êtes sur la page 1sur 116

Resumen Manuales SAP TAW 10 & 12 Idioma: Espaol

TAW 10 1/2. Capitulo 7 Capitulo 8 Capitulo 9 Capitulo 10 Capitulo 11 Capitulo 12 Capitulo 13 Capitulo 14 Capitulo 15 Capitulo 16 Capitulo 17 Capitulo 18 Abap Program Proces . pag.11 pag.11 Introduccion Abap Dictonary. pag.12 Sentencias Basicas Abap pag.13 Data Retriaval. pag.16 Internal Program Modularization with subrutines. pag.18 Abap Runtime System. pag.19 User Dialog List. pag.19 User Dialog Selection Screen pag.20 User Dialog Screen. pag.21 Global Modularization. pag.22 Calling Program and Passing data. pag.23

TAW 10 2/2. Capitulo 2 Capitulo 3 Capitulo 5,6,7,8 Capitulo 7 Capitulo 8 Capitulo 9 Capitulo 10 Capitulo 12 Capitulo 13 Capitulo 14 Data Types and data object in detail. Using Internal Tables. Abap Objects. Inherating. Casting. Interfaces. Events. Special Techniques. Excepciones. Dinamic Programming. pag.26 pag.29 pag.32 pag.35 pag.35 pag.35 pag.37 pag.38 pag.39 pag.41

TAW 12 1/3 ABAP workbench. Capitulo 2 Capitulo 3 Capitulo 4 Capitulo 5 Capitulo 6 Capitulo 7 Capitulo 8 Capitulo 9 Capitulo 13 Capitulo 14 Capitulo 15 Capitulo 16 Capitulo 17 Capitulo 18 Capitulo 19 Capitulo 20 Abap Dictionary Tables in Abap Dictionary. Performance during acces. Consistency through input checks. Dependencies if abap dictionary objects. Changes to databases tables. Views. Search Help. Reporting. Selection Screen. Logical databases. Data Retrieval. Data Formating and control level processing. Saving list and background processing. Interactive list. Sap Grid Control. pag.49 pag.50 pag.51 pag.52 pag.53 pag.53 pag.54 pag.55 pag.57 pag.58 pag.60 pag.61 pag.62 pag.65 pag.65 pag.66 2

TAW 12 2/3 ABAP workbench. Capitulo 2 Capitulo 3 Capitulo 4 Capitulo 5 Capitulo 7 Capitulo 8 Capitulo 9 Capitulo 10 Capitulo 13 Capitulo 15 Capitulo 16 Capitulo 17 Capitulo 18 Capitulo 19 Capitulo 20 SAP Programming Model. Introduction to screen programming. The Program Interface. Screen elements for output. Screen elements and tabstrips. Table controls. Context Menu. List in screen processing. Programming database updates. LUW s and Clients/Server architecture. SAP Locking Concepts. Organizing database updates. Complex LUW Processing. Number Assigment. Change Documents. pag.68 pag.68 pag.71 pag.72 pag.76 pag.78 pag.80 pag.81 pag.82 pag.85 pag.85 pag.86 pag.88 pag.89 pag.91

TAW 12 3/3. Capitulo 3 Capitulo 4 Capitulo 5 Capitulo 6 Capitulo 7 Capitulo 8 Capitulo 9 Changing SAP Standar. Personalization. Table enhacement. Enhacement. Business Transaction Events. Business ADD-Ins. Modifications. pag.94 pag.96 pag.97 pag.98 pag.99 pag.101 pag.102

TAW10 1/2 ABAP workbench fundamentals Manual de referencia Transaccin SE80 SE38 SE11 SD11 SE91 ST22 SM21 SU21 SE51 SE41 SE37 BAPI SE16 SE54 SM30 SM12 SE18 SE24 SE91 SE36 ST05 SE30 SM36 SM37 SP01 Y SP02 SE51 SM50 SM13 SE93 SE14 SCU3 SCDO Descripcin Object navigator Abap editor Abap dictionary Data modeler Creacin de mensajes Abap dump anlisis Visor de logs del sistema (basis) Autorizacin de objetos Screen painter Men painter Constructor de funciones Repositorio de BAPIS Ver contenido de una tabla Table views Transaccin para mantenimiento de tablas Visor de locks Visor de BADIs Class builder Clases de mensajes Bases de datos lgicas SQL trace Anlisis de consumo de un programa abap Crear JOBs Ver corridas de JOBs Visor de spool Screen painter Visor de application server Visor de requerimientos de UPDATE Creacin de transaccin Database Utilities Visor de log de tablas del sistema Creacin de change document

Variable de sistemas SY-UNAME Nombre de usuario SY-SUBRC Retorno de sentencias SY-LSIND Contador de nivel de listado, arranca en 0 SY-TABIX ndice de una tabla interna SY-TFILL Cantidad de registros trados en un loop SY-LENGHT Longitud de una lnea de una tabla interna SY-ULINE Ingresa una lnea horizontal SY-VLINE Imprime una lnea vertical SY-DNNR Informacin de la pantalla donde esta SY-LILLI Numero de la lnea donde el usuario realizo el clic en la fila del listado SY-TITLE Contiene el titulo del programa SY-DYNNR Numero de screen en la que me encuentro SY-FDPOS Posicin en de una cadena en otra usando la sentencia SEARCH SY-LINCT Cantidad de lneas SY-LINSZ Largo de la lnea SY-SROWS Cantidad de filas en pantalla SY-SCOLS Cantidad de columnas en pantalla SY-PAGNO Numero de pagina SY-LINNO Numero de lnea seleccionada SY-COLNO Numero de columna seleccionada

Creacin de un programa ABAP 1. Ir a la transaccin SE80 -> object navigator 2. Botn derecho sobre la clase de desarrollo 3. Create -> Program

4. ingresar el nombre del programa respetando el estndar de SAP

5. Completar los datos que pide para el programa

6. Asignarle una clase de desarrollo

7. Asignarle una orden de transporte en el caso de que la clase de desarrollo sea distinto de $TMP

Crear una transaccin asociada a un programa 1. Transaccin SE80 -> object navigator 2. Botn derecho sobre la clase de desarrollo 3. create -> transaction

4. escribir el nombre de la transaccin, la descripcin de la misma y a que tipo de programa ser asociada

5. ingresar el nombre del programa a asociar

10

6. Nos pedir guardarla en una clase de desarrollo

7. y asignarle una orden de transporte

Capitulo 7 ABAP Program Process. El sistema R/3 es un sistema cliente-servidor. Esta compuesto por 3 capas. Capa 1 -> Nivel de base de datos -> en este nivel se encuentra la base de datos. Es una base de datos relacional donde aparte de los datos (tablas) tambin se guardan los programas y meta datos del sistema. Capa 2 ->Nivel se servidor de aplicacin -> todos los programas corren en este nivel. Los programas leen datos de la capa de base de datos, procesan esta informacin a travs de work process y son capaces de almacenar informacin temporaria. Capa 3 -> Nivel de servidor de presentacin -> En este nivel se encuentra la interfaz del usuario. Este nivel permite al usuario ingresar datos y mostrar datos como resultado del procesamiento de un WORK PROCESS. Las 3 capas pueden ser instaladas juntas en una nica maquina, por separado en 3 maquinas distintas. Las 2 primeras capas pueden cada una ser instalada en mas de una maquina (tener la DB en mas de una maquina o presentation server) Vistas de usuario -> Todas las pantallas de usuario se ejecutan en la capa del presentation server DYMPRO (MODULE POOL) 11

SELECTION SCREEN (REPORT y MODULE POOL) LIST (REPORT y MODULE POOL) Cuando el usuario realiza una accin en la pantalla el control del programa se traspasa al application server donde esta la lgica de este. Los programas ABAP no pueden tener nombres de ms de 30 caracteres.

Capitulo 8 La capa de base de datos esta dividido en dos grandes grupos CROSS-CLIENT -> este grupo esta compuesto por el repositorio de datos (programas y metadatos) y algunas tablas especiales CLIENT-SPECIFIC -> este grupo esta compuesto solo por tablas El repositorio esta subdividido de acuerdo a los componentes de aplicacin del sistema y cada componente esta a su vez subdividido en clases de desarrollo. Todo desarrollo de una aplicacin siempre es realizado en un entorno de desarrollo y transportado al entorno de produccin. El transporte de objetos de un sistema a otro se realiza a travs de ordenes de transporte (change request) de clase de desarrollo a clase de desarrollo, cuando se crea una clase de desarrollo se debe asignar una orden de transporte. Las rdenes de transporte estn organizadas en grupos de transporte (generalmente para proyectos grandes) Una orden de transporte contiene los siguientes atributos Transportacin layer -> Nos permite definir la distribucin del desarrollo Person responsible -> Usuario responsable del proyecto Software component -> Describe a que componente pertenece el desarrollo Application component -> Describe a que componente de aplicacin pertenece el desarrollo Sintaxis ABAP Caractersticas -> Esta formado por sentencias -> Cada sentencia termina en un punto -> Cada palabra debe estar separado por un espacio -> Una lnea puede contener mas de una sentencia -> ABAP no es case sensitive -> Comentarios -> * - > comenta toda una lnea -> -> comenta a partir del smbolo -> Toda sentencia ABAP retorna un cdigo de respuesta en la variable de sistema (SY-SUBRC), cuando la sentencia se realiza correctamente retorna 0, en caso de error 4.

Capitulo 9 12

Introduction to ABAP dictionary Elementos del diccionario -> Tablas -> Transparentes -> estas tablas tienen la estructuras en el diccionario que en la db. Tiene campos clave en combinacin con campos no claves. -> Pool o Cluster -> son tablas de sistema. -> Data Elements -> brindan informacin semntica sobre un campo -> Domains -> brinda la descripcin tcnica de un campo Estructuras -> Las estructuras con definiciones de conjuntos de datos parecidos a las tablas transparentes pero solo estn definidos en el diccionario, no tiene campos claves. Si se usan elementos del diccionario para definir elementos en una pantalla de seleccin estos elementos heredan todos los atributos de estos, no solo el tipos de datos que se admite, la definicin semntica del mismo as tambin como la ayuda (F1) y el machcode (F4) La sentencia TABLES en un programa define un data object con la estructura con la particularidad de nombrarla con el mismo nombre del diccionario. El campo MANDT (tipo S_MANDT) nos indica que la tabla que estamos utilizando no es crossclient (tabla dependiente de mandante) Transaccin para el diccionario SE11, desde aqu se crean todos los elementos del diccionario. La transaccin SE14 contiene utilitarios para las tablas, vistas, etc de la DB. Nos permite borrar el contenido de una tabla.

Capitulo 10 Sentencias bsicas de ABAP Data types globales -> son utilizados por todos los programas, se encuentran en el diccionario de datos, son manejados centralizadamente. Data types Locales -> son creados por el usuario dentro de un programa con la sentencia TYPES, con la particularidad de que los campos de ese type deben contener solo tipos de datos predefinidos por abap y no los del diccionario. TYPES: type_name TYPE [VALUE n] Tipos de datos predefinidos por abap, valores por default 13

C Text (Character) 1 space N Numeric text 1 '00...0' D Date (YYYYMMDD) 8 '00000000' T Time (HHMMSS) 6 '000000' X Hexadecimal (HeX code) 1 X'00' I Integer 4 0 P Packed number 8 0 F Floating point number 8 0 STRING Character sequence (string) variable-length empty string XSTRING Byte sequence (X string) variable-length empty hexadecimal string Diferencia entre LIKE y TYPE LIKE - > copia la estuctura de un data object TYPE - > copia la estructura de un data type Constantes - > data object constantes en mi programa. Su valor no puede ser modificado en RUNTIME.

CONSTANTS cons_name TYPE type_name VALUE [LITERAL | IS INITIAL] Literal -> valor inicial de la canstante Is initial -> valor inicial por default de la constante La conversin de datos entre data object es posible, dependiendo del contenidos de estas, tener en cuenta los puntos decimales. Loop at ... into endloop -> se utiliza para tablas internas, nos permite recorrer una tabla interna poniendo cada lnea en una work area. Select... endselect -> se utiliza para iterar dentro de tablas de la base de datos. Lo que realiza esta sentencia es una iteracin y por cada vuelta realiza una consulta a la db para traernos el siguiente registro Check <condicin> -> corta un bloque de procesamiento si una condicion no se cumple Message -> mensajes por pantalla, aparece al pie de la pantalla
MESSAGE w007(e8) WITH 'sorry does not exist'.

Primero se coloca el mensaje (007) conel tipo de comportamiento que queremos (E) y entre parentesis va la clase de mensaje a la cual el mensaje que queremos desplegar pertenece, los parametros que siguen son posicionales, los mensajes pueden llevar parametros, no mas de 4. Para ver el mensaje ver la transaccion SE91 ingresando la clase de mensajes. Se puede en un programa declarar una librera por default y no tener que declararlo en cada sentencia message Acceso al debugger de cualquier programa en el command field /h + [enter] y luego ejecutar el programa, se abrir el debug de ese programa. 14

Al pie de la pantalla aparecer la siguiente leyenda debugger switch on que nos indicara que esta activado el debugger Se puede poner un break-point destinado solo a un usuario con la sentencia, este breakpoint solo afectara al usuario que se le especifica Break <usuario> Break bc400-46 Un watchpoint es til para parar un programa por el contenido de un data object, se crea declarando el campo y que contenido deseas que tenga para que pare. Tambin es posible definir la igualdad entre 2 campos o que se detenga cuando un campo cambie de valor en su contenido cualquiera sea este cambio.

Estructuras en abap : Las estructuras son una estructura de data object, las estructuras se pueden anidar y un componente puede ser hasta una tabla. Se define igual a un tipo y se declara una work area del tipo de la estructura La estructura es local y solo puede ser accedida por el progrograma. TYPES : BEGIN OF struct_name, END OF struct_name

ST22 -> visor de dumps

La transaccion nos permite visualizar un dump de una aplicacion en el sistema. Permite ver el dump que le dio al usuario y al resto de los usuarios en una fecha determinada. TABLAS INTERNAS

Son tablas dinamicas, a nivel de insercion y borrado de registros, se crea como data objects con una estructura definida. Cada registro se lo conoce como lineas en la tabla interna. Las lineas pueden ser de cualquier tipo de datos ABAP. Atributos - > Los componentes claves - > Tipo de accesos Tipos de tablas - > index tables - > standard tables: busqueda secuencial proceso secuencial acceso por campos key - > sorted tables: busqueda binaria proceso secuencial acceso por campos key - > hashed tables: acceso solo por clave hash no se puede acceser secuencialmente 15

Las tablas internas pueden ser creadas en forma local dentro del programa o en el dictionario de datos y ser compartidas por todos los programas. Las tablas internas no tienen representacion en la base de datos. La definicin de una tabla en un programa se reliza creando un data object del tipo TABLE OF una estructura y definiendo el tipo de tabla y acceso. Esta creacion es dinamica y puede ser distinto en distintos programas. Tablas trasparentes -> tienen representacin fsica en la base de datos Estructuras -> No tienen representacin en la base de datos Tablas pool -> Tienen representacin en la base de datos pero no como se muestra en la estructura, los datos estan diseminados en distintas tablas y logicamente tiene una estructura nica. Para definir una tabla interna en un programa a partir de una estructura se utiliza la siguiente sentencia DATA itab TYPE <table_kind> TABLE OF <struct> WITH <keydef> ( pag 264 L.1) Operaciones con tablas (un solo registro) ( pag 267 L.1) Append -> Agrega un registro al final de la tabla, solo para tables standards. Insert -> Inserta un registro acorde con el tipo de tabla que estamos utilizando. Read -> Copia una lnea de la tabla interna a una work area Modify -> Permite modificar un registro en la tabla interna Delete -> Permite borrar un registro de la tabla Collect Operaciones con tablas (muchos registro) Append -> Agrega un set de registros al final de la tabla, solo para tables standards. Insert -> Inserta un set de registro acorde con el tipo de tabla que estamos utilizando. Read -> Copia un ser de registros de la tabla interna a una work area Modify -> Permite modificar un set de registro en la tabla interna Delete -> Permite borrar un set de registros de la tabla Operaciones con tablas (toda la tabla) Refresh -> Tabla con header line -> Borra el contenido de la tabla y la wa -> Tabla sin header line -> Borra el contenido de la tabla Free -> Tabla con header line -> Borra el contenido de la tabla no la wa -> Tabla sin header line -> Borra el contenido de la tabla Clear -> Tabla con header line -> Borra la wa -> Tabla sin header line -> Borra el contenido de la tabla Sort -> Ordena una tabla interna por los campo que queramos

Capitulo 11 Data retrieval 16

Toda seleccin de datos a la DB de produce a travez de la intefaz de la base de datos, fisicamente la tabla puede ser transparente o de tipo cluster. Para traer datos de la DB se usa la sentencia SELECT SELECT FROM INTO WHERE El addition SINGLE permite traer solo un registro de la DB correspondiente con la condicin. El addition INTO TABLE permite realizar una seleccin de registros e insertarlos en una tabla interna, los datos de la tabla interna son reemplazados. Para agregar registros a una tabla que ya contiene registros se usa el addition APPENDING TABLE. La variable sy-dbcnt -> contiene la cantidad de registros leidos. sy-subrc -> contiene el cdigo de retorno de la sentencia ejecutada anteriormente. Cuando se realiza una seleccin en una tabla dependiente de mandante el entorno tranforma la sentencia agregandole el campo mandante en el cual estamos logoneados, se puede evitar esto y leer datos de otros mandante utilizando la sentencia CLIENT SPECIFIED y en la clausula WHERE es necesario especificar el mandante que queremos. La variable de sistema sy-mand nos iundica en que mandante estamos logoneados. Se puede establecer en la clausula WHERE que un campo este en un intervalo especificado entre parentesis. .... WHERE carrid IN (, , ) . La sentencia SELECT SINGLE * nos permite traer de la DB la primera ocurrencia segn una condicin. El addition INTO CORRESPONDING FIELDS/INTO CORRESPONDING OF TABLE nos permiten desligarnos de los nombres de los campos en donde queremos depositar. El/los registro/s que seleccionemos se depositaran en los campos que correspondan en nombre de una work area/tabla interna. La sentencia INTO TABLE nos permite seleccionar mas de un registro y almacenarlos internamente en una tabla interna. La tabla interna se pisa con los datos nuevos. La sentencia APPENDING TABLE agrega a una tabla interna los registros seleccionados. IMPORTANTE -> para que la DB mejore una bsqueda seleccionando un ndice apropiado es necesario en la clusula WHERE escribir los parmetros de seleccin en el mismo orden que estn descriptos en el diccionario. Es necesario ver la estructura de la tabla en el diccionario y verificar si tiene otros ndices adems del primario que se ajuste mejor a nuestra bsqueda. No es necesario pasar por parmetros toda la clave, se puede pasar parte de la clave y tambin beneficia a la bsqueda. 17

Seguridad en accesos a la DB -> en la DB estan los perfiles de cada usuario para acceder a los datos. El chequeo de autorizaciones se realza a traves de codigo con la sentencia AUTHORITY CHECK con diferentes parametros para saber si cumple con los requisitos de autorizacion para la accion que desea realizar, la respuesta del chequeo se devuelve en la variable de sistema sysubrc (= 0 autorizado, <> 0 no autorizado). Los parmetros son objetos de autorizacion, estos objetos sueltos en el sistema, este objeto esta compuesto por un objeto (parametro) al cual queremos tener acceso y un codigo de actividad que nos indica que permisos tenemos. Estos objetos de autorizacion se guardan en clases de autorizaciones (transaccion SU21 o SU20).
AUTHORITY-CHECK OBJECT 'S_CARRID' ID 'CARRID' FIELD pa_carr ID 'ACTVT' FIELD activ_auth. IF sy-subrc NE 0. MESSAGE e046(bc400) WITH pa_carr. * No display authorization for airline carrier &1 ENDIF.

Vistas -> es una tabla logica definida en el diccionario de datos, los datos estan almacenados en la DB pero en tablas distintas, estas tablas estan logicamente relacionados por campos clave pero para nuestro programa se maneja como una tabla unica. Seleccin en tablas mltiples -> Para relacionar 2 o mas tablas o no es obligatorio crear una vista se puede realizar a travez de un solo qry la consulta, para esto es necesario crear la relacion con el addition a la sentencia select JOIN.

Capitulo 12 Internal program modularization with subroutines subrutina -> es un modulo interno dentro de mi programa, permite separar funcionalidad, hace mas lejible al programa, permite la reutilizacion de codigo. Se le puede pasar parametros y recibir parametros de respuesta, se ejecuta con la sentencia PERFORM y la rutina se declara con PERFORM <nombre_rutina> USING a1 CHANGING a2 a3 FORM <nombre_rutina> USING VALUE (a1) -> por valor CHANGING a2 -> por referencia VALUE (a3) -> por valor y resultado ENDFORM. Los parmetros pueden ser parados a la subrutina -> Por valor -> realiza una copia local del parmetro -> Por referencia -> Se pasa la direccin de memoria del parmetros, todo cambio en el parmetros se realizara en la variable original. -> Por valor y resultado -> Se pasa el parmetro por valor y este es devuelto como resultado de la subrutina. 18

Los parmetros fuera de la rutina se llaman parametros actuales y dentro de la rutina se llaman parametros formales. Los parametros deben ser tipificados, esto quiere decir que se deben declarar el tipo de parametro formal y actual ya que sino existiria la posibilidad de errores en runtime. Se deben declarar las estructuras y tablas internas ( las tablas internas de deben pasar por referencia ya que sino por valor duplicarian la tabla en memoria) Se pueden crear data object en forma local dentro de una subrutina, estos solo pueden ser accedidos dentro de la misma. Los data object declarados fuera de las rutinas son data objects globales y pueden ser utilizados y modificados dentro de las rutinas. La declaracion de data objects se realiza igual que afuera. Los data object declarados dentro de la rutina se liberan cuando esta termina.

Capitulo 13 Abap runtime System Los bloques de procesamiento son la unidad mas pequea de un programa, existen distintos tipos de bloques Events block -> Son eventos manejados por el runtime, y son disparados por este. Subroutines -> son bloques que se ejecutan mediante una sentencia Modules -> Son bloques manejados por procesos de pantalla Los bloques de procesamiento pueden ser escritos en cualquier orden, tienen cada bloque una prioridad de ejecucion que siempre es la misma. Los bloques de procesamiento terminan cuando el runtime encuantra otro bloque acontinuacion de la ultima linea ejecutable de este. Bloque de procesamiento LOAD-OF-PROGRAM es el primer bloque que se ejecuta, se utiliza para inicializar los data object (existe para todos los tipos de programa). Para los programas ejecutables esta la sentencia INITIALIZATION. Listados bsicos -> Los listados basicos son listados que se muestran por pantalla con formato basico, un listado basico puede tener hasta 20 niveles de listados ya que se puede hacer que la seleccin de un dato en un listado nos lleve a otro. Los listados bsicos son construidos en el bloque de procesamiento START-OF-SELECTION, se usan las sentencias WRITE, SKIP, ULINE. Para ingresar titulos a un listado basico Activas el programa y ejecutarlo, tirar el listado e ir a la barra de herramintas SYSTEM -> LIST -> LIST HEADING, guardar los cambios y para modificarlos ir a GOTO -> TEXT ELEMENTS -> LIST HEADING.

19

Capitulo 14 User Dialog List Multilenguaje -> Al escribir literales en un programa no se traducira logoneado en otro idioma, para esto esta los text symbols, ah se podra definir las etiquetas, traducierlas y el sistema elefira el texto que debe mostrar segn el idioma GOTO -> TEXT ELEMENTS -> TEXT SYMBOLS Los nombre de los text elements (etiquetas) pueden tener hasta 3 caracteres y se enbocan en el programa con TEXT-xxx donde xxx es el nombre del text element Write HELLO (001) Si el text element ((001)) no esta traducido en el idioma de logon se escribira en blanco, para evitar esto se coloca por default un valor entre comillas simples como literal (HELLO). Al seleccionar en una lnea se ejecuta el bloque de procesamiento AT SELECTION-SCREEN. Usar la variable sy-lsind para saber en que listado estamos parados y saber cual fue la seleccin. No puede sobrepasar en nivel de 20 listados (dumpea). HIDE rea -> la hide area es un area de memoria donde se guardan datos de donde queremos recuperar cuando se ejecuta un at line-selection. Cuando hacemos un write para listados basicos se utiliza para recuperar datos del listado para utilizarlos en el armado de otro listado en base a esos datos (seleccin del usuario). NOTA: cuando terminados de utilizar la wa debemos limpiarla para evitar basura. (CLEAR wa). Se puede guardar ms de una estructura en el area de HIDE. Para saber en que columna se presiono en el listado esta la sentencia GET CURSOR. Variante -> es posible guardar lo datos ingresados en una pantalla para en otra oportunidad recuperar la seleccin

Capitulo 15 User dialog selection screen Parameters -> Esta sentencia genera un data object en memoria y un campo de entrada en una pantalla de seleccin con el mismo tipo. PARAMETERS <pa_name> TYPE <pa_type> Select-options -> data object que contiene datos de una seleccin, La declaracin genera una tabla interna donde cada lnea tiene los parmetros de rangos ingresados por el usuario Sign -> include (I) o Exclude (E) 20

Option -> opciones de inclusin Low -> valor inferior de la seleccin High -> valor superior de la seleccin En la definicin de un select-option solo puede tener de tipo (luego de for) un data object, para declarar un dato primero hay que declarar un data object del dato que queremos y luego asignarlo al select-option. SELECT-OPTIONS <so_name> FOR <so_type> Para utilizar el data object select-option donde tiene todos los parmetros de seleccin, se utiliza dentro de un select comn y se compara con el campo de la tabla con el cambio de que en vez de igual va IN. Select * from.... Into... Where campo IN so_campo Endselect. El valor guardado en el select option es la seleccin compleja que realizo el usuario por pantalla no realiza qrys a la base de datos, la seleccin se usa acompaado de sentencias OPEN SQL. At selection-screen - > evento entre carga de usuario y start-of-selection Se utiliza generalmente para realizar validaciones de lo ingresado por pantalla.

Capitulo 16 User dialog: screen Una screen es un programa que se crea y agrega a nuestro programa abap, las screen tiene atributos, layout (formato), elementos y lgica de programacin. Para llamar una pantalla desde un programa se usa la sentencia CALL SCREEN <scr_num> Cada pantalla contiene las siguientes propiedades Atributos -> Nombre de la pantalla -> Descripcin de la pantalla -> Tipo de pantalla Layout -> Son los objetos de la pantalla, disposicin y propiedades de estos Element List -> Es la lista de elementos que contiene la pantalla Tiene 2 bloques de procesamiento PBO (process before output) y PAI (process after input) 21

Para disear el layout (formato de la pantalla) se utiliza la herramienta Graphical Screen painter que nos permite agregar botones, campos de entrada y salida, otros elementos de pantalla. Tiene la opcion de utilizar data object de mi programa abap y asi interfacear datos entre estos (generalmente los campos en una screen son traidos de mi programa abap en una estructura y cuando se completan los campos en la screen estos esta accesible en el programa cuando se sale de la screen), la sentencia TABLES crea un data object que se suele usar ya que se declara una estructura y es mas facil para transporta, pero se puede interfaciar tambien otros tipos de data objects. IMPORTANTE -> las estructuras en el programa abap y en la screen painter deben tener el mismo nombre para que se relacionen. Antes de llamar a la screen para que muestre los datos se debe completar la wa que tiene la screen relacionada. Para crear botones en una screen primero hay que declarar en el elemento list de la screen y debajo de todo hay un campo en blanco con un atributo ok, ah se coloca por standard el nombre ok_code (este es el function code del boton). Cuando se crea un botn en el campo ftcCode hay que poner el nombre del boton a seleccionar, este nombre se transportara al data object ok_code Hay que crear un data object data: ok_code type sy-ucomm. Ahora hay que meterle logica de programacion a la screen, hay que crear un module en el PAI. La sentencia SET SCREEN nos permite cambiar dinmicamente el atributo NEXT SCREEN de la pantalla, de esta manera podemos controlar el flujo de pantallas segn una accin.

Capitulo 17 Global modularization Los mdulos de funciones son funciones externas a los programas que son globales a todo el sistema y no a un programa Estas funciones estn organizadas en grupos de funciones, estos grupos contienen los mismos componentes que un programa ejecutable (Data objects, subroutines, screens). Estos componentes pueden ser accedidos por todas las funciones que estn en el grupo. Desde fuera del grupo d funciones estos componentes son inaccesibles Existen 3 tipos de mdulos de funciones 1. Normal module 2. Remote-enables module -> tiene la particularidad de que el modulo puede ser ejecutado desde nuestro sistema o desde un tercero conectado a este, se debe ser una conexin a un sistema valido 3. Update function module -> incluye funciones especiales para manejar actualizaciones en la DB

22

Todas las funciones tienen una interfaz estricta para su utilizacin, la interfaz esta compuesta por paramentos y estos pueden ser de 2 tipos. 1. Importing -> parmetros que recibe la funcin 2. exporting -> parmetros que devuelve la funcin 3. changing -> parmetros que recibe la funcin y retorna modificados Por default todos los parmetros son pasados por referencia, pero se pueden pasar por valor. Los parmetros de importing y changing pueden ser opcionales u obligatorios, los parmetros de exporting siempre son opcionales.

Las funciones se definen entre las sentencias FUNCTION <func_name>. ENDFUNCTION. Las funciones estn preparadas para levantar excepciones, estas se declaran el la solapa de excepciones, dentro del cdigo de la funcin las excepciones se levantan con la sentencia RAISE <exception> o MESSAGE <kind><num>(<id>) RAISING <exception>

Las excepciones son tiradas hacia el programa que llamo la funcin, en este se deben atrapar y ser salvadas, cuando se declaran las excepciones se le asignan un numero, cuando ocurren este numero se devuelve en la variable se sistema SY-SUBRC. Los mdulos de funciones tienen una nomenclatura especial [Y|Z]<func_group> [LY|LZ]<func_group><abrev><num>

Para usar una funcion en un programa conviene utilizar el boton PATTERN que nos armara la sintaxis de la funcion con sus parametros acorde como esta definida. Es conveniente generar una excepcion desconocida llamada OTHERS para excepciones no contempladas y que la funcion no cancele por errores desconocidos. BAPIs -> Son funciones Standard de SAP que manejan objetos de negocio, nos permite crear objetos, cambiar y mostrar sus atributos. Las BAPIs estn implementados en mdulos de funciones, se crean desde la transaccin BAPI. Estas funciones deben cumplir los siguientes requerimientos. 1. Nombre -> BAPI_<bussiness_obj_name>_<method_name> 2. Capacidad de ejecucin remota 3. No debe tener pantallas, mensajes de dialogo 4. Los parmetros deben estas tipados en el diccionario 5. No se permiten parmetros de changing. 6. No se permiten excepciones.

Capitulo 18 23

Calling program and passing data Hay 2 maneras de arrancar un programa 1. Un programa que esta ejecucin llama a otro, el programa llamador se detiene, se ejecuta enteramente el segundo programa y cuando este termina se retorna el control al programa llamador que continua normalmente 2. El programa llamador termina y el programa llamado empieza su ejecucin. Para llamar a un programa ejecutable (report) se utiliza la sentencia SUBMIT <pgm_name> -> llama al programa y termina el anterior SUBMIT <pgm_name> AND RETURN -> llama al programa y cuando este termina se retorna el control al programa original SUBMIT <pgm_name> VIA SELECTION SCREEN AND RETURN-> llama al programa y muestra la selection screen que este tenga en el caso de que la tuviera, cuando termina se retorna el control al programa anterior Para llamar a una transaccin desde un programa se utiliza la sentencia LEAVE TO TRANSACTION <transac_name> -> Termina el pgm actual CALL TRANSACTION < transac_name> -> ejecuta la transaccin y retorna el control al pgm original Al conectarse a R/3 se abre una sesin externa, se puede crear desde system -> new sesion o a travs de o/<t_code>. En una maquina puede haber desde 2 sesiones externas y hasta 6 segn el sistema este configurado. Las sesiones externas estn subdivididas en sesiones internas, cada programa que corre en una seccin ocupa una sesin interna. Una sesin externa puede tener hasta 9 sesiones internas (guardadas en stack). Y los datos de un programa solo pueden ser visibles dentro de una sesin interna. Diferencias entre PGM y Transaction. PGM -> cuando se llama un programa se crea una sesin interna para este sin importar de la manera en que se llama (si termina el programa anterior o no). El resto de la memoria queda intacta. Transaction -> Cuando se llama a una transaccin, se reinicia la memoria de ABAP, se borran todas las secciones internas Existen varias maneras de pasar datos entre programas entre sesiones internas 1. Interfaces entre programas 2. Memoria de Abap 3. Memoria de SAP 24

4. Tablas de la DB 5. Archivos locales en el presentation Server Interfaz entre programas -> Cuando se llama un programa que tiene pantallas se seleccin standard se le pueden pasar datos. El pasaje de datos se puede realizar a travs de una variante o especificando los componentes de la pantalla de seleccin.
SUBMIT z_selection_screen and RETURN with pa_dni [EQ|NE...] val with pa_lname ... with so_suldo between val1 and val2 sign [I|E] SUBMIT z_selection_screen AND RETURN VIA SELECTION-SCREEN USING SELECTION-SET 'VARIANTE1'.

Con el addition VIA SELECTION-SCREEN nos muestra la pantalla de seleccin con los datos que le pasamos Memoria de ABAP -> La sentencia EXPORT TO MEMORY ID nos permite copiar cualquier tipo de data object a la memoria de Abap. Con el addition ID nos permite crear distintos grupos de de memorias. Para traer los datos desde la memoria se utiliza la sentencia IMPORT FROM MEMORY ID Para liberar un grupo de la memoria se usa la sentencia FREE MEMORY ID Para transferir datos entre en presentation server y el application server se usan las funciones GUI_LOAD y GUI_DOWNLOAD. Memoria de SAP -> Para pasar datos usando la memoria de SAP se usan los parameters id, las sentencias son SET PARAMETER ID <paran_id> FIELD <valor> GET PARAMETER ID <paran_id> FIELD <valor>

25

TAW10 2/2 ABAP workbench Manual de referencia Capitulo 2 Data types and data objects in detail Tipos de datos -> especificados -> Son tipos de datos que no se les necesitan especificar el largo o la cantidad de decimales. d (Date), t (Time), i (Integer), f (Float), string, xstring. -> no especificados -> Son tipos de datos que se les debe especificar el largo o la cantidad de decimales. c, n , x -> Se les debe especificar largo ( 0..65535 ) p -> especificar largo y cantidad de decimales (mximo 16 bytes , default 8 bytes 0 decimales ) Grupo de tipo -> definicin a nivel de diccionario que agrupa definiciones de tipos que pueden ser accedidos por todo el sistema. El nombre de un type group no puede superar los 5 caracteres, por convencin los tipos de datos o constantes deben empezar con el nombre del type group.
TYPE-POOL zpool . constants zpool_const1(2) type c value 'ok'. TYPES: BEGIN OF zpool_struct1, nombre(30) type c, apellido(25) type c, END OF zpool_struct1. REPORT z_data_objects TYPE-POOLS: zpool. DATA persona TYPE zpool_struct1. .

Definicin de constantes CONSTANTS <const_name> TYPE <type>

Aritmtica de enteros (integer) -> En la aritmtica de enteros las operaciones con puntos decimales son redondeadas al entero ms cercano. Los clculos utilizando aritmtica de enteros es mas rpido que los clculos con punto fijo o flotante.
data int type i. int = 4 / 10. => 0 int = 6 / 10. => 1 int = 20 / 15. => 1

Aritmtica en numero packed -> el largo de estos tipos de datos estn representados en bytes. Cada digito decimal esta representado por medio byte, el ltimo byte se reserva para el signo. El mximo nmero de lugares decimales es el largo menos 1. Aritmtica de punto flotante -> Los tipos de datos de punto flotante es representado internamente usando suma de fracciones binarias. 26

data: float type f, pack type p decimals 2. float = 73050 * '0.0727'. => pack = float.

5,3107349999999997E+03 => 5.310,73

Operaciones con tipos de datos distintos -> abap permite operaciones entre distintos tipos de datos, en tiempo de ejecucin se convierte el resultado de la operacin a uno de los siguientes tipos de dato ( i , p , f). Las operaciones aritmticas con string primero convierte el carcter en numrico. Tipos iniciales de datos -> string -> Permite solo secuencia de caracteres , valor inicial . -> d -> permite solo secuencia de dgitos, Valor inicial 00000000 -> t -> permite solo secuencia de dgitos, Valor inicial 00000000 Operaciones con strings -> Abap permite operaciones con strings Todas las operaciones menos SEARCH son case-sensitive FIND -> busca un string dentro de otro REPLACE -> reemplaza la primera ocurrencia de uno en otro TRANSLATE -> reemplaza todas las ocurrencia de uno en otro SHIFT -> mueve los caracteres dentro del string en forma ciclica CONDENSE -> borra los caracteres blancos delante y detras OVERLAY -> pisa caracteres de un string en otro CONCATENATE -> concatena 2 strings SPLIT -> divide un string por ocurrencias de un carcter Con el addition INTO TABLE <itab> permite parcear un string en una tabla interna STRLEN -> devuelve la cantidad de caracteres SEARCH -> busca un string dentro de otro (binario o texto), la variable de sistema SYFDPOS guarda el offset donde encontro la cadena

Estructuras -> Una estructura es un conjunto de elementos de datos. Se define de 2 maneras, con la sentencia TYPES o DATA
TYPES: BEGIN OF s_name_type, prename(25) TYPE c, surname(25) TYPE c, title(5) TYPE c, END OF s_name_type. DATA: name TYPE s_name_type. o DATA: BEGIN OF s_name, prename(25) TYPE c, surname(25) TYPE c, title(5) TYPE c,

27

END OF s_name,.

Es posible anidar estructuras para sectorizar la informacin, desde la estructura principal se irn poniendo guiones - para ir metindose en las subestructuras hasta llegar al elemento de datos en particular. Para incluir estructuras hay 2 maneras
TYPES: BEGIN OF s_name_type, prename(25) TYPE c, surname(25) TYPE c, title(5) TYPE c, END OF s_name_type. DATA: name TYPE s_name_type. DATA: BEGIN OF s_adress, name TYPE s_name_type, street(15) TYPE c, city(25) TYPE c, END OF s_adress. o DATA: BEGIN OF s_name_type2, prename(25) TYPE c, surname(25) TYPE c, title(5) TYPE c, END OF s_name_type2.

Es posible agregar 2 estructuras del mismo tipo en otra., es necesario renombrar esta
DATA: BEGIN OF s_adress2. INCLUDE STRUCTURE s_name_type AS name. INCLUDE STRUCTURE s_name_type AS name2. DATA: street(15) TYPE c, city(25) TYPE c, END OF s_adress2.

Compatibilidad entre tipos de datos -> tipos elementales -> son compatible cuando tiene en mismo tipo y largo, y con mismo numero de decimales -> estructuras -> mismos componentes -> tablas -> mismo tipo de fila, misma key y tipo de tabla Datos UNICODE -> los datos del tipo unicode son formas de representar las informacin en distintos tipos de idiomas y formatos. Debido a unicode se cambio el tipo de representacin interna de los datos, un carcter que ocupaba internamente 1 byte ahora ocupa 2 byte. A raz de este cambio es necesario activar el flag de chequeo de unicode en los atributos de programa. 28

FIELD-SYMBOLS -> toma el formato de un data element que se le asigna con la sentencia ASSIGN. Se pueden hacer distintas asignaciones al mismo field-symbol y este tomara el formato del dato que se le asigne. El move-corresponding es mas performante que el move ya que el primero realiza el chequeo de unicode para todos los campos y luego mueve los campos acorde con el nombre entre las 2 estructuras, el otros realiza el chequeo y la copia de datos por cada campo.

Capitulo 3 Using Internal Tables Tablas Internas -> son data object que nos permiten almacenar conjuntos de datos en estructuras fijas en memoria. Los datos son guardados linea por linea, y cada linea tiene la misma estructura. Una tabla interna limita su tamao a la memoria del application server. Atributos -> Line Type -> estructura de la tabla interna -> Tipo de tabla -> Standard -> acceso por indice -> Sorted -> acceso por clave -> Hashed -> acceso por algoritmo -> Clave -> Conjunto de columnas de una tabla interna Composicin de la clave -> nica -> No nica Definicin -> Definicin Local -> Se declara la estructura dentro del programa y solo puede ser utilizada dentro de esta. -> Definicion Global -> se define dentro del diccionario y puede ser compartida por todo el sistema. Se define igual que una estructura y con la sentencia DATA definimos la tabla. Sintaxis TYPES or DATA Name [TYPE|LIKE] [standard|sorted|hashed] table OF <structure> WITH key_def [INITIAL SIZE <tamao inicial>] DATA name TYPE TABLE OF <structure>

Para definir una estructura tipo tabla el el diccionario se entra a crear un data element para crear una table type y nos pide un line type que debe ser una estructura definida previamente.

29

Tipos de tablas -> STANDARD -> Es opcional definir la clave al crearla, esta puede ser nica o no. key_def -> [NON-UNIQUE] {KEY COL1 COLn} -> Los campos de la clave debe ser char-type -> SORTED -> La clave puede ser nica o no, las entradas en la tabla estn ordenadas, las inserciones en la tabla tambin deben ser ordenadas -> HASHED -> La clave debe ser nica

Tipo de claves Standard -> [NON-UNIQUE] {KEY COL1 COLn/ DEFAULT KEY} Sorted -> {NON-UNIQUE| UNIQUE} KEY COL1 COLn Hashed -> UNIQUE KEY COL1 COLn

Operaciones -> Por tabla

-> Clear -> Move -> Free -> Sort -> comparar tablas -> meterle datos -> Por lineas -> sentencias OPEN SQL -> Por linea -> Loop

Operaciones con tablas READ TABLE -> Para leer datos de una tabla interna se utiliza la sentencia READ TABLE INTO WITH KEY. Esta sentencia acta igual que la sentencia SELECT, retorna un solo registro a una work area del mismo tipo Addition: COMPARING <comparing_options> f1 f2 fn ALL FIELDS TRANSPORTING <transport options> f1 f2 ... fn NO FIELDS Le addition COMPARING nos permite seleccionar que campos de la work area queremos comparar al hacer la lectura en la tabla interna. 30

El addition TRANSPORTING nos permite seleccionar que campos queremos que se copie a la work area al realizar la lectura. La variable de sistema SY-TFILL nos indica la cantidad de de lneas ledas. La variable de sistema SY-SUBRC nos indica si encontr al menos un registro con la condicin indicada MODIFY TABLE FROM -> modifica una linea de una tabla interna, tiene additions para acotar la modificacion por indice o por una condicion. Para que funcione la modificacin la tabla a modificar debe tener declarados campos claves, ya que en tiempo de ejecucin se selecciona el registro con los valores de la work area. No se pueden modificar los campos claves cuando modificamos tablas internas SORT o HASHED El addition TRANSPORTING nos permite solo modificar los campos de la tabla interna que especifiquemos. El addition INDEX nos permite a nosotros indicar el numero de registro que queremos modificar, No es posible acceder por indice a tablas del tipo HASHED.
MODIFY TABLE itab_stdr FROM wa. MODIFY itab_stdr FROM wa INDEX 1 TRANSPORTING apellido. MODIFY itab_stdr FROM wa TRANSPORTING apellido WHERE nombre = 'juan'.

En vez de modificar un registro con las sentencia MODIFY es posible asignar el registro a un field symbol y modificar el registro directamente.
READ TABLE itab_sort WITH KEY nombre = 'juan' ASSIGNING <fs>. READ TABLE itab_sort index 2 ASSIGNING <fs>.

DELETE TABLES -> borra un registro de una tabla por indice o por condicin. En tablas standard o sort se pueden borrar registros accediendo por la clave o por una condicin distinta a la clave.
DELETE TABLE itab_stdr WITH TABLE KEY nombre = 'pedro'. DELETE itab_stdr WHERE domicilio = 'artigas'.

En tablas hashed solo se puede borrar por condicin de la clave


DELETE itab_hash WHERE nombre = 'juan'. DELETE TABLE itab_hash WITH TABLE KEY nombre = 'zeta'.

LOOP ENDLOOP -> Permite recorrer una tabla interna registro por registro o por una condicin.
LOOP AT itab_stdr INTO wa {WHERE domicilio = 'artigas'}. ... ENDLOOP.

INSERT INTO TABLE-> La sentencia insert nos permite insertar una o mas lneas en una tabla interna, la insercin de las lneas son dependientes de la tabla con la que estamos trabajando. Standard -> inserta atrs Sorted -> inserta ordenado Hashed -> inserta segn algoritmo hashed 31

INSERT wa INTO TABLE itab_stdr. INSERT LINES OF itab_stdr INTO TABLE itab.

Tablas con HEADER LINE -> el header line en una tabla interna es una WA que se declara implicitamente con el mismo nombre y formato que la tabla interna y se maneja como una WA normal y nos indica en que registro de la tabla nos encontramos. Para realizar operaciones con la tabla esta se referenciara con el nomre mas doble corchete ( itab[] ) y la WA solo con el nombre ( itab ). Field symbol -> un data element de este tipo es un puntero, Declaracin: FIELD-SYMBLOS: <fs> TYPE <type> Asignacin ASSIGN <type> TO <fs> Desasignacion UNASSIGN <fs> Tablas de rango -> se puede armar una tabla interna igual a la de un select opcion, se crea una tabla del tipo rango y ah se llenan los parametros de busqueda. DATA: so_campo LIKE RANGE OF campo.

Performance de lectura en tablas internas Lectura con field symbols es ms rpida que usar wa Lectura de un solo registro (orden por eficiencia) -> READ TABLE WITH TABLE KEY -> Se debe especificar toda la clave -> READ TABLE WITH KEY -> Se especifica parte de la clave, en el orden de la definicin de la tabla -> LOOP -> iteracin en la tabla, recorre toda la tabla

Capitulo 5, 6, 7, 8 Abap Objects TYPE REF TO -> Tipo de dato que referencia a un objeto. Atributos -> Clase -> atrubutos estticos. Es compartido por todas las instancias de esa clase, el valor no puede ser modificado por ninguna de estas. Declaracin: CLASS-DATA: .... -> Instancia -> atributos dinmicos. El atributo es individual para cada instancia, cada una de estas puede tener un valor particular, este atributo es administrado por cada instancia. Los atributos dentro de una clase solo pueden ser declarados con la sentencia TYPE para datos del diccionario, la sentencia LIKE es para copiar la declaracin de elementos locales de la clase. 32

El addition READ ONLY a la declaracin de un atributo pblico nos permite que otras clases vean el atributo pero no puedan modificarlos. Solo puede ser modificado por mtodos dentro de la clase. Un mtodo es un procedimiento interno en una clase, este mtodo tiene parmetros (signature) que le permite recibir y devolver valores. Tiene parmetros de entrada, salida y de excepciones. Estoy ltimos se devuelven con la sentencia RAISING. A la interfaz de un mtodo se pueden definir parmetros opcionales o con valores por default. Mtodos -> Clase -> Solo puede utilizar atributos estticos, estos mtodos pueden ser accedidos sin haber instanciado un objeto. Declaracin: CLASS-METHOD: .... -> Instancia -> Puede utilizar atributos estticos o dinmicos, estos mtodos deben ser accedidos desde una instancia de una clase. Declaracin: METHOD: ....

CREATE OBJECT -> Mtodo de creacin de objetos, crea un objeto de una clase especificada por la declaracion de la variable de referencia al objeto DATA: r_vehiculo TYPE REF TO lcl_vehiculo. CREATE OBJECT r_vehiculo.

Para almacenar objetos en colecciones se utilizan tablas internas con referencias a las clases.
DATA it_empleados TYPE TABLE OF REF TO empleado. .

En esta tabla interna se pueden guardar los objetos de la clase empleado y toda subclase de esta, el casting se realiza automticamente. Para agregar un objeto a la tabla se utiliza la sentencia APPEND, la insercin de los objetos es al final de la tabla y esta no se puede ordenar.
APPEND im_emp TO it_empleados.

Para recorrer esta tabla se utiliza la iteracion LOOP ENDLOOP


LOOP AT it_empleados INTO empleado. ... ENDLOOP.

La declaracin de un data object referenciando a un objeto casi siempre van de la mano con una tabla de referencias para mantener los objetos en el sistema. Para llamar a metodos estaticos se usa solamente el nombre de la clase y el operador es =>. Constructor -> Es el metodo que se ejecuta caundo se realiza el create object. Se ejecuta una sola vez cuando se crea el objecto y el evento es pblico. En ABAP object hay herencia de 33

constructores, cuando se llama al constructor de una subclase se ejecutan todos los constructores hasta la clase padre.
PUBLIC SECTION. METHODS constructor IMPORTING im_nombre TYPE string.

Puede tener parmetros de IMPORTING y EXCEPTIONS solamente. Cuando se levanta una excepcin el objeto no se crea. Importante -> la diferencia de la firma de un metodo en un programa y en la implemtacion del metodo es que los parametros que son de IMPORTING son de EXPORTING y al reves. Si hay ms de un tipo de parametros (IMPORTING, EXPORTING, CHANGING, RETURNING o EXCEPTIONS) se debe poner explicitamente en la firma del metodo cuando se lo llama. Los mtodos que tienen parmetros de IMPORTING y uno solo de RETURNING se llaman mtodos funcionales, estos mtodos pueden ser utilizados dentro de operaciones. Para referenciar variables de un objeto dentro de un metodo teniendo en ambos el mismo nombre, se antepone la palabra clave ME-> que hara referencia al del objeto. Para referenciar a un mtodo de una superclase se usa la palabra clave SUPER->. Para declarar una clase con sus super clases se deben declarar en forma secuencial de la superclase a la subclase, cuando se declaran en forma local. Al declararlo en el diccionario no es necesario. Para redefinir un metodo en la subclase se define el metodo que queremos redefinir con el addition REDEFINITION, asi el sistema sabe que no es un metodo nuevo sino un redefinicion del metodo de la superclase. No es posible cambiar la firma de un mtodo redefinido. Se puede crear otro mtodo con el mismo nombre pero con distinta firma y sin el addition REDEFINITION.
METHODS: get_sueldo REDEFINITION.

Constructor (instancia) -> El constructor de una clase es un mtodo de instancia pblico con el nombre CONSTRUCTOR. Cada clase tiene uno y este es llamado automticamente cuando se crea un objeto de esa clase. Este mtodo se implementa en la seccin pblica, la implementacin de este mtodo no es necesaria para una clase ya que existe un constructor por default. Constructor (clase) -> El constructor de una clase es un mtodo de clase pblico con el nombre CLASS_CONSTRUCTOR. Cada clase tiene uno y este es llamado automticamente cuando se crea un objeto de esa clase, se accede a un atributo o mtodo de clase, o cuando se registra un evento para una clase. Herencia y redefinicin del constructor -> Los constructores se heredan y se les pueden pasar parmetros para setear atributos dentro de ellos. Los constructores de instancia de una sper clase solo pueden ser llamados dentro del constructor de la sub clase. A diferencia del constructor de instancia el constructor de clase se ejecuta automticamente. Es este caso se ejecuta siempre un constructor de clase antes del de instancia.

Capitulo 7 34

Inheritage La herencia es una relacin entre clases, para implementar la relacin clase se pone en la definicin el addition INHERITING FROM <super_class>, con esto la subclase hereda todos los atributos y mtodos creados PROTECTED o PUBLIC.
CLASS pasante DEFINITION INHERITING FROM empleado. ... ENDCLASS.

Capitulo 8 Casting

Cada clase puede heredar de una sola clase, no existe herencia mltiple. La herencia mltiple se puede simular implementando interfaces.

Casting de objetos -> Narrow cast (= o MOVE TO ) -> Baja la especificacin de un objeto. Este tipo de casting es chequeado en forma esttica por el compilador. -> Wide cast (?= o MOVE ?TO ) -> Sube la especificacin un objeto. Este tipo de casting no se chequea en forma esttica, se produce en tiempo de ejecucin, para esto siempre se encierra esta sentencia dentro de las sentencias TRY CHATH ENDTRY, para atrapar la excepcin CX_SY_MOVE_CAST_ERROR. Deben estar en la misma rama de objetos y previamente se debe haber hecho un narrow cast.
TRY. p ?= empleado. periodo_prueba = p->periodo_prueba. CATCH cx_sy_move_cast_error. e ?= empleado. ENDTRY.

Hay 2 tipos de referencias a variables -> Esttica -> cuando se declara una variable como TYPE REF TO <clase> y esta referencia no cambia en momento de ejecucin -> Dinmica -> cuando la referencia a una variable cambia por razn de realizar casting y en tiempo de ejecucin se definir que cdigo se ejecutara dependiendo del objeto apuntado.

Capitulo 9 Interfaces Una interfaz es declarada por el usuario, esta describe los servicios que un usuario puede acceder desde afuera. El usuario no conoce la implementacin ni quien la implementa, puede ser una o ms clases que implementen el mismo mtodo. Existe polimorfismo en una interfaz. La implementacin de interfaces simula la herencia mltiple. Una interfaz se declara entre las sentencias. Dentro se declara la interfaz para los mtodos de la interfaz.
INTERFACE if_persona.

35

METHODS if_mostrar_sueldo. ... ENDINTERFACE. "if_persona

La implementacin de la interfaz se realiza en las clases que la utilizan, as para cada clase se puede comportar de manera diferente. En la seccin DEFINITION de la clase que implementa esta interfaz se declara con la palabra clave INTERFACES la interfaz a utilizar. Esta definicin siempre debe ser en la seccin pblica.
INTERFACES if_persona.

En la seccin de IMPLEMENTATION se codificara el funcionamiento de cada uno de los mtodos de esta. Para indicar que el mtodo que estamos implementando deriva de la interna es necesario anteponer el nombre de esta acompaado por el carcter ~ (llamado interface resolution operador)
METHOD if_persona~if_mostrar_sueldo. ... ENDMETHOD. if_persona~if_mostrar_sueldo

. Para utilizar los mtodos de la interfaz la clase que los utiliza lo maneja como una clase comn, una clase interfaz. Tiene que declarar el objeto interfaz y utilizar el mtodo. La clase que utiliza esta interfaz solo tiene accedo al mtodo de la interfaz. No puede acceder al resto de los mtodos y atributos.
DATA if_per TYPE REF TO if_persona. if_per->if_mostrar_sueldo( ).

Las interfaces son utilizadas utilizando referencias a interfaces. La asignacin de un objeto a una referencia a la interfaz se llama narrowing cast tal que solo los componentes de de la interfaz son visibles. Desde la referencia a interfaz no se pueden ver los componentes del objeto original. La clase que utiliza la interfaz por fuera de nuestro sistema tendr solo referencias a objetos interfaz. Estos objetos tendrn los mtodos de la interfaz para utilizar, y los objetos de nuestro sistema que implementan la interfaz tendr que responder a las llamadas de estos mtodos. Un alias es una forma de llamar al mtodo de la interfaz con otro nombre para no tener que escribir interfaz~metodo. Solo esta permitido utilizarlo dentro de la seccin definicin de la clase que la implementa.Cada clase puede tener un alias diferente pra el mismo mtodo, este es local para la clase.
ALIASES if_mostrar_sueldo FOR if_persona~if_mostrar_sueldo.

Desde fuera de la se accede al mtodo por el alias como si fuera el nombre verdadero. 36

Composicin de interfaces -> una interfaz compuesta esta compuesta por la definicin de otras interfaces mas mtodos propios. Puede usar ms de una interfaz. La clase que implemente la ltima de las interfaces en el rbol debe implementar todos los mtodos de todas las interfaces.
INTERFACE IF_inter. ... ENDINTERFACE. INTERFACE IF_inter2. INTERFACES IF_inter1. ... METHODS ... ENDINTERFACE.

Como cualquier mtodo que se define sea de una superclase o de una interfaz este se puede redefinir En la seccin DEFINITION del mtodo que lo implementa se define el mtodo con el addition redefintion.
METHODS if_persona~if_mostrar_sueldo REDEFINITION.

Capitulo 10 Events .000

La implementacin de una interfaz se hereda de una superclase a sus subclases.

Un evento se dispara cuando se realizan cambios en otros objetos, se usa para notificar o realizar tareas automaticas tras una operacin sobre un objeto. Tenemos 2 actores el actor que dispara el evento (Trigger) y el que recive el evento (Handler). En el handler esta la definicion y la implemtentacion del metodo y del Trigger solo estara la llamada al evento. Eventos -> Instancia -> EVENTS -> Esttico -> CLASS-EVENT La visibilidad del evento la define el lanzador del evento, la visibilidad del metodo que atiende en metodo la define el manejador. Pasos para crear un evento : -> Declarar el evento en la clase lanzador. Los parmetros de este mtodo son solo de EXPORTING
EVENTS empleado_creado . EVENTS empleado_creado EXPORTING value(ex_emp) TYPE REF TO empleado.

-> Disparar el evento en un mtodo. Los parmetros de exporting son pasados por valor
RAISE EVENT empleado_creado RAISE EVENT empleado_creado EXPORTING ex_emp = me.

37

-> En el manejador declarar un metodo que responda al evento que queremos registrar. Los parmetros de este mtodo son solo de IMPORTING. El objeto sender refiere al objeto que enva el evento, no es necesario pasarlo por parmetro.
METHODS: agregar_persona_e FOR EVENT empleado_creado OF empleado IMPORTING sender. METHODS: agregar_persona_e FOR EVENT empleado_creado OF empleado IMPORTING sender ex_emp.

-> Para activar el evento creado para que este se acciona se setea el handler para el objeto que atiende ese evento.
SET HANDLER contador->agregar_persona_e FOR ALL INSTANCES.

Capitulo 12 Special Techniques Clases Abstractas -> No es posible instanciar objetos de un clase abstracta. Se usa para delinear comportamiento de las subclases. En estas clases se definen mtodos, los cuales no son necesarios que sean implementados por esta y deben ser implementados por las subclases. Una clase con al menos un mtodo abstracto es una clase abstracta. Clases Finales -> Las clases finales no tienen subclases asociadas por lo tanto los mtodos no pueden ser redefinidos (los mtodos son finales o abstractos, pero no al mismo tiempo). Las clases que son abstractas y finales solo pueden tener componentes estticos. Visibilidad del constructor -> indica quien puede crear un objeto de la clase. El addition CREATE PUBLIC indica que desde un programa llamando a la sentencia create object se instancia el objeto. El addition CREATE PROTECTED indica que solo objetos de la clase o de la superclase pueden instanciar objetos El addition CREATE PRIVATE indica que solo objetos de la clase puede instanciar objetos
CLASS c1 DEFINITION CREATE PUBLIC|PROTECTED|PRIVATE. ... ENDCLASS

Para crear una nica instancia una clase (singleton) se usa el addition CREATE PRIVATE con el atributo FINAL. Friends -> el concepto de clases amigas (friends) no permite acceder a los atributos privados o protegidos de una clase que nos provee de amistad. Esta amistad es unilateral, una clase a la cual le brindo amigad puede acceder a mis atributos, pero yo no puedo acceder a los de ella. Existe herencia de amistad solo para la clase que la recibe, la que brinda amistad no pasa esta a sus subclases.
Class c1 definition create private friends <class>. ... endclass.

38

Clases persistentes -> Las clases de persistencia facilitan el manejo de objetos con bases de dato relacionales. Para crear una clase persistente es necesario crearla desde el diccionario del tipo PERSISTENT CLASS. Por cada clase de persistencia que se crea tambin se crean 2 clases que son las encargadas del servicio. La primera clase tiene el nombre de ACTOR o AGENTE que es la encargada de manejar el objeto. La segunda es amiga de la primera y tiene todos los mtodos creados por el sistema para el servicio de persistencia (esta clase no puede ser modificada). La clase actor tiene el atributo CREATE PRIVATE, por lo tanto existe un solo actor por clase.

Capitulo 13 Excepciones Una excepcin es una situacin que se suscita dentro de un programa en ejecucin. Las excepciones pueden ser errores o situaciones que deben ser controladas antes de seguir con el curso normal del programa. Estas excepciones pueden ser lanzadas por el runtime del sistema o por el usuario con la sentencia RAISEN EXCEPTION. Las excepciones estn organizadas en clases de excepciones y cada excepcin es un objeto con atributos los cuales nos permiten saber que error ocurri. Todas las excepciones derivan de las clases de excepciones CX_NO_CHECK, CX_STATIC_CHECK o CX_DYNAMIC_CHECK. Todas estas dependen de la super-clase CX_ROOT. Aunque las excepciones respeten una jerarqua de excepciones no existe herencia, la excepcin que queremos atrapa debe ser declarada explcitamente. La sentencia para atrapar excepciones son, dentro del bloque TRY-ENDTRY se coloca el codigo al cual queremos monitoriar, las sentencias CATCH contienen el codigo para salvar la excepcion que ocurrio, se pueden poner tantas sentencias CATCH como excepciones puedan ocurrir. Aunque las excepciones responden a un rbol de excepciones no existe herencia entre ellas. para trapear el error debe estar declarado explcitamente de lo contrario no se trapeara el error y el programa hara un DUMP. En el caso de que el error se halla producido en una funcin y el error no estuviera contemplado dentro de esta, el manejo de la excepcin se transporta un nivel para arriba, al llegar a nivel de programa si no se maneja producir un error de runtime. El bloque CLEANUP se ejecutara siempre que se produzca una excepcion, cualquiera que fuera esta (siempre y cuando este contemplada). Sintaxis:
TRY. ... CATCH ... CATCH ... CATCH ...

<exception>. <exception>. <exception>.

ENDTRY.

39

Todas las clases de excepciones heredan de la clase cx_root los mensajes GET_TEXT -> nos trae el texto del error GET_SOURCE_POSICION -> nos trae la posicin en el programa donde ocurri el error Para utilizar estos mtodos es necesario instanciar un objeto de la clase cx_root.
DATA: r_exc type ref to cx_root, resultado type string, text type string. Parameters: pa_int1 type i, pa_int2 type i. START-OF-SELECTION. TRY. resultado = pa_int1 / pa_int2. CATCH cx_sy_zerodivide INTO r_exc. text = r_exc->get_text( ). MESSAGE text TYPE 'I'. ENDTRY.

La sentencia MESSAGE <string> TYPE <type> nos permite mostrar cualquier cadena de caracteres por pantalla como mensaje.

Las excepciones del usuario se crean en el diccionario como una clase tipo EXCEPTION CLASS, debe depender de alguna de las clases antes nombradas (no de cx_root). Para utilizar una excepcion en un metodo es necesario declararlo en la firma del metodo con la palabra clave RAISING <excepcion_name> para que este metodo puede tirar excepciones para arriba. Es posible pasar parmetros a una excepcin, se deben declarar el o los atributos en la clase. Para que se puedan insertar en el texto explicativo del error el atributo debe esta encerrado entre &. Es posible indicar mas de un texto explicativo y poder seleccionarlo en tiempo de ejecucin a travs del atributo TEXTID, se le pasa el valor del respectivo texto en el OTR (verlo en atributos del parmetro en la columna initial value).
RAISE EXCEPTION TYPE cx_sy_zerodivide. RAISE EXCEPTION TYPE zcx_excepciones1 EXPORTING result = result textid = 'C7F41423BAB4894592431FB66931E0C2'.

En la capa superior debera esta el codigo monitoriado por todos los exception que el metodo puede tirar.
TRY. PERFORM division. CATCH zcx_excepciones1 INTO r_exc. text = r_exc->get_text( ). MESSAGE text TYPE 'I'. CATCH cx_sy_zerodivide INTO r_exc.

40

text = r_exc->get_text( ). MESSAGE text TYPE 'I'. ENDTRY.

Las clases de excepciones nos proporcionan un texto explicativo del error y en que lnea ocurri, La clase cx_root nos proveer de mtodos para esto. Al cachear la excepcin la casteamos a un objeto de la clase cx_root y con le mtodo get_text nos trae el texto de la excepcin.
DATA: r_exc TYPE REF TO cx_root. TRY. PERFORM division. CATCH cx_sy_zerodivide INTO r_exc. text = r_exc->get_text( ). MESSAGE text TYPE 'I'. ENDTRY.

Capitulo 14 Dynamic Programming Field-symbols -> Son una especie de punteros desreferenciados. Tienen la particularidad de poder tomas cualquier tipo de dato (type ANY) o tomas un formato fijo. Declaracin FIELD-SYMBOLS <fs> TYPE [<type>|ANY]. Asignacin ASSIGN <data> TO <fs> Desasignacin UNASSIGN <fs> Asignado? <fs> IS ASSIGNED Utilizando el addition CASTING es posible quitar las restricciones del objeto de datos original. CASTING TYPE <type> ABAP nos permite ejecutar sentencias con parmetros ingresados dinmicamente, estos parmetros deben ser cadenas de texto. En el caso de la sentencia SUBMIT este debe estar entre parntesis.
PARAMETERS: pa_txt(30) TYPE c OBLIGATORY. CALL TRANSACTION pa_txt. SUBMIT (pa_txt).

41

Es obligatorio que el parmetro debe estar en mayscula. Si el parmetro es una lista se puede pasar una tabla interna. Tambin es posible quitar dinmicamente funciones del PF-STATUS con el addition EXCLUDING FC1 FC2. Sin tener que enumerar todas las function codes es posible pasarle una tabla interna con estos cdigos. Type-Pool -> grupo de types declarados a nivel diccionario Las llamadas a mtodos tambin es posible realizarlas dinmicamente no solo el nombre del mtodo sino la tabla de parmetros y excepciones que este tiene. Las estructuras abap_parmbind_tab y abap_excpbind_tab del type pool abap son utilizadas para pasar estos datos Type pool Abap.
DATA: ptab type abap_parmbind_ tab, Etab type abap_excpbind_tab. DATA: ref TYPE REF TO <class>, Meth_name TYPE STRING. Call method ref->(meth_name) PARAMETER-TABLE ptab EXCEPTION-TABLE etab.

Estructura abap_parmbind_tab NAME -> nombre del parmetro formal KIND -> tipo de parmetro (importing, exporting, changing, receiving) VALUE -> valor de la referencia al data object que contiene el valor. Para esto se utiliza la sentencia GET REFERENCE Ejemplo como llenar la tabla de parmetros
ptab_line LIKE LINE OF ptab ptab_line-name = 'P1'. ptab_line-kind = CL_ABAP_OBJECTDESCR=>EXPORTING. GET REFERENCE OF number INTO ptab_line-value.

Estructura abap_excpbind_tab NAME -> nombre de la excepcin VALUE -> valor del sy-subrc ( type i)
CL_ABAP_OBJECTDESCR -> clase que contiene todos los tipos de datos de abap.

Creacin de objetos dinmicamente -> es posible crear dinmicamente un objeto pasndole dinmicamente el tipo de clase al que pertenece. Debe estar en mayscula.
clase = 'C1'. CREATE OBJECT r TYPE (clase).

42

Excepcion CX_SY_CREATE_OBJECT_ERROR -> excepcin cuando la clase no existe. Data reference -> Son variables que contienen referencias a variables, son punteros a datos. Estos punteros pueden ser a datos elementales o estructuras especficos (TYPE REF TO <type>) o a tipos de datos genrico (TYPE REF TO DATA). El contenido de la variable de referencia contiene una direccin de memoria no como el field-symbol que automticamente se referencia al valor apuntado. Si se modifica el contenido de la variable de referencia se modificara donde apunta esta (la direccin de memoria). Cuando se define una variable de referencia esta es inicializada con un puntero nulo. Para asignarle una referencia a una variable de referencia primero es necesario crear el data object y usar la sentencia GET REFERENCE OF <data_obj> INTO <data_ref>. CREATE DATA -> Crea una estructura o dato en forma dinmica, para esto es necesario declarar un data object referencia al tipo de dato que queremos crear, en el caso de que no queremos tipar la referencia se pone TYPE DATA.
DATA: dato1 TYPE REF TO data, dato2 TYPE REF TO c. Para

crear el data object en tiempo de ejecucin.


CREATE DATA dato1 TYPE i. (en el caso de que se halla declarado la referencia como type data) CREATE DATA dato2.

Para poder acceder al dato dentro de la variable de referencia se usa el operador ->* que significa contenido en el caso de que el contenido fuera una estructura se maneja igual que una work area.
DATA: clase TYPE REF TO data, clase2 TYPE REF TO data, clase3 TYPE REF TO t_struc, FIELD-SYMBOLS <fs> TYPE ANY. FIELD-SYMBOLS <fs2> TYPE t_struc.

***** Caso de referencia tipada (estructura) *****


CREATE DATA clase3. clase3->*-a = 5. write clase3->*-a.

**** Caso de referencia y fs no tipada (no estrucutras)*****


CREATE DATA clase TYPE i. GET REFERENCE OF wi INTO clase. ASSIGN clase->* TO <fs>. WRITE <fs>.

**** Caso de referencia no tipada y fs tipado (no estruc)*****


CREATE DATA clase2 TYPE t_struc. ASSIGN clase2->* TO <FS2>.

43

O get reference of clase2->* into <fs2>. <FS2>-A = 45. WRITE <FS2>-A.

Generalmente se utiliza un field-symbol tipados para poder acceder a las variables de referencia no tipadas (estticamente) Un fields-symbol puede declararse sin referencia a un tipo de dato especifico. Fields-symbol -> tipados -> Tablas -> datos -> Estructuras -> No tipados -> ANY -> dato y estruc -> ANY TABLE -> tabla

La sentencia ASSIGN COMPONENT nos permite asignas componente por componente a travs de un ndice a un field-symbol
ASSIGN COMPONENT idx OF STRUCTURE struc TO <fs>.

DESCRIBE FIELDS DESCRIBE TABLE -> Se utiliza para saber la descripcin de una tabla interna o un campo.
DESCRIBE TABLE it_spfli LINES no_lines -> cantidad de lneas OCCURS initial_lines -> cantidad de lneas cuando se creo la tabla KIND table_kind. -> tipo de tabla (TYPE-POOLS: SYDES.)

SYDES_KIND-STANDARD. SYDES_KIND-SORTED. SYDES_KIND-HASHED.

La sentencia IS INITIAL nos permite saber si la tabla esta vaca. El mtodo describe_by_data de la clase cl_abap_structdescr nos permite ver la estructura de una tabla.
DATA: dsc_ref TYPE REF TO cl_abap_structdescr, dsr_ref ?= cl_abap_structdescr=> describe_by_data( wa ).

TAW12 1/3 ABAP workbench Manual de referencia Como crear una tabla 1. Entrar en la transaccin Se11, poner el nombre de la tabla y presionar crear

44

2.

completar el campo delivery class y el campo data browser.. y la descripcion de la tabla

3.

En la solapa fields se ingresan los datos, los nombres de los campos y a que data element pertenecen, es posible crear campos que no esten declarados en el diccionario, es mejor declararlos, para esto en la columna data element del campo que queremos declarar escribimos el nombre del data element y hacemos doble clik

45

4.

nos llevara a la siguiente pantalla donde deberemos poner la descripcion y el dominio del data element, para crear un dominio escribimos el nombre y hacemos doble clik sobre este

5.

Nos llevara a la siguiente pantalla para crear un dominio completamos los campos tcnicos y guardamos los campos y activamos el dominio

46

6. 7. 8.

guardamos el data element y lo activamos guardamos la tabla para activar la tabla es necesario setear el aspecto tecnico

Inclusin de estructuras en una tabla 1. abrir la tabla con la transaccin se11

47

2.

en la barra de herramientas EDIT -> INCLUDE -> INSERT nos pedir el nombre de la estructura

3.

Se incluir la estructura en la tabla, todo cambio en la estructura se actualizara automticamente la o las tablas.

Creacin de ndices 1. 2. 3. 4.

En la transaccin se11 Ingresar a la tabla que queremos Presionar el botn index Lo llevara a la siguiente pantalla completar al pie los campos por los que quiero que la tabla este indexada y completo la tcnica de indexacin. 48

5.

Guardamos la tabla y la activamos para crear el ndice.

Capitulo 2 Abap Dictionary El diccionario maneja todos los datos de SAP Type elements -> Domains -> Descripcin tcnica del elemento, consta del tipo de dato, largo - > Data elements - > Descripcin semntica del dominio de datos en un cierto entorno de negocios - > Structures - > conjunto de data elements o estructuras - > Tipos tablas - > conjunto de lneas de una estructura o data element. 49

Db objects -> Tablas -> Vistas -> ndices Servicios -> F1 y F4 - > documentacin y bsqueda para un campo -> Lockeos de registros -> Log de una tabla -> se pueden guardar registro de modificaciones en la DB para esa tabla o campo

Db objects -> Para crear una tabla en la DB es necesario crearla primero en el diccionario y activar la nueva tabla y ese cambio se crea automticamente en la DB (fsicamente). Los ndices tambin se crean en el diccionario como las tablas. Types elements -> describe la definicin de los posibles tipos que puede tener un data element. Tablas -> componentes (campos) - > campos clave - > campos no clave -> filas (registros) Dominio -> Describe el atributo tcnico del datos (tipo de dato, decimales, longitud, etc.). Data element -> Describe la informacin semntica del dato (titulo, etc.).

Capitulo 3 Tables in ABAP dictionary Todas las tablas creadas por el usuario son tablas transparentes. Las tablas transparentes tienen el mismo nombre en el diccionario que en la DB, igual que el nombre de los campos, el orden de los campos pueden variar. Para crear una elemento en el diccionario de datos esta la transaccin SE11, seleccionamos el tipo de elemento queremos crear y presionamos CREATE Los campos que son de tipo de datos cantidad (QUAN) se debe crear otro campo con la descripcin de la unidad que representa esa unidad, y estos 2 campos deben relacionarse. La relacin se realiza sobre la tabla en la solapa de quantity sobre el campo que queremos relacionar escribimos la tabla y el nombre del campo del otro. Se puede relacionar con este tipo de relacin campos de distintas tablas. 50

Se puede crear estructuras independientes y estas incluirlas en una tabla, se realiza esto para reutilizar conjunto de componentes que se repiten en varias tablas. Fsicamente en la DB se crean los campos en la tabla. Para agregar una estructura en una tabla, editamos la misma y en la barra de herramientas EDIT -> INCLUDES - > INSERT Las tablas en el diccionario pertenecen a una clase, Data Class -> master Data -> son tablas en las cuales los datos cambian rara vez -> Organizational data -> Tablas de customizing - > Transaction data -> Tablas que cambian constantemente - > System Data -> Tablas del sistema R/3 Buffering -> Cuando se crea una tabla se debe ingresar el tamao esperado de la tabla para que la DB cuando llegue a su mximo de registros esperados, esta pueda asignarle mas espacio dinmicamente. Looging -> Se puede logear los cambios en una tabla o campos de una tabla. La variable de sistema REC/CLIENT activa en el sistema el logeo, si una tabla tiene log pero en el sistema no esta activo no logea nada y al revs pasa lo mismo, si en el sistema esta activo y la tabla no tiene log no logea. Posibles valores REC/CLIENT -> ALL -> logeo para todos los clientes REC/CLIENT -> 000 -> logeo para el cliente especificado REC/CLIENT -> OFF -> No hay logeo Para ver el log de una tabla se utiliza la transaccin SCU3. Cuando se crea una tabla es necesario setear los atributos tcnicos, botn TECHINICAL SETTINGS y setear el data class, size category, buffering technique. Tabla de objetos del repositorio (codigo fuente de pgm ) -> REPOSRC El programa RSRSCAN1 nos permite buscar dentro de la tabla TRDIR coddigo fuente.

Capitulo 4 Performance during table access Un ndice es una copia fsica de la tabla con menos o los mismos campos y ordenada por una clave Index -> Primario -> Es la tabla principal y esta ordenado por los campos clave -> Secundario -> Se crean desde el diccionario y se pueden elegir cualquier cantidad de campo Las modificaciones en la tabla principal dispara actualizaciones en todos los ndices que contiene el campo modificado. 51

La seleccin de ndices la realiza la DB pero se puede ayudar a la DB en el campo WHERE indicar los campos claves en el orden declarados en la tabla. Buffering -> Las tcnicas de buffering consisten mantener las tablas que mas s usan cargadas en el app server en el buffer local para evitar el acceso a la DB y son ledos de ah para nuevas consultas. Cuando el PGM intenta leer una tabla el app server verifica si esta en el buffer, si se encuentra le devuelve los datos al programa, si no esta el en buffer accede a la DB. Los datos almacenados en el buffer son removidos para dar lugar a otros, los datos a remover se seleccionan por la asiduidad con la que se acceden. La sentencia $TAB ejecutada en la lnea de comando actualiza todo el buffer del app server. Tcnicas -> Full - > se lleva toda la tabla aunque leamos 1 registro -> Genrica -> se lleva todos los registros por una clave definida -> Single -> se lleva solo los registros ledos, usar select con el addition SINGLE sino se invalida la tcnica de buffering. Cuando se intenta acceder a un registro que no existe se marca como no existente y cuando se intente acceder otra vez con la misma clave se evita el acceso a la DB.

La sincronizacin de buffer obliga a los distintos app server a sincronizar sus buffer si encuentra que tiene tablas en su memoria que fueron modificados y estn en una tabla de sincronizacin, la sincronizacin se ejecuta cada cierto tiempo seteado por el sistema (rdisp/bufreftime entre 60s y 3600s). Cuando creas un ndice a una tabla dependiente de mandante hay que agregar el mandante en el ndice OBLIGATORIAMENTE.

Capitulo 5 Consistency through input check Valores fijos -> Un dominio de datos puede tener valores fijos predefinidos en su declaracin, estos valores fijos actuaran como chequeos de datos en el momento del ingreso, tambin aporta la funcin F4. Estos valores fijos son guardados en el dominio. Valores de tabla -> los valores de tabla nos permiten generar un rango de valores para un dominio, estos valores deben estar en una tabla. Una tabla de valores se convierte en una check table en el momento en que se declara una clave fornea. Para crear una clave fornea es necesario que los dominios de estos 2 campos sean iguales y no el elemento de datos. Los campos de una tabla pueden estar relacionadas con otras tablas o un conjunto de valores fijos determinados en el dominio del campos F4 -> tabla de posibles valores de ese campo, se declara en el dominio del campos como un rango de valores fijos o una tabla maestra de datos

52

Forign key -> relaciona los campos de una tabla con otra en el momento de realizar las insercin en el campo. Nos asegura la consistencia de datos. Tablas de text -> las tablas de texto no realizan validaciones sino se usan para relacionar una tabla maestra con una de texto, el ejemplo mas comn es las tablas de texto de lenguaje. Para crear una tabla de valores para un dominio ir a la solapa VALUE RANGE dentro del dominio e ingresar los valores, estos pueden ser valores simple, rangos de valores o tablas de valores Para ver en la tabla las claves fornea esta la solapa entry help/check y en la columna check estar la tabla con la que el campo esta relacionado. Existen distintos tipos de claves forneas -> Not specified -> No key fields/candidate -> La clave no identifica a un registro nico en la tabla -> Key fields / candidate -> Identifica un registro nico en la tabla -> Key fields of a text table -> Es una clave fornea con la diferencia que tiene el campo lenguaje (caso especial de Key fields) La particularidad de las tablas de texto son que tienen la misma clave que la tabla original pero con el agregado del campo del lenguaje (LANG). Estas tablas guardan generalmente descripciones que se muestran en mltiples idiomas. Solo una tabla de texto se puede crear para una tabla.

Capitulo 6 Dependencies of ABAP dictionary objects El diccionario trabaja con 2 versiones del objeto diccionario una inactiva y otra activa que es la que usa el sistema. Objetos dependientes -> objetos que dependen de otros por ejemplo un campo depende de un elementos de dato y este a su vez de un dominio. Toda modificacin en el diccionario afecta a todos los objetos relacionados. Si una tabla contiene un campo al cual modificamos su largo o tipo al activar el diccionario se modificara esta. Para buscar objetos en el diccionario de datos entrar a travs del se80 y en la solapa REPOSITORY INFORMATION SYSTEM y buscas la carpeta ABAP DICTIONARY.

Capitulo 7 Changes to Database tables Cuando realizamos cambios en el diccionario de datos estos se reflejan en la DB al momento de activar la tabla. Existen 3 tipos de cambios en la base de datos por parte del diccionario

Tipos de cambios > Delete -> borra la tabla y la vuelve a crear si la tabla no tiene datos -> Change -> Se altera la tabla, los datos se mantienen y los ndices se vuelven a crear 53

-> Convert -> cambia la estructura de los campos La modalidad para realizar los cambios depende si la tabla tiene datos o no: No tiene datos -> La tabla es borrada y vuelta a crear con la nueva estructura Tiene datos -> Se recorre la tabla tratando de ajustar los datos al nuevo formato de la nueva tabla (ALTER TABLE). Al realizar cambios en la DB la interfase: 1. lockea la tabla 2. borra los ndices 3. la renombra con el nombre QCM<tableName> 4. crea una nueva tabla con la nueva estructura sin datos (vaca) y crea en ndice primario 5. hace un move-corresponding de la tabla QCM a la nueva tabla, al realizar la copia tener en cuenta que las tablas se duplican 6. deslockea la tabla QCM 7. borra la tabla QCM 8. renombra la tabla al nombre original 9. crea los ndices secundarios En caso de error en la conversin se debe arreglar el problema y se puede re-arrancar la conversin, en el caso de que no se pueda continuar se puede cancelar la operacin y volver la tabla al estado original. Append -> Se usa para agregar estructuras a una tabla sin modificar el standart de SAP, las estructuras append o se pueden agregar en mas de una tabla. Parados en la tabla barra de herramientas GOTO -> APPEND STRUCTURE y ah creo la estructura normalmente, se puede asignarle claves forneas en la estructura y tambin uno de los campos de la estructura pueden formar parte de la clave de la tabla. Restricciones para estructuras APPEND No se puede agregar estructuras append a tablas del tipo cluster o pool No es posible agregar estructuras append en tablas o estructuras que tengan como ultimo campo elementos de datos del tipo LRAW o LCHR

Capitulo 8 Views Es una estructura que combina campo de distintas tablas, las tablas se relacionan a travs de un INNER JOIN por sus claves forneas. Se crea en el diccionario y se activan pero se genera solamente la estructura ya que se llena en tiempo de ejecucin. 54

En la declaracin de la vista se definen los campos que deseo que aparezcan en la tabla as tambin como los registros que cumplen una condicin especifica (seleccin de opcin), esta condicin no puede ser establecida para campos enteros. Las vistas se utilizan igual como si fuera una nica tabla transparente. En reemplazo de una vista se puede utilizar la sentencia select JOIN y simular una vista local al programa. Para crear una vista transaccin SE11 en el campo views, create. Vamos agregando las tablas que quiero relacionar y el sistema por la estructura de las claves primarias va armando el join en el caso de que no nos sirva la relacin que nos propone el sistema se puede cambiar Se pueden incluir todos los campos de una tabla y tambin agregar estructuras. Las vistas permiten las mismas propiedades tcnicas (Buffer) que una tabla normal. Existen tambin vistas de mantenimiento en donde se puede crear una ABM de la vista y la DB se encarga de la lgica de insercin en la tabla. Solo se pueden crear vistas de mantenimientos a vistas que contienen una tabla nicamente. La transaccin SE13 nos permite modificar los seteos tcnicos de las vistas Las vistas de mantenimiento son un tipo de vista que se crea para mantener las vistas, nos permite realizar altas bajas y modificaciones en la tabla original. Estas modificaciones se puede hacer solo en vistas de una sola tabla. Cuando se genera una vista de mantenimiento es necesario generar la pantalla de dialogo para poder hacer el mantenimiento. Para generar el dialogo en necesario ir a GOTO -> GENERATE MANTENANCE TABLE y completar los campos que nos piden. Append Includes -> Son estructuras formadas por campos de las tablas que componen la vista y que nos permiten agregar estos a la vista sin modificarla. Cuando se especifican los campos de una tabla en una vista se puede poner en el nombre del campo * que indica que todos los campos de esa tabla sern incluidos. En el caso de enumerar los campos de una tabla el agregado de campos en la tabla original no se tomaran en cuenta, las append includes nos permite realizar esta ampliacin a la vista sin tener que modificarla.

Capitulo 9 Search help En search help es una ayuda de bsqueda para el usuario, existen varios tipo de search help standart de SAP como las tablas de valores o los rangos de valores especificados en el data element. 55

Estos search help se pueden configurar acotando bsquedas en el search help desde en diccionario esto se llama mtodo de seleccin Mtodo de seleccin -> realiza la bsqueda en una tabla segn los parmetros de seleccin que asignemos. Al mtodo es necesario pasarle una tabla o una vista para la bsqueda, el sistema tiene la restriccin de una sola tabla. Todo search help tiene una interfaz que le permite al usuario ingresar parmetros de bsqueda y devolucin. Search help -> parmetros - > Import -> parmetros con los que se har la seleccin -> Export -> parmetros que se traern de la ayuda y se completaran en la pantalla de seleccin

Definicin de search help -> Tabla/estructura -> se mostrara en todas las pantallas donde este campo este declarado -> Check Table -> todos los campos que de la pantalla que tengan este check table contendrn esta bsqueda. - > Data element -> los campos que estn declarados como ese data element -> Campo de una pantalla -> se define con el screen painter y solo es para esa pantalla Si un campo de una pantalla tiene 2 o mas search help cuando presionamos F4 no se sabe cual usar, entonces se creo una jerarqua de search help (Pag 9-11 ver jerarqua). Las funciones F4IF_FIELD_VALUE_REQUEST nos permite buscar o modificar el search help de un campo de una tabla. Estas funciones nos permiten retornar los campos del search help. En una tabla.
* ----- Data definition ----DATA: pe_tabname1 LIKE dd03v-tabname, pe_fieldname1 LIKE dd03v-fieldname. DATA: return_tab LIKE ddshretval OCCURS 0 WITH HEADER LINE. CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' EXPORTING tabname = pe_tabname1 fieldname = pe_fieldname1 TABLES return_tab = return_tab EXCEPTIONS field_not_found = 1 no_help_for_field = 2 inconsistent_help = 3 no_values_found = 4 OTHERS = 5.

Un search help colectivo es un conjunto de search help elementales, se van agregando y se pueden tener muchas bsquedas para el mismo campo. Deben tener la misma interfaz para poder reutilizar la misma bsqueda. 56

Un search help elemental puede estar en ms de un search help colectivo, un search help colectivo puede estar incluido en otro search help colectivo. Para atachar un search help a una tabla ir a EXTRAS -> SEARCH HELP FOR TABLES, ingresar el nombre del search help que creamos y relacionar los campos de input del search help con los de la tabla o pantalla. Si tenemos una check table en un campo de una tabla y queremos que en este crear un search help hay que hacerlo en la tabla check. Para borrar un search help elemental en uno colectivo y el search help colectivo es standard de SAP y no podemos modificarlo hay que crear una estructura APPEND de search help y agregar el search help que queremos eliminar y lo marcamos como HIDE de esta manera en el search help colectivo no aparece. (forma de modificar el standard sin modificarlo)

Capitulo 13 Reporting Las pantallas de reportes simples constan de 2 headers, que son la descripcin del programa mas una lnea que lo separa del listado, estos 2 lneas se mantiene en la cabecera del listado cuando scroleamos el mismo. REPORT -> Programa ejecutable que nos permite realizar listados bsicos por pantalla, tiene muchas addtion que nos permite configurar el formato del reporte. -> NO STANDARD PAGE HEADING -> quita la cabecera del reporte, viene asociado con el evento TOP-OF-PAGE para poner un encabezado propio. ->NEW PAGE LINE-SIZE y LINE-COUNT -> son para especificar la cantidad de filas y columnas que tiene mi reporte. Default LINE-SIZE = 83 LINE-COUNT = 60000 . WRITE -> Sentencia que nos permite armar listados simples, nos permite formatear el campo que queremos por pantalla. Los listados bsicos se desarrollan en el evento STARTOF-SELECTION, todo write dentro de este evento se mostrara como listado, en otro evento NO. Formato de la sentencia WRITE -> la sentencia write nos permite formatear la salida de los datos en el listado. Tambin es posible dibujar iconos en la pantalla, lneas, etc, Un listado bsico se compone de un encabezado que contiene el nombre del programa, Este encabezado se puede cambiar desde el editor, tiene como mximo 4 renglones. La sentencia SET LEFT SCROLL-BOUNDARY nos permite mantener fijas columnas en un listado bsico al momento de desplazarse lateralmente en un listado.

57

Elementos de texto -> los elementos de texto nos permite imprimir un texto en distintos idiomas. Se imprimen de la siguiente manera WRITE TEXT-xxx -> busca el elemento de texto y lo imprime en la pantalla, si no lo encuentra imprime blanco LITERAL(xxx) -> busca el elemento de text xxx y lo imprime en la pantalla, si no lo encuentra imprime el literal que lo acompaa. Variables de sistema para la impresin de reporte simples. SY-LINCT -> cantidad de lneas SY-LINSZ -> largo de la lnea SY-SROWS -> cantidad de filas en pantalla SY-SCOLS -> cantidad de columnas en pantalla SY-PAGNO -> numero de pagina SY-LINNO -> numero de lnea seleccionada SY-COLNO -> numero de columna seleccionada

La sentencia ON CHANGE OF <field> ENDON dentro de un loop nos permite realizar un corte de control por todos losel campo especificado, la sentencia dentro solo se ejecutara cuando el campo especificado cambie de valor.

Capitulo 14 Selection Screen Una pantalla de seleccin es una interfaz entre el usuario y el programa, existen 3 tipos de pantallas Pantallas de seleccin de una DB lgica Pantalla de seleccin standard de SAP (screen 1000) Creadas por el usuario
SELECTION-SCREEN BEGIN OF SCREEN 1100. ... SELECTION-SCREEN END OF SCREEN 1100.

Se ejecuta as

CALL SELECTION-SCREEN 1100

Cuando se ejecuta esta sentencia la pantalla de seleccin se muestra en toda la pantalla. Para mostrar una pantalla en forma de ventanita se agrega los addition que indican en donde arranca la pantalla y donde termina (coordenadas). Antes de mostrar la pantalla se ejecuta el evento INITIALIZATION donde se puede discriminar el nmero de pantalla que se mostrara con la variable de sistema SY-DYNNR.
CALL SELECTION-SCREEN 1100 STARTING AT 10 5 ENDING AT 80 10.

Parmetros en un pantalla de seleccin Parameters 58

Normal -> MEMORY ID -> al asignarle un valor SAP nos trae de la memoria el valor del parameter id -> VALUE CHECK -> nos permite que el diccionario valide los datos ingresados -> OBLIGATORY -> nos obliga a ingresar valores -> As checkbox -> tilde ( o X) -> RadioButton Group <grp> -> son excluyentes Select-option -> Tabla interna que define el sistema con los campos. SIGN OPTION [I/E] [EQ|BT|] LOW HIGH <valor> <valor>

en esta .tabla interna se guardaran los parmetros de seleccin Se puede poner mas de un parmetro en una lnea, debe estar el en bloque. La particularidad de esta sentencia es que los labels de los objetos de pantalla se pueden, es necesario ingresarlos a mano con la sentencia SELECTION-SCREEN COMMENT.
SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(5) text-002 FOR FIELD pa_tipo. PARAMETERS: pa_tipo TYPE zpersonal-tipo VALUE CHECK. SELECTION-SCREEN COMMENT 10(5) text-003 FOR FIELD pa_sueld. PARAMETERS: pa_sueld TYPE zsueldos-sueldo VALUE CHECK. SELECTION-SCREEN END OF LINE.

Las sentencias AT SELECTION-SCREEN ON HELP-REQUEST FOR <f> y AT SELECTION-SCREEN ON VALUE-REQUEST FOR <f> son para capturar el F1 y F4 respectivamente en un campo especifico. La sentencia SELECTION-SCREEN BEGIN OF SCREEN nos permite crear una selection screen aparte de la que nos da SAP para ingresar datos extras. Se pueden crear select options y parameters, se invoca con la sentencia CALL SELECTION-SCREEN xxx
SELECTION-SCREEN BEGIN OF SCREEN 1100. PARAMETERS: pa_acc1 RADIOBUTTON GROUP acc, pa_acc2 RADIOBUTTON GROUP acc, pa_acc3 RADIOBUTTON GROUP acc. SELECTION-SCREEN END OF SCREEN 1100.

La variable de sistemas sy-dynnr nos muestra en que numero de dympro nos encontramos El evento AT SELECTION-SCREEN OUTPUT se ejecuta cada ves que se carga una pantalla o el usuario presiona enter. Se ejecuta justo antes de mostrar la pantalla de seleccin. 59

La sentencia LOOP AT SCREEN nos permite modificar los atributos de los elementos en la pantalla en forma dinmica. La sentencia MODIFY SCREEN aplica los cambios realizados en los objetos de la pantalla.
AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. SCREEN-INTENSIFIED = '1'. MODIFY SCREEN. ENDLOOP.

Las sentencias AT SELECTION-SCREEN ON HELP-REQUEST y AT SELECTION-SCREEN ON VALUE-REQUEST nos permite programar su propio F1 y F4 respectivamente. Variantes -> Una variante nos permite guardar el contenido de los campos de una pantalla, tiene sentido esto cuando en una pantalla generalmente se completan los campos con la misma informacin. Las variantes son nicas y se almacenan en cada programa y no pueden ser compartidas con otros. Se pueden crear ms de una variante para cada pantalla, y variantes globales a todas las pantallas del programa. Las variantes no solo se usan para completar pantallas de programas interactivos se utiliza para procesamiento batch. La tabla TVARV contiene la estructura de un select option, nos permite armar esta tabla con el criterio de seleccin. As facilitar la bsqueda en la DB.

Capitulo 15 Logical Database.

Las DB lgicas son programas ya armados que acceden la DB y tener disponible la informacin. Tienen la ventaja de que los chequeos de autorizacin ya fueron realizados dentro de la DB lgica. El programa que tiene la logica de las db se llaman SAPDB<ldbname>. La sentencia GET tiene disponible los campos que tiene la DB lgica de acuerdo a la secuencia de las claves primarias de las tablas de la DB. Incorpora chequeos de seguridad cuando se realiza el acceso. Se declara la Db lgica que va a usar el programa de reporte en los atributos del programa, en la parte de declaracin se declaran los nodos de la DB lgica que se van a usar, cuando queremos leer datos un nodo usamos la sentencia GET <node_name>. Es posible declarar una db lgica dinmicamente en un programa con la funcin LDB_PROCESS. La sentencia GET <node_name> es igual a la sentencia SELECT * en un acceso normal, para seleccionar campos en particular se usa el addition FIELDS <f1> <fn> La sentencia GET es parecida a un SELECTENDSELECT pero en una DB lgica, es cclico y cuando anidas GETs se debe hacerlo en el orden de anidamiento de la DB lgica. La sentencia GET no tiene sentencia de cierre, tener enguanta en el caso de poner sentencias abajo que no pertenezcan a la iteracin. Nodos (Nombre de hasta 14 caract) 60

-> Table (Type T) -> Nombre de la tabla transparente -> DDIC (Type S) -> El nodo es una estructura del DIC -> Groups (Type C) -> El nodo esta definido en un type group -> Dinamic -> El nodo no tiene estructura fija Cortes de flujo de programa CHECK <log_exp> -> finaliza el bloque de procesamiento actual y sigue con el siguiente valor STOP -> finaliza el bloque de procesamiento actual y ejecuta la sentencia END-OFSELECTION si este existe. Si se ejecuta dentro del END-OF-SELECTION se termina el programa y se muestra cualquier listado bsico que se haya generado. EXIT -> finaliza el programa y se muestra cualquier listado bsico que se haya generado. REJECT

Capitulo 16 Data Retrieval Se puede ejecutar sentencias de SQL nativo, debe estar encerrado dentro de las sentencias
EXEC SQL... ENDEXEC. DATA: f1(25), f2(25), f3(25). f3 = '28.077.789'. TRY. EXEC SQL PERFORMING WRITE. SELECT NOMBRE, APELLIDO INTO :F1, :F2 FROM ZPERSONAL WHERE DNI = :f3 ENDEXEC. CATCH cx_sy_native_sql_error. ENDTRY. FORM WRITE. IF f1 > 0. WRITE: / f1, f2. Else. EXIT FROM SQL. Endif. ENDFORM.

"WRITE:

Las sentencias SQL nativo responden a la DB en la que se este ejecutando, no todas tienen la misma sintaxis, El nombre de los campos y tabla van en mayscula. Los datos de la a la funcin y de la funcin se pasan por variables de tipo host y van precedidas dentro de la sentencia con dos puntos (:). Cuando la sentencia de error levanta la excepcin cx_sy_native_sql_error. Se pueden ejecutar todas las sentencias SQL estndar mas las especificas que nos provea la DB. En el caso de que la seleccin de un conjunto de lneas como respuesta se utiliza el addition PERFORMING <form_name>. El sistema ejecuta una iteracin por cada lnea trada ejecutando la funcin. Para cortar la iteracin se usa la sentencia EXIT FROM SQL funcin. Funciones de agregado a sentencias OPEN SQL
select count(*) from zpersonal into count. select min( sueldo ) from zper_suel into count.

61

select max( sueldo ) from zper_suel into count. select avg( sueldo ) from zper_suel into count.

Distintas maneras de recuperar datos de una DB -> DataBase View -> Inner y Outer JOIN -> vinculas tablas transparentes -> For all entries -> vinculacin entre tablas transparentes y tablas internas -> sentencias SQL anidadas

DataBase View -> una vista es un join de 2 o mas tablas con una estructura particular que se crea en el diccionario y se puede usar como una tabla transparente, el JOIN se resuelve en tiempo de ejecucin y no ocupa espacio en la DB. Una vista realiza in INNER JOIN para armar la estructura. La sentencia select para una vista es igual a la de una tabla, es transparente para abap que tipo de tabla maneja. JOIN -> Nos permite relacionar 2 o mas tablas por el contenido de un campo.
SELECT nombre apellido INTO CORRESPONDING FIELDS OF TABLE it_per FROM zpersonal AS a INNER JOIN zsueldos AS b ON a~dni = b~dni.

FOR ALL ENTRIES IN WHERE -> Busca en una tabla por cada entrada de la otra tabla sin importar que sean tablas internas o transparentes. IMPORTANTE: chequear que la tabla por la que queremos buscar tenga registros y Eliminar los registros duplicados.
SELECT * FROM sflight INTO wa_sflight FOR ALL ENTRIES IN ftab WHERE CARRID = ftab-carrid AND CONNID = ftab-connid AND fldate = '20010228'. ENDSELECT.

Para saber cuantas entradas tiene una tabla, nos devuelve la cantidad de entradas. DESCRIBE TABLE <itab> LINES <contador> Para borrar registros duplicados DELETE ADJACENT DUPLICATES FROM <itab> Sentencias SELECT anidadas
DATA: wa_per TYPE zpersonal, wa_suel TYPE zsueldos. TRY. SELECT * FROM zpersonal INTO CORRESPONDING FIELDS OF wa_per. SELECT * FROM zsueldos INTO CORRESPONDING FIELDS OF wa_suel WHERE dni = wa_per-dni. WRITE : / wa_per-nombre, wa_per-apellido, wa_suel-sueldo. ENDSELECT. ENDSELECT. CATCH cx_sy_open_sql_db. ENDTRY.

62

Capitulo 17 Data formatting and control level processing La sentencia APPEND inserta registros al final de una tabla, la variable de sistema SYTABIX guarda la posicin en la tabla donde se realizo la insercin. No se puede realizar esta operacin en tablas del tipo HASHED. La sentencia COLLECT ( pag 268 L.1) se utilice para crear una nica tabla de registros, estos registros tienen la particularidad que estn compuestos por la clave y el resto de los campos deben ser numricos. Cuando se inserta un registro se busca en la tabla, si esta los campos no clave (numricos) se suma y si el registro no esta este se agrega a la tabla interna. SORT -> Ordena una tabla por los campos que necesitamos ascendentes o descendentes, con el addition BY <f1><f2> se especifican los campos que queremos (para tablas Standard o hashed). No es posible cambiar el ordenamiento de una tabla SORTED. AT... ENDAT -> FIRST -> Primer registro de la tabla -> NEW <field> -> -> END OF <field> -> -> LAST -> Estas sentencias no permiten realizar cortes de control para realizar listados bsicos. FIRST y LAST -> Se ejecuta una sola vez en el corte de control nos permite mostrar un titulo o pie de pagina. NEW y END OF -> con esta sentencia realizamos el corte de control pos los campo. La iteracin se realiza por una estructura que empieza el campo de mas izquierda hasta el campo que ponemos en la sentencia. Si los campos de la tabla que queremos iterar no tiene el orden que necesitamos es conveniente crear una estructura con los mismos campos y el orden que necesitamos. Por lo general se ordena la estructura por los campos que queremos iterar. Los campos que estn fuera de las sentencias de corte de control se mostraran como una iteracin normal. La sentencia SUM totaliza todos los campos numericos dentro del bloque.
TYPES: BEGIN OF s, cityfrom TYPE s_from_cit, cityto TYPE s_to_city, mandt TYPE s_mandt, carrid TYPE s_carr_id, ... END OF s. DATA: it_spfli TYPE TABLE OF s, wa_spfli TYPE s. SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE it_spfli.

63

SORT it_spfli BY cityfrom cityto. LOOP AT it_spfli INTO wa_spfli. AT FIRST. WRITE: / 'TITULO DEL LISTADO'. ULINE. ENDAT. AT NEW cityfrom. WRITE: / 'Aeropuerto de salida', wa_spfli-cityfrom. ENDAT. AT NEW cityto. WRITE: / 'Aeropuerto de llegada', wa_spfli-cityto. ENDAT. WRITE : / wa_spfli-carrid, wa_spfli-connid. AT END OF cityfrom. ULINE. ENDAT. AT END OF cityto. ULINE. ENDAT. ENDLOOP.

Extract dataset -> Consiste en una secuencia de registros de una estructura predefinida, sin embargo esta estructura no es igual para todos los registros. En un extract dataset se pueden guardar registros de distinto largo. Es necesario definir la estructura de cada dataset en el programa, esta puede ser definida dinmicamente. A diferencia de una tabla interna esta se almacena temporalmente en el sistema operativo en ves de la memoria. La nica manera de acceder a los datos es recorrer el dataset con la sentencia LOOP ENDLOOP. Es posible ordenar el dataset por un campo o por el header. Definicin
FIELD-GROUPS: header, order, product, date_first.

-> define cada grupo en el dataset.


FIELD-GROUPS: header.

-> define un grupo especial el cual compartir cada uno de los dataset
INSERT INSERT INSERT INSERT onr date position INTO header. customer INTO order. pnr name units INTO product. date onr position INTO date_first.

-> Define los campos que pertenecen al grupo.


ONR = 'MM00034'. DATE = '19920401'. POSITION = '000'. CUSTOMER = 'Moneymaker'. EXTRACT ORDER. ADD 1 TO POSITION. PNR = '23456'. NAME = 'Nail'. UNITS = 300. EXTRACT PRODUCT.

-> crea el dataset con los datos Nos permite recorrer el dataset segn el grupo y acceder a los campos 64

LOOP. AT order. WRITE: /, / date, onr, position, customer, 'ordered:'. ENDAT. AT product. WRITE: / date, onr, position, pnr, name, units. ENDAT. ENDLOOP.

Capitulo 18 Saving list and background processing Se puede en vez de salir por la pantalla un listado a salir por la impresora. Activar -> NEW-PAGE PRINT ON... Desactivar -> NEW-PAGE PRINT OFF
NEW-PAGE PRINT ON PARAMETERS print-parameters NO DIALOG.

La variable de sistema sy-spono contiene el ID del archive de spool. Funcin para obtener los parmetros de la impresora del sistema
DATA: print-parameters LIKE pri_params. CALL FUNCTION 'GET_PRINT_PARAMETERS' EXPORTING no_dialog = 'X' immediately ='' IMPORTING out_parameters = print-parameters EXCEPTIONS archive_info_not_found = 1 invalid_print_params = 2 invalid_archive_params = 3 OTHERS = 4.

SUBMIT -> llamada de un programa hacia otro, se puede llamar un programa que tiene una salida y con la clusula TO SAP-SPOOL y enva esta salida al spool. JOB -> conjunto de pasos, cada paso es un programa. Se puede crear un job dinmicamente en un programa las funciones son JOB_OPEN, JOB_SUBMIT y JOB_CLOSE

Capitulo 19 Interactive list Eventos de Basic list -> 65

START-OF-SELECTION GET END-OF-SELECTION TOP-OF-PAGE END-OF-PAGE Eventos de Detail list -> AT LINE-SELECTION AT USER-COMMAND TOP-OF-PAGE DURING AT LINE-SELECTION Las listas de detalle pueden tener un nivel de hasta 20 listas de detalle. El nivel de detalle se guarda en una variable sy-lsind. Las listas de detalle solo se crean cuando se realice un write en el programa. Toda actividad en la pantalla (doble-click, F2 sobre una linea, un boton en la pantalla, etc) ejecuta el evento AT LINE-SELECTION con el codigo de accion PICK contenido en la variable de sistema SY-UCOMM. SET TITLEBAR -> nos permite poner un titulo a nuestro listado. Se le puede pasar parmetros con el addition WITH Este titulo no puede tener ms de 70 caracteres con los parmetros. TOP-OF-PAGE DURING LINE-SELECTION -> no permite poner encabezados en los niveles de listados. GET CURSOR FIELDS -> nos trae el valor y el campo en donde se realizo la seleccin de una lnea. WINDOWS -> Esta sentencia funciona solamente en el evento AT LINE-SELECTION, nos permite crear una ventana con el listado bsico.
WINDOW STARTING AT 10 30 ENDING AT 60 30. WRITE...

Capitulo 20 SAP Grid Control Un control es un objeto que se muestra en el frontend desde el frontend. Estos objetos deben estar instalados en la maquina del usuario y el encargado de administrarlos es el SAP_GUI. Todo control se debe mostrar dentro de un contenedor y como un contenedor es un control denota que estos pueden anidarse. El control que contiene a un control se transforma en el padre el mismo. Para mostrar datos en un gris control se deben pasar los datos en forma de una tabla, adems de la tabla con los datos, se debe pasar una estructura igual a la tabla de datos que proporcionara el orden de los campos en la grilla. Generalmente esta tabla esta activa en el 66

diccionario lo que proporcionara datos tcnicos de los campo. En el caso de que se usara una estructura interna del programa se debe especificar estos datos a travs una estructura de catalogo. Se pueden mezclar tablas del diccionario con campos internos del programa. Luego de crear el objeto contenedor y asignarle un objeto grilla se deben mostrar los datos. El objeto grilla dispone del mtodo SET_TABLE_FOR_FIRST_DISPLAY que crear las grilla en la pantalla y la llena de datos. Para agregar campos a una grilla que no estn en la estructura se utiliza el catalogo, Aqu se especifican los campos que sern agregados con sus respectivas especificaciones tcnicas. Cada lnea del catalogo responde a una columna en la grilla. El catalogo es una tabla del tipo LVC_T_FCAT a la cual se le agregaran registros que sern mostrados en la grilla. Esta tabla ser pasada por parmetro al mtodo SET_TABLE_FOR_FIRST_DISPLAY (parmetro it_fieldcatalog)
clear wa_fieldcat. wa_fieldcat-fieldname = 'SUELDO'. wa_fieldcat-col_pos = 10. wa_fieldcat-coltext = 'SUELDO'. APPEND wa_fieldcat TO gt_fieldcat. CALL METHOD sap_grid->set_table_for_first_display EXPORTING i_structure_name = 'ZPERSONAL' CHANGING it_outtab = it_personal it_fieldcatalog = gt_fieldcat

1. Instanciar ALV, declaraciones DATA : GRID type ref to cl_gui_alv_grid, CONTAINER TYPE REF TO cl_gui_custom_container, IT_FLIGHT TYPE TABLE OF SFLIFGHT. 2. Crear pantalla y marcar area para el contenedor (en el programa CALL SCREEN 100 ) En el screen painter crear pantalla TYPE: NORMAL, poner el cursor en una lnea de la pantalla y luego EDIT ->CREATE ELEMENT->CUSTOM CONTROL. Cerrar el area con doble clic, colocar el nombre el contenedor 'MY_CONTAINER'. En la lista de elementos, colocar OK_CODE.

3. En PBO, instanciar la grilla y el contenedor: If CONTAINER is INITIAL create object container exporting CONTAINER_NAME =3D 'MY_CONTAINER' create object grid exporting I_PARENT =3D container endif 4. Cuando se llena la tabla interna con datos, se pas a la grilla : CALL METHOD grid->set_table_for_first_display exporting

67

I_STRUCTURE_NAME = 'SFLIGHT' changing IT_OUTTAB =3D it_sflight

TAW12 2/3 ABAP workbench Manual de referencia Capitulo 2 SAP Programing Model Tipos de programas -> Ejecutables (Type 1) -> Se ejecutan Directamente desde el editor de ABAP, tienen una pantalla de seleccin, normalmente crea y muestra un listado bsico -> Module Pool (Type M) -> Solo se puede ejecutar a travs de una transaccin. Se debe especificar una pantalla de inicio y luego se puede controlar la secuencia en el pgm. -> Programas de modularizacion -> son programas que nos permiten modularizar programas Organizacin de cdigo -> Para organizar el cdigo de un programa se utilizan los programas de tipo INCLUDE. La separacin de cdigo en bloques no afecta el funcionamiento del programa. En momento de compilar los programas internamente agrupa todo. Al crear el programa se crean varios INCLUDEs para separar en bloques el cdigo que va en la pantalla, la declaracin de variables y eventos.

Capitulo 3 Introduction to screen programming La lgica de una screen esta separada en 2 bloques de procesamiento PBO (Process Before Output) y PAI (Process After Input). 68

Una screen es un contenedor de elementos de pantalla y un flujo de lgica de programa. Una screen tiene 4 componentes -> Screen mask -> Screen attributes -> Element list -> Flujo de lgica de programa Es aconsejable crear la screen desde el object navigator ya que esta debe estar asociada a un programa. Primero -> Completar los atributos del programa Descripcin de la pantalla Tipo de pantalla Pantalla Siguiente Segundo -> Crear el Layout de la pantalla en el screen painter Incorporar los elementos de pantalla a la screen. Tercero -> En la lista de elementos estarn los elementos de ingresados en la pantalla, es necesario crear el elemento OK_CODE el cual nos permitir comunicar el programa con la pantalla. -> Debemos crear en el programa la variable OK_CODE del tipo SY-UCOMM. Cuarto -> Crear los mdulos en el PBO y PAI Las pantallas se nombran con nmeros, los nmeros mayores a 9000 estn reservadas para SAP, las pantallas 1000 a 1010 estn reservadas para las pantallas de mantenimiento del diccionario ABAP. La secuencia de pantallas se puede establecer extticamente en los atributos de la pantalla (atributo NEXT SCREEN ) o dinmicamente por cdigo, la sentencia SET SCREEN <num_scr> nos permite establecer la siguiente pantalla en el ciclo lgico del programa. Si el numero de pantalla ingresado es 0 el sistema continua procesando desde el punto de donde se llamo la pantalla cuando esta se haya terminado de procesar. Los campos de una pantalla pueden venir del diccionario (recomendado) o de datos creados internamente en el programa, los campos adoptaran la forma y tipo de los datos de origen. Al cambiar el tipo de dato de un data object se modificara automticamente el campo, se recomienda crear los campos a partir de elementos del diccionario para mantener coherencia de los datos, los cambio de tipos de datos el diccionario modificaran a todos los programas y pantallas que los utilizan. La variable de sistemas SY-DYNNR contiene el numero de screen en la que el programa se encuentra, se usa por si en proceso que estamos haciendo depende de la screen el la que se encuentra. Para conectar un programa con una pantalla se utilizan estructuras y data object, estos deben estar definidos como tipos de datos del diccionario y tener el mismo nombre en los 2 lados La sentencia TABLES en el programa abap se usa (no nicamente) para declarar una estructura para interfacear los datos entre el programa y la screen 69

Todos los atributos de elementos de una screen pueden ser modificados en momento de ejecucin, el la lgica de la screen se tiene acceso a la tabla interna SCREEN (line type screen) donde se encuentran todos los elementos y sus atributos. Estas modificaciones son temporales y corresponden a la corrida del programa, los atributos de los objetos de la pantalla vuelven a la normalidad cuando la ejecucin del programa termina. Los elementos de una pantalla se pueden agregar a un grupo para poder realizar modificaciones masivas. Solo se pueden armar 4 grupos de elementos de pantalla A los elementos se los pueden acceder por su nombre o por el grupo a cual pertenecen (ver pgina 3-21 estructura de la tabla). Se realiza un loop a la tabla de la siguiente manera LOOP AT SCREEN. IF SCREEN-NAME = CAMPO1. SCREEN-ACTIVE = 0. MODIFY SCREEN. ENDIF IF SCREEN-GROUP1 = AAA. SCREEN-ACTIVE = 0. MODIFY SCREEN. ENDIF ENDLOOP. Estas modificaciones dinmicas generalmente se hacen en el modulo PBO de la pantalla antes de mostrar los elementos. Esta sentencia es particular del lenguaje del screen painter, no es una sentencia de ABAP. Al termino de cada modificacin que se realice en una lnea de la tabla SCREEN se debe ejecutar la sentencia MODIFY SCREEN ya que sino se perdern los cambios en el objeto.

Sentencias de cambio de pantalla SET SCREEN <scr_num> -> nos permite modificar el flujo de pantallas modificando el atributo next screen de la misma, se ejecutara cuando se termine de procesar el PBO, la pantalla debe pertenecer al mismo grupo de programas LEAVE SCREEN -> Termina el procesamiento de la pantalla actual y pasa a la pantalla especificada por el atributo next screen de la pantalla. LEAVE TO SCREEN <scr_num> -> Termina el procesamiento de la pantalla actual y pasa la pantalla especificada. Invalida el atributo next screen. CALL SCREEN <scr_num> -> nos permite ingresar en nuestra secuencia de pantallas otra y hasta que no se ejecuta la misma no nos devuelve el control a la pantalla llamadora. 70

Para interrumpir el procesamiento de una pantalla y llamar a otra se usa la sentencia CALL SCREEN <xxx>. Para retornar a la sentencia inmediatamente debajo de la llamada se puede usar las sentencias SET SCREEN 0, LEAVE SCREEN o LEAVE TO SCREEN 0. Para terminar un programa de dialogo se usa la sentencia LEAVE PROGRAM. La sentencia LEAVE TO SCREEN 0 vuelve el programa al men principal (men SAP) Para llamar una pantalla en forma modal se usa los addition a ala sentencia CALL SCREEN
CALL SCREEN 100 STARTING AT x1 y1 ENDING AT x2 y2

La sentencia SET CURSOR FIELD nos permite pararnos en el campo que queremos con solo indicar el nombre del mismo.
SET CURSOR FIELD 'ZPER_SUEL-NOMBRE' OFFSET 3.

Capitulo 4 The program interface SET TITLEBAR <tit_name> WITH &1... &9 -> Setea el titulo para la screen en forma dinmica, el titulo es un objeto de la screen y debe ser creado (no es un string), hacer doble click sobre el nombre del titulo y crearlo. Se puede pasarle variables para incluir en el titulo del programa, hasta 9 parmetros, el titulo puede tener hasta 20 caracteres. Es posible pasar variables a un titulo, cuando se genera el titulo el espacio para las variables se reserva con la sentencia &x. SET PF-STATUS -> nos permite utilizar los botones de la pantalla, como la barra de titulo poner un nombre y hacer doble clik sobre esta, nos llevara a la pantalla donde estarn todas los botones a utilizar, al ponerle un cdigo al botn que queremos utilizar solo hace falta ponerle un nombre y listo, este nombre estar asociado al botn. El nombre del botn pulsado viajara en la variable OK_CODE hacia el PBO. Tcnicamente el status es una referencia a una barra de men, teclas asignacin y barra de aplicaciones. Cada uno de los componentes pueden estar en ms de un GUI STATUS. Cada pantalla puede tener ms de un status, pero no al mismo tiempo, este cambia dinmicamente. Una barra de men esta compuesta por mens individuales, un men puede tener hasta 15 entradas. Una entrada puede ser una funcin, un separador u otro men en cascada. La cascada de mens puede ser hasta nivel 3. Para crear una entrada en un men se coloca en la parte izquierda el function key y su descripcin en la parte derecha que aparecer en el men. Para agregar un submen se coloca en la parte derecha el nombre del men. Toda funcin en un men debe ser activada para que aparezca en el men como seleccionable (no grisada). Las teclas de asignacin y la barra de aplicacin son un subconjunto de las teclas de funcin. Para poder usar una funcin en la barra de aplicaciones primero debe tener asignado un fuction key. Toda function key al ser presionado un botn, men o tecla de funcion viaja al PAI en la variable OK_CODE.

71

Para crear un componente (barra de men, teclas asignacin y barra de aplicaciones.) se debe ir dentro del men painter GOTO-> INTERFACES OBJECTS ah tendremos todos los componentes.

Cada tecla de funcin esta diferenciada por un tipo. E Exit command (MODULE xxx AT EXIT-COMMAND) S System function T Call a transaction Normal application function P Local GUI functions H Internal Use Limpiar el data object OK_CODE en el PBO para evitar que tenga valores errneos. Conviene crear un modulo aparte para guardar todas las sentencias de inicializacin. CLEAR OK_CODE.

Capitulo 5 Screen elements for output 72

Elemento de texto -> Es un label que se puede colocar en la pantalla, -> Para escribir un texto de varias palabra es necesario en vez de separarlos por espacios se debe separar por un guin bajo (Separador de palabras _). -> Se tiene muchas propiedades de diseo, asignarle iconos o ponerlo en un grupo de elementos. -> Para traducir los textos en distintos idiomas hay que hacerlo desde los element list de la screen, no se hace desde el screen painter. -> No se puede modificar el texto en tiempo de ejecucin. STATUS ICONs -> Son elementos grficos de una pantalla, son campos de salida y se pueden modificar en tiempo de ejecucin, son iconos predefinidos, tienen un nombre y atributos. -> Al crear un status icon es necesario crear en el programa un data object con el mismo nombre para linkearlos con la estructura icons-text, este data object contendr el nombre del icono a mostrar. -> Para crear un icono se usa la funcin ICON CREATE a la cual se le pasa el nombre y nos devuelve el icono que -> Indicar el largo del icono mas el texto como atributo VIS LENGHT del status icon (DEF LENGHT = 132).
DATA: status_icon TYPE icons-text. CALL FUNCTION 'ICON_CREATE' EXPORTING name = 'ICON_CHECKED' text = 'Cobro el sueldo' IMPORTING RESULT = status_icon EXCEPTIONS icon_not_found =1 outputfield_too_short = 2 OTHERS = 3.

Group boxes -> Son frame que se ponen el la pantalla para agrupar visualmente los elementos. -> Al marcar el atributo de OUTPUT FIELD se puede linkear el group box con un data object, esto se puede usar para cambiar el titulo de este. -> Cuando todos los elementos dentro de un group box estn invisibles este se pone invisible tambin.

Input/Output Fields -> Un campo de input le permite al usuario ingresar datos -> Un campo de output muestra datos al usuario ->Los campos de entrada tienen consistencia de datos dependiendo del tipo de dato que sea. -> Si un campo esta relacionado con un dato del diccionario nos permite tener consistencia de datos a travs de foreign key o value set. 73

-> Los campos de output al volverlos invisibles se ocultan, los campos de input vuelven invisible el contenido, muestran todo el contenido con asteriscos. -> Para utilizar data object de un programa en una screen hay que definirlo con las sentencias DATA y TABLES. La opcin de GET_PARAMETERS nos permite traer de la memoria de sap los parametes id de los campos, estos parmetros son especficos de la sesin o del usuario. Se ejecuta en el PBO. La opcin de SET_PARAMETERS nos permite setear el parameter id de un campo en la memoria de SAP, estos parmetros son especficos de la sesin o del usuario. Se ejecuta en el PAI. FIELD -> Nos permite para un campo realizar una operacin nica, se usa para chequear que los datos ingresados sean correctos en el PAI, en el caso de que halla un error se procesa nuevamente la pantalla sin procesar el PBO, se bloquean los campos que no tienen error y el cursor se para el campo con error. El mensaje de error o warning se muestra al pie de la pantalla.
PROCESS AFTER INPUT. ... FIELD <f1> MODULE check_input. . module check_input input. message 'error' type 'E'. endmodule.

CHAIN... ENDCHAIN -> Nos permite encadenar sentencias FIELD para ms de un campo a la vez, notar que el contenido de los campos no estar disponible hasta que se ejecute la sentencia FIELD y se validen los campos.
PROCESS AFTER INPUT. ... CHAIN. FIELD: <f1>, ..., <fn>, MODULE check_input. ENDCHAIN.

module check_input input. ... message 'error' type 'E'. endmodule.

Al momento de provocarse el error de validacin en el o los campos se devuelve la pantalla al usuario sin haber ejecutado el PBO. El usuario corregir los datos mal ingresados y cuando se quiera ejecutar el PAI se reanudara la ejecucin desde la sentencia donde se produjo el error. Dependiendo del tipo de mensaje ser obligatorio corregir el error o confirmando el mismo el programa seguir. Las validaciones se realizan por una sentencias MODULE donde se encontrara la lgica ABAP para la validacin. El agregado de la sentencia ON INPUT hace que se ejecute el modulo cuando el contenido del campo cambia. 74

El addition a la sentencia MODULE de ON REQUEST permite ejecutar el modulo si el usuario ingresa un valor nuevo al campo. Se puede agregar al module el addition ON CHAIN-REQUEST que lo que permite es que se ejecute el modulo si y solo si se modifico alguno de los campos descriptos en la sentencia FIELD. Tambin se le puede agregar ON CHAIN-INPUT que nos permite ejecutar el modulo cuando alguno de los campos encerrados en la sentencia CHAIN cambie. Un module con el addition AT EXIT-COMMAND nos permite saltear todos los chequeos automticos de los campo. Las function code que activan este tipo de modulo son los de tipo de function key E. Solo se puede usar este addition una sola vez por programa. Si no se termina el programa dentro de este module se ejecutaran inmediatamente despus todos los chequeo automticos y el resto del PAI. Estructura de programa de dialogo PBO Modulo de status (primeras 3 lneas de la screen) Modulo de campos (modificacin de atributos de los campos en la pantalla) Modulo Clear_ok_code (limpiar el OK_CODE) PAI Modulo de exit (dependiente de la tecla que pulso si es del tipo de function code E) Chequeos de campos (chain .. endchain )-> Disparan mdulos de chequeos Modulo de accin (grabar, modificar, pasar a otra Pantalla, etc.)

Existen 2 funciones que nos permiten pedir confirmacin de una accion a un usuario por una accion.
DATA answer type c. CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' EXPORTING DEFAULTOPTION = 'Y' textline1 = 'Salir de la pantalla?' TEXTLINE2 ='' titel = '' START_COLUMN = 25 START_ROW =6 CANCEL_DISPLAY = 'X' IMPORTING answer = answer. CALL FUNCTION 'POPUP_TO_CONFIRM_LOSS_OF_DATA' EXPORTING textline1 = 'Desea perder los datos?' TEXTLINE2 ='' titel = '' START_COLUMN = 25 START_ROW =6 DEFAULTOPTION = 'N' IMPORTING answer = answer.

* * * * *

* * * *

75

Input Help -> Son mtodos de ayuda para campos de pantallas, generalmente estn definidos en el diccionario asociados a elementos de datos. Se pueden mostrar en 2 formatos, una lista desplegable o una pantalla se seleccin. Radio Button ->Los seleccin de radio buttons es excluyente entre ellos. Para crear un grupo de radio buttons marcar todos estos e ir a la barra de herramientas EDIT->GROUP->RADIO BUTTON GROUP->DEFINE. De esta manera quedaran definidos. al asignar un function code, de esta manera se dispara el evento PAI. Checkboxes -> Nos permiten seleccionar ms de una opcin. Declarando data elementos en la programa con el mismo nombre se pueden linkear estos con los de la pantalla. El tipo de datos de estos objetos es CHAR(1). Pushbuttons -> Es un campo de entrada, que nos permite realizar una accin de la misma manera que una opcin de men o un botn de aplicacin. Tienen asignado un fuction code que viajara al PAI por el OK_CODE al programa. Un botn puede contener text, iconos. Para cambiar el texto del botn es necesario cambiar el atributo OUTPUT FIELD en activo y declarar un data element con el mismo nombre. Igual que cualquier function key definida en el status un pushbutton puede ser de distinto tipo.

Capitulo 7 Screen elements: subscreen and tabtrips Una subscreen area es un area en una screen donde se coloca otra pantalla del tipo subscreen, la cual puede ser cambiada en tiempo de ejecucin. Una subscreen puede contener ms de una subscreen. Si la screen a colocar en el espacio de la subscreen es mas grande no se mostrara completa, el tamao es fijo. Se puede definir que subscreen aparecer dinmicamente en tiempo de ejecucin. Si una screen se muestra en una area mas pequea que esta se mostrara solo lo que entre empezando por arriba desde a izquierda, se puede setear el atributo SCROLLABLE que nos mostrara una barra para navegar por la subscreen. Las subscreen tienen propiedades distintas a una screen normal, no tienen TITLEBAR, PFSTATUS, no se pueden usar las sentencias LEAVE SCREEN, SET SCREEN, no pueden tener campos OK_CODE. No se puede llamar una subscreen dentro de un ciclo LOOP o dentro de CHAIN ENDCHAIN. No debe tener mdulos AT EXIT-COMMAND. Los nombres de los objetos deben ser nicos en todas las screen. Para ejecutar una subscreen se debe llamar en el PBO y el PAI de la screen contenedora, estas llamadas ejecutan el PBO y el PAI de la subscreen

PROCESS BEFORE OUTPUT. ... CALL SUBSCREEN subscreen_area1 INCLUDING sy-cprog '200'. PROCESS AFTER INPUT. ...

76

CALL SUBSCREEN subscreen_area1.

Para especificar dinmicamente el numero de pantalla a mostrar se crea un data object global del tipo SY-DYNNR el cual contendr el numero de screen a la que quiero ir. Data dynnr type
Data dynnr type sy-dynnr. dynnr = 200. PBO CALL SUBSCREEN subscreen_area1 INCLUDING sy-cprog dynnr.

A menos que la pantalla que queremos llamar este en el mismo module pool las variables globales no son accesibles. Para resolver esto se crea un function group que contenga esta pantalla, las variables a compartir y un 2 funciones para exportar e importar los datos. Importante: En la llamada al grupo de funciones se debe anteponer al nombre del function group SAPL
PROCESS BEFORE OUTPUT. ... MODULE llenar_pantalla200. CALL SUBSCREEN subscreen_area1 INCLUDING 'SAPLZ_FG_PANTALLA' '0200'. PROCESS AFTER INPUT. ... CALL SUBSCREEN subscreen_area1. module llenar_pantalla200 output. PERFORM inicializar_campos(saplz_fg_pantalla). o CALL FUNCTION 'LLENAR_CAMPOS' EXPORTING ex_nombre = 'roberto' ex_apellido = 'carlos' endmodule. Procedimiento dentro del function group. FORM inicializar_campos. nombre = 'patricio'. apellido = 'nicola'. ENDFORM.

Un TABSTRIP es un control que nos permite mostrarle al usuario en una sola pantalla diferentes solapas con distintos datos. Un tabstrip es un conjunto de page element. Un page element se compone de un titulo, una subscreen area y una subscreen. Tcnicamente el titulo se maneja como un pushbutton es necesario ingresarles un nombre y un function code. Declaration de TABSTRIPS 1. 2. Crear el objeto en el screen painter Crear control en el programa principal
CONTROLS: tabstrip1 TYPE TABSTRIP.

77

TABSTRIP corresponde a aun estructura de tipo CXTAB_TABSTRIP, esta estructura esta definida en el TYPE POOL CXTAB. Esta estructura tiene. Al navegar entre las tab pages se ejecuta el function key de cada una de ellas. El tipo de function key marcara el comportamiento de la subscreen. function type -> Se ejecuta el PAI de la pantalla y la navegacin por el control se realiza manualmente. Se ejecuta el PBO de los subscreen.
CASE ok_code. when 'TAB1' OR 'TAB2'. TABSTRIP1-ACTIVETAB = OK_CODE.

function type P -> No se dispara el PAI de la pantalla principal, los datos en las subscreen son estaticos. La navegacin es automatica. En cada tab page se debe asignar una subscreen que debe ser ingresado en el atributo REFERENCE OBJECT del tabstrip.

Capitulo 8 Table Controls Table control -> Es un area en una pantalla para mostrar datos en forma tabular. Puede tener hasta 255 columnas, los datos de las columanas pueden ser campos imputables o checkbox. La particularidad es que nos permite modificar datos en la tabla y actualizar la DB Creacion de un Table Control -> 1. Crear en el screen painter el table control 2. Ponerle nombre al control 3. Declarar en el programa un data object del tipo TABLE VIEW
CONTROLS: tbc TYPE TABLEVIEW USING SCREEN '0100'.

4. 5.

6.

Para asignar el table control con columnas es igual a colocar campos en una screen, los seleccionamos del diccionario y los arrastramos dentro del control, automticamente se convertirn en las columnas Para tener la opcin se seleccionar una lnea esta la opcin W/selection Colum, hay que darle un campo para que guarda el valor de que la lnea esta marcada, este campo debe estar en la estructura que usamos para la pantalla y debe ser char(1) Cdigo para manejar el table control. 78

TABLES: zpersonal. DATA: wa_per TYPE zpersonal, it_personal2 TYPE TABLE OF zpersonal. CONTROLS: tbc TYPE TABLEVIEW USING SCREEN '0100'. PBO MODULE llenar_it_table. LOOP AT it_personal INTO wa_per WITH CONTROL tbc. MODULE copiar_al_tc. ENDLOOP.

PAI LOOP AT it_personal. CHAIN. FIELD: spfli-connid, spfli-countryfr, ... spfli-distid, spfli-fltype, spfli-period. MODULE modificar_it_personal ON CHAIN-REQUEST . ENDCHAIN. ENDLOOP. MODULE llenar_it_table OUTPUT. SELECT * FROM zpersonal INTO CORRESPONDING FIELDS OF TABLE it_personal. DESCRIBE TABLE it_personal LINES tbc-lines. ENDMODULE. MODULE copiar_al_tc OUTPUT. MOVE-CORRESPONDING wa_per TO zpersonal. ENDMODULE. MODULE modificar_it_personal INPUT. MOVE-CORRESPONDING spfli TO wa_per. MODIFY it_personal FROM wa_per INDEX tbc-current_line. ENDMODULE.

El manejo del scrool del table control los maneja el sistema. La estructura table control atributos que pueden ser modificados en tiempo de ejecucin. Esta estructura tiene atributos para el table control, uno de estos es una tabla con todas las 79

columnas. Los atributos de las columnas son iguales a la tabla SCREEN mas atributos adicionales.
MODULE modificar_tbc OUTPUT. DATA wa LIKE LINE OF tbc-cols. tbc-fixed_cols = 3. ... LOOP AT tbc-cols INTO wa. wa-screen-intensified = 1. ... MODIFY tbc-cols FROM wa. ENDLOOP. ENDMODULE. " modificar_tbc OUTPUT

Adems de poder cambiar los atributos de la tabla a travs del table control, los campos se encuentran en la tabla SCREEN como elementos de pantalla individuales. El posible programar un ordenamiento en un table control.
data wa2 like line of tbc-cols. READ TABLE tbc-cols WITH KEY selected = 'X' INTO wa2. IF sy-subrc = 0. SORT it_personal BY (wa2-screen-name+6). ENDIF.

Cuando se ejecute el PBO despus de de presionar el botn ordenar habiendo seleccionado una columna se recargara el table control. El offset puedo en el ordenamiento es ya que el atributo name de la tabla screen contiene a que tabla pertenece y esta no concuerda con el nombre de la tabla interna. Capitulo 9 Context Men Un men de contexto es un status gui especial, para crearlo hay que presionar sobre crear STATUS, ponerle nombre y el tipo es de CONTEXT MENU. Se puede asignar a campos de entrada, group box, table control o screen. Todo campo que este dentro de alguno de estos objetos (menos el campo de entrada) que no tengan mens de contexto asignados heredan de estos. Nos llevara a una pantalla donde deberemos armar el rbol del men de contexto, se puede poner submens. A cada una de las opciones de le deben poner un function code a cada funcin final para despus capturar en el programa. Para asignar un men de contexto a una screen en los atributos se le pone el nombre del men de contexto en el campo ON_CTMENU_

80

Para capturar el click derecho del mouse es necesario crear un FORM. Para que aparezca en men de contexto se usa el mtodo
FORM on_ctmenu_cm_pantalla USING p_m TYPE REF TO cl_ctmenu. CALL METHOD cl_ctmenu=>load_gui_status EXPORTING program = sy-cprog status = 'MC2' * DISABLE = menu = p_m EXCEPTIONS read_error = 1 OTHERS = 2. ENDFORM. "on_ctmenu_cm_pantalla

Herencia de context men 1. El context men de la pantalla hereda a todos los objetos de esta su context men. Se setea desde los atributos de la pantalla. 2. Todo los objetos dentro de un group box heredan de este el context men, si no tiene hereda los de la pantalla. 3. Se le puede asignar explcitamente context men a los objetos Table control Group box Input/output field, etc. Se puede modificar en tiempo de ejecucin el context men, para esto el objeto que devuelve el mtodo load_gui_status tiene los mtodos. (pagina 9-9). El valor de la opcin seleccionada en el men de contexto viaja al programa por el OK_CODE como si fuera cualquier botn en la pantalla.

Capitulo 10 List in screen processing Desde una pantalla se puede crear un listado bsico que puede ser enviado directamente a la impresora con la sentencia NEW-PAGE PRINT ON PARAMETERS <print_param>. Los parmetros corresponden a los parmetros de impresin del usuario.

81

Para mostrar un listado bsico por pantalla se usa la sentencia LEAVE TO LISTPROCESSING, esta sentencia se ejecuta cuando termina de procesarse la pantalla que lo usa, es indistinto si es el PBO o PAI. La sentencia SET PF-STATUS SPACE. Invalida el pf-status de la pantalla y muestra el status Standard de SAP. El listado se crea en una pantalla creada por el sistema, el nmero de pantalla es 120. Cuando de termina de procesar el listado bsico se ejecuta el PBO de la pantalla que llama al listado bsico, para evitar que se ejecute se utilizan el addition AND RETURN TO SCREEN <scr_nro> LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN <scr_nro>

Para que el listado vaya a una salida de spool se usa la sentencia La sentencia SUPPRESS DIALOG. nos permite al generar un listado a travs de una screen que no queremos mostrar. Para mostrar un listado en una pantalla en forma modal se crea una screen la cual es llamada en forma
call screen 200 starting at 20 10 ending at 50 15

y en el PBO de la pantalla 200 se crea el listado anteponiendo las sentencias LEAVE TO LIST-PROCESSING para que muestre el listado SUPPRESS DIALOG para no mostrar la pantalla.

y la sentencia

Capitulo 13 Programming database updates Las actualizaciones a la base de datos se realizan a travs de sentencias OPEN SQL, estas sentencias no dependen del tipo de base de datos que estamos utilizando, existe una interfaz en SAP que traduce las sentencias dependiendo de la Db que utilicemos. El conjunto de comandos de OPEN SQL contiene solamente operaciones de manipulacin de datos. Las operaciones de definicin de datos no estn contempladas. Toda ejecucin de sentencias OPEN SQL retornan su resultado en 2 variable de sistema SYSUBRC (resultado de la Query ) y SY-DBCNT (cantidad de registros seleccionados, modificados o insertados) Las sentencias OPEN SQL no realizan chequeos de autorizacin sobre las tablas.

82

Para acceder a datos de otro mandante de una tabla dependiente de mandante se utiliza el addition CLIENT SPECIFIED, esto nos permite especificar en que mandante queremos trabajar. Si no se especifica el addition se utiliza el mandante en el que el usuario esta logoneado.
SELECT nombre apellido INTO CORRESPONDING FIELDS OF TABLE it_per FROM zpersonal AS a CLIENT SPECIFIED WHERE a~dni = '28.077.789' AND a~mandt = '200'.

Para insertar un registro en una tabla se utiliza la sentencia, los valores se deben ingresar en una work area y pararlo a la sentencia INSERT INTO <dbtable> VALUES <wa>

Para insertar varios registros en una tabla se utiliza la sentencia, los registros se agrupan en una tabla interna y la actualizacin se realiza por nombres de campo. INSERT INTO <dbtable> FROM TABLE <it>

Se pueden realizar actualizaciones en vistas de la DB, la operacin se llevara a cabo satisfactoriamente solo si en atributo read and change de la vista esta activado en el diccionario. En el caso de que un registro no pueda ser en la tabla se realiza un rollback de la operacin y da error de runtime. Para evitar el error y que los registros que puedan ser insertados sean insertados en la tabla se utiliza el adition ACCEPTING DUPLICATES KEY igual el sysubrc se setea en 4. Para actualizar una tabla en la db se utiliza la sentencia, la actualizacin se realiza usando los nombres de los campos claves, la igualdad de las claves se realizan automticamente y se modifican los campos que en la wa tienen datos. Para una modificacin masiva pasa lo mismo UPDATE <dbtable> FROM <wa> UPDATE <dbtable> FROM TABLE <it>

Se pueden realizar actualizaciones en campos puntuales a campos con sentencias WHERE. UPDATE <dbtable> SET <field> = <valor> . WHERE <condition>

Se pueden realizar actualizaciones en vistas de la DB, la operacion se llevara a cabo satisfactoriamente solo si en atributo read and change de la vista esta activado en el diccionario. En la sentencia WHERE se pueden realizar clculos de campos 83

Las modificaciones a una tabla de la DB se realizan a travs de la sentencia MODIFY. Consta de 2 partes: 1. Si el registro existe realiza un UPDATE segn los campos que se especifiquen 2. Si el registro no existe realiza un INSERT en la tabla con la clave proporcionada MODIFY <db> FROM <wa> MODIFY <db> FROM TABLE <it>

Se pueden realizar modificaciones en vistas de la DB, la operacion se llevara a cabo satisfactoriamente solo si en atributo read and change de la vista esta activado en el diccionario.

Para borrar registros de una DB se utiliza la sentencia DELETE, es obligatorio poner una condicin. DELETE FROM <db> WHERE <campos_clave> DELETE FROM <db> WHERE <condicion> DELETE FROM <db> FROM TABLE <it> Para borrar una tabla entera se usan condiciones especificas. DELETE FROM <db> CLIENT ESPECIFIC WHERE <campo> like %

Toda sentencia OPEN SQL puede terminar en forma anmala, la variable de sistema SYSUBRC contiene el resultado de la ejecucin, para realizar un ROLLBACK cuando sy-subrc EQ 4 se usa la sentencia MESSAGE A Esta sentencia nos permite realizar el rollback y mostrar un mensaje al mismo tiempo y cancelar el programa

La sentencia ROLLBACK WORK nos permite volver atrs cambios en la DB sin cancelar el programa Es posible ejecutar sentencias SQL nativo en ABAP, debe ser encerrado dentro de las sentencias EXEC ... ENDEXEC, dentro de estas sentencias se podr ejecutar comandos SQL particulares de la DB, tener en cuenta que distintas DB tienen distinta sintaxis en sus sentencias SQL.

84

Capitulo 15 LUWs and Client/Server architecture La LUW de sap es una unidad lgica de procesamiento con la DB, consta en una serie de cambios en la DB La LUW mantiene el concepto de transaccin en bases de datos, dentro de esta transaccin se realizaran modificaciones en la DB y si todas las modificaciones se realizaron exitosamente se procedern a grabar en la DB, de lo contrario volvern para atrs las modificaciones realizadas. La sentencia ROLLBACK WORK cancela el ciclo de modificaciones en la DB sin que alguna de estas cancelara. La sentencia COMMIT WORK guarda los cambios en la DB que se realizaron hasta el momento. Todo rollback se realizara hasta el ltimo punto de commit, sea implcito o explicito. COMMIT implcitos -> Cuando de mientras una pantalla -> Cuando el sistema muestra un mensaje -> Cuando se llama a una funcin RFC -> Cuando se llama a una transaccin o submite un programa

Capitulo 16 SAP Locking concepts Los lockeos de registros se utilizan para trabajar con datos sin que se sufran cambios en los mismos por otros procesos. Cada commit de la DB libera todos los bloqueos realizados en el entorno de la LUW El addition FOR UPDATE en la sentencia SELECT SINGLE nos permite bloquear el registro para que podamos trabajar con los datos sin que estos sean modificados por otros procesos. Las operaciones de lockeo entre entradas de distintas tablas se realzan desde el diccionario creando OBJETOS DE LOCKEO, estos objetos al ser llamados desde un programa lockean las estradas de las tablas para poder realizar las actualizaciones. Cuando se crea el objeto se debe ingresar la tabla a la que pertenecen los campos a lockear, si son varias tablas se debe ingresar los campos que relacionan estas tablas. 85

Al crear los objetos de lockeo se crean las funciones correspondientes para lockearlo y deslockearlo
CALL FUNCTION 'ENQUEUE_EZ_PERSONAL' CALL FUNCTION 'DEQUEUE_EZ_PERSONAL'

La interfaz de estas funciones contendr los valores de los campos de las tablas que lockearemos o liberaremos
CALL FUNCTION 'ENQUEUE_EZ_PERSONAL' EXPORTING * MODE_ZPERSONAL = 'E' mandt = sy-mandt dni = pa_dni * X_DNI ='' * _SCOPE = '2' * _WAIT ='' * _COLLECT ='' EXCEPTIONS foreign_lock =1 system_failure =2 OTHERS =3

Al ocurrir un error cuando queremos lockear un objeto nos mostrara un mensaje de error en la pantalla. Cuando se termina un programa se liberan todos los lockeos implcitamente. Para liberar todos los objetos lockeados de una vez esta la funcin CALL FUNCTION
'DEQUEUE_ALL'.

El parmetro de cliente es opcional 1. Si no esta -> el lockeo toma de la variable de sistema SY-MANDT y ejecuta el lockeo para este mandante 2. Si esta -> el lockeo se produce para ese mandante 3. Si el parmetro es SPACE se aplica a todos los mandantes. Ver parmetros adicionales en el manual (pagina 16-15) _SCOPE -> Este parmetro indica hasta que nivel se mantiene el Existen 3 tipos de lockeos 1. E -> Lockeo en forma exclusiva No pueden realizar cambios Son acumulativos los lockeos, acepta lockeos simultneos del tipo E y S 2. X -> Lockeo en forma exclusiva No pueden realizar cambios No son acumulativos los lockeos, rechaza otros tipos de lockeos simultneos 3. S -> Lockeo compartido. Acepta lockeos simultneos del tipo E y S. lockeo.

Pasos de lockeo en un programa 86

1. 2. 3. 4. Capitulo 17 Organizing database updates

Lockear el objeto Si el lockeo es exitoso, leer la informacin Realizar el cambio de la data Liberar el objeto de lockeo

Actualizacin DIRECTA -> Las actualizaciones se retrazaran al final del programa las instrucciones se ejecutaran al final del programa PERFORM <routine_name> ON COMMIT -> sentencia que me permite encolar rutinas de actualizacin en una DB en una tabla del sistema, todas las rutinas se irn encolando y se ejecutaran todas cuando se encuentre la sentencia COMMIT WORK. No tienen parametros Los WP de update interactan entre los WP de dialogo y la DB, el WPD le enva al requerimiento al WPU, cuando este lo recibe se libera el WPD para realizar otras operaciones Al pasar el control de las actualizaciones al WPU el WPD termina. Para revisar como va la actualizacin se puede ver a travs de la transaccin SM13 En caso de un error el WPU marca en la tabla la sentencia de actualizacin que dio error y enva un mail al usuario que ejecuto la tarea utilizando el parmetro RDISP/VBMAIL o RDISP/VB_MAIL_USER_LIST. En caso de que la actualizacin se halla realizado con xito el WPU borra la tabla log y se libera. Las funciones que queremos que tengan esta funcionalidad de actualizacin deben ser creadas como modulo de actualizacin (MODULE UPDATE), estas funciones solo tienen parmetros de importing. Al llamar a la funcin se debe agregar el addition IN UPDATE TASK, esto hace que guarde en la tabla de log el requerimiento para luego ser ejecutados. La sentencia COMMIT WORK cierra la tabla de log y la pasa al WPU que es el que realizara la actualizacin. Si estamos utilizando objetos de lockeo en una funcin de tipo UPDATE (parmetro _SCOPE = 2 ) no es necesario liberar los objetos al terminar la actualizacin el sistema los libera solos. En caso de error tambin el sistema los libera. Actualizaciones Asincrnicas -> Las sentencias de actualizacin se irn almacenando en la tabla de log y cuando se encuentra con la sentencia COMMIT WORK se dispara la actualizacin en la DB, el programa de dialogo que disparo el commit sigue su curso. Actualizaciones Sincrnicas -> Las sentencias de actualizacin se irn almacenando en la tabla de log y cuando se encuentra con la sentencia COMMIT WORK AND WAIT se dispara la actualizacin en la DB, el programa de dialogo espera a ala finalizacin de esta. El valor de finalizacin se guarda en la variable de sistema sy-subrc

87

Local Updates -> Las actualizaciones en forma local son ejecutadas por el mismo WP de dialogo que esta manejando la pantalla, no se delega la ejecucin a un WP de UPDATE. Los requerimientos de actualizacin siguen siendo escritos en la tabla log y ejecutados con la sentencia COMMIT WORK. El programa espera a que se resuelvan todas las actualizaciones y sigue con el programa. La sentencia que activa las actualizaciones locales es SET UPDATE TASK LOCAL Esta sentencia sirve solo hasta el siguiente COMMIT WORK La sentencia ROLLBACK WORK destruye la tabla de log de actualizaciones y vuelve para atrs todos los cambios realizados en la DB. Dentro de las funciones no se puede usar el ROLLBACK WORK en caso de que de error una actualizacin de debe usar el mensaje de error del tipo A MESSAGE A....

Tipos de function module -> V1 -> Son ejecutadas en LUW independientes -> Los mdulos pueden ser re-arrancables o no re-arrancables en caso de un error en la ejecucin. -> Solo cuando un modulo V1 se ejecuta satisfactoriamente se ejecuta un modulo V2. -> Se guardan los requerimientos sincrnicos o asincrnicos en la tabla VBLOG. En local updates se guardan en memoria principal -> V2 -> Siempre son re-arrancables. -> Collective run -> Se ejecuta solo tras la ejecucin de un programa colector RSM13005 -> Se guardan los requerimientos VBLOG siempre. Capitulo 18 Complex LUW Processing Llamadas a programas -> existen 2 maneras de llamar a un programa dentro de un programa ABAP. 1. La llamada al programa interrumpe al programa llamador, se ejecuta el programa llamado y retorna al flujo de programa del programa llamador. CALL FUNCTION CALL TRANSACTION SUBMIT PROGRAM <pgm> AND RETURN 88

2. La llamada al programa termina al programa llamador y ejecuta al programa llamado. SUBMIT PROGRAM <pgm> LEAVE TO TRANSACTION

Ejecucin de funciones en paralelo -> Se puede ejecutar funciones en forma paralela con el agregado de la sentencia STARTING NEW TASK <task_name>. Para obtener los datos que dejo la funcin se utiliza la sentencia RECEIVE RESULTS FROM FUNCTION <funct_name>. La sentencia SUBMIT... WITH ejecuta un programa pasndole valores en la sentencia WITH para cada parmetro, si este tiene screens que mostrar se agrega la sentencia VIA SELECTION-SCREEN, si no esta sentencia la pantalla no se ejecuta.
SUBMIT z_selection_screen AND RETURN VIA SELECTION-SCREEN WITH pa_dni EQ '00.000.000' WITH pa_lname EQ 'alberto' WITH pa_name EQ 'david' WITH pa_sname EQ 'lopez' WITH pa_sueld EQ '1000' WITH pa_tipo EQ 'E'. SUBMIT z_selection_screen AND RETURN VIA SELECTION-SCREEN USING SELECTION-SET 'VARIANTE1'.

Tipo de llamada a programas (ver grafico 18-20 ) -> call function -> se ejecuta dentro deLUW que el programa que los llama. Todas las actializaciones se realizaran al encontrar un commit. -> submit and return Call transaction Submit Leave to transaction -> se ejecutan en LUW distintas al del programa que las llama. Si se usa submit and return o call transaction la LUW del programa llamador se reanuda cuando la LUW del la transaccin este completa. De manera que se pueden crear procesos de actualizacin anidadas independientes. Al correr independientemente pueden pasar 2 cosas: 1. Cada una debe tener su propio COMMIT 2. Las 2 estarn modificando la base de datos al mismo tiempo. -> submit Leave to transaction -> Terminan la LUW del programa llamador, si este no realizo el commit la esta completa y no se ejecutaran las actualizaciones.

tabla log no

89

Capitulo 19 Number Assignment La asignacin de nmeros puede ser interna o externa. La asignacin de nmeros interna es cuando usuario ingresa el nmero y se chequea para saber si cabe dentro del intervalo asignado para ese tipo de dato. La asignacin interna de nmero pasa cuando el sistema asigna automticamente el siguiente numero disponible. La transaccin SNRO nos permite mantener los rangos de numero. Los rangos de nmeros pueden ser numricos o alfanumricos. Mltiples rangos de nmeros pueden ser asignados a un objeto. Para pedir nmeros al sistema se usa la sentencia
CALL FUNCTION 'NUMBER_GET_NEXT' EXPORTING nr_range_nr = object = * QUANTITY = '1' * SUBOBJECT ='' * TOYEAR = '0000' * IGNORE_BUFFER ='' * IMPORTING * NUMBER = * QUANTITY = * RETURNCODE = EXCEPTIONS INTERVAL_NOT_FOUND =1 NUMBER_RANGE_NOT_INTERN =2 OBJECT_NOT_FOUND =3 QUANTITY_IS_0 =4 QUANTITY_IS_NOT_1 =5 INTERVAL_OVERFLOW =6 BUFFER_OVERFLOW =7 OTHERS =8

En el caso de de llenar el parmetro QUANTITY pidiendo mas de un numero el parmetro NUMBER nos devolver el ultimo numero asignado y en el parmetro QUANTITY la cantidad de nmeros asignados. Para calcular el resto de los nmeros va de (NUMBER QUANTITY + 1) a NUMBER. La tabla NRIV guarda todos los rangos de nmeros para los objetos. La cuando la funcion NUMBER_GET_NEXT pide un numero a la tabla loquea el registro esperando a que termine la LUW del programa que pide el numero, recin ah responde a otras peticiones de nmeros (utiliza para la bloquear el registro SELECT SINGLE... FOR UPDATE) La funcin NUMBER_CHECK chequea si el numero ingresado esta dentro del rango de nmeros especificado para ese objeto. NO reserva el nmero. La variable returncode devuelve X si el numero esta fuera del rango, si esta dentro del rango. 90

CALL FUNCTION 'NUMBER_CHECK' EXPORTING nr_range_nr = number = object = subobject ='' toyear = '0000' numeric_check ='' IMPORTING returncode = exceptions interval_not_found =1 number_range_not_extern =2 object_not_found =3 OTHERS = 4.

Para obtener informacin sobre el numero que se esta ingresando se utiliza la funcin NUMBER_GET_INFO. La estructura que devuelve tiene la estructura de NRIV que contiene todos atributos del nmero para ese objeto.
CALL FUNCTION 'NUMBER_GET_INFO' EXPORTING nr_range_nr = object = subobject ='' toyear = '0000' IMPORTING interval = exceptions interval_not_found =1 object_not_found =2 OTHERS =3

La tabla NRIV que contiene en cada lnea un rango de nmeros, esta tabla generalmente esta en el buffer del application server para optimizar el acceso.

Capitulo 20 Change Document Para logear cambios en una tabla de aplicacin usando change document es necesario actualizar la tabla de aplicacin y actualizar la tabla de change document. Para logear los datos se debe pasar al modulo de actualizacin los datos del registro antes del cambio, el registro cambiado y datos administrativos (usuario, fecha, hora, nombre de la transaccin, etc.) Para logear cambios usando change document es necesario crear el objeto change document en el sistema, tambin se debe incluir las correspondientes tablas. 91

El sistema crea los correspondientes mdulos de funciones como tambin 2 includes con definicin de datos. Estos 2 includes contienen programas que permiten grabar los datos en la tabla de change document. Los change document se guardan en la tabla CDCLS. Para crear un change document se utiliza la transaccin SCDO. Por cada definicin el sistema genera los correspondientes mdulos de funciones. Se crean estructuras en el diccionario para la operacin de logeo. Uso de chage document
******* modulos de funciones y definicin de datos ******* INCLUDE fz_zdnicdt. INCLUDE fz_zdnicdc. DATA wa TYPE zpersonal. START-OF-SELECTION. ******* seleccion de datos de la DB ********************** SELECT SINGLE * FROM zpersonal INTO CORRESPONDING FIELDS OF xzpersonal WHERE dni = '00.000.000'. ******* copia de registro nuevo a registro viejo ********* MOVE-CORRESPONDING xzpersonal TO yzpersonal. ******* modificamos la wa ******************************** xzpersonal-snombre = 'carlos'. ******* comletamos los parametros de la funcion ********** MOVE : 'ZDNI' TO objectid, sy-tcode TO tcode, sy-uzeit TO utime, sy-datum TO udate, sy-uname TO username. upd_icdtxt_z_zdni = 'U'. upd_zpersonal = 'U'. ******* modificamos la tabla de la db ******************** MODIFY zpersonal FROM xzpersonal. ******* agregamos el cambio a la change document table *** PERFORM cd_call_z_zdni. COMMIT WORK.

Para ver el chage document se utiliza el programa RSSCD100 el cual nos muestra para el objeto especfico todas las modificaciones que sufri.

92

TAW12 3/3 ABAP Workbench Concept Transaccin SPRO SE43 SHD0 LSMW CMOD SMOD SNRO FIBF SE18 SE19 SPDD PFCG SE95 SPAU SNOTES Descripcin Transaccin de customizing Mantenimiento de Mens Creacin de variantes de transaccin Herramienta de carga inicial Modificacin de elementos del usuario Modificacin de elementos de SAP Manejo de rangos de nmeros Administracin de BTE Visor de definiciones de BADIs Implementacin de BADIs Modificaciones al Diccionario Creacin y mantenimiento de roles Modification browser Modificaciones al repositorio Notes assistant

93

Toda modificacin hecha al standard de SAP a travs de estas herramientas no modifican el standard, las modificaciones se guardan en lo que se llama es CUSTOMER NAME SPACE, este es un espacio reservado para el usuario para crear sus modificaciones. Las actualizaciones del sistema hechas por SAP no afectan a las modificaciones que nosotros hallamos hecho siempre y cuando se realicen con las herramientas apropiadas.

Capitulo 3 Changing SAP Standard. Herramientas -> Business Engineer -> Customizing y personalization utilizan esta herramienta. -> ABAP Workbench -> customer development, enhancement and modification utilizan esta Tipos de modificaciones Personalization -> Transaction Variant Modification -> Modification Assistant User exits Enhancement -> Abap Dictionary -> Tables Data element -> Customer exit -> Function module -> Menu Exit -> Screen Exit -> Business transaction events (BTE solo para FI) -> Business Add-ins (BADIs) Customizing -> Modificaciones de procesos y funciones en el sistema acorde a guas de implementacin (IMG). Personalization -> Atributos globales -> SET/GET parameters 94

herramienta.

-> Variantes de transaccin. -> Parmetros de table controls. -> Mens personalizados -> Mens basados en roles -> Favoritos -> Accesos directos en el men. Modification -> Cambios en el repositorio de SAP hechos por en cliente. En el caso de que SAP modifique un objeto en el repositorio estas modificaciones deben ser realizadas por el cliente para poder reflejar los cambios. Este procedimiento se realiza con la herramienta MODIFICATION ASSISTANT.

Enhancement -> El concepto de enhancement implica llamadas en programas standard SAP a funciones que no fueron implementadas y que se dejan al usuario para que implemente. Existen distintos tipos de enhancement: In ABAP concept -> function module exit On GUI -> Menu exit On screen (subscreen) -> screen exits On screen (fields) -> fields exits In ABAP dictionary -> Table enhancement

Table enhancement -> SAP provee 2 tipos de ampliacin en tablas, ninguna de estas ampliaciones modifican el standard. APPEND -> Solo puede estar en una sola tabla (Estructuras) -> Una tabla puede tener mas de una estructura append INCLUDE (customizing includes) -> Se pueden usar en mas de una tabla -> Los campos de la tabla son referencias a una estructura

externa

Program Enhancement -> Consta de 3 tcnicas para realizar ampliaciones a programas standard Customer Exits -> Es un modulo de funciones especial que son llamados desde programas SAP. Business Transaction events Businnes add-ins

Menu enhancement ->Nos permite agregar funciones al men de un programa. Existen 2 tcnicas customer exits y business add-ins. Screen enhancement -> Son subscreen en las pantallas de SAP que nos permiten agregar campos, controles, etc. Desde la versin SAP WAS 6.2 solo se pueden usar business add-ins. 95

Modification -> Toda modificacin a objetos de SAP se llaman modificaciones, estas modificaciones pueden llevar a inconvenientes al momento de una actualizacin del sistema ya que deber decidir que objeto actualizar para no perder los cambios realizados. Para realizar esta tarea de modificacin esta la herramienta MODIFICATION ASSISTANT. Customer Development -> Creacin en el repositorio de objetos independientes. Caen en el customer name space.

Objetos en el sistema -> Originales -> Un objeto es original solo en el sistema en el que se creo. Para los objetos SAP el sistema original es SAP, para los objetos del cliente es el sistema de desarrollo. -> Copia -> Los objetos son transportados de sistema en sistema, el objeto es copiado de un sistema en otro. Ordenes de transporte Correction Repair

Sistema Original

Sistema 2

Sistema 3

Cambios de un objeto original SAP se llama CORRECTION Cambios a un objeto copia se llama REPAIR (custom object) Reparacin de un objeto SAP se llama MODIFICATION Despus de un upgrade del SAP se deben comparar los objetos nuevos con los que fueron modificados para no perder los cambios y modificar los nuevos. Desde la versin 4.5 se utiliza la herramienta MODIFICATION ASSISTANT.

Capitulo 4 Personalization 96

Creacin de Roles -> Los roles nos permiten estandarizar la configuracin de usuario basndonos en el tipo de usuario y su actividad. La creacin y mantenimiento de roles se realiza desde la transaccin PFCG. En la transaccin SE43 se puede crear un men de transacciones para un usuario, este men es una transaccin la cual se ejecuta y nos muestra en la parte derecha un rbol de transacciones con todas las transacciones creadas.

Una variante de transaccin en un conjunto de variantes de pantalla, para crearlos se utiliza la transaccin SHD0, se debe poner el nombre de la transaccin a la cual queremos asociar esta variante, para crear la variante se ejecuta la transaccin y en cada pantalla se modifican los atributos de los objetos correspondientes a esta. Cuando se termina de ejecutar la transaccin ya la variante esta creada, a cada variante de pantalla se le debe poner un nombre, una descripcin y el cliente si es una variante de transaccin client-specific. Para poder ejecutar la variante es necesario crear una transaccin ya que la variante no es una transaccin. El tipo de transaccin a crear en la VARIANT TRANSACTION. Cuando se crea la transaccin es necesaria crearla CROSS-CLIENT para que pueda ser ejecutable por todo el entorno. La opcin GUIXT nos permite disear pantallas de manera ms flexible, esta herramienta usa un lenguaje script.

Capitulo 5 Table enhancement Append Structure -> Estructura que se puede agregar a una tabla para agregar campos a esta, esta estructura se puede agregar solo a una tabla. Cuando una tabla con estructuras append es copiada la tabla destino tiene estos campos como propios y no como una estructura agregada tener son un append structure 97

Notas Importantes -> Las tablas POOL y CLUSTER no pueden append structure, solo tablas transparentes. -> Las tablas transparente que tienen como ultimo campo del tipo LCHAR o LRAW no se puede agregar

-> Los campos de una estructura append deben empezar las letras ZZ o YY.

con

Include structure -> Las estructuras include son estructuras que pueden estar compartidas en mas de una tabla. Algunas tablas de standard se le pueden agregar estructuras, solo a las que ya la tienen definidas. No se puede crear un include en tablas que no tengas esta include ya definido. El nombre standard de la estructura empieza con CI_xxx.

Text Element -> Se pueden cambiar las descripciones que traen los elementos de datos por unos que quiere el usuario, para esto se usa la transaccin CMOD. Las modificaciones de texto y documentacin no son partes de un proyecto de ampliacin, se entra por la CMOD pero se acceden por la barra de herramientas GOTO->TEXT ENHANCEMENT. Las modificaciones que se pueden hacer a un text element varan entre KEYWORD (descripcin del campo) y DATA ELEMENT ( agregar documentacin al data element). Toda modificacin de un text element impactara en forma global en el sistema Para que los campos en una pantalla tomen los cambios cuando modificamos el text element se debe setear el atributo modif. En el screen painter. Las modificaciones en keyword deben ser vueltos a aplicar luego de una actualizacin de la versin de SAP. Capitulo 6 Enhancement User Exits -> Son FORMs metidos en los programas standard de SAP que estn declarados pero no creados, para usarlo es necesario crearlo y meterle cdigo propio a este form. Customer Exits -> Se basa en proyectos de ampliacin, no solo de programas, tambin de mens y pantallas. Con la transaccin CMOD se pueden administrar los proyectos de ampliacin. En los programas Standard de SAP contiene llamadas funciones, estas funciones se utilizan para ampliar la funcionalidad de los programas Standard, estas funciones estn contenidas en mdulos de funciones, y estos mdulos en grupos de funciones Nomenclaturas standard -> Grupo de funciones -> X -> Modulo de funciones -> EXIT_<pgm_name>_xxx Los mdulos de funciones tienen definidas una interfaz de parmetros para usar en la funcin, no se puede modificar esta interfaz de parmetros para agregarle ms. La convencin para mdulos de funciones es EXIT_<pgm_name>_xxx. Se invoca con la sentencia CALL CUSTOMER-FUNCTION xxx El numero de la funcin es el numero del modulo de funciones 98 Por la transaccin SE95 se pueden ver todas las modificaciones que se realizaron en el sistema, se pueden activar o desactivar cada una por separado.

La modificacin de una funcin se hace a travs del include que contiene, el include que contiene tiene la siguiente nomenclatura ZX, para declarar data elements en la funcin, el modulo de funciones tiene includes para declararlos. Es necesario activarlo y luego activar el proyecto.

Estructura del function group -> Los grupos de funciones de ampliacin contienen includes de la forma LX o ZX, los LX son cdigo de SAP, los ZX son cdigo nuestro, solo estos incluyes podemos modificar ya que caen en el customer name space. El include del tipo LXaaaTAP guarda las variables del globales declaradas por SAP, el incluye LXaaaTOP contiene las variables nuestras. Los includes de la forma ZXaaaUnn contiene el cdigo fuente de las funciones de ampliacin. En este incluye es solo para funciones, no es posible insertar cdigo de subrutinas (FORM), mdulos (modules) o eventos. La declaracin de variables en este include son solo locales para los mdulos de funciones. Los includes de la forma ZXaaaFnn o ZXaaaOnn o ZXaaaInn o ZXaaaEnn guardan los mdulos, eventos y funciones del usuario. Men Exits -> funciones de men agregados al men standard. Los men exits estn programados en la pantalla standard de SAP, lo nico que necesitamos es activarlo para que aparezca, y en el cdigo standard que atrapa el OK_CODE de este men esta la funcin que debemos programar adentro para agregarle funcionalidad, el OK_CODE de este men empiezan con +. El men exit viene junto con un modulo de funciones que implementara el funcionamiento. Screen Exits -> En algunas de las pantallas de SAP standard existen subscreen escondidas en donde podemos poner screens propias con campos o controles que queramos. En el programa standard existe una llamada en el PBO y PAI la sentencia. PBO CALL CUSTOMER-SCREEN xxx INCLUDING <funct_group> <scr_num> PAI CALL CUSTOMER-SCREEN xxx Cuando encontrados el screen exit nos fijamos a que ampliacin pertenece y creamos un proyecto para esa ampliacin, esta ampliacin contendr 2 componentes, uno ser la screen que debemos crear (con formato SUBSCREEN ) y customer exit donde podremos pasar datos la screen a nuestra subscreen, es necesario en la funcin crear un data object (tables) para poder ligar la funcin con la screen y asignarle a esta la estructura que nos pasa por parmetro la funcin (siempre dentro del include, para declarar el data object el modulo de funciones trae un TOP include para nosotros) Para asignarle una screen a la subscreen que deseamos en tiempo de ejecucin se usa la sentencia PBO CALL SUBSCREEN <scr_conteiner> INCLUDING <pgm_name> <scr_nro> 99

PAI CALL SUBSCREEN <scr_conteiner> Observaciones -> No pueden tener nombre la subscreen -> No esta permitido definir status GUI -> La subscreen no puede tener definido el atributo next

screen

Para trasferir datos entre el programa principal y la subscreen la ampliacin dispone mdulos de funciones en el PBO y PAI para trasferir los datos. El nombre tcnico de la screen exit tiene el nombre del programa que lo llama, 4 nmeros que es el nombre de la screen ms el nombre de la subscreen area.

Capitulo 7 Business Transaction Events BTE (business Transaction Event) -> Herramienta solo para FI En una herramienta que nos permite comunicarnos con sistemas SAP y no SAP exteriores. Se pueden realizar muchas implementaciones para cada BTE, cuando se ejecuta la BTE se llaman a todas las implementaciones de esta, corren en forma secuencial y no en paralelo sin orden especifico. Estas implementaciones se guardan en una tabla interna la cual es loopeada ejecutando cada una de ellas. La ejecucin de cada implementacin no estorba a la otra. Las BTE tienen una interfaz ya definida y todas las implementaciones se deben ceir a esta. En la implementacin NO se puede utilizar la sentencia COMMIT WORK. Existen 2 tipos de BTE -> public & subscribe La comunicacin es saliente nicamente, el sistema avisa que un evento ocurri y delega la operacin. No retorna nada al sistema, el flujo de datos es unidireccional. -> Process interfase La comunicacin es vi direccional, se enva la peticin y se espera por la respuesta del otro sistema. Las funciones tienen la nomenclatura OPEN_FI_PERFORM_<ev_number> OUTBOUND_CALL_<ev_number> La transaccin FIBF nos permite ver todos los eventos con sus implementaciones. Consta transaccin se crean productos, este producto agrupa un conjunto de ampliaciones. La activacin o desactivacin se realiza a nivel de producto. Las BTE son client-specified, esto quiere decir que el mismo evento puede ser reutilizado por distintos clientes. Estas ampliaciones en los programas son solo para cdigo, no se pueden agregar pantallas ni mens. Diferencias entre CUSTOMER EXIT y BTE 100

CUSTOMER EXIT Source code Menus Screens Tables Administration level Reusable Client-specific Filter-specific

BTE

+ + + + + -

+ + + +

Las BTE's, o Business Transaction Events son un tipo de extensin del sistema SAP. A diferencia de las BADI's, nicamente se puede modificar cdigo con las BTE's; no es posible modificar dynpros o menes. Las BTE's estn basadas en Mdulos de Funciones y Productos, a diferencia de las BADI's que estn basadas en objetos. Al implementar una BTE, se debe crear una interfase para el mdulo de funciones de la BTE. De esta manera, el sistema le una tabla Z y llama dinmicamente la funcin implementada por el cliente. Existe 2 tipos de interfases: - Interfases de Publicacin y Suscripcin - Interfases de Proceso Las interfases de Publicacin y Suscripcin brindan informacin sobre eventos en particular, como la creacin o la modificacin de un documento. Por otro lado, las interfases de proceso se utilizan para reemplazar la lgica estndar de SAP por lgica de cliente. En este link vas a encontrar ms informacin acercar de las BTE's y todo lo relacionado con la programacin ABAP: Business Transaction Events - BTE's

Capitulo 8 Business ADD-ins 101

BADIs -> Tipo de ampliacin implementada en Objetos. Una BADI es una llamada en el cdigo standard de SAP a mtodos que no estn implementados. Cuando se crea una implementacin de una BADI se crea la interfaz del mtodo y la clase que lo va a implementar. Existen 3 tipos de BADIs -> Ampliacin de programa -> Ampliacin de men -> Ampliacin de pantalla Pasos para utilizar una BADI Declarar una variable Llamar al mtodo
CALL METHOD cl_exithandler=>get_instance

Data : r_var type ref to ZIF_EX_PRUEBA,

pasndole como parmetro la

variable declarada. Llamar al mtodo de la interfaz Definicin de una BADI

CALL METHOD r_var->metodo

Entrar con la transaccin SE18 ingresamos el nombre a la BADI y seteamos sus atributos La BADI crea una clase con el siguiente formato Z -> prefijo CL_ -> indica de que es una clase EX_ -> indica que la clase es de exit <badi_name> -> nombre de la badi sin Prefijo ZCL_EX_<badi_name>

En la solapa INTERFACE se crea la interfaz con los mtodos que sern implementados, la nomenclatura de la clase es Z -> prefijo IF_ -> indica de que es una clase EX_ -> indica que la clase es de exit <badi_name> -> nombre de la badi sin Prefijo ZIF_EX_<badi_name>

Se definen los mtodos y sus atributos. Si la BADI es filter-dependent se debe definir un parmetro extra en todos los mtodos FLT_VAL Entrar con la transaccin SE19, colocamos el nombre a la implementacin, seleccionamos la badi que queremos implementar En la solapa INTERFACE se crea la clase con los mtodos que para implementados, la nomenclatura de la clase es ZIF_IM_<badi_name> Haciendo doble clic sobre el mtodo se abrir el editor de ABAP donde deberemos implementar el mtodo.

102

En la definicin el atributo MULTIPLE USE indica que pueden existir mltiples clases de implementacin. Las ampliacin del tipo pantalla o men NO pueden tener mltiples implementaciones. Las ampliaciones de men con BADIs se aplican igual que las ampliaciones con customers exits, en el STATUS GUI de la pantalla debe estar declarado el function code con el formato +<exit>, y en el programa en la captura del OK_CODE debe estar contemplado la llamada al mtodo de la interfaz de la BADI. Solo se puede activar la implementacin de una BADI desde el sistema original y luego transportar la activacin al resto de los sistemas. Las ampliaciones de pantalla con BADIs mantienen el mismo principio de customer exit, se prepara un screen conteiner a la cual se le asignaran subscreen dinmicamente. La comunicacin entre la screen principal y la subscreen no se realiza en forma directa sino que se maneja a travs de una clase BADI. Si una BADI contiene ms de una ampliacin de pantalla no puede tener marcado el atributo de REUSABLE Cuando no haya implementacin activa para una BADI se puede crear una implementacin por default, en la definicin ir a GOTO -> DEFAULT CODE. La maquina virtual de ABAP no puede contener pantallas, solo los programas del tipo 1, F o M. Cuando se crea una BADI de ampliacin de pantalla se tiene en el programa el contenedor para la screen, el problema es que el programa y la screen no se comunican directamente, se deben crear mtodos para la comunicacin entre estos.

Las BADI's (Business ADd Ins) son un nuevo tipo de extensin al sistema SAP basado en ABAP Objetcs. El objetivo de los mismos es cumplir con los requerimientos del cliente permitiendo agregar nuevas funcionalidades dentro del cdigo estndar de SAP. De la misma manera que con los User Exit's, las BADI's tienen dos vistas: la de definicin y la de implementacin. Mediante la transaccin SE18 accedemos a la Definicin de las BADI's. All se puede ver las caractersticas de la misma: parmetros de entrada, salida, tipo de BADI, etc. En la Implementacin de la BADI, a la que se accede mediante la transaccin SE19, se pueden ver todas las implementaciones que existan de una BADI determinada. La definicin de las BADI's viene definida en el sistema estndar (muy pocas veces es necesario crear una nueva definicin para una BADI). En la definicin se indica si la BADI es de implementacin simple (se puede utilizar slo una vez, como los User Exits) o mltiple (pueden existir varias implementaciones activas de la misma BADI en el mismo sistema). Adems, se pueden definir filtros para la ejecucin de la misma permitiendo de esta forma tener diferentes procesos para, por ejemplo, pases diferentes. Esto le permite a SAP poder utilizar las BADI's para realizar localizaciones del sistema; por eso es que el sistema estndar ya incluye varias implementaciones de BADI's. Mediante las implementaciones de BADI's tambin se pueden hacer aplicaciones para negocios especficos (papeleras, petroleras, qumicas, etc). Esto hace que las BADI's sean muy tiles. Esto es as porque a diferencia de los User Exits las BADI's poseen una arquitectura Multicapa (SAP, partners, soluciones de clientes, localizaciones, soluciones especficas para industrias, etc); los User 103

Exits son doble capa nicamente (SAP y soluciones de cliente). En www.todoabap.com.ar van a encontrar mtodos para encontrar las BADI's de una transaccin o programa. Capitulo 9 Modifications Un objeto es original en un solo sistema, en el sistema de creacin, en el resto son copias. Esta regla aplica para objetos de SAP (sistema origen SAP) y los objetos propios del cliente. Los objetos creados por el usuario tienen origen en el sistema de desarrollo y al ser creados se le asigna una orden de cambio del tipo DEVELOPMENT/CORRECTION. Esta orden asegura que el objeto ser enviado a los subsecuentes sistemas. El cambio de objetos originales se denomina CORRECTIONS y se le asigna a una orden de cambio del tipo DEVELOPMENT/CORRECTION. En el caso de que se realicen cambios a un objeto copia se denomina MODIFICATION y se asigna a una orden de cambio del tipo REPAIR. Al modificar un objeto SAP se debe pedir autorizacin. Objetos que estn exentos de esta autorizacin -> Matchcode -> Database index -> Buffer settings -> Customer objects -> Objetos de Customizing

La peticin de autorizacin se realiza a travs del OSS que necesitara el PGMID, el tipo de objeto OBJ y el nombre del mismo. De esta manera generara un nmero de autorizacin para ese objeto. La peticin para modificar un objeto es nica, una vez liberado las siguientes modificaciones son libres. Al modificar el objeto el sistema pedir asignarle una orden de cambio del tipo REPAIR. Este tipo de orden tiene las siguientes funciones -> Change Lock -> Luego de asignar la tarea, solo el owner de esta puede modificarla. -> Import Lock -> El objeto no podr ser sobre escrito en caso de un update. -> Version Creation -> El sistema crea una copia del objeto original y guarda las diferencias del viejo objeto y el nuevo en la DB. Cualquier modificacin a tablas pertenecientes a BASIS COMPONENTS se pierden al momento de un upgrade del sistema. La herramienta de MODIFICATION ASSISTANT nos permiten realizar modificaciones en forma ordenada. Lleva registro de cada modificacin y permite volver atrs las modificaciones hechas. Para que la herramienta este disponible se debe activar en el application server la variable de sistema EU/CONTROLLED_MODIFICATION. 104

La herramienta permite ver un registro de todas las modificaciones en el sistema separados por el tipo de modificacin realizada.

que se realizacin

User exits se crearon principalmente para SD, son consideradas MODIFICATION. Tienen una nomenclatura especial, USEREXIT_<name>. Utilizan variables globales y son almacenados en includes especiales. Cuando SAP agrega un nuevo user exit este se guarda en un nuevo include. Son funciones ya creadas vacas a las cuales debemos poner nuestra lgica. Para utilizar user exist se debe activar el parmetro ABAP/FIELDEXIT. No solo existen actualizaciones para R/3, SAP peridicamente manda correcciones al sistema llamadas NOTES. Estas modificaciones se implementan utilizando la transaccin SNOTE. Un conjunto de NOTES se denominan SUPPORT PACKAGE, funcionan como una actualizacin conjunta y en un orden especifico. Las notas o support package se implementan a travs del note assistant (SNOTE) pero es posible aplicarlas en forma manual a travs del programa SCWN_REGISTER_NOTES. Luego una actualizacin es necesario volver a customizar algunas opciones que la actualizacin modifica, para esto estn las herramientas SPDD (Modificacin de diccionario) y SPAU (Objetos del repositorio). SPDD -> Esta transaccin nos acomodar nuestros objetos modificados a los nuevos que SAP instalo en la actualizacin, esta transaccin se ocupa de los objetos del diccionario (Domains, Data elements y tables). Todo ajuste luego de una modificacin se debe transportar a los subsiguientes sistemas para esto hay 2 tipos de ordenes de trasporte. SPDD adjustment SPAU adjustment Cuando se transportan a otro sistema estos ajustes se almacenan, decidir cual se quiere implementar a esta fase se la llama ADJUSTCHK. para

Para evitar conflictos con los nombres entre los objetos del cliente y los de SAP se utiliza una nomenclatura especial para diferenciarlos, pero entre los distintos objetos tambin, esta nomenclatura se guarda en una vista del sistema V_TRESN.

105

Validaciones y substituciones
Las validaciones y sustituciones son eventos que se dispara en caso de crear o modificar documentos de FI. (nicamente FI). Los programas que contienen los FORM son: RGGBS000 RGGBR000 Sustitucin Validacin

Estos programas son estndar y no pueden ser modificados. SAP recomienda que estos sean copiados a otro y modificados. Para decirle a SAP en que programa buscar los form se debe modificar la tabla T80D que es la que tiene customizados los programas estndar.

106

Validaciones
Las validaciones se utilizan para chequear valores ingresados en documentos. Para agregar una validacin se modifica el programa ZRGGBR000 a la estructura exit una lnea con nuestra validacin.
exits-name = 'U990'. nombre del exit exits-param = c_exit_param_none. interfaz del exit exits-title = text-104. descripcin del exit APPEND exits.

El cdigo de la validacin se debe se pone en el mismo programa (ZRGGBR000).


FORM u990 USING bool_data TYPE gb002_015. ... ENDFORM.

Tipo de interfaz
Existen 2 tipos de interfaz para los exit de validacin. C_EXIT_PARAM_NONE Sin parmetros excepto B_RESULT La variable B_RESULT puede devolver TRUE o FALSE que indica el resultado de la validacin. C_EXIT_PARAM_CLASS El parmetro es la estructura BOOL_DATA. Esta estructura contiene la cabecera y las posiciones del documento.

Customizing de validaciones

107

Para customizar una validacin se ingresa a la transaccin GGB0. Ah encontraremos, los distintos mdulos en donde crear la validacin dentro de FI.

Para crear una validacin debemos pararnos el modulo que queremos y decidir si se ejecutar cuando se modifica o crea una cabecera, por posicin o por documento completo. Dentro de las validaciones se crean pasos que son los encargados de ejecutar nuestro FORM de validacin. Para que se ejecute un paso de validacin este debe cumplir con la condicin ingresada en la solapa Condicin.

108

En la solapa Verif se ingresa cual es el exit que se ejecutara para realizar la verificacin.

109

En la solapa Mensaje se ingresa cual es el mensaje que se emitir si el exit que realice la validacin. El resultado del exit depende de la variable B_RESULT. Se puede pasar variables a este mensaje.

La transaccin OB28 indica si la validacin (no el paso dentro de este) esta activo o no.

110

Sustitucin
Las validaciones se utilizan para cambiar el/los valores ingresados en documentos. Para agregar una sustitucin se modifica el programa ZRGGBS000 a la estructura exit una lnea con nuestra validacin.
exits-name = 'U993'. nombre del exit

111

exits-param = C_EXIT_PARAM_FIELD. interfaz del exit exits-title = text-104. descripcin del exit APPEND exits.

El cdigo de la validacin se debe se pone en el mismo programa (ZRGGBS000).


(C_EXIT_PARAM_FIELD) FORM u993 CHANGING p_zfbdt. ... ENDFORM. (C_EXIT_PARAM_CLASS) FORM u994 USING bool_data TYPE gb002_015. ... ENDFORM.

Tipo de interfaz
Existen 2 tipos de interfaz para los exit de validacin. C_EXIT_PARAM_NONE C_EXIT_PARAM_FIELD El parmetro es el campo que vamos a sustituir. C_EXIT_PARAM_CLASS El parmetro es la estructura BOOL_DATA. Esta estructura contiene la cabecera y las posiciones del documento.

Customizing de validaciones
La transaccin para customizar una sustitucin es GGB1. Ah encontraremos, los distintos mdulos en donde crear la validacin dentro de FI. Para crear una sustitucin se selecciona en que tipo de evento se ejecutara la sustitucin, por cabecera, por posicin o por documento completo.

112

Como en validaciones se debe crear un paso dentro de la sustitucin. Cuando se crea un paso debe elegir que campo debe sustituirse. Si se elige un campo este campo marcara la interfaz del FORM. Si se elige Solo exit, la interfaz del form ser la estructura BOOL_DATA.

Al elegir el campo a sustituir se mostrara que tipo de sustitucin se realizara.

113

Valor constante -> Se modificara el campo por un valor const Exit -> Se ejecutara un FORM de validacin Asignacin campo-campo -> Se modificara un campo por otro. En la solapa Condicin se ingresara la condicin que por la cual que se ejecutara o no la sustitucin.

En la solapa Sustitucin en caso de haber elegido el tipo EXIT se ingresara el nombre del exit que se ejecutara.

114

La transaccin OBBH indica si la sustitucin (no el paso dentro de este) esta activo o no.

NOTA: Hay casos de que las sustituciones y validaciones creadas no aparecen en el customizing. Existe un programa que regenera las validaciones y sustituciones, el programa es RGUGBR00
Se ingresa el area de aplicacin y marcaran todas las opciones menos la ultima. Este programa regenerara todos los FORM que se crearon.

115

116

Vous aimerez peut-être aussi