表CDHDR and CDPOS
个人日记
一、sap的更改记录的保存
1、所有的修改记录在表CDHDR and CDPOS
2、表CDHDR
表CDHDR记录了用户于什么时间点用什么样的事务代码修改了什么样的对象
在表CDHDR字段:Change doc. Object代表了修改的对象
常见的一些Change doc. Object如下
Change doc. object | 描述 |
AENNR | ECM |
EINKBELEG | 采购订单 |
INFOSATZ | 采购信息记录 |
ADRESSE | 地址主数据 |
ADRESSE3 | 地址主数据 |
LIEFERUNG | 发货单 |
KRED | 供应商主数据 |
COND_A | 价格条件 |
DEBI | 客户主数据 |
MATERIAL | 物料 |
VERKBELEG | 销售凭证 |
BOM的更改記錄, objectclas = 'STUE'
3、表CDPOS 是更改记录的行项目
记录了具体是哪个表中的哪个字段,从什么值修改为了什么值
二、更改记录的报表查询
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
具体案例如下:
SAP的字段和对象的修改都会保存旧值,数据保存在CDHDR和CDPOS表中,对于提取旧值你可以采用两种方法
1)使用sap的标准函数CHANGEDOCUMENT_READ_HEADERS 和CHANGEDOCUMENT_READ_POSITIONS
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.
文章评论