20
MODULOS DE SAP Finanzas (FI) FI Contabilidad AA Activos Fijos AP Deudores AR Acreedores GL Contabilidad General LC Consolidación SL Contabilidad Especial CO Costes ABC Control de Costes Basado en Actividades OM Costes Operativos PA Análisis de Rentabilidad PC Costes de Productos EC Controling Corporativo EIS Sistema de Información MC Consolidación PLA Contabilidad de Centros de Beneficios IM Inversiones IM Inversiones de Capital FA Medidas de Recursos Inmovilizados Tangibles TR Tesorería CM Caja FM Presupuestos TM Tesorería MRM Riesgos Recursos Humanos (HR) PA Administración de personal APP Candidatos BEN Beneficios EMP Empleados INW Incentivos PAY Nómina TIM Gestión de Tiempos TRV Gestión de Viajes PD Modulo de desarrollo OM Organización PD Desarrollo de Personal RPL Planificación y Reserva de Salas SCM Seminarios y Convenciones WFP Planificación del Trabajo Logística (LO) LO Logística ECH Cambios de Ingeniería EHS Medio Ambiente, Salud y Seguridad LIS Información Logística MD Datos Maestros PR Previsiones VC Configuración de Variantes

ABAPIntro

Embed Size (px)

Citation preview

Page 1: ABAPIntro

MODULOS DE SAP Finanzas (FI) FI � Contabilidad AA � Activos Fijos AP � Deudores AR � Acreedores GL � Contabilidad General LC � Consolidación SL � Contabilidad Especial CO � Costes ABC � Control de Costes Basado en Actividades OM � Costes Operativos PA � Análisis de Rentabilidad PC � Costes de Productos EC � Controling Corporativo EIS � Sistema de Información MC � Consolidación PLA � Contabilidad de Centros de Beneficios IM � Inversiones IM � Inversiones de Capital FA � Medidas de Recursos Inmovilizados Tangibles TR � Tesorería CM � Caja FM � Presupuestos TM � Tesorería MRM � Riesgos Recursos Humanos (HR) PA � Administración de personal APP � Candidatos BEN � Beneficios EMP � Empleados INW � Incentivos PAY � Nómina TIM � Gestión de Tiempos TRV � Gestión de Viajes PD � Modulo de desarrollo OM � Organización PD � Desarrollo de Personal RPL � Planificación y Reserva de Salas SCM � Seminarios y Convenciones WFP � Planificación del Trabajo Logística (LO) LO � Logística ECH � Cambios de Ingeniería EHS � Medio Ambiente, Salud y Seguridad LIS � Información Logística MD � Datos Maestros PR � Previsiones VC � Configuración de Variantes

Page 2: ABAPIntro

MM � Materiales CBP � Planificación Basada en Consumo EDI � Intercambio Electrónico de datos IM � Inventario IS � Información IV � Facturas POR � Compras WM � Almacén PM � Mantenimiento de planta EQM � Equipos y Objetos Técnicos IS � Información de planta PRM � Mantenimiento Preventivo PRO � Proyectos de Mantenimiento SMA � Servicios WOL � Órdenes de Mantenimiento PP � Producción ATO � Ensamblaje BD � Datos Básicos CRP � Planificación de Capacidad IS � Información de Producción KAB � Kanbam / Just–in–time MP � Planificación Maestra MRP � Planificación de Necesidades de Material PDC � Recolección de Datos de Planta PI � Planificación de Producción para Industrias por Procesos REM � Fabricación Repetitiva SFC � Órdenes de Producción SOP � Ventas y Operaciones PS � Proyectos APP � Presupuestos BD � Datos Básicos EXE � Ejecución / Integración IS � Información de Proyectos OPS � Estructuras Operativas PLN � Planificación QM � Calidad CA � Certificados de Calidad IM � Inspecciones PT � Herramientas de Planificación QC � Control de Calidad QN � Notificaciones SD � Ventas y distribución GF � Funciones Generales BIL � Facturación CAS � Soporte a Ventas EDI � Intercambio de Datos FTT � Comercio Exterior SIS � Información de Ventas MD � Datos Maestros SHP � Envíos

Page 3: ABAPIntro

SLS � Ventas TR � Transporte

SAP R/3 En el proceso de elaboración de un pedido todos los documentos generados se guardan en VBRK, VBRP, VBAK y VBAP. En la barra de transacciones poner /o para abrir una nueva ventana de SAP. Las transacciones de pedido son VA01 (crear), VA02 (modificar) y VA03 (visualizar). El mandante sirve para diferenciar accesos. Es como si fueran carpetas dentro de la misma máquina. La transacción SE11 se usa para crear, modificar y visualizar las tablas de diccionario. La transacción SE16 sirve para ver los datos de una tabla. También podemos verlos desde la SE11 si pulsamos sobre Contenido. Si, en tiempo de ejecución, pulsamos F1 sobre un parámetro aparecerá una pequeña ayuda sobre lo que hace. Si en esa ventana pinchamos sobre el botón matillo saldrán los datos técnicos del parámetro. Cuando en la pantalla de selección (en tiempo de ejecución) pulsamos en Grabar, nos lleva a la pantalla de variantes, que sirve para cargar valores a los parámetros por defecto; es como si fuera una foto de la pantalla de selección. Las variantes se usan para corregir errores y se crean a nivel de usuario y solo este puede verlas. Una vez creada una variante, en la pantalla de selección de ese programa y para ese usuario, aparecerá siempre. La transacción SE93 sirve para crear nuestras propias transacciones. Si especificamos Transacción Report indicaremos un programa. Si indicamos Transacción de parámetros podremos llamar a otras transacciones. En la pestaña Valores de propuesta, en transacción especificamos la transacción a que queremos llamar, marcando Omitir imagen inicial entramos de la forma que nosotros especifiquemos. En Nombre del campo de dynpro elegir todos los valores, botones y propiedades de la transacción. En ViewName poner la tabla a visualizar y si ponemos X en Update el botón de actualizar aparecerá marcado. La transacción SE91 se utiliza para crear o modificar los mensajes. La transacción SM37 muestra un listado de jobs (trabajos de fondo programados para ejecutarse en un momento determinado). La transacción FD01 es para crear clientes. La transacción MM01 sirve para crear materiales. La transacción MM02 se usa para modificar los materiales existentes. La transacción MM03 se utiliza para visualizar los materiales del sistema.

