PDA

Ver la Versión Completa : LOG de Modificaciones para tablas Z


rootgumer
14/05/09, 19:28:05
Estimados, necesito generar un LOG de modificaciones para tablas Z, pero la idea es realizarlo con las herramientas del estandar, o utilizando el grupo de funciones asociado... si alguien ha implementado esto favor me ayude con los pasos a seguir o alguna documentación donde cachurear... muchas gracias.

DavidXD_XD
15/05/09, 06:56:01
Hola, en realidad no es muy dificil,

1. Registrar un objeto de modificacion de objetos dentro de la transaccion SCDO, logicamente debe comenzar con Z y dentro de ella registrar la tabla con la cual quieres que tenga el log.

2. Luego de crear el objeto de modificacion debes usar usar del programa en el cual realizar INSERT, UPDATE o DELETE los modulos de funciones que comienzan con el nombre CHANGEDOCUMENT*, si le das en referencia de utilizacion puedes copiar lo que el standard hace.

acha3318
16/05/09, 15:10:55
Hola David, por que no nos hace un favor, y nos amplias un poco mas el punto No.2

Gracias.

Hola, en realidad no es muy dificil,

1. Registrar un objeto de modificacion de objetos dentro de la transaccion SCDO, logicamente debe comenzar con Z y dentro de ella registrar la tabla con la cual quieres que tenga el log.

2. Luego de crear el objeto de modificacion debes usar usar del programa en el cual realizar INSERT, UPDATE o DELETE los modulos de funciones que comienzan con el nombre CHANGEDOCUMENT*, si le das en referencia de utilizacion puedes copiar lo que el standard hace.

DavidXD_XD
18/05/09, 16:47:33
Holas, aver explico mejor, una vez que se ha creado el objeto de modificacion en el primer punto pasamos a usar las funciones que comienzan con CHANGEDOCUMENT* de esta forma, supongamos q estamos insertando un registro en la tabla Z (como ejemplo ZTABLA) donde quiero que se cree el log y a la vez he creado el objeto ZOBJ , comenzaria asi:

(Rutina en la cual estoy llenado la estructura ZTABLA para realizar el INSERT y
tbm tener a la mano el *ZTABLA q es la estructura ZTABLA pero antes de realizar los cambios)
CALL FUNCTION 'CHANGEDOCUMENT_OPEN'
EXPORTING
OBJECTCLASS = 'ZOBJ'
OBJECTID = g_objectid
PLANNED_CHANGE_NUMBER = space
PLANNED_OR_REAL_CHANGES = space
EXCEPTIONS
SEQUENCE_INVALID = 1
OTHERS = 2.

* Donde g_objectid es la variable que sera como un ID que identificara
* univocamente al registro dentro de la tabla del log, por ejemplo si fuera
* registro de persona seria: sy-mandt + nro.IdentificacionPersona

CALL FUNCTION 'CHANGEDOCUMENT_SINGLE_CASE'
EXPORTING
TABLENAME = 'ZTABLA'
WORKAREA_OLD = *ZTABLA
WORKAREA_NEW = ZTABLA
CHANGE_INDICATOR = 'I'
DOCU_DELETE = 'X'
EXCEPTIONS
NAMETAB_ERROR = 1
OPEN_MISSING = 2
POSITION_INSERT_FAILED = 3
OTHERS = 4.

CASE SY-SUBRC.
WHEN 1. MESSAGE A600 WITH 'NAMETAB-ERROR'.
WHEN 2. MESSAGE A600 WITH 'OPEN MISSING'.
WHEN 3. MESSAGE A600 WITH 'INSERT ERROR'.
WHEN 4. MESSAGE A600 WITH 'SINGLE ERROR'.
ENDCASE.

CALL FUNCTION 'CHANGEDOCUMENT_CLOSE'
EXPORTING
OBJECTCLASS = 'ZTABLA'
OBJECTID = g_objectid
DATE_OF_CHANGE = sy-udate
TIME_OF_CHANGE = sy-uzeit
TCODE = sy-tcode
USERNAME = sy-uname
OBJECT_CHANGE_INDICATOR = 'I'
NO_CHANGE_POINTERS = space
EXCEPTIONS
HEADER_INSERT_FAILED = 1
OBJECT_INVALID = 2
OPEN_MISSING = 3
NO_POSITION_INSERTED = 4
OTHERS = 5.

