banjina 发表于 2015-9-20 07:38:49

SAP 查找User更改历史记录

  对前台业务的修改,系统都会保存更改的用户,更改时间,更改的位置(数据源),更改的内容(新值和旧值)。当然对于PO之类的也可以看Changes ,对于系统没有提供Changes的地方,我们可以用下面的方法查找

  
  1. 通过TABLE:
  CDHDR
  更改凭证抬头
  CDPOS
  更改凭证项目
  

  
  2. 通过FUNCTION:
  CHANGEDOCUMENT_READ_HEADERS
  取得更改凭证抬头
  CHANGEDOCUMENT_READ_POSITIONS
  取得更改凭证项目
  
  如果不用OBJECTCLASS,查找过程会相当缓慢,下面是常用的OBJECTCLASS。不过有些OBJECTCLASS会对应多个T-code,另外那两个Table里显示的T-Code有时候不是我们操作的真正的T-Code

[*]ADRESSE - xk01
[*]ADRESSE3 - su01
[*]BANF - me54n
[*]BELEG - vf21
[*]BETRIEB - vd02
[*]COND_A - me31k
[*]DEBI - xd02
[*]EINKBELEG - me22n
[*]ENTRYSHEET - ml85
[*]FEATURE - ct04
[*]INCOMINGINVOICE -mrbr
[*]INFOSATZ - me13
[*]KLASSE - cl02
[*]KRED - xk02,XK01
[*]LIEFERUNG - vl03n
[*]MATERIAL - mm01
[*]MM_SERVICE -me22n
[*]MRP_AREA - mm01
[*]NRINTERVAL - omh6
[*]PFCG - pfcg
[*]REVISION - me32k
[*]SACH - fs00
[*]SPEC_TMP - ml10
[*]STLV - ml02
[*]VASMD - ac03
[*]VERKBELEG - va02
另外下面的程序也是可以显示的(from http://www.cnblogs.com/jackcnblogs/articles/580342.html )。
显示修改数据(tables CDHDR and CDPOS)
REPORT z_alv_cdhdr_cdpos.
TYPE-POOLS slis.
DATA : cdhdr TYPE cdhdr.      
SELECT-OPTIONS :
s_objcls FOR cdhdr-objectclas OBLIGATORY,
s_objtid FOR cdhdr-objectid,
s_chngnr FOR cdhdr-changenr,
s_usrnam FOR cdhdr-username DEFAULT sy-uname,
s_udateFOR cdhdr-udate    DEFAULT sy-datum,
s_time   FOR cdhdr-utime,
s_tcodeFOR cdhdr-tcode,
s_plncnr FOR cdhdr-planchngnr,
s_chngno FOR cdhdr-act_chngno,
s_wsplnd FOR cdhdr-was_plannd,
s_chngid FOR cdhdr-change_ind.

SELECTION-SCREEN SKIP.
PARAMETERS p_max TYPE numc3 OBLIGATORY DEFAULT '200'.

*---------------------------------------------------------------------*
TYPES :
BEGIN OF ty_s_cdhdr.
      INCLUDE STRUCTURE cdhdr.
TYPES : checkbox,
END OF ty_s_cdhdr,

BEGIN OF ty_s_cdpos.
      INCLUDE STRUCTURE cdpos.
TYPES : checkbox,
END OF ty_s_cdpos.

*---------------------------------------------------------------------*
DATA :
* Layout for ALV
gs_layout TYPE slis_layout_alv,
* Change document header
t_cdhdr TYPE TABLE OF ty_s_cdhdr.

*---------------------------------------------------------------------*
START-OF-SELECTION.

* Read Change document header
SELECT * INTO TABLE t_cdhdr
             UP TO p_max ROWS
         FROM cdhdr
          WHERE objectclas IN s_objcls
            and objectid   in s_objtid
            and changenr   in s_chngnr
            AND username   IN s_usrnam
            AND udate      IN s_udate
            AND utime      IN s_time
            AND tcode      IN s_tcode
            AND planchngnr IN s_plncnr
            AND act_chngno IN s_chngno
            AND was_plannd IN s_wsplnd
            AND change_ind IN s_chngid.

gs_layout-zebra = 'X'.
gs_layout-colwidth_optimize = 'X'.
gs_layout-box_fieldname = 'CHECKBOX'.

* Display ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
            i_callback_program      = sy-cprog
            i_callback_user_command = 'USER_COMMAND'
            i_structure_name      = 'CDHDR'
            is_layout               = gs_layout
       TABLES
            t_outtab                = t_cdhdr.

*---------------------------------------------------------------------*
*       FORM USER_COMMAND                                             *
*---------------------------------------------------------------------*
FORM user_command USING u_ucomm   TYPE syucomm
                        us_selfield TYPE slis_selfield.   "#EC CALLED

* Macro definition
DEFINE m_sort.
    add 1 to ls_sort-spos.
    ls_sort-fieldname = &1.
    ls_sort-up = 'X'.
    append ls_sort to lt_sort.
END-OF-DEFINITION.

DATA :
    ls_cdhdr TYPE ty_s_cdhdr,
    ls_sortTYPE slis_sortinfo_alv,
    lt_sortTYPE slis_t_sortinfo_alv,
*   Change document items
    lt_cdpos TYPE TABLE OF ty_s_cdpos.

CASE u_ucomm.
    WHEN '&IC1'.
      PERFORM check_marked USING us_selfield.

*   Read Change document items
      LOOP AT t_cdhdr INTO ls_cdhdr WHERE checkbox = 'X'.
      SELECT * APPENDING TABLE lt_cdpos
               FROM cdpos
                WHERE objectclas = ls_cdhdr-objectclas
                  AND objectid   = ls_cdhdr-objectid
                  AND changenr   = ls_cdhdr-changenr.
      ENDLOOP.

      m_sort 'CHANGENR'.

*   Display ALV
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
         EXPORTING
                i_structure_name = 'CDPOS'
                is_layout      = gs_layout
                it_sort          = lt_sort
         TABLES
                t_outtab         = lt_cdpos.

ENDCASE.

ENDFORM.                               " USER_COMMAND
*---------------------------------------------------------------------*
*       FormCHECK_MARKED
*---------------------------------------------------------------------*
*       What has been marked in t_cdhdr
*---------------------------------------------------------------------*
FORM check_marked USING us_selfield TYPE slis_selfield.

FIELD-SYMBOLS :
    <cdhdr> TYPE ty_s_cdhdr.

READ TABLE t_cdhdr TRANSPORTING NO FIELDS WITH KEY checkbox = 'X'.
IF NOT sy-subrc IS INITIAL AND
   NOT us_selfield-tabindex IS INITIAL.
    READ TABLE t_cdhdr INDEX us_selfield-tabindex ASSIGNING <cdhdr>.
    <cdhdr>-checkbox = 'X'.
ENDIF.  
页: [1]
查看完整版本: SAP 查找User更改历史记录