SAP Netweaver / ABAP                  Notas técnicas / Tips / Tutorials

Cómo utilizar los Documentos de Modificación para registrar cambios a tablas de la base de datos de SAP

Conozca cómo generar un historial permanente de los cambios realizados en tablas de SAP, y también de clientes (tablas Z), mediante el uso de la herramienta "Documentos de Modificación".

Cuando se ejecuta una transacción en SAP, ocurren múltiples actualizaciones en la base de datos.

SAP admite registrar de manera permanente los cambios realizados en datos de documentos o en datos maestros - permitiendo así mantener un historial de cambios. Una forma de lograrlo es utilizando las opciones técnicas en una tabla transparente "Grabar en log modificaciones de datos" (que será tratada en otro tip) y otra es mediante las tablas de “Documentos de modificación” CDHDR y CDPOS, que llevarán el registro de las modificaciones producidas.

Es posible también, utilizando esta misma técnica, guardar los cambios que se realizan sobre tablas Z.

 

En el presente TIP se detallarán los pasos requeridos para generar las entradas en las tablas CDHDR y CDPOS mencionadas anteriormente, utilizando una tabla Z. Para ello, el tutorial incluirá lo siguiente:

a) Creación de una tabla Z con datos

b) Creación de un “Documento de modificación”

c) Creación de un Reporte que será el encargado final de la generación de los registros en las tablas CDHDR y CHPOS.

a) Creación de una tabla Z con datos

Acceder a la transacción SE11 para la creación de una tabla Z, en nuestro caso ZTABLA, e insertar los registros que se deseen, ya sea mediante una vista de mantenimiento a la tabla Z o por un programa que mantenga los datos de la tabla.

ABAP-Create-ZTABLA-1

b) Creación de un objeto de “Documento de modificación” simple (ZNUEVO), que comprende el historial de cambios de la tabla Z creada anteriormente (ZTABLA).

1) Ir a la Transacción SCDO, que permitirá crear un “objeto de documento de modificación”, también llamado clase de objeto.

Para que los cambios de datos puedan ser registrados en las tablas de documentos de modificación, deberían incluirse todas las tablas deseadas en una clase de objeto. En este caso sólo se hará sobre el objeto ZTABLA, como se muestra en la figura siguiente:

ABAP--Create-Change-Document-2

Presionar el botón Create.

Crear el nombre del nuevo objeto de modificación que debe cumplir con las reglas de convención de nomenclatura de objetos de cliente. Es muy probable, que aparezcan mensajes como el siguiente: Change document object ZNUEVO is not in your namespace, do you still want to create the object?” Pulsar simplemente el botón [Yes].

El nombre ZNUEVO de objeto creado también es llamado clase de objeto.

2) En la pantalla siguiente, incorporar los nombres de la o las tablas sobre las cuales se necesita mantener el control de historial de cambios. Para nuestro ejemplo, añadir sólo el objeto ZTABLA.

ABAP-Create-Change-Document-IE-3

Al presionar el botón Insert Entries, aparecerá la siguiente pantalla, donde será necesario elegir el botón Salvar.

ABAP-Create-Change-Document-4

3) Posteriormente, es necesario generar el programa de actualización. Para ello acceder a Menú → Utilities(M) → Generate update pgm.

ABAP-Create-Change-Document-Generate-5

NOTA: Nuevamente, aquí también es probable que aparezca el mensaje de “warning”: “Change document object ZNUEVO is not in your namespace; do you still want to generate the object?” En ese caso, pulsar el botón [Yes].

4) Completar los datos de detalle de la creación del objeto como se muestra en la siguiente imagen, y presionar el botón Generate.

ABAP-Create-Change-Document-Generate-1-6

NOTA: En este ejemplo, donde el grupo de función ZFG_NUEVO no existe, se mostrará un mensaje de información notificando que dicho grupo de función será creado en este proceso de generación. En dicho caso, pulsar [Yes].

5) Al presionar el botón Generate, se obtendrá la siguiente salida, donde se puede observar que lo generado por Generate update pgm., incluyen en los parámetros de entrada (Input Parameter), los valores especificados en la pantalla de arriba (ZNUEVO, ZFG_NUEVO) y los datos de la función generada (ZNUEVO_WRITE_DOCUMENT), encargada de generar posteriormente los registros de entrada en las tablas CDHDR y CDPOS.

ABAP--Generate-Update-Program-7

6) Desde esa pantalla, al presionar el botón Salvar comienza la generación de todos los elementos necesarios, donde aparecerá una pantalla similar a la mostrada arriba indicando el estado de los objetos como “Created” y el mensaje: “All generations made for object ZNUEVO.”

Consideraciones:

Sólo aquellos campos de la tabla indicada que tengan asociados elementos de datos con la propiedad “Doc.modificación” ó “Change document” (ubicada en la solapa Further Characteristics) y tengan esta opción seteada, serán auditados por este procedimiento. Esto quiere decir que hay algunos objetos que nunca podrán ser controlados porque no incluyen esa opción. La pantalla siguiente muestra un ejemplo de un elemento de datos en donde sí está habilitada la opción (Checkbox “Change Document”).

ABAP-Display-Data-Element-8

 

Los pasos anteriores completaron la creación del Objeto de modificación ZNUEVO.

Al crear el objeto de modificación ZNUEVO, se crea además una función, ZNUEVO_WRITE_DOCUMENT, encargada de la generación de las entradas de registro en las tablas CDHDR y CDPOS.

