SAP 变更记录表 : CDHDR / CDPOS - 说明及使用

2023-10-13 22:59

本文主要是介绍SAP 变更记录表 : CDHDR / CDPOS - 说明及使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

From: 

1, http://blog.sina.com.cn/s/blog_7dce1fac01014yp2.html

2, http://www.cnblogs.com/cnlmjer/archive/2012/04/18/4099808.html

3,http://www.sap123.com/a/47/

目的:

一、sap的更改记录的保存

1、所有的修改记录在CDHDR and CDPOS

2、表CDHDR

表CDHDR记录了用户于什么时间点用什么样的事务代码修改了什么样的对象

表CDHDR字段:Change doc. Object代了修改的对象

3、CDPOS 是更改记录的行项目

记录了具体是哪个中的哪个字段,从什么值修改为了什么值

如需查看文档对象,可使用事务代码SCDO,相关表为TCDOB/TCDOBT

CHNGIND(修改标识符)输入:D(U表示更新,I表示插入,E表示删除单个字段,D表示删除整行或整个单据)

二、更改记录的报查询

1、可以在t-code中点击changes,来进行查询;

2、通过专门的t-code查询某个具体Change Object

如OV51 查看:Display of Changes for Customer

    ME14 查看 changes to Purchasing Info Record

3、通过事务代码AUT10 可以查询所有的Change Object,实际上就是针对上述2个做了一个报

 

三、表CDHDR and CDPOS更新原则

1、创建时,系统的更新原则与更新内容。

可以通过创建主数据、业务数据、创建业务数据项目来测试

基本的结论是

创建时一般不保存记录,即使保存,也只是简单记录一下,能够在上述2个"新建一条数据"

 

2、修改数据时,系统的更新原则与更新内容。

基本原则:以下类型的字段不会查看到更改记录

  •   不能够修改的字段,例如创建日期、创建者;
  •     在可以通过其他途径可以看到的字段(在其他中可以看到更改的东西);如在销售订单中,对行项目的数量、金额更改在VBEP(数量更改)、KONA(金额更改)中
  •       其他一些特殊情况

具体的控制点是sap会对 中的每一个 字段 都会有一个标记LOGFLAG,该 字段 控制Indicator for writing change documents

如何使用

简单指引:
1, 将 Key Doc No. ( 如: SO No. / PO No. 等)作为 Object_ID 在 CDHDR 中查询出相关的Object Class 及 CHANGENR 变更号码及日期等信息;
2,基于已知或查出的 Object Class 及 Changenr 及 Table Name / Field Name 即可查询历史记录,如要细化,则需使用 TableKey 过行组合查询;
3,其中 Table Name 有时会和实际的表名不一致,需使用一些方法查出。

Change SAP documents -- tables CDHDR and CDPOS

This notes relates to SAP ECC (ERP Central Component) 5.0 

Changes to a lot of SAP documents are stored in table CDHDR and table CDPOS. This include changes such as: change data in Material Master, changes to Purchase Req (PR), Purch Orders, Contracts, Sales Orders, and many more. 

Lets look at an example where an existing purchase order (PO) is changed. 
  • Create a PO (number 4500000616) 
  • Now lets make a change to the PO. Lets change the Short text in item 10 from "FLOWERS" to "SAP123".
 


The change information can be see in Purchase Order. Menu:  Environment > Item Changes 

 


This changed information are stored in table CDHDR and table CDPOS. Lets see if we can find it by displaying the table using transaction se16 (display table): 

 


 

The detail of what was changed is in table CDPOS. The link is via the document number, field CHANGENR. Lets look at table CDPOS 

 


 


These tables contains not just PO changes but changes to most SAP documents (accross all functional areas). So, as you can imagine these tables get huge. Entries in tables are grouped by Object Class (field OBJECTCLAS -- Change doc object). Some of these options include: 