Page 4: ABAPIntro

La transacción SPRO nos nuestra las especificaciones de SAP. La transacción ST05 nos muestra el TRACE–SQL, y sirve para grabar las consultas que hace el estándar de SAP desde una transacción para, por ejemplo, ver que campos, tablas o funciones utiliza. La transacción AL11 nos sirve para ver todos los ficheros del servidor. La función TH_POPUP se utiliza para mandar mensajes internos a cualquier usuario del sistema SAP. Para que un programa Z se convierta en un job, desde el código ir al menú Sistema � Servicios � Jobs � Definición de jobs. Desde el editor de código si pulsamos sobre Patrón podemos elegir la generación de cierto código, como por ejemplo funciones. El botón Referencia de utilización sirve para visualizar todos los programas, clases, tablas, etc., que usan o llaman esa tabla, programa, función, etc. Para comentar un bloque de código, seleccionamos el código y pulsamos Ctrl+<; para descomentarlo pulsaremos Ctrl+Shift+<. Pulsando Ctrl+Y podemos seleccionar texto de cualquier parte de la ventana de SAP para copiar y pegarlo en otro lado. Con /n en la barra de transacciones podremos cambiar de transacción en la misma ventana de SAP. Los menús “Sistema” y “Ayuda” están en todos los sistemas ABAP y son siempre iguales. El resto de menús pueden variar dependiendo de la máquina o la transacción. Con F3 vamos a la pantalla anterior, salvo si estamos en la principal que entonces saldremos de SAP.

QUERYS Hay que dar 5 pasos: 1.- Usuarios 2.- Grupos de usuarios 3.- Información 4.- Fuente de datos 5.- Query El QuickViewer es una herramienta para hacer consultas. Se abre desde Herramientas � Workbench ABAP � Utilidades � QuickViewer. Su transacción es SQVI.

Page 5: ABAPIntro

Asignamos la Query a un Infoset y a un grupo de usuarios. Pinchar en Lista Básica. Seleccionamos los campos de filtro (campos de selección) y después los campos a visualizar (campos de lista). Guardar y verificar. El campo variante dejarlo vacío. Desde la pantalla de selección Menú � Sistema � Status y desde Report nos mostrará el código fuente de la consulta. Con /h en la barra de transacciones activaremos el modo debug, ejecutaremos con F8 y después F5 para ir paso a paso. Las transacciones para hacer querys son: SQ01 para crear la Query, SQ02 para crear el Infoset y SQ03 para crear grupos de usuarios.

INFOSET Son las consultas (query) a medida. En fuente de datos seleccionar Unión de tablas (si son varias tablas) o Lectura directa (si es solo una tabla) Crear nuevo grupo de campos y pulsar Detalles. Pestaña Detalle creamos nuestros campos. Seleccionamos el tipo, longitud, etc. En la pestaña Coding introduciremos el código y guardamos. Selecciona los campos en visualización y guardamos. Verificamos y activamos el Infoset. Asignamos a un grupo de usuarios. Seleccionamos la query creada y con el asistente que sale dando a siguiente seleccionamos los campos que queremos mostrar. Pulsamos “lista básica”. Asignar siempre las Query y los infoset a un grupo de usuarios. Para crear campos de una Query vamos al menú Tratar � Campo local � Crear � Campo de cálculo, donde le ponemos el tipo de campo y una formula. Pinchando sobre “calculo complejo” podemos crear fórmulas complejas, con más de una condición.

CREAR USUARIOS En la transacción SU01, se elige un usuario ya creado y se copia el perfil. Luego se procede a las modificaciones.

ENTORNOS DE SAP Desarrollo. Para programar y crear programas. Apenas tiene datos. Test o Integración. No se puede programar. Para la fase de pruebas. Existen datos casi reales. Producción o Productivo. Fase de producción. No se puede programar. Hay datos reales. Es el entorno de trabajo del cliente.

LENGUAJE ABAP, SE38 Cuando no se indica el mandante en el programa las modificaciones se toman en cuenta para todos los usuarios.

Page 6: ABAPIntro

Todos los programas que empiecen por “Z” o por “Y” son a medida, es decir, programas no estándar. SAP no da soporte técnico sobre ellos. La tecla F4 sobre un campo (MatchCode) sirve para abrir el cuadro de búsqueda. En la SE38 es donde crearemos los programas ABAP Código fuente � Visualizar el código fuente Variantes � Visualizar variantes Atributos � Visualizar los atributos del programa; nombre, programador, día, tipo de programa, estado, etc. Si el programa no está activo esta opción no funcionará Documentación � Visualizar la documentación Elementos de datos � Visualizar el código y el texto de las tablas, etc. Poniendo MESSAGE ID xx � Donde xx es un número, se especifica el mensaje a mostrar en caso de error. Para poner un literal antepondremos el símbolo & en lugar de xx. Las tablas internas son las que nosotros creamos y se ejecutan solo mientras se ejecuta el programa. Las tablas de diccionario son las que están integradas en SAP, también las Z que nosotros creamos. En Utilidades � Opciones � Pretty Printer podemos establecer como queremos que aparezca el código fuente. Todas las instrucciones en ABAP terminan con punto (.). Los parámetros son variables que esperan que se le faciliten datos. Se declaran con PARAMETERS: nombre1, nombre 2… El nombre del parámetro no puede ser mayor de 8 caracteres. Las variables se definen con DATA: nombre1, nombre2. La instrucción CONCATENATE une el texto de variables. CONCATENATE var1 var2 INTO var3. Si especificamos SEPARATED BY SPACE separaremos sus valores con espacios dentro de var3. La instrucción TABLES se usa para definir las tablas de diccionario que se usarán en el programa. Debe ponerse al principio del código. Si no especificamos el tipo en la declaración de las variables el tipo por defecto es CHAR de un solo carácter. Si queremos que sea de más longitud la declararemos: DATA: var1(n). Para especificar el tipo de variable se pone TYPE tipo a continuación del nombre de la variable. Para definir una variable como fecha usaremos DATA: fecha LIKE SY-DATUM. El valor de esta variable será la misma que la del sistema SAP. La forma de llamar a los campos es: tabla–campo. Ejemplo: tabla SY–campo DATUM.

