SAP-ABAP 批量查询SAP标准日志(更改历史記錄)

常用對象名:

描述

OBJECTCLAS對象

物料主数据变更查询(MM03) MATERIAL
采购信息记录变更查询(ME1L) INFOSATZ
采购申请(PR) BANF
采购订单变更查询(PO) EINKBELEG
销售凭证(含合同、订单等) VERKBELEG
客户 DEBI
供应商 KRED
信用(FD32) KLIM

 

如何查找对象

1.对象表:TCDOB TCDOBT(SE11,根據表查詢對象)/SCDO(根據對象查詢表)
2.用单号,编码模糊查询
3.限定时间与用户进行测试

批量查询标准日志

方法一:事务代码(SE38):RSSCD100 / (RC1CD100\RSSCD1TS)

方法二:后台表(SE11):CDHDR 和 CDPOS

 CDHDR -抬头表

OBJECTCLAS 对象类
OBJECTID 对象值
CHANGENR 文档更改编号
CHANGE_IND

U 更新
I 插入
E 删除 (单字段文档)
D 删除
J 插入 (单字段文档)

 

CDPOS-项目表
OBJECTCLAS 对象类 
OBJECTID 对象值 
CHANGENR 文档更改编号
TABNAME 表名
TABKEY 已更改的表记录码
FNAME 字段名
CHNGIND 修改类型 (U, I, E, D)
TEXT_CASE 标识:X=文本更改
UNIT_OLD 更改文档,参照的单位
UNIT_NEW 更改文档,参照的单位
CUKY_OLD 更改文档,参照货币 
CUKY_NEW 更改文档,参照货币 
VALUE_NEW 更改字段的新内容
VALUE_OLD 更改字段的新内容
   

 

复制代码
*&---------------------------------------------------------------------*
*& Report  ZCDHDR_CDPOS
*&
*&---------------------------------------------------------------------*
*&
*& 标准程序:RSSCD100
*&---------------------------------------------------------------------*
REPORT zcdhdr_cdpos NO STANDARD PAGE HEADING .

TYPE-POOLS: slis.
TABLES: cdhdr,cdred,tcdob.
DATA: fldct TYPE slis_t_fieldcat_alv,
      slayt TYPE slis_layout_alv ,
      varnt LIKE disvariant,
      repid LIKE sy-repid .

DATA: itab TYPE TABLE OF cdred WITH HEADER LINE.
DATA: it_cdhdr TYPE TABLE OF cdhdr WITH HEADER LINE.
DATA: it_cdred TYPE TABLE OF cdred WITH HEADER LINE.

SELECT-OPTIONS :
        s_clas   FOR tcdob-object OBLIGATORY ,
        s_objtid FOR cdhdr-objectid,
        s_usrnam FOR cdhdr-username ,
        s_udate  FOR cdhdr-udate DEFAULT sy-datum,
        s_time   FOR cdhdr-utime,
        s_tcode  FOR cdhdr-tcode,
        s_tab    FOR cdred-tabname,
        s_fname  FOR cdred-fname,
        s_tabkey FOR cdred-tabkey .

AT SELECTION-SCREEN OUTPUT.
  %_s_clas_%_app_%-text   = '对象类'.
  %_s_objtid_%_app_%-text = '对象值'.
  %_s_usrnam_%_app_%-text = '用户名'.
  %_s_udate_%_app_%-text  = '日期'.
  %_s_time_%_app_%-text   = '时间'.
  %_s_tcode_%_app_%-text  = '事务码'.
  %_s_tab_%_app_%-text    = '修改的表名'.
  %_s_fname_%_app_%-text  = '字段名'.
  %_s_tabkey_%_app_%-text = 'KEY值'.

START-OF-SELECTION.
  PERFORM getdata.
  PERFORM outdata.

*&---------------------------------------------------------------------*
*&      Form  getdata
*&---------------------------------------------------------------------*
FORM getdata.
  CLEAR: itab,itab[],it_cdhdr,it_cdhdr[].

  SELECT * INTO TABLE it_cdhdr
     FROM cdhdr
     WHERE objectclas IN s_clas   AND
           objectid   IN s_objtid AND
           username   IN s_usrnam AND
           udate      IN s_udate  AND
           utime      IN s_time   AND
           tcode      IN s_tcode  .

  LOOP AT it_cdhdr.
    CLEAR: it_cdred,it_cdred[].
    CALL FUNCTION 'CHANGEDOCUMENT_READ'
      EXPORTING
        changenumber               = it_cdhdr-changenr
        objectclass                = it_cdhdr-objectclas
        objectid                   = it_cdhdr-objectid
      TABLES
        editpos                    = it_cdred
      EXCEPTIONS
        no_position_found          = 1
        wrong_access_to_archive    = 2
        time_zone_conversion_error = 3
        OTHERS                     = 4.
    IF sy-subrc = 0.
      LOOP AT it_cdred WHERE fname   IN s_fname AND
                             tabname IN s_tab AND
                             tabkey  IN s_tabkey .
        APPEND it_cdred TO itab.
      ENDLOOP.
    ENDIF.
  ENDLOOP.
ENDFORM. "getdata

*&---------------------------------------------------------------------*
*&      Form  outdata
*&---------------------------------------------------------------------*
FORM outdata.
  DATA lines(10).

  slayt-colwidth_optimize = 'X'.
  slayt-zebra             = 'X'.
  slayt-detail_initial_lines = 'X'.   "&ETA 空单元格也显示
  repid = sy-repid.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      = repid
      i_structure_name        = 'CDRED'
      i_save                  = 'A'
      is_layout               = slayt
      i_callback_user_command = 'USER_COMMAND'
    TABLES
      t_outtab                = itab
    EXCEPTIONS
      program_error           = 1
      OTHERS                  = 2.
ENDFORM. "outdata

*&--------------------------------------------------------------------*
*&      Form  user_command
*&--------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
                        rs_selfld TYPE slis_selfield.

  CASE r_ucomm.
    WHEN '&IC1'.
      READ TABLE itab INDEX rs_selfld-tabindex.
      CHECK sy-subrc = 0.
    WHEN 'REFRESH'.
      PERFORM getdata.
  ENDCASE.

  rs_selfld-row_stable = 'X'.
  rs_selfld-col_stable = 'X'.
  rs_selfld-refresh    = 'X'.
ENDFORM. "user_command

*&--------------------------------------------------------------------*
*&      Form  set_status
*&--------------------------------------------------------------------*
FORM set_status USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'STANDARD' EXCLUDING rt_extab .
ENDFORM. "set_status
ZCDHDR_CDPOS
复制代码

 

posted on   Violin_Huang  阅读(1270)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示