OBJECTCLAS - transaction (fields in CDHDR) 
  • ADRESSE - xk01 
  • ADRESSE3 - su01 
  • BANF - me54n 
  • BELEG - vf21 
  • BETRIEB - vd02 
  • COND_A - me31k 
  • DEBI - xd01, xd02 
  • EINKBELEG - me22n <<< example above 
  • ENTRYSHEET - ml85 
  • FEATURE - ct04 
  • INCOMINGINVOICE - mrbr 
  • INFOSATZ - me13 
  • KLASSE - cl02 
  • KRED - xk02 
  • 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 
  • .... etc


提取旧值方法



1) 使用sap的标准函数CHANGEDOCUMENT_READ_HEADERS 和CHANGEDOCUMENT_READ_POSITIONS


CALL FUNCTION 'CHANGEDOCUMENT_READ_POSITIONS' "Change document: Read change document items 
EXPORTING 
*   archive_handle = 0          " sy-tabix      Handle on Open Archive Files 
    changenumber =              " cdpos-changenr  Change document number 
*   tablekey = SPACE            " cdpos-tabkey  Object class table key 
*   tablename = SPACE           " cdpos-tabname  Object class table name 
*   tablekey254 = SPACE         " cdpos_uid-tabkey  Table Key for CDPOS in Character 254 
*   keyguid = SPACE             " cdpos_uid-keyguid  UUID in Character Format 
*   keyguid_str = SPACE         " cdpos_str-keyguid  UUID in Character Format 
IMPORTING 
    header =                    " cdhdr   Change document header (structure CDHDR) 
   et_cdred_str =              " cdred_str_tab  Additional Change Document - Table for STRINGs 
* TABLES 
*   editpos =                  " cdshw     Table with edited change document items 
EDITPOS_WITH_HEADER =               "CDRED  更改文档,显示结构 
 EXCEPTIONS 
NO_POSITION_FOUND = 1       "               No item foun 
 WRONG_ACCESS_TO_ARCHIVE = 2  "              incorrect access to archive 
 


2)使用select语句直接从表中读取。 
直接使用SELECT语句读取数据的示例: 
 *提取信用额度字段修改的抬头信息
       select cdhdr~changenr cdhdr~udate cdhdr~utime
        into corresponding fields of table p_cdhdr
        from cdhdr
        where cdhdr~objectclas = 'KLIM' and
          cdhdr~objectid = wa_customerinfo-kunnr.
      if sy-subrc = 0.
*提取信用额度字段修改的字段值
         select cdpos~changenr cdpos~value_old cdpos~value_new
          into corresponding fields of table p_cdpos
          from cdpos
            for all entries in p_cdhdr
          where cdpos~objectclas = 'KLIM' and
            cdpos~objectid = wa_customerinfo-kunnr and
            cdpos~changenr = p_cdhdr-changenr and
            cdpos~tabname = 'KNKK' and
            cdpos~fname = 'KLIMK'.
        if sy-subrc = 0.
       endif.
endif. 
可以在CHANGEDOCUMENT_READ_HEADERS 中设置中断获得对象类型。


ex.


提取有变动的 Acc. changes
SELECT SINGLE tabkey value_new INTO (cdpos-tabkey,ikoinh)
FROM cdpos
WHERE objectclas = 'KRED'
AND objectid = itab-lifnr
AND changenr = itab-changenr
AND tabname = 'LFBK'
AND fname = 'KOINH'.


提取有变动的vendor最新日期


SELECT MAX( udate ) INTO itab-cndate FROM cdhdr
WHERE objectclas = 'KRED' AND objectid = itab-lifnr.


--------------------------------------------------------------------------------


抓取所有有变动的程序


report ztest001.
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_udate FOR cdhdr-udate DEFAULT sy-datum,
s_time FOR cdhdr-utime,
s_tcode FOR 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_sort TYPE slis_sortinfo_alv,
lt_sort TYPE 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
*--------------------------------------------------------------------


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.


ENDFORM.

这篇关于SAP 变更记录表 : CDHDR / CDPOS - 说明及使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/206439

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画