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:
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.
Muchas gracias en S4H lo logre pero me salio el siguiente error cuando cree la tabla en el ECC;
Debería modificarse el paquete del objetos R3TR TABL ZENQ. El sistema original del objeto es el sistema IDT.
Aparte del sistema original, el paquete sólo puede ser modificado con ayuda de herramientas del Transport Organizer.
Si desea asignar el objeto a un paquete que está en otra capa de transporte, entonces necesitará la autorización de gestión para el Change and Transport System.
Logre hacerlo en e S4H muchas gracias!
Pero en el ECC no logre hacerlo ya que al guardarlo como objeto local me dio error; estoy iniciando en el mundo abap, me podrías apoyar ?
Debería modificarse el paquete del objetos R3TR TABL ZENQ. El sistema original del objeto es el sistema IDT.
Aparte del sistema original, el paquete sólo puede ser modificado con ayuda de herramientas del Transport Organizer.
Si desea asignar el objeto a un paquete que está en otra capa de transporte, entonces necesitará la autorización de gestión para el Change and Transport System.
Buenos días Brayan,
No hay diferencia de hacerlo en ECC y en S4H, los pasos que hay que seguir son los mismos. Habría que analizar los paquetes u órdenes que has creado, pero tiene pinta que has intentado guardar la tabla en un paquete con capa de transporte IDT, y por eso no te deja meterlo en una orden local. Solo con el mensaje no te lo puedo asegurar, pero parece algo así. Prueba ameter todo en un paquete, o todo como objetos locales.
Un saludo.
Se puede realizar tambien en S4Hana?
Buenos días Brayan,
Sí, en un sistema S4/HANA también funciona este sistema de desbloqueo de tablas.
Un saludo.
Si estoy creando dos registros y le doy click al tiempo en el boton guardar, como puedo hacer para que no me genere el mismo ID?
Buenas tardes camilo,
No entiendo bien tu pregunta, pero si lo que intentas decir es que quieres crear dos registros en la tabla a la vez, te diría que no es necesario, ya que solo tiene que haber un registro por mandante.
Un saludo y gracias por tu interés.