C223 生产版本BAPI

该篇博客详细介绍了如何在SAP系统中使用事务代码C223和函数CM_FV_PROD_VERS_DB_UPDATE来维护生产版本数据。通过示例代码展示了如何查询、更新或插入物料、工厂和生产版本信息,并执行事务处理确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、事务代码:C223

2、调用函数CM_FV_PROD_VERS_DB_UPDATE

"-----------------------------@斌将军-----------------------------
DATA:lt_mkal_i    TYPE TABLE OF mkal,
     lt_mkal_u    TYPE TABLE OF mkal,
     lt_mkal_d    TYPE TABLE OF mkal,
     ls_mkal      TYPE mkal,
     lt_mkal_aend TYPE TABLE OF mkal_aend,
     ls_mkal_aend TYPE mkal_aend.

SELECT
  matnr,
  werks,
  verid
FROM mkal
INTO TABLE @DATA(lt_makl)
FOR ALL ENTRIES IN @t_input
WHERE matnr = @t_input-matnr
  AND werks = @t_input-werks
  AND verid = @t_input-verid.

SORT lt_makl BY matnr werks verid.

SELECT
  *
FROM mkal_aend
INTO TABLE @DATA(lt_aend)
FOR ALL ENTRIES IN @t_input
WHERE matnr = @t_input-matnr
  AND werks = @t_input-werks
  AND verid = @t_input-verid.

SORT lt_aend BY matnr werks verid zaehl DESCENDING.

CLEAR:ls_mkal.
ls_mkal-matnr = '000000160000000019'."LV_MATNR."物料编号
ls_mkal-werks = '1011'."IS_MKAL-WERKS."工厂
ls_mkal-verid = 'JS20'."IS_MKAL-VERID."生产版本
ls_mkal-text1 = '333333'."IS_MKAL-TEXT1."生产版本的短文本
ls_mkal-bdatu = '99991231'."IS_MKAL-BDATU."生产版本的有效期截止日期
ls_mkal-adatu = sy-datum."IS_MKAL-ADATU."生产版本的有效期起始日期
ls_mkal-stlal = '01'."IS_MKAL-STLAL."可选的 BOM
ls_mkal-stlan = '1'."IS_MKAL-STLAN."BOM 用途
ls_mkal-plnty = 'N'."IS_MKAL-PLNTY."任务清单类型
ls_mkal-plnnr = '50000357'."IS_MKAL-PLNNR."任务清单组键值
ls_mkal-alnal = '1'."IS_MKAL-ALNAL."组计数器
*  LS_MKAL-SERKZ = ''."IS_MKAL-SERKZ."版本允许的重复制造
*  LS_MKAL-MDV01 = ''."IS_MKAL-MDV01."用于重复制造的生产线
*  LS_MKAL-ELPRO = ''."IS_MKAL-ELPRO."对组件提出发货仓储地点
*  LS_MKAL-ALORT = ''."IS_MKAL-ALORT."重复生产的收货库存地点
ls_mkal-prfg_f = '1'."检查生产版本的状态
ls_mkal-prfg_s = '1'."BOM - 检查生产版本的状态
*ls_mkal-PRFG_R = '1'."重复生产的收货库存地点
*ls_mkal-PRFG_G = '1'."重复生产的收货库存地点
ls_mkal-prdat = sy-datum."出品版本的最后测试日期
ls_mkal-bstma = 99999999."截至批量大小

READ TABLE lt_makl INTO DATA(ls_makl) WITH KEY matnr = '000000160000000019'
                                                werks = '1011'
                                                verid = 'JS20' BINARY SEARCH.
IF sy-subrc EQ 0."存在就更新
  APPEND ls_mkal TO lt_mkal_u.

  READ TABLE lt_aend INTO DATA(ls_aend) WITH KEY matnr = '000000160000000019'
                                                  werks = '1011'
                                                  verid = 'JS20' BINARY SEARCH.
  IF sy-subrc EQ 0.
    CLEAR:ls_mkal_aend.
    ls_mkal_aend-matnr = ls_aend-matnr."物料编号
    ls_mkal_aend-werks = ls_aend-werks."工厂
    ls_mkal_aend-verid = ls_aend-verid."生产版本
    ls_mkal_aend-zaehl = ls_aend-zaehl + 1."计数参数

    ls_mkal_aend-datuv = ls_mkal-adatu."有效起始日期
    ls_mkal_aend-datub = ls_mkal-bdatu."有效截止日期
    ls_mkal_aend-andat = ls_aend-andat."日期记录创建于
    ls_mkal_aend-annam = ls_aend-annam."创建记录的用户
    ls_mkal_aend-aedat = sy-datum."上次更改日期
    ls_mkal_aend-aenam = sy-uname."更改对象的人员姓名
    ls_mkal_aend-vbkz = 'U'."
  ENDIF.
  APPEND ls_mkal_aend TO lt_mkal_aend.

