Bloquear Campos de Una Tabla

Buenas

La pregunta es sencilla, no se si tenga solución
Se creo una tabla con N cantidad de campos. Después de creada se sugirió bloquear algunos campos, es decir, cuando en el reporte se le ingrese la información a la tabla, esta no pueda ser modificable.

Existe alguna manera de lograr este objetivo?

Gracias

1 me gusta

Hola, si es posible, si tu objetivo es que el reporte bloquee registros que serán modificados por ese reporte, y queden bloqueados para que nadie los toque hasta que el reporte termine.

Lo realizas por medio de objetos de bloqueo (SE11). Creas el objeto de bloque, específico para la tabla a bloquear, y le das boqueo de escritura. Cuando lo hayas creado se crearán dos módulos, uno para bloqueo y otro para desbloqueo.
Podes bloquear la tabla completar o registros indicando las claves, y liberarlos al finalizar el proceso.

Si necesitas ayuda, puedo guiarte por medio de capturas y código.

Si puedes hacerlo por medio de capturas y código seria genial!
Muchas gracias

Deduzco que se creo una tabla zeta?

1 me gusta

Oka!

  1. Creación del objeto de bloqueo: Tx SE11

Dependiendo de la nomenclatura de tu proyecto indica el nombre, el cliente que tenemos usamos: EZT****
image

image

  1. Aparece el nombre del objeto de bloqueo
  2. Indicas el nombre de la tabla
  3. Modo de bloqueo: Escritura

Luego haciendo click en
image

Podemos ver los módulos creados:

  1. El Código

Para bloquear los registros lo realizamos con el módulo ENQUEUE:
En el reporte por medio de Modelo ingresamos el ENQUEUE_EZT_xxxx.

image

En el reporte automaticamente se crea el siguiente código, en CLAVES aparecerán las claves de la tabla.

CALL FUNCTION 'ENQUEUE_EZT_xxxx'
    EXPORTING
      <CLAVES>
      _collect       = abap_true
    EXCEPTIONS
      foreign_lock   = 1
      system_failure = 2
      OTHERS         = 3.

Si queremos bloquear un registro solo, en las claves correspondientes ponemos los valores del registros a bloquear, como pusimos _collect = abap_true, iremos acumulando los registros, si tenes que bloquear toda la tabla, ingresa el código del módulo dentro de un LOOP y vas bloqueando todos los registros, acumulandolos.

Una vez acumulados procedemos a bloquear todos los registros acumulados con el siguiente código:

CALL FUNCTION 'FLUSH_ENQUEUE'
EXCEPTIONS
   foreign_lock   = 1
   system_failure = 2
   OTHERS         = 3.

A continuación podemos hacer lo que desees con esos registros dentro del reporte.

IMPORTANTE: recuerda que si o si debes desbloquearlos, sino quedan bloqueados hasta proximo aviso ajaja. Por medio del siguiente código realizamos el desbloqueo, ponlo en alguna parte donde siempre el flujo de información pasará.

CALL FUNCTION 'DEQUEUE_ALL'.

También puedes el DEQUEUE creado en la SE11, pero yo directamente uso el que aparece en el código, es un desbloqueo general.

Espero que te haya ayudado, Saludos!

5 Me gusta

EXCELENTE!!! Muchas gracias! si me ayudo tu solucion!!!

Hola Dani, puedes explicar más :pray: para quienes no sabemos ABAP, por ejemplo:

  • qué es un objeto de bloqueo?
  • esto solo aplica para tablas zeta, verdad?
  • más datos que sean básicos sobre el tema

De editar tu mensaje, será movido al sector de tutoriales, ya que respeta el formato de “paso a paso”.
Responde a este mensaje cuando lo hayas hecho :+1:

Hola,
perdón que me entrometa, pero si ayuda, el tutorial ya está creado:

Saludos.

2 Me gusta

Mala mía, no sabía que era lo mismo :smile: