Está en la página 1de 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
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
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.
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.
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.
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.
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.
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.
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 param1
WITH param1 = P1 var1
var1 = P2 deben ser del mismo
VIA SELECTION–SCREEN tipo que P1 y P2
AND RETURN
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.
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.
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
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.
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
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.


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

También podría gustarte