LOG de Modificaciones para tablas Z

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • rootgumer
    Junior Member
    • nov
    • 4

    #1

    LOG de Modificaciones para tablas Z

    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
    Moderator
    • ago
    • 1255

    #2
    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.
    David Carballido Córdova

    Comentario

    • acha3318
      Senior Member
      • abr
      • 182

      #3
      Hola David, por que no nos hace un favor, y nos amplias un poco mas el punto No.2

      Gracias.

      Originalmente publicado por DavidXD_XD
      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.

      Comentario

      • DavidXD_XD
        Moderator
        • ago
        • 1255

        #4
        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:

        Código:
        [COLOR="Blue"](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)[/COLOR]
        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.
        
        [COLOR="Blue"]* 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[/COLOR]
        
        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.
        David Carballido Córdova

        Comentario

        • acha3318
          Senior Member
          • abr
          • 182

          #5
          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.



          Originalmente publicado por DavidXD_XD
          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:

          Código:
          [COLOR="Blue"](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)[/COLOR]
          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.
          
          [COLOR="Blue"]* 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[/COLOR]
          
          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.

          Comentario

          • sub_dan
            Member
            • nov
            • 42

            #6
            Originalmente publicado por acha3318
            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 .

            Comentario

            • Chan
              Member
              • jul
              • 70

              #7
              Y no será mejor utilizar la utilidad Table Logging de SAP?

              Por internet encontrarás información, como por ejemplo:


              Comentario

              • sub_dan
                Member
                • nov
                • 42

                #8
                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).
                Editado por última vez por sub_dan; 07/09/2010, 18:42:32.

                Comentario

                • Chan
                  Member
                  • jul
                  • 70

                  #9
                  En mi sistema no requerimos esta funcionalidad de Tabe Logging, pero se que existe y sus pros/contras.

                  Originalmente publicado por sub_dan
                  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).

                  Comentario

                  • quintor
                    Junior Member
                    • nov
                    • 10

                    #10
                    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.

                    Comentario

                    • moniandre
                      Junior Member
                      • abr
                      • 3

                      #11
                      Log de registros

                      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.

                      Comentario

                      • Andres1225
                        Junior Member
                        • oct
                        • 10

                        #12
                        Log de tabla Z

                        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.

                        De antemano, Muchas gracias por su ayuda
                        Andrés Felipe Hernández!

                        Comentario

                        • tdavila
                          Junior Member
                          • nov
                          • 3

                          #13
                          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..

                          Originalmente publicado por DavidXD_XD
                          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:

                          Código:
                          [COLOR="Blue"](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)[/COLOR]
                          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.
                          
                          [COLOR="Blue"]* 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[/COLOR]
                          
                          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.

                          Comentario

                          Trabajando...