C223 生产版本BAPI

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.
"-----------------------------@斌将军-----------------------------

 

定期更文,欢迎关注

posted @ 2021-11-09 17:00  斌将军  阅读(543)  评论(0编辑  收藏  举报