Las tablas de customizing de SAP sólo pueden ser modificadas por un usuario a la vez. Esto es debido a que están protegidas por bloqueos que no permiten la actualización simultánea de los datos. En ocasiones puede ser interesante eliminar bloqueos SAP, como por ejemplo en un curso de formación donde varios usuarios deben actualizar la misma tabla al mismo tiempo. En el siguiente artículo se muestra cómo se pueden desbloquear tablas SAP que hayan sido bloqueadas automáticamente por el sistema.

Para eliminar los bloqueos SAP sobre las tablas de customizing, y así poder acceder varios usuarios a modificar las mismas tablas hay que seguir los siguientes pasos:

1. Crear tabla de bloqueos SAP

En primer lugar, se debe crear una tabla de bloqueos SAP del diccionario para guardar qué mandantes están desbloqueados. La tabla debe tener la siguiente estructura:

Crear tabla de bloqueos SAP

En esta tabla, si el registro de un mandante tiene `X` el campo FLAG, querrá decir que en ese cliente existen bloqueos. Si por el contrario en el campo se pone el carácter ‘O’ no funcionará el bloqueo de tablas, por lo tanto dos o más usuarios podrán modificar simultáneamente la misma tabla.

2. Programas para bloquear/desbloquear tablas SAP

Se pueden crear dos programas, uno para bloquear y otro para desbloquear tablas SAP, que guardarán en la tabla anterior el estado del mandante donde se ejecute.

Desbloquear mandante SAP

Creamos un programa con el nombre ZSEQOFF y le pegamos el siguiente código:

[php]
TABLES: zenq.
DATA: off.
IF sy-mandt = ‘000’.
MESSAGE ‘Esta función no se permite en el mandante 000’ TYPE ‘A’.
ENDIF.
SELECT SINGLE FOR UPDATE * FROM zenq WHERE sysname = syst-sysid
AND mandt = syst-mandt.
IF sy-subrc = 0.
zenq-flag = ‘O’.
UPDATE zenq.
IF sy-subrc = 0.
off = ‘X’.
ELSE.
off = ‘ ‘.
ENDIF.
ELSE.
zenq-sysname = syst-sysid.
zenq-mandt = syst-mandt.
zenq-flag = ‘O’.
INSERT zenq.
IF sy-subrc = 0.
off = ‘X’.
ELSE.
off = ‘ ‘.
ENDIF.
ENDIF.
IF off = ‘X’.
WRITE: / ‘Desbloqueos desactivados (dependiente de mandante)’.
ELSE.
WRITE: / ‘Error al desactivar los desbloqueos’.
ENDIF.
[/php]

Al ejecutar este programa, se crea o modifica un registro en la tabla con el nombre de la máquina y el cliente en el que se está ejecutando. A este registro se le pone en el campo FLAG de la tabla ‘O’, de manera que se eliminarán los bloqueos SAP automáticos.

Bloquear mandante SAP

Creamos un programa con el nombre ZSEQON y le copiamos el siguiente código:

[php]
TABLES: zenq.
DATA: on.
SELECT SINGLE FOR UPDATE * FROM zenq WHERE sysname = syst-sysid
AND mandt = syst-mandt.
IF sy-subrc = 0.
zenq-flag = ‘X’.
UPDATE zenq.
IF sy-subrc = 0.
on = ‘X’.
ELSE.
on = ‘ ‘.
ENDIF.
ELSE.
on = ‘X’.
ENDIF.
IF on = ‘X’.
WRITE: / ‘Bloqueos activados (dependiente de mandante’.
ELSE.
WRITE: / ‘Error al activar los bloqueos’.
ENDIF.
[/php]

Este programa tiene la misma funcionalidad que el programa anterior, con la diferencia que escribe ‘X’ en el campo FLAG del registro. Con ello se consigue que los bloqueos en el sistema se encuentren activados.

3. Modificar include

Para que los desbloqueos de las tablas SAP surtan efecto, es necesario modificar un include estándar. Para ello vamos a la transacción SE80 y elegimos el objeto de desarrollo LSENAF01. Para modificar un objeto estándar hay que registrar el objeto en SAP. En la línea 242, introducimos tras el código rc = SY-SUBRClas siguientes líneas:

[php]
IF syst-mandt <> ‘000’.
DATA e_zenq TYPE zenq.
SELECT SINGLE * FROM zenq INTO e_zenq
WHERE sysname = syst-sysid AND mandt = syst-mandt.
IF e_zenq-flag = ‘O’.
rc = 0.
EXIT.
ENDIF.
ENDIF.
[/php]

Este include se ejecuta cada vez que se intenta acceder a una tabla o vista de actualización de una tabla de customizing. Si el campo RC es distinto de 0, querrá decir que la tabla está bloqueada por algún usuario. Al introducir este código, leemos de la tabla el registro del cliente en el que nos encontremos, y si su campo FLAG está marcado, omitirá el aviso de que la tabla SAP se encuentra bloqueada.

Con estos pasos podremos hacer que las tablas de la SPRO no sean bloqueadas por un usuario, de manera que varios puedan modificarlas al mismo tiempo. Hay que tener cuidado con esto, ya que es algo peligroso ya que si dos usuarios modifican un mismo registro de manera inadecuada puede dar lugar a errores graves. Por lo tanto, se recomienda sólo eliminar bloqueos SAP en cursos y máquinas de formación, para poder agilizar el tiempo del curso.