Page 7: ABAPIntro

SY–SUBRC puede contener los valores 0 ó 4. 0 significa que la operación anterior ha sido correcta, se ha realizado sin errores. 4 significa que algo ha fallado. SY–TABIX contiene el número de línea o registro sobre el que se está trabajando actualmente. SY–INDEX contiene el número de repeticiones de un bucle, el número actual de repetición del bucle. SY–DBCNT contiene la cantidad de registros afectados por la última operación procesada. Para debugear un programa pondremos /h en la barra de transacciones y lo ejecutaremos; entraremos inmediatamente en el modo debug. El formato de SY–DATUM es aaaa/mm/dd. Si queremos ver el año solamente pondremos SY–DATUM(4). Si lo que queremos es ver solo el día SY–DATUM+6(2). SY–VLINE sirve para pintar una línea vertical de tamaño 1. SY–ULINE sirve para pintar una línea horizontal del ancho de la pantalla. Si especificamos un número dibujaremos una línea con el número de caracteres indicado. En las tablas, la cabecera muestra el registro en el que estamos. Todos los datos se cargan en la cabecera, que contiene solo un registro, y es sobre la cabecera de la tabla sobre la que trabajamos. Una estructura es como una tabla pero de solo un registro, es solo cabecera. La instrucción MOVE–CORRESPONDING tabla TO estructura � Copia la cabecera de la tabla a la estructura, pero solo aquellos campos que se llamen igual. Las tablas internas se definen con DATA: BEGIN OF nombre OCCURS n, .… END OF nombre. Con el OCCURS nº definimos la memoria que queremos que tenga la tabla, el número de registros que almacenará. Si ponemos OCCURS 0, se va reservando memoria a medida que se llena la tabla. Si queremos que nuestra tabla interna tenga todos los campos de una tabla de diccionario pondremos INCLUDE STRUCTURE nombre_tabla. Ejemplo: DATA: BEGIN OF nombre OCCURS 0, INCLUDE STRUCTURE mara. ‘ Maestro de materiales Campo1 LIKE sy–datum, ‘ Campo fecha

Campo2 LIKE ekpo–ebeln. ‘ Campo documento de compras END OF nombre. Las estructuras se definen con DATA: BEGIN OF nombre …. END OF nombre. Para rellenar una tabla interna con los datos de la cabecera de otra tabla igualaremos los campos y a continuación pondremos la instrucción APPEND TO tabla. Es aconsejable que después de un APPEND se ponga un CLEAR tabla–campo. SY–INDEX � Número de registro. Indica la posición en la que nos encontramos. SY–TABIX � Solo en tiempo de ejecución. Se usa en bucles y se sirve para ver en que vuelta del ciclo nos encontramos.

Page 8: ABAPIntro

Con MOVE–CORRESPONDING tabla1 TO tabla 2 copiaremos solo todos los campos de la tabla1 a tabla2 que sean iguales. Otra forma de copiar datos sería tabla2[] = tabla1[], pero deben tener la misma estructura. Para leer un registro de una tabla usaremos READTABLE. Debe ir bajo una condición especificada con WHERE. Ejemplo: READTABLE tabla WHERE condición. Pondrá en la cabecera de la tabla el primer registro que cumpla esa condición. Con READTABLE tabla INDEX nº leeremos el registro n de la tabla. Ese número puede ser un entero, una variable, sy–tabix, etc. El WHERE lo podemos especificar también en los bucles LOOP. Para buscar datos dentro de las tablas podemos hacerlo con LOOP y una condición o con la siguiente instrucción SQL: SELECT * FROM tabla WHERE condición …. END SELECT. Si ponemos a continuación de las condiciones UP TO var ROWS solo buscaremos en las var filas especificadas. Para llenar una tabla interna con esa búsqueda utilizaremos: SELECT * FROM tabla INTO TABLE tabla_interna WHERE condición …. END SELECT. Con esto machacamos todos los datos que contuviera la tabla interna; si queremos que los datos se mantengan utilizaremos: SELECT * FROM tabla APPENDING TABLE tabla_interna WHERE condición. Si queremos seleccionar un registro para bloquearlo de posibles modificaciones utilizaremos la instrucción: SELECT SINGLE FOR UPDATE * FROM tabla. Mediante INSERT tabla FROM TABLE tabla_interna. introducimos datos desde una tabla interna a una de diccionario. Con la instrucción UPDATE tabla. actualizamos el registro de la cabecera de la tabla. Si queremos actualizar varios registros a la vez usaremos: UPDATE tabla SET campo = valor WHERE condición. Con la instrucción UPDATE tabla FROM TABLE tabla_interna actualizamos desde una tabla interna. Si no estamos seguros de si el registro existe o no utilizaremos la instrucción MODIFY puesto que si el registro existe lo modifica y si no existe lo crea. Para borrar datos de una tabla usaremos la instrucción DELETE. El equivalente a READTABLE es SELECT SINGLE * FROM tabla. IF condición …. ELSEIF condición …. ELSE …. ENDIF. Con IF SY–SUBRC <> 4 comprobaremos que todo ha ido bien. IF 2 BETWEEN 1 AND 3 sirve para establecer rangos. IF var1 IS INITIAL comprobaremos si la variable contiene los datos por defecto IF NOT var1 IS INITIAL comprobaremos si la variable no contiene los datos por defecto. Dentro de un IF podemos poner varias condiciones, que deben ir encerradas entre comillas.

Page 9: ABAPIntro