CASE SY-SUBRC.
WHEN 1. MESSAGE A600 WITH 'INSERT HEADER FAILED'.
WHEN 2. MESSAGE A600 WITH 'OBJECT INVALID'.
WHEN 3. MESSAGE A600 WITH 'OPEN MISSING'.
WHEN 5. MESSAGE A600 WITH 'CLOSE ERROR'.
ENDCASE.

acha3318
28/05/09, 23:07:08
Hola David.
Tengo una duda muy grande, te expongo el caso, tenemos un modulo donde están involucradas varias tablas Z, digamos que a una de ellas necesito que se guarde la modificación, ya sea el INSERT, UPDATE o DELETE que hizo el usuario final.

Pregunta: Al yo crear o registrar el objeto de modificación por la SCDO y asociarle la tabla "Z", ya con eso registra las modificaciones en las tablas CDHDR y CDPOS?

Pregunta: El programa que das como ejemplo, ¿que efecto tiene sobre la tabla "Z"? ¿o es que debo escribir estas rutinas en todos los programas en donde figure el uso de la tabla "Z", para que guarde las modificaciones en las tablas CDHDR y CDPOS?

Si depronto tienes un ejemplo mas completo desde el principio te agradezco me lo envies a mi correo: acha3318@hotmail.com

Gracias.



Holas, aver explico mejor, una vez que se ha creado el objeto de modificacion en el primer punto pasamos a usar las funciones que comienzan con CHANGEDOCUMENT* de esta forma, supongamos q estamos insertando un registro en la tabla Z (como ejemplo ZTABLA) donde quiero que se cree el log y a la vez he creado el objeto ZOBJ , comenzaria asi:

(Rutina en la cual estoy llenado la estructura ZTABLA para realizar el INSERT y
tbm tener a la mano el *ZTABLA q es la estructura ZTABLA pero antes de realizar los cambios)
CALL FUNCTION 'CHANGEDOCUMENT_OPEN'
EXPORTING
OBJECTCLASS = 'ZOBJ'
OBJECTID = g_objectid
PLANNED_CHANGE_NUMBER = space
PLANNED_OR_REAL_CHANGES = space
EXCEPTIONS
SEQUENCE_INVALID = 1
OTHERS = 2.

* Donde g_objectid es la variable que sera como un ID que identificara
* univocamente al registro dentro de la tabla del log, por ejemplo si fuera
* registro de persona seria: sy-mandt + nro.IdentificacionPersona

CALL FUNCTION 'CHANGEDOCUMENT_SINGLE_CASE'
EXPORTING
TABLENAME = 'ZTABLA'
WORKAREA_OLD = *ZTABLA
WORKAREA_NEW = ZTABLA
CHANGE_INDICATOR = 'I'
DOCU_DELETE = 'X'
EXCEPTIONS
NAMETAB_ERROR = 1
OPEN_MISSING = 2
POSITION_INSERT_FAILED = 3
OTHERS = 4.

CASE SY-SUBRC.
WHEN 1. MESSAGE A600 WITH 'NAMETAB-ERROR'.
WHEN 2. MESSAGE A600 WITH 'OPEN MISSING'.
WHEN 3. MESSAGE A600 WITH 'INSERT ERROR'.
WHEN 4. MESSAGE A600 WITH 'SINGLE ERROR'.
ENDCASE.

CALL FUNCTION 'CHANGEDOCUMENT_CLOSE'
EXPORTING
OBJECTCLASS = 'ZTABLA'
OBJECTID = g_objectid
DATE_OF_CHANGE = sy-udate
TIME_OF_CHANGE = sy-uzeit
TCODE = sy-tcode
USERNAME = sy-uname
OBJECT_CHANGE_INDICATOR = 'I'
NO_CHANGE_POINTERS = space
EXCEPTIONS
HEADER_INSERT_FAILED = 1
OBJECT_INVALID = 2
OPEN_MISSING = 3
NO_POSITION_INSERTED = 4
OTHERS = 5.

CASE SY-SUBRC.
WHEN 1. MESSAGE A600 WITH 'INSERT HEADER FAILED'.
WHEN 2. MESSAGE A600 WITH 'OBJECT INVALID'.
WHEN 3. MESSAGE A600 WITH 'OPEN MISSING'.
WHEN 5. MESSAGE A600 WITH 'CLOSE ERROR'.
ENDCASE.

sub_dan
03/09/10, 21:11:03
Hola David.
Tengo una duda muy grande, te expongo el caso, tenemos un modulo donde están involucradas varias tablas Z, digamos que a una de ellas necesito que se guarde la modificación, ya sea el INSERT, UPDATE o DELETE que hizo el usuario final.