ELSE."不存在就创建
  APPEND ls_mkal TO lt_mkal_i.

  CLEAR:ls_mkal_aend.
  ls_mkal_aend-matnr = '000000160000000019'."物料编号
  ls_mkal_aend-werks = '1011'."工厂
  ls_mkal_aend-verid = 'JS20'."生产版本
  ls_mkal_aend-zaehl = 1."计数参数

  ls_mkal_aend-datuv = ls_mkal-adatu."有效起始日期
  ls_mkal_aend-datub = ls_mkal-bdatu."有效截止日期
  ls_mkal_aend-andat = sy-datum."日期记录创建于
  ls_mkal_aend-annam = sy-uname."创建记录的用户
  ls_mkal_aend-vbkz = 'I'."
  APPEND ls_mkal_aend TO lt_mkal_aend.

ENDIF.

CALL FUNCTION 'CM_FV_PROD_VERS_DB_UPDATE'
  TABLES
    it_mkal_i    = lt_mkal_i "创建
    it_mkal_u    = lt_mkal_u "修改
    it_mkal_d    = lt_mkal_d "删除
    it_mkal_aend = lt_mkal_aend.

*DATA(gv_info) = TEXT-002.
IF sy-subrc EQ 0.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = 'X'.
*    ES_RETURN-RETYP = 'S'.
*    ES_RETURN-REMSG = '生产版本修改成功'.
  WRITE:'success'.
ELSE.
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*    ES_RETURN-RETYP = 'E'.
*    ES_RETURN-REMSG = GV_INFO.
*  WRITE:gv_info.
ENDIF.
"-----------------------------@斌将军-----------------------------

定期更文,欢迎关注

<think>好的,我现在需要回答用户关于C223生产版本修改是否会记录日志或历史的问题。首先,我需要明确用户提到的C223是指什么。根据常见的SAP系统术语,C223可能是指生产订单或生产版本相关的配置或事务代码。生产版本(Production Version)在SAP中用于定义物料的制造方式,包括工艺路线、物料清单(BOM)等。 用户想知道修改生产版本时,系统是否会记录日志或历史。根据我的知识,SAP通常会在修改主数据或配置时记录变更。例如,引用[3]提到STXFADM表存储了smartform的主数据,包括创建人和修改时间等信息。这可能意味着SAP中某些对象的修改会被记录在特定的表中。 不过,生产版本可能属于不同的模块,我需要确认是否有类似STXFADM的表用于记录生产版本的修改。SAP中的生产版本主数据表可能包括MAPL(分配任务清单到物料)和PLKO(工艺路线头)等,但变更记录可能存储在CDHDR和CDPOS变更文档表中。通常,当对象的修改启用了变更记录功能,系统会将更改记录到这些表中。 此外,用户提供的引用[1]提到Git的提交修改记录,引用[2]涉及MySQL的日志功能。虽然这些是不同系统的例子,但可以推测用户关心的是类似的操作日志或审计功能。因此,需要确认C223生产版本的修改是否像这些系统一样记录日志。 可能还需要考虑后台配置,例如是否启用了生产版本的历史记录或审计功能。如果未启用相关配置,系统可能不会自动记录变更。建议用户检查SAP的相关配置或咨询系统管理员,确认变更记录是否激活,并查看CDHDR和CDPOS表是否存在相关条目。 总结来说,SAP通常通过变更文档记录主数据修改,但具体到生产版本(C223)是否记录,需确认相关配置和表数据。建议用户检查这些方面或提供更多上下文以便进一步分析。</think>在SAP系统中,**C223生产版本的修改是否记录日志或历史**取决于具体配置和系统实现,以下为关键分析点: 1. **SAP标准变更记录机制** SAP通过变更文档表$CDHDR$(头表)和$CDPOS$(明细表)自动记录主数据修改历史[^3]。若生产版本(事务代码$C223$)关联的主数据(如工艺路线、BOM)启用了变更记录功能,修改行为会被记录到这两个表中。例如: ```sql SELECT * FROM CDHDR WHERE OBJECTCLAS = 'MAPL' AND OBJECTID = '[生产版本ID]' ``` 2. **生产版本相关表与日志** 生产版本的核心配置存储在表$MAPL$(物料-任务清单分配表)中。若系统配置了**“记录修改历史”**(通过事务代码$SPRO$路径或后台表参数),每次修改会触发: - 修改时间戳字段(如$AEDAT$) - 修改用户字段(如$AENAM$) - 变更文档写入操作(需激活审计策略) 3. **审计日志依赖配置** 需要检查以下配置是否激活: - 事务代码$SCU3$:检查表$MAPL$的日志记录设置 - 事务代码$SM30$:维护表$TCDOB$(对象类分配) - 事务代码$SCU0$:全局审计配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值