SY–FDPOS contiene el número de elementos que contiene una cadena con respecto a otra, comparadas con la instrucción CO. CASE var1 …. WHEN …. WHEN OTHERS …. END CASE se usa en lugar del IF siempre que se conocen las opciones. Es el Select …. End Select de VB. Con LOOP AT tabla nos movemos por la tabla. Si ponemos LOOP AT tabla INTO tabla_interna copiamos el contenido. Es equivalente a MOVE–CORRESPONDING. Los SELECT–OPTIONS son parámetros pero con rango. Se usa como filtro para los SELECT. Sintaxis: SELECT–OPTIONS nombre FOR tipo (tabla–campo). Si no queremos pedir los datos al usuario pondríamos RANGES a continuación. Los datos que contienen los SELECT–OPTIONS son: SIGN � I o E, incluye o exclude OPTION � EQ o BT. EQ si se introduce solo 1 valor, BT si se introducen los 2. LOW � Rango inferior HIGH � Rango superior Las variables, tablas, rangos, etc., deben declararse antes de usarlos. Las pantallas de selección se crean con la instrucción SELECTION–SCREEN BEGIN OF BLOCK nombre WITH FRAME TITLE titulo. Sirven para agrupar parámetros en las pantallas de entrada de datos. Con MODIF ID nombre obligamos a un grupo se SELECT–OPTIONS a tomar ese nombre para modificarlos juntos. Con DEFAULT le pasamos un valor por defecto a una variable o parámetro. Con DEFAULT ‘X’ activamos un CHECKBOX o RADIOBUTTON. La sección AT SELECTION–SCREEN OUTPUT, que va siempre a continuación de la sección INITIALIZATION pondremos el código para que un parámetro no se pueda modificar. Con la opción SCREEN–INPUT haremos que un parámetro no se pueda modificar. Los botones de comando se crean en los SELECTION–SCREEN. Sintaxis: SELECTION–SCREEN PUSHBUTTON nº_margen_izquierdo(nº_tamaño) nombre USER–COMMAND etiqueta. Los valores del botón se recogen en la tabla de sistema sscrfields, y en el campo ucomm de esa tabla se almacena el clic. La instrucción SUBMIT nombreprograma se utiliza para ejecutar otro programa del entorno SAP. Si añadimos AND RETURN, después de la ejecución de ese programa el control volverá al nuestro. Ejemplo: SUBMIT nombre_programa WITH variables o parámetros VIA SELECTION–SCREEN AND RETURN. Con el VIA SELECTION–SCREEN conseguimos que aparezca la pantalla de selección del programa llamado. Para llamar a otro programa pasándole parámetros debemos tener esta estructura: SUBMIT programa2 WITH param1 = P1 var1 = P2 VIA SELECTION–SCREEN AND RETURN

param1 var1 deben ser del mismo tipo que P1 y P2

Page 10: ABAPIntro

La instrucción CALL TRANSACTION transacción se utiliza para llamar a una transacción (que se ejecutará en la misma ventana de SAP). Cuando el usuario pulse F3, el control volverá a nuestro programa. La instrucción CALL FUNCTION nombre se utiliza para llamar a una función. La instrucción MESSAGE xNNN (clase) WITH && o var1. Sirve para imprimir mensajes de error. La x puede ser W (warning, continua la ejecución), E (Error, finaliza la ejecución), I (ventana informativa emergente), A (Cancelación) o S (Continuación). NNN indican el número del mensaje. Clase indica la tabla o archivos con los mensajes. La instrucción FORMAT COLOR código utilizada dentro de un WRITE se utiliza para escribir con el color especificado. Tras su utilización debe cerrarse con FORMAT COLOR OFF. Ejemplo: FORMAT COLOR ‘blue’ …. FORMAT COLOR OFF. También existen las instrucciones FORMAT INTENSIFIED ON/OFF, FORMAT INVERSE ON/OFF, FORMAT INPUT ON/OFF y FORMAT RESET. Las llamadas a procedimientos se hacen con la instrucción PERFORM nombre. Los procedimientos se crean con FORM nombre …. END FORM. Para pasar parámetros utilizamos la sintaxis: PERFORM nombre USING var1, var2. El FORM debe estar declarado como FORM nombre USING pvar1, pvar2. Si queremos que los datos de var1 y var2 se modifiquen en lugar de utilizar USING para reverenciarlos usaremos CHANGING var1, var2. (El FORM utilizará USING)Si lo que queremos pasar son tablas internas debemos usar TABLES tabla_interna STRUCTURE tabla_diccionario (El FORM también utilizara TABLES). Para borrar una tabla utilizaremos el siguiente bloque de código: SELECT * FROM tabla_diccionario INTO tabla_interna DELETE tabla_diccionario FROM TABLE tabla_interna La instrucción SORT tabla BY campo1, campo2 la utilizaremos para ordenar una tabla interna por esos campos. En las tablas internas que estén ordenadas ponemos utilizar las siguientes instrucciones dentro de un bucle LOOP: AT FIRST …. END AT. Sirve como tratamiento de ruptura de datos para el primer registro de la tabla. AT NEW ‘campo’ …. END AT. Sirve como tratamiento de ruptura de datos para cada nuevo valor del campo. Desde el campo especificado hacia la derecha de la tabla, todos los campos contendrán el valor “*”. Si queremos realizar operaciones con esos datos debemos pasarlos antes a una estructura con el MOVE–CORRESPONDING. AT END ‘campo’ …. END AT. Sirve como tratamiento de ruptura de datos para cada fin del campo. Desde el campo especificado hacia la derecha de la tabla, todos los campos contendrán el valor “*”. Si queremos realizar operaciones con esos datos debemos pasarlos antes a una estructura con el MOVE–CORRESPONDING. AT LAST …. END AT. Sirve como tratamiento de ruptura de datos para el último registro de la tabla. ON CHANGE ‘campo’ …. END ON. Sirve como tratamiento de ruptura de datos para cada registro que cambie anterior al especificado.

Page 11: ABAPIntro