Pregunta: Al yo crear o registrar el objeto de modificación por la SCDO y asociarle la tabla "Z", ya con eso registra las modificaciones en las tablas CDHDR y CDPOS?

Pregunta: El programa que das como ejemplo, ¿que efecto tiene sobre la tabla "Z"? ¿o es que debo escribir estas rutinas en todos los programas en donde figure el uso de la tabla "Z", para que guarde las modificaciones en las tablas CDHDR y CDPOS?

Si depronto tienes un ejemplo mas completo desde el principio te agradezco me lo envies a mi correo: acha3318@hotmail.com

Gracias.


bueno recien aplique lo que explicaron aca y puedo responder al amigo que consulto de seguro ya lo hiso pero puede andar alguien mas con dudas por ahi ;)

Pregunta: Al yo crear o registrar el objeto de modificación por la SCDO y asociarle la tabla "Z", ya con eso registra las modificaciones en las tablas CDHDR y CDPOS?

las registra aplicando las funciones que nos dice David yo probe con un insert y un update y me quedo registrado en ambas tablas.

Pregunta: El programa que das como ejemplo, ¿que efecto tiene sobre la tabla "Z"? ¿o es que debo escribir estas rutinas en todos los programas en donde figure el uso de la tabla "Z", para que guarde las modificaciones en las tablas CDHDR y CDPOS?

seep debes escribir en cada z esto para que te valla guardando el log.

saludos .

Chan
03/09/10, 23:22:47
Y no será mejor utilizar la utilidad Table Logging de SAP?

Por internet encontrarás información, como por ejemplo:
http://help.sap.com/saphelp_nw04/Helpdata/EN/7e/c81ebb52c511d182c50000e829fbfe/content.htm
http://help.sap.com/saphelp_46c/helpdata/en/7e/c81ebb52c511d182c50000e829fbfe/content.htm
http://www.mariewagener.de/Note.September.2007

sub_dan
07/09/10, 18:29:56
Y no será mejor utilizar la utilidad Table Logging de SAP?

Por internet encontrarás información, como por ejemplo:
http://help.sap.com/saphelp_nw04/Helpdata/EN/7e/c81ebb52c511d182c50000e829fbfe/content.htm
http://help.sap.com/saphelp_46c/helpdata/en/7e/c81ebb52c511d182c50000e829fbfe/content.htm
http://www.mariewagener.de/Note.September.2007

lo has utilizado

yo comprobé que lo anterior funciona :) saludos.
a lo que pones ahora lo mire pero mmm me dio lata chequearlo lo que si vi que activar "Grabar en log modificaciones de datos"

Nota: La activación de la grabación en log de sistema retarda los accesos para modificar la tabla. En primer lugar para cada modificación debe escribirse un registro en la tabla log. En segundo lugar, muchos usuarios acceden paralelamente a la tabla log, de modo que pueden producirse situaciones de bloqueo, a pesar de que los usuarios trabajen en diferentes tablas de aplicación.

Dependencias
La grabación en log de sistema sólo tiene lugar cuando el parámetro rec/client está correctamente fijado en el perfil del sistema. La mera fijación del indicador no provoca la grabación en log de las modificaciones de tablas.

Podrá visualizar los logs existentes mediante la transacción historial de tablas (SCU3).

Chan
09/09/10, 21:33:11
En mi sistema no requerimos esta funcionalidad de Tabe Logging, pero se que existe y sus pros/contras.

lo has utilizado

yo comprobé que lo anterior funciona :) saludos.
a lo que pones ahora lo mire pero mmm me dio lata chequearlo lo que si vi que activar "Grabar en log modificaciones de datos"

Nota: La activación de la grabación en log de sistema retarda los accesos para modificar la tabla. En primer lugar para cada modificación debe escribirse un registro en la tabla log. En segundo lugar, muchos usuarios acceden paralelamente a la tabla log, de modo que pueden producirse situaciones de bloqueo, a pesar de que los usuarios trabajen en diferentes tablas de aplicación.

Dependencias
La grabación en log de sistema sólo tiene lugar cuando el parámetro rec/client está correctamente fijado en el perfil del sistema. La mera fijación del indicador no provoca la grabación en log de las modificaciones de tablas.

Podrá visualizar los logs existentes mediante la transacción historial de tablas (SCU3).

quintor
01/06/11, 20:24:06
Hola a todos,