En el último paso del tutorial (c) se crea un programa que invoca a la función ZNUEVO_WRITE_DOCUMENT, que alimentará las tablas CDHDR y CDPOS asociados a los cambios del campo maktx (descripción del material) de la tabla ZTABLA.

c) Creación de un programa para utilizar el objeto de documento de modificación ZNUEVO

Algunas consideraciones previas al llamado de la función (que se visualiza en el código de la función)::

• Guardar los valores del registro antes de realizar algún cambio en wa_znuevo_old

• Inicializar la workarea que guardará el nuevo cambio.

• Realizar el cambio que se desea registrar y guardarlo

• Actualizar el registro en la tabla de la base de datos.

Si no hubo error al realizar el update, continuar.

• Completar la clave que se utilizará en las tablas CDHDR/CDPOS. Generalmente coinciden con la clave de la tabla Z.

• Llamar a la nueva función creada.

 

Código del programa

REPORT zr_actualizar_ztabla.

TYPES: BEGIN OF ty_s_tabla,

mandt TYPE mandt,

matnr TYPE matnr,

laeda TYPE laeda,

maktx TYPE maktx,

END OF ty_s_tabla.

 

DATA: lv_clave TYPE cdhdr-objectid,

lv_material TYPE matnr VALUE '000000000000000001',

lv_descp_corta TYPE maktx VALUE 'Botella 1000 cm3',

wa_znuevo_old TYPE ty_s_tabla,

wa_znuevo_new TYPE ty_s_tabla,

ti_cdtxt TYPE STANDARD TABLE OF cdtxt.

START-OF-SELECTION.

SELECT SINGLE mandt matnr laeda maktx

FROM ztabla

INTO wa_znuevo_old

WHERE matnr = lv_material.

IF sy-subrc EQ 0.

"Se realiza una modificación a la tabla Z creada

wa_znuevo_new = wa_znuevo_old.

wa_znuevo_new-maktx = lv_descp_corta.

UPDATE ztabla FROM wa_znuevo_new.

COMMIT WORK AND WAIT.

 

IF sy-subrc EQ 0.

"Asignación del valor del campo clave de la tabla ZTABLA, con el que se accederá a las tablas CDHDR y CDPOS para ver el historial.

lv_clave = wa_znuevo_new-matnr.

 

CALL FUNCTION 'ZNUEVO_WRITE_DOCUMENT'

EXPORTING

objectid = lv_clave

tcode = syst-tcode

utime = syst-uzeit

udate = syst-datum

username = syst-uname

n_ztabla = wa_znuevo_new

o_ztabla = wa_znuevo_old

upd_ztabla = 'U'

TABLES

icdtxt_znuevo = ti_cdtxt.

ENDIF.

ENDIF.

La función ZNUEVO_WRITE_DOCUMENT alimentará las tablas CDHDR/CDPOS de la siguiente forma:

 

Contenido de la Tabla CDHDR

ABAP-Table-CDHDR-9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Donde:

Contenido-tabla-CDHDR-11

Contenido de la Tabla CDPOS

ABAP-Table-CDPOS-10

Donde:

Contenido-tabla-CDPOS-12

 

Además de la función presentada más arriba, se mencionan algunas funciones adicionales que acceden al contenido de estas tablas:

 

  • CHANGEDOCUMENT_READ_HEADERS
  • CHANGEDOCUMENT_READ_POSITIONS
  • CHANGEDOCUMENT_READ
  • CHANGEDOCU_CDPOS_READ

 

Para tener en cuenta ....

El método explicado en este tip, realiza un registro permanente de los cambios sobre las tablas seleccionadas.

Relacionado a herramientas de SAP que permiten registrar cambios, se sugiere la lectura de un tip anterior publicado en teknodatips, "Application Logging" en ABAP: Cómo mejorar su código implementando registro de mensajes, pero este método realiza un cambio temporario.


n_Nancy-Figueroa Especialista Workflow - ABAP
n_Celeste-Coopa Especialista ABAP

 

 

 

 

Copyright 2014 - Teknoda S.A.

IMPORTANTE:
“Notas técnicas de SAP ABAP" se envía con frecuencia variable y sin cargo como servicio a nuestros clientes SAP. Contiene notas/tutoriales/artículos técnicos desarrollados en forma totalmente objetiva e independiente. Teknoda es una organización de servicios de tecnología informática y NO comercializa hardware, software ni otros productos.
Si desea suscribir otra dirección de e-mail para que comience a recibir las Notas Técnicas SAP, envíe un mensaje desde esa direcciónsapping@teknoda.com, aclarando nombre, empresa, cargo y país del suscriptor.

SAP, Netweaver, R/3, Fiori,S4/HANA y ABAP son marcas registradas de SAP AG. SAP no es el editor de esta publicación y no es responsable de la misma en ningún aspecto. La información contenida en esta publicación ha sido generada por nuestros especialistas a partir de fuentes consideradas confiables y del ejercicio profesional cotidiano. No obstante, por la posibilidad de error humano, mecánico, cambio de versión u otro, Teknoda no garantiza la exactitud o completud de la misma.
COPYRIGHT TEKNODA S.A. PROHIBIDA SU REPRODUCCION TOTAL O PARCIAL SIN CONSENTIMIENTO DE TEKNODA

 


 

Copyright © 2024 Teknoda Tech Portal & Training. Todos los derechos reservados.
Joomla! es software libre, liberado bajo la GNU General Public License.