La instrucción COLLECT suma o añade. Si encuentra un registro en la tabla interna cuyos campos char son iguales, los campos de tipo de datos package, float o integer los sumará. Si no encuentra ningún registro con campos char iguales añadirá un campo nuevo. La instrucción COMMIT WORK AND WAIT se utiliza para forzar a nuestro programa a que espere hasta que se termine de actualizar la base de datos. La instrucción CLEAR tabla limpia la cabecera. La instrucción REFRESH tabla_interna borra todos los datos de la tabla interna. La instrucción FREE tabla_interna libera la memoria que ocupaba la tabla. Para hacer esta operación la tabla debe estar antes vacía. La instrucción UPLOAD sirve para subir datos desde el cliente a SAP o viceversa. La instrucción DOWNLOAD sirve para bajar datos desde SAP al cliente. Cuando insertamos una función en nuestro código salen comentadas las variables que son opcionales. Con la línea AT SELECTION–SCREEN ON VALUE REQUEST FOR var1, convertimos la variable en un parámetro. En esta sección pondremos el código a ejecutar en el caso de que el usuario pulse F4 sobre el parámetro. En un report, en el menú Pasar a � Traducción traducimos a otro idioma todos los elementos de texto. También cualquier cosa que no se un literal. Se aconseja siempre utilizar elementos de texto en lugar de literales para facilitar esta acción. Dentro de un report, en el menú Utilidades � Más Utilidades � Análisis en tiempo de ejecución, podemos ver el rendimiento de nuestro programa. También se llega aquí mediante la transacción SE30. Se hace una grabación de la ejecución del programa y después en Evaluar pulsamos F5 para ver todos los procesos y el tiempo que consumen. Si pulsamos en Tips & Trices podremos comparar código, ya sea estándar o nuestro y ver cual es más rápido. Con la instrucción TYPES se utiliza para declarar nuestros propios tipos de datos. La instrucción DIV nos devuelve la división de dos números. La instrucción MOD nos devuelve el resto de la división. La instrucción STRLEN nos devuelve la longitud de una cadena. La instrucción SHIFT se utiliza para desplazar el contenido de una cadena de caracteres. La sintaxis es: SHIFT var o campo BY espacios_a_desplazar PLACES o CIRCULAR RIGHT (para desplazar a la derecha). La instrucción REMPLACE cambia el contenido de una cadena. Sintaxis: REMPLACE ’cadena_a_sustituir’ WITH ’cadena_nueva’ INTO var1.

Page 12: ABAPIntro

La instrucción TRANSLATE var TO UPPER CASE cambia todo a mayúsculas. TRANSLATE var TO LOWER CASE cambia todo a minúsculas. TRANSLATE var USING ’regla_de_caracteres’ cambia según lo especificado. La instrucción SEARCH busca una cadena dentro de un campo o tabla. Sintaxis: SEARCH campo o tabla FOR ’cadena’. La instrucción CONDENSE borra todos los espacios en blanco de una cadena dejando uno. Si especificamos NO–GAPS los elimina todos. La instrucción SELECT COUNT(*) se utiliza para contar la cantidad de registros de una tabla de diccionario. La sintaxis es: SELECT COUNT(campo o *) INTO var1. Es similar al READ TABLE en una tabla interna. Dentro del debug, el WatchPoint sirve para ver un dato concreto dentro de un bucle. Los botones se crean con la instrucción PF–STATUS ’nombre’ o desde la transacción SE41. Si ponemos EXCLUDING tabla_interna conseguiremos que no salgan ciertos botones, los que estén definidos en esa tabla interna. Si creamos un menú para nuestro programa, el menú estándar desaparece (salvo el de atrás), por lo tanto si queremos que salga debemos crear nosotros esos menús y meter el código correspondiente. Eso se consigue desde el menú Sistema � Status � Status interfase. La instrucción DEFINE (que está en desuso) es igual que los PERFORM. Se suele poner antes del START–OF–SELECTION. Ejemplo: DEFINE nombre CLEAR &var1, &var2, …. REFRESH &var1, &var2, …. END–OF–DEFINITION Para usarlo utilizaremos la siguiente sintaxis: nombre tabla_interna. Para abrir un fichero utilizaremos la sentencia OPEN DATASET fichero FOR OUTPUT | INPUT IN BINARY MODE | IN TEXT MODE. El valor de SY–SUBRC será 0 cuando el fichero se abre correctamente y 8 cuando falla. Para cerrar el fichero usaremos la sentencia CLOSE DATASET fichero. Si queremos leer un fichero usaremos READ DATASET fichero INTO estructura. El valor de SY–SUBRC será 0 cuando se ha leído el fichero correctamente y 4 cuando no encuentra el fin del fichero. Para escribir datos utilizar la sentencia TRANSFER estructura TO fichero. Tanto READ como TRANSFER tienen la cláusula LENGTH var que indicará longitud de lo leído o a escribir.

TABLAS La transacción SM30 sirve para introducir y actualizar los datos de una tabla de diccionario. Para crear una tabla usaremos la transacción SE11, especificaremos el nombre y pulsamos Crear. Elegir la clase de la tabla y activar Permitir actualización (para poder modificar los datos desde la SM30) en Atributos. En la pestaña Campos pondremos todos los que consideremos, teniendo en cuenta que los campos clave deben ir todos

Page 13: ABAPIntro

seguidos y al principio de la tabla. El campo mandante debe ser el primer campo. Para especificar que un campo es clave pulsaremos Clv. Inic indica que el campo no puede estar en blanco. En tipo de campo podemos buscar campos ya creados para usar en nuestra tabla o crear el nuestro, si elegimos la opción Elemento datos / Tipo directo. Cuando tengamos todos los campos guardamos la tabla y pinchamos sobre Opciones técnicas; donde especificaremos la clase de datos y el número de registros máximo que puede tener la tabla. A continuación Activaremos la tabla para que la podamos usar. Si especificamos un campo para almacenar precios, debemos crear un campo moneda. En tipo de campo pulsar F4 y poner WAERS. Debemos referenciar el campo precio al campo moneda en la pestaña Campos moneda / cantidad. Siempre es preferible especificar un campo dentro de nuestra tabla. Debemos generar el actualizador de tablas (transacción SE55) para poder hacer funcionar la SM30. En grupo de autorizaciones especificaremos quien puede acceder. Por defecto, para que acceda todo el mundo poner &NC&. En grupo de funciones especificaremos la misma tabla. En imágenes de actualización indicaremos el modo de visualización, siendo un nivel para que todos los campos salgan en la misma pantalla. Para generar el Número de imagen, si no lo sabemos, pincharemos sobre Buscar Nº imágenes y Proponer. Grabaremos siempre en estándar. Los Tipos de datos se crean también en la SE11. En caso de no utilizar Dominio, poner Tipo instalado y especificar el tipo de datos. En Denominación de campo especificar solo el Denominador de campo en todas las opciones (no es necesario poner longitud, lo hace automáticamente SAP). Activamos el tipo de datos para poder utilizarlo en las tablas. Los Dominios también se crean en la SE11. Son tipos de datos creados por nosotros. Especificamos el tipo de datos, los caracteres, decimales y la longitud de salida. En la pestaña Ámbito de valores establecer los valores del dominio. Activar para poder usar. Sólo se pueden utilizar dentro de un elemento de datos. Para introducir datos manualmente dentro de una tabla vamos a Utilidades � Contenido de tabla � Registrar entradas, dentro de la tabla.

