SAP 凭证修改记录CDHDR / CDPOS使用及说明

这篇具有很好参考价值的文章主要介绍了SAP 凭证修改记录CDHDR / CDPOS使用及说明。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目的:

一、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

By  Willem Hoek

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".

sap cdhdr,ABAP技术,数据库,java,开发语言,运维,服务器

 
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.

 文章来源地址https://www.toymoban.com/news/detail-771235.html

到了这里,关于SAP 凭证修改记录CDHDR / CDPOS使用及说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SAP UI5 官方教程学习记录

    最近有闲跟着官方的Get Started教程学习了UI5,记录一下自己学习中遇到的几个问题。 本文链接:https://www.cnblogs.com/hhelibeb/p/17835722.html 注意文档可能不是最新的,和实际示例代码有出入,比如本文写作时,Data Binding Tutorial里面的Step 1: No Data Binding 教程里写的代码是, 示例的实

    2024年02月05日
    浏览(38)
  • 10. SAP ABAP OData 服务如何支持修改(Update)操作

    本教程的前九篇文章,我们已经先后介绍了 SAP ABAP OData 服务,如何支持读取和过滤这两种不会引起系统出现 Side Effect(即系统状态被影响)的操作,以及创建(Create)和删除(Delete) 这两种会引起系统出现 Side Effect 的操作。 本文继续介绍 SAP ABAP OData 服务如何实现修改(Update)操作。

    2024年02月01日
    浏览(39)
  • SAP ERP系统SD模块常用增强之一:VA01/VA02创建或修改SO的输入检查

    在SAP/ERP项目的实施中销售管理模块(SD)的创建和修改销售订单必定会有输入字段校验检查的需求,来防止业务人员录入错误或少录入数据,SAP公司也考虑到这一点,所以这方面的配置功能也非常强大,通常情况下不需要写开发代码,业务顾问通过配置不完整日志就可以非常

    2023年04月12日
    浏览(41)
  • SAP ABAP 使用SICF发布HTTP API接口

    一、SE24创建类: Z_HCX_HTTP 1、创建类: 2、切换到接口(interface)页签,输入IF_HTTP_EXTENSION ,回车。切换到方法(method)页签,双击IF_HTTP_EXTENSION~HANDLE_REQUEST进入代码编辑界面。   3、在 IF_HTTP_EXTENSION~HANDLE_REQUEST 方法中编写代码: (注:文末附另一种写法) 二、使用事务码 

    2024年02月11日
    浏览(46)
  • 如何使用Python获取SAP Temporary key 临时密钥

    SAP 临时密钥是用于激活 SAP 软件的一种许可证,只能在有限的时间内使用。这些密钥可用于评估目的或在系统迁移期间使用。它们是临时解决方案,通常在一定时间后过期。 临时密钥: 如果创建永久许可证密钥时出现任何错误,SAP支持门户网站提供临时的Business Objects许可证密

    2024年02月12日
    浏览(37)
  • SAP ABAP 使用GENIOS求解线性规划问题的简单例子

    主要内容来自Operations Research ABAP ,结合我遇到的需求,做了一些修改。 需求:有BOX1和BOX2两种箱子,分别能包装不同数量的A物料和B物料,给出若干数量的A, B物料,怎样包装可以使箱子数最少? 线性规划有助于解决类似问题。 以下是一个示例程序,包含必要的注释,   运行

    2024年02月16日
    浏览(44)
  • SAP使用函数NUMBER_GET_NEXT创建流水号

     1. 系统中设定流水号;使用T-Code:SNRO来创建一个流  输入Object:ZLC_001,然后单击创建。 然后输入Shorttext, Long text, Number length domain在写程序的时候应该会另外创建,这里测试就使用料号的Domain MATNR来做,其他的参数使用默认值就可以了,然后保存输入的资料。 系统提示创建

    2024年02月13日
    浏览(39)
  • SAP MDG —— 使用DIF导入物料主数据 Part4 开发篇

    在Staging Area中创建/修改小批量的物料主数据,推荐使用标准文件上载功能(USMD_FILE_UPLOAD)。 使用Data Import Framework (DIF),配合转换器也可以实现在Staging Area中上传物料: 所有治理范围内的实体都将基于给定的主键而创建(工厂,分销链等)。 这可能导致出现大量的Maintenanc

    2023年04月22日
    浏览(42)
  • SAP集成技术(十二)SAP PO

    集成工作的一个重要部分是基于流程的集成,而在SAP环境中实现接口需求的众所周知的产品是SAP Process Orchestration(以下简称SAP PO)。 现代集成架构通常使用中央系统来控制和处理应用程序之间的通信。这些系统通常被称为中间件或集成平台。 SAP PO可以用作中心中间件产品。

    2024年02月05日
    浏览(43)
  • SAP集成技术(十一)SAP混合集成平台

    SAP产品之间实现无缝集成还需要一些时间,目前可能还存在一些技术挑战或者需要进一步的开发工作,以便在未来能够轻松地把所有SAP产品整合在一起。让SAP产品能够顺利地与非SAP的解决方案连接也是目前尚未完全解决的问题。实现产品和服务之间的协调一致(即“harmoniza

    2024年02月05日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包