Tengo una consulta adicional, si deseo incorporar el log de cambios de una tabla transparente (en mi caso BSEG, que ya tiene incorporado control de cambios) pero para un programa Z mediante el cual se cambia el bloqueo de pagos, cómo se podría manejar ese cambio para que aparezca directamente en el menú "Modificaciones de documentos" en el doc. original FB60 o doc. de pago.

Saludos.

moniandre
14/05/12, 20:56:36
Buena Tarde.

Necesito ayuda urgente por favor!! soy nueva en abap y necesito crear un log de modificacion, tengo una tabla z con vista de actualizacion y modificacion y necesito que cada que se modifique me guarde el usuario y la fecha de modificacion. tengo el objeto pero no se como utilizarlo en el programa, gracias por su ayuda.

Andres1225
30/10/12, 13:03:23
Buenos días,

Seguí las recomendaciones que dio David sobre agregar los módulos de funciones al programa, pero no me funciona :(

Podría alguien por favor enviarme un ejemplo o un instructivo para realizar esto!?

Necesito que los cambios en una Z se guarden en la CDPOS y CDHDR. :confused:

De antemano, Muchas gracias por su ayuda :)

tdavila
23/04/14, 20:59:09
Hola David implemente esta rutina pero ahi tengo un pequeño problema que no me sale todas las modificaciones que realizo en un registro en una tabla Z se supone que debo ver despues de una modificacion en el log los registros que tuvieron cambio pero nada haber si me ayudas con esto saludos..

Holas, aver explico mejor, una vez que se ha creado el objeto de modificacion en el primer punto pasamos a usar las funciones que comienzan con CHANGEDOCUMENT* de esta forma, supongamos q estamos insertando un registro en la tabla Z (como ejemplo ZTABLA) donde quiero que se cree el log y a la vez he creado el objeto ZOBJ , comenzaria asi:

(Rutina en la cual estoy llenado la estructura ZTABLA para realizar el INSERT y
tbm tener a la mano el *ZTABLA q es la estructura ZTABLA pero antes de realizar los cambios)
CALL FUNCTION 'CHANGEDOCUMENT_OPEN'
EXPORTING
OBJECTCLASS = 'ZOBJ'
OBJECTID = g_objectid
PLANNED_CHANGE_NUMBER = space
PLANNED_OR_REAL_CHANGES = space
EXCEPTIONS
SEQUENCE_INVALID = 1
OTHERS = 2.

* Donde g_objectid es la variable que sera como un ID que identificara
* univocamente al registro dentro de la tabla del log, por ejemplo si fuera
* registro de persona seria: sy-mandt + nro.IdentificacionPersona

CALL FUNCTION 'CHANGEDOCUMENT_SINGLE_CASE'
EXPORTING
TABLENAME = 'ZTABLA'
WORKAREA_OLD = *ZTABLA
WORKAREA_NEW = ZTABLA
CHANGE_INDICATOR = 'I'
DOCU_DELETE = 'X'
EXCEPTIONS
NAMETAB_ERROR = 1
OPEN_MISSING = 2
POSITION_INSERT_FAILED = 3
OTHERS = 4.

CASE SY-SUBRC.
WHEN 1. MESSAGE A600 WITH 'NAMETAB-ERROR'.
WHEN 2. MESSAGE A600 WITH 'OPEN MISSING'.
WHEN 3. MESSAGE A600 WITH 'INSERT ERROR'.
WHEN 4. MESSAGE A600 WITH 'SINGLE ERROR'.
ENDCASE.

CALL FUNCTION 'CHANGEDOCUMENT_CLOSE'
EXPORTING
OBJECTCLASS = 'ZTABLA'
OBJECTID = g_objectid
DATE_OF_CHANGE = sy-udate
TIME_OF_CHANGE = sy-uzeit
TCODE = sy-tcode
USERNAME = sy-uname
OBJECT_CHANGE_INDICATOR = 'I'
NO_CHANGE_POINTERS = space
EXCEPTIONS
HEADER_INSERT_FAILED = 1
OBJECT_INVALID = 2
OPEN_MISSING = 3
NO_POSITION_INSERTED = 4
OTHERS = 5.

CASE SY-SUBRC.
WHEN 1. MESSAGE A600 WITH 'INSERT HEADER FAILED'.
WHEN 2. MESSAGE A600 WITH 'OBJECT INVALID'.
WHEN 3. MESSAGE A600 WITH 'OPEN MISSING'.
WHEN 5. MESSAGE A600 WITH 'CLOSE ERROR'.
ENDCASE.