BATCH–INPUT La transacción SHDB es la grabadora de datos. La transacción SM35 también nos da acceso a la grabadora de datos y más opciones para los juegos de datos. Los Batch–input se utilizan para la carga masiva de datos desde archivos a tablas de diccionario. Los BI pueden ser online (se ejecutan la momento) o de fondo (programados para un momento determinado). Los BI de fondo pueden ser visibles (que se vea lo que hace) o invisibles (que no se vean o que no se vean hasta que haya un error). Las tablas internas en un BI deben ser siempre del formato BDCDATA. Ejemplo: tabla_interna LIKE BDCDATA. Los campos deben crearse con LIKE y no con INCLUDE STRUCTURE para que funcionen bien. Los BI tienen 3 pasos: 1.- Pasar los datos de un fichero (txt o Excel) a una tabla interna. El archivo debe tener la misma estructura que la tabla, y los campos vendrán separados por una tabulación. 2.- Hacer la grabación del juego de datos 3.- Pasar los datos de la tabla interna a la base de datos.

Page 14: ABAPIntro

Abrir la grabadora, ponerle un nombre y la transacción que queremos grabar. A continuación debemos realizar nosotros en esa transacción todos los pasos a realizar por el BI pero solo para un registro. Cuando hayamos terminado pinchamos en guardar y pulsamos F3 hasta que nos salga la pantalla de la grabación con el código para usar en nuestro programa. Los modos de visualización de un BI son A (vemos todos los procesos), N (no vemos nada hasta el final) y E (no vemos nada hasta que ocurra un error). Los procedimientos para pasar la tabla interna a la base de datos son:

PERFORM nombre_pantalla USING ‘programa’ ‘pantalla’ ‘X (sólo si es 1ª pantalla’

PERFORM nombre_campo USING ‘campo_tabla’ campo_tabla_interna o ‘valor’ Estos procedimientos los utilizaremos por cada fichero que debamos subir. Para poder salir de un BI ponemos ‘/BEND’ en el valor del campo. En la función WS_UPLOAD en la opción Filetype podemos poner DAT (archivo de datos tabulados), ASC (archivo ASCII), BIN (archivo binario), DBF (archivo DBASE), IBM (ASCII con codepage) o WK1 (hoja de calculo). Si tenemos que hacer cualquier modificación (crear campos, borrarlos, etc.) hay que volver a hacer la grabación y modificar el código fuente. Los juegos de datos son BI preparados para lanzarse en cualquier momento. El LOOP debería ser: LOOP AT tabla_interna AT FIRST PERFORM iniciarJuegoDatos � función BDC_OPEN_GROUP ENDAT PERFORM tratarDatos � Los perform pantalla y campos PERFORM insertarDatos � Función BDC_INSERT AT LAST PERFORM cerrarJuegoDatos � Función BDC_CLOSE_GROUP ENDAT END LOOP En la función BDC_OPEN_GROUP, Group es el nombre del juego de datos guardado, Keep es para mantener guardado el juego o eliminarlo, User será ‘SY–UNAME’. En la función BDC_INSERT, Tcode es la transacción a ejecutar, Dynprotab es la tabla interna (batch2).

FUNCIONES La transacción SE37 sirve para crear o modificar funciones. Todas las funciones tienen los siguientes parámetros: EXPORTING var = valor. Variables a exportar desde nuestro programa hacia la función. En la función entran como Importing. IMPORTING var = valor. Es un parámetro opcional. Variables que importa el programa desde la función. En la función son los Exporting. TABLES = tabla. Es un parámetro opcional. Tablas a tratar. Deben tener la misma estructura en el programa que en la función. Suele ser la misma tabla. EXCEPTIONS var = valor. Es un parámetro opcional. Son las excepciones o errores. En la transacción SE37 tenemos varias pestañas para cada función. En Import nos salen todas las variables que importa y los atributos de esa variable. En Export salen todas las

Page 15: ABAPIntro

variables que exporta la función. En Exception debemos definir todas las excepciones que pueda tener la función. Las instrucciones que van dentro de una función no llevan punto (.) al final. Solo se pone el punto (.) al final de la función, como ultima instrucción. En la función, la excepción se llama con RAISE nombre_excepcion. Devuelve un código para poder tratarlo; este código esta definido en el programa en el apartado de EXCEPTIONS en la llamada a la función. Para usar ese código se haría con IF SY–SUBRC = valor_excepcion. Se puede poner como ultima excepción OTHERS = valor, para poder utilizarlo en el caso de no tener contemplado el error. Los valores de la excepción pueden ser cualquiera salvo 0. Las funciones más utilizadas son: POPUP_TO_GET_VALUE � Popup para introducir un dato. ALSM_EXCEL_TO_INTERNAL_TABLE � Subir un Excel a una tabla interna WS_UPLOAD � Subir un txt. Es similar a UPLOAD. También se usa para subir el archivo de SAP al servidor. Está obsoleta en la última versión, utilizar GUI_UPLOAD; es igual. WS_DOWNLOAD � Descargar de SAP a un txt. Es similar a DOWNLOAD. También se usa para bajar el archivo del servidor a SAP. Está obsoleta en la última versión, utilizar GUI_DOWNLOAD; es igual.

WS_FILENAME_GET � Para que salga un CommonDialog de búsqueda de Windows.

FORMULARIOS (SAPSCRIPT) Los formularios se crean, modifican o borran en la transacción SE71. Los formularios se pueden crear con SAPSCRIPT o SMARTFORM. Los formularios se utilizan para imprimir plantillas fijas. En la pestaña Cabecera podremos ver: Datos de gestión. Son los atributos del formulario. Rellenamos Significado y Descripción, dejando el resto como aparece por defecto. Parametrización básica. Especificamos el formato de página. En Página inicial elegimos la página que deseamos como inicial. En la pestaña Páginas podremos ver las distintas páginas del formulario: En Tratar � Crear elemento crearemos nuevas páginas. En Pag. Subsig., especificaremos que página seguirá a la actual. En la pestaña Ventanas podremos ver las distintas ventanas de la página: Debe existir una ventana “Main” en cada página. Las ventanas se crean en Tratar � Crear elemento. En cada ventana debemos especificar sus dimensiones. En la pestaña Ventana / Página especificaremos que ventanas se asignan a cada página. La misma ventana se puede existir en varias páginas. En la pestaña Formato de párrafo especificaremos los formatos de párrafo. Se crean en Tratar � Crear elemento. En la pestaña Formato caracteres especificaremos un formato pequeño para ciertas palabras. Para poder usar el formulario debemos activarlo en el menú Formulario.

Page 16: ABAPIntro

Tenemos que tener en cuenta que a la hora de imprimir los datos en un formulario, primero se ejecuta la ventana main y después el resto de ventanas. Con el programa estándar RSTXSCRP convertimos un formulario en formato txt codificado para poder transportarlo. Si queremos copiar un formulario vamos al menú Utilidades � Copiar de mandante y elegimos los datos y parámetros que nos interesen copiar. En el menú Utilidades � Activar debugger activamos el modo debug sin entrar en el formulario. Sirve para comprobar que se pasan bien los parámetros. Nos aparecerá una ventana y pulsamos sobre OK para comenzar el debug. El botón Cancelar cancelará el debug actual. El botón Finalizar cancela todos los debug. Dentro del debug, /W nos muestra el código de la ventana que se está ejecutando y /E nos muestra el código del elemento que se está ejecutando. Si queremos tener una vista preliminar del formulario iremos al menú Utilidades � Impresión test. Escogemos la impresora (normalmente la local) y a continuación en Visualizar. Pulsando F9 o en el menú Elementos de texto desde la pestaña Paginas, mostraremos el editor de código del formulario. En el menú Opciones � Form_Painter podremos configurar como queremos que aparezca. En el código del formulario poniendo “,, (Doble coma)” conseguimos un salto de tabulación. Las variables se usan con esta sintaxis: ‘&var1&’. Para borrar líneas del editor hacemos doble clic sobre la línea a borrar y después en Borrar. Dentro del editor, en la sección de párrafo seleccionaremos el formato de párrafo con el que aparecerá esa línea. Los formatos predefinidos son: * � Formato por defecto /= � Continuación de la línea anterior /* � Comentario /: � Comando Con el comando /: NEW–PAGE nombre_pagina generaremos una nueva página. Con el comando BOX [XPOS ‘nº’ medida][YPOS ’nº’ medida][WIDHT ’nº’ medida][HEIGHT ’nº’ medida][FRAME ’nº’ medida][INTENSITY ’nº’ medida] creamos una caja. Las medidas pueden ser: TW � Twin. 1/20 puntos PT � Punto. 1/72 pulgada IN � Pulgada. 2,54 CM CM � Centímetro. 10 MM

Page 17: ABAPIntro

CH � 1 carácter LN � 1 línea Para asociar un report a un formulario pondremos esto en el formulario: /: PERFORM nombre IN PROGRAM nombre USING &var1& &var2& CHANGING &var1& &var2&. En el programa tendremos que poner un procedimiento Abrir_formulario, tantos procedimientos Escribir_formulario como datos y un procedimiento Cerrar_formulario. Ejemplo: LOOP AT tabla_interna AT NEW campo READTABLE tabla_interna WHERE tabla_interna–campo = tabla_interna–campo. WRITE_FORM ELEMENT = ‘elemento’ WINDOW = ‘ventana’ ENDAT

WRITE_FORM ELEMENT = ‘elemento’ WINDOW = ‘MAIN’ ENDLOOP Podemos crear una ventana con un logotipo. Para ello creamos la ventana y ponemos el siguiente código: INCLUDE ’nombre_logo’ OBJECT TEXT ID SDVD PARAGRAPH ST. A continuación debemos poner el tipo de la ventana a GRAPH (no antes, dado que el modo GRAPH no deja escribir código) Los logos se suben desde la transacción SE71, menú Entorno � Gestión � Gráfico. Archivos en servidor doc. GRAPHICS. BMAP, especificamos el logo y el color, para subirlo pulsaremos F5 y elegir la imagen .TIFF a subir.

ALV (ABAP LIST VIEWER) Sirven para hacer listados por pantalla en formato tablas. Existen dos tipos de ALV, normal y jerárquico. Para ambos utilizar las plantillas. Los programas BALVHD01 y BALVHD02 son ejemplos que proporciona el estándar de SAP de ALV jerárquico. El código que aparece siempre en un ALV es: TYPE–POOLS: SLIS. DATA: FIELDCAT TYPE SLIS_T_FIELDCAT_ALV FIELDCAT_LN LIKE LINE FIELDCAT SORTCAT TYPE SLIS_ SORTCAT_LN LINE SORTCAT EVENCAT TYPE SLIS_ EVENCAT_LN LIKE LINE OF EVENCAT COL_POS TYPE I SPOS TYPE I. Deben existir siempre estos procedimientos: Seleccionar_datos. Procedimiento para meter los datos a la tabla interna.

Page 18: ABAPIntro

Crear_catalogo. Debe tener una línea por cada columna que queremos mostrar. Tiene esta estructura: PERFORM BUILD_FIELDCAT USING: ’tabla’ ’campo’ ’longitud’ ’L’ ’cabecera_a_mostrar’ Visualizar_datos. Se define el siguiente código y luego hace una llamada a la función REUSE_ALV_GRID_DISPLAY.: DATA: prg LIKE sy–repid. prg = sy–repid. DATA: salida TYPE SLIS_EXIT_BY_USER. En la plantilla, el procedimiento PERFORM ALV_USER_COMMAND se utiliza para que al hacer doble clic sobre un campo del ALV se ejecute otro programa o transacción. En el When se especifica el campo sobre el que hacer clic y a continuación se pone la acción a ejecutar. Si queremos desactivar este procedimiento comentar todos los When.

AYUDAS DE BUSQUEDA Se crean en la transacción SE11 pinchando sobre Ayuda de búsqueda. Seleccionar simple y rellenar todos los datos de la pestaña Atributos. En método de selección especificar la tabla para la que queremos la ayuda e ir seleccionando los campos. Si queremos que se muestre en la ayuda de búsqueda debemos marcarlo como “exp”. En P.I. especificaremos la posición en la que aparecerá el campo. Si el campo lo hemos marcado como EXP debemos especificar un número de posición. En PosS especificaremos la posición en la ventana de dialogo. Puede estar vacío o contener el mismo valor que P.I. En V.S. especificamos si el campo se puede modificar o solo visualizar. Para que no se pueda modificar debemos marcar esta opción. Los tipos de diálogos pueden ser: Dialogo dependiente. Visualización de valores inmediata. Salen los valores del campo directamente. Dialogo con limitaciones. Si la ayuda de búsqueda es compuesta, pondremos una descripción, las ayudas simples que contiene y asignaremos los parámetros a las ayudas simples. Para usar la ayuda de búsqueda en un report usaremos este código: PARAMETERS: nombre LIKE tabla–campo MATCHCODE OBJECT ‘nombre_ayuda’.

MODULE POOL Se crean en la transacción SE80. Poner Programa y asignarle un nombre. Debemos especificar un TOP (normalmente tendrá el mismo nombre que el programa pero terminado en top). El TOP sirve para meter código, principalmente declaraciones de variables, tablas, estructuras, etc. Sobre el nombre el programa pulsar botón derecho y Crear � Dynpro. Le pondremos la descripción de la pantalla, grabaremos, activaremos y pincharemos sobre Dispos. Las pantallas se llamarán 0100, 0200, 0300, …. En lista de elementos podemos ver los atributos de los elementos de la pantalla.

Page 19: ABAPIntro

A los campos de entrada / salida asignarles el correspondiente campo de la tabla interna. En la sección Dynpros poner el código de la pantalla. En PROCESS BEFORE OUTPUT especificar el código a ejecutar al cargar la pantalla; en PROCESS AFTER INPUT especificar el resto de código. Si hacemos doble clic sobre el estatus del PBO creamos menús. En SET PF_STATUS ponemos el nombre del menú (en mayúsculas). Al hacer doble clic sobre el nombre creamos el status donde podemos elegir el tipo de menú. En Barra de pulsadores definiremos los siguientes submenús. Ponemos en estático y luego en Texto de función, nombre de icono y Texto info ponemos la descripción, el icono y el mensaje que saldrá cuando pase el puntero por encima. Elegir el método abreviado. En SET TITLEBAR ‘xxx’ sirve para ponerle un nombre al menú. No se suele poner. En el PBO y en el PAI poner el código del programa. No elegir el TOP. Para poder ejecutar los Module Pool debemos crear una transacción. Botón derecho � Crear transacción, ponerle como nombre el mismo que el del programa terminado en T y especificar la dynpro principal. La instrucción LEAVE PROGRAM sirve para abandonar el programa.

TABLE CONTROL Es un componente de un Module Pool. Creamos una dynpro. Pulsamos dispos. y elegimos Table Control. Cogemos un campo de entrada / salida y lo ponemos dentro del Table Control. Como nombre le ponemos el campo de la tabla a la que va asociado y pulsamos “Enter” y a la pregunta que nos hace le decimos que SI. Añadimos los campos que queramos y después con el campo de texto ponemos el nombre de las columnas. En el modulo TOP pondremos: CONTROLS: nombre_table_control TYPEWIEW USING SCREEN ‘pantalla’. En la pantalla del table control poner después del Module Status: LOOP AT tabla_interna WITH CONTROL table_control CURSOR table_control–CURRENT_LINE. MODULE Pasar_Datos. ENDLOOP Y después del Process After Input: LOOP AT tabla_interna MODULE Grabar_Datos. ENDLOOP Después del Status tendremos que llenar la tabla interna. El contenido del procedimiento Pasar_datos es: MOVE–CORRESPONDING tabla_interna TO tabla_diccionario. El contenido del procedimiento Grabar_datos es: READTABLE tabla_interna INDEX table_control–CURRENT_LINE. IF SY–SUBRC = 0. MOVE–CORRESPONDING tabla_diccionario TO tabla_interna. MODIFY tabla_interna INDEX table_control–CURRENT_LINE. ENDIF.

Page 20: ABAPIntro

USER–EXIT Son programas. Son trozos del estándar que nosotros podemos definir y modificar. Cada dynpro tiene una User–Exit. Las User–Exit se utilizan para hacer acciones dentro del estándar como por ejemplo pulsar guardar.

ORDENES DE TRANSPORTE Se ven en las transacciones SE09 Y SE10. Normalmente, los programas, tablas, etc., no se guardan en local. Se meten dentro de una orden de transporte. Para ello al crearlo en el cuadro de dialogo introducir la orden de desarrollo (que nos la proporciona el consultor) y pulsar en Grabar; saldrá una nueva ventana pidiendo la orden de transporte (que también nos la proporciona el consultor). Las clases de órdenes de transporte son: Customizing. Son las órdenes de transporte que crean los consultores para el customizing de SAP. Workbenck. Son las órdenes de transporte de programación. Los estados de las órdenes de transporte pueden ser: Modificables. Activas pero con programas modificables. No liberada, no se pueden pasar a la siguiente máquina. Liberadas. Terminadas, ya no se puede volver a activar el programa. Si se quiere modificar se debe pedir una nueva orden de transporte. Las órdenes de transporte deben pasarse en el orden de creación. Cada orden tiene asignada una tarea. Con F5 podemos ver las órdenes transportadas. Pulsamos en visualizar. Crear órdenes o pulsando F6, elegir Workbench. Proyecto no se rellena. En tareas añadir a las personas para que metan sus programas. Destino se deja vacío. Grabamos. Al principio aparecerá como “no clasificado”, es decir, no hay nada asignado, está vacía. Para liberar una orden de transporte, pulsar F9 y pulsar guardar. Saldría de ventana de documentación. Antes de liberar una orden hay que verificar la orden. Se hace en el menú Orden / Tarea � Verificación completa, elegir todos los pasos. Desde un report, en el menú Utilidades � Versiones � Gestión de versiones, podemos ver el historial de órdenes de transporte del programa. En Comparación REMOTE comparamos el programa con otra versión en otra máquina. Comparar (F8) sirve para ver las modificaciones de ese programa.