SAP 生产订单修改记录 增强

增强:SMOD - PPCO0001 EXIT_SAPLCOBT_001

*&---------------------------------------------------------------------*
*& 包含               ZXCO1U01
*&---------------------------------------------------------------------*


*&---------------------------------------------------------------------*
*&  包括                ZXCO1U01
*&---------------------------------------------------------------------*
***生产订单关键参数修改日志记录
IF HEADER_TABLE-AUTYP = '10' AND HEADER_TABLE-VBKZ <> 'I' AND SY-TCODE = 'CO02'. "10-PP生产订单
*--------------------------------------------------------------------*
* 数据定义
*--------------------------------------------------------------------*
  TABLES:ZTPP001.

  DATA:IT_CO02LOG  TYPE STANDARD TABLE OF ZTPP001,
       IT_CO02LOGN TYPE STANDARD TABLE OF ZTPP001,
       IW_CO02LOG  TYPE ZTPP001,
       IW_CO02LOGN TYPE ZTPP001.

  DATA:IPX        TYPE MSXXLIST-HOSTADR,
       IP         TYPE ZTPP001-CHIPA,
       HOST       TYPE ZTPP001-CHHST.

  DATA:VI_OPNUM   TYPE ZTPP001-CHNUM,
       VS_STR     TYPE STRING.

  DATA:V_ARBPL_OLD LIKE CRHD-ARBPL,
       V_ARBPL_NEW LIKE CRHD-ARBPL.

  DATA:L_DATUM TYPE SY-DATUM,
       L_RATE  TYPE P DECIMALS 5,
       L_RATE1 TYPE P DECIMALS 5.

*--------------------------------------------------------------------*
* 宏定义
*--------------------------------------------------------------------*

DEFINE  DEL_ZERO_R.
  SHIFT &1 RIGHT DELETING TRAILING '0'.
  SHIFT &1 RIGHT DELETING TRAILING '.'.
  CONDENSE &1 NO-GAPS.
END-OF-DEFINITION.

DEFINE ULOG_LINE.
*  &1:表名
*  &2:表名差异部分
*  &3:字段名
*  &4:变更对象类型
*  &5:变更对象的描述
  IF &1-&3 <> &1_&2-&3.
    CLEAR IW_CO02LOG.
    VI_OPNUM     = VI_OPNUM + 1. "记录本次操作的流水编码(自增1)
    IW_CO02LOG-CHNUM = VI_OPNUM.     "记录本次操作的流水编码

    IW_CO02LOG-CHTYP = 'U'.          "操作类型:U-更新
    IW_CO02LOG-OBJTP = '&4'.         "操作对象类型(抬头、组件、工艺等)
    IW_CO02LOG-OBJNM = '&5'.         "操作对象描述
    IW_CO02LOG-VLOLD = &1_&2-&3.     "操作对象的旧值
    IW_CO02LOG-VLNEW = &1-&3.        "操作对象的新值

    APPEND IW_CO02LOG TO IT_CO02LOG.               "追加记录
  ENDIF.
END-OF-DEFINITION.

DEFINE ULOG_ITAB.
* ---------------------------------------------------
* &1:记录新值的内表名称
* &2:记录旧值的内表名称与新表的差异部分(通常为OLD)
* &3:比较的字段名称
* &4:操作对象类型
* &5:操作对象描述
* &6:操作对象唯一行标记描述
* &7:操作对象唯一行标记字段名
* &8:操作对象辅助行标记描述
* &9:操作对象辅助行标记字段名
* ---------------------------------------------------
  IF &1-&3 <> &1_&2-&3.
    CLEAR IW_CO02LOG.
    VI_OPNUM         = VI_OPNUM + 1.     "记录本次操作的流水编码(自增1)
    IW_CO02LOG-CHNUM = VI_OPNUM.     "记录本次操作的流水编码
    IW_CO02LOG-CHTYP = 'U'.          "操作类型:U-更新

    IW_CO02LOG-OBJTP = '&4'.         "操作对象类型(抬头、组件、工艺等)
    IW_CO02LOG-OBJNM = '&5'.         "操作对象描述

*   -------------------------------------------
*   操作对象唯一行标记,例如:预留项目号(1)
*   唯一行标记一般前台不可见,但唯一且不可更改
*   -------------------------------------------
    IW_CO02LOG-OBJLU = &1-&7.        "操作对象唯一行标记的值(例如:0001)

    SHIFT IW_CO02LOG-OBJLU LEFT DELETING LEADING '0'.            "去除前置0

    CONCATENATE '&6' '(' IW_CO02LOG-OBJLU ')' INTO IW_CO02LOG-OBJLU.  "拼写描述

*   -------------------------------------------
*   操作对象辅助行标记,例如:BOM项目号(0010)
*   辅助行标记一般不唯一或可修改,但最常用
*   -------------------------------------------
    IW_CO02LOG-OBJLA = &1-&9.        "操作对象辅助行标记的值(例如:0010)
    CONCATENATE '&8' '(' IW_CO02LOG-OBJLA ')' INTO IW_CO02LOG-OBJLA.  "拼写描述

    IW_CO02LOG-VLOLD = &1_&2-&3.     "操作对象的旧值
    IW_CO02LOG-VLNEW = &1-&3.        "操作对象的新值

    APPEND IW_CO02LOG TO IT_CO02LOG.               "追加记录
  ENDIF.

END-OF-DEFINITION.

*--------------------------------------------------------------------*
*订单抬头修改
*--------------------------------------------------------------------*
 IF HEADER_TABLE-VBKZ = 'U'.
   ULOG_LINE: HEADER_TABLE OLD GAMNG 订单抬头 订单总数量   ,
              HEADER_TABLE OLD GASMG 订单抬头 订单废品数量 ,
              HEADER_TABLE OLD GLTRP 订单抬头 基本完成日期 ,
              HEADER_TABLE OLD GSTRP 订单抬头 基本开始日期 ,
              HEADER_TABLE OLD FHORI 订单抬头 计划边际码   ,
              HEADER_TABLE OLD DISPO 订单抬头 MRP控制者    ,
              HEADER_TABLE OLD FEVOR 订单抬头 生产调度员   .
 ENDIF.

*--------------------------------------------------------------------*
* 订单收货库存地点更改
*--------------------------------------------------------------------*
 IF POSITION_TABLE-VBKZ = 'U'.

   ULOG_LINE: POSITION_TABLE OLD LGORT 订单项目 收货库存地点.

 ENDIF.

*--------------------------------------------------------------------*
* 订单组件更改
*--------------------------------------------------------------------*
 LOOP AT COMPONENT_TABLE WHERE NOT VBKZ IS INITIAL.

   CASE COMPONENT_TABLE-VBKZ.
*    ---------------------------
*    记录组件的新增日志
*    ---------------------------
     WHEN 'I'.
       CLEAR:IW_CO02LOG.
       VI_OPNUM         = VI_OPNUM + 1. "记录本次操作的流水编码(自增1)
       IW_CO02LOG-CHNUM = VI_OPNUM.     "记录本次操作的流水编码

       IW_CO02LOG-CHTYP = 'I'.                    "操作类型:I-新增
       IW_CO02LOG-OBJTP = '订单组件'.             "操作对象类型(抬头、组件、工艺等)
       IW_CO02LOG-OBJNM = '新增'.       "操作对象描述

*      -------------------------------------------
*      操作对象唯一行标记,例如:预留项目号(1)
*      唯一行标记一般前台不可见,但唯一且不可更改
*      -------------------------------------------
       IW_CO02LOG-OBJLU = COMPONENT_TABLE-RSPOS.        "预留项目号(例如:0001)

       SHIFT IW_CO02LOG-OBJLU LEFT DELETING LEADING '0'.                           "去除前置0

       CONCATENATE '预留项目号(' IW_CO02LOG-OBJLU ')' INTO IW_CO02LOG-OBJLU.  "拼写描述

*      -------------------------------------------
*      操作对象辅助行标记,例如:BOM项目号(0010)
*      辅助行标记一般不唯一或可修改,但最常用
*      -------------------------------------------
       IW_CO02LOG-OBJLA = COMPONENT_TABLE-POSNR.        "BOM项目号(例如:0010)
       CONCATENATE 'BOM项目号(' IW_CO02LOG-OBJLA ')' INTO IW_CO02LOG-OBJLA.  "拼写描述

*      ------------------------------------------
*      将新增组件的所有信息组合为一行存入NEW字段
*      ------------------------------------------
       VS_STR = COMPONENT_TABLE-ERFMG.

       DEL_ZERO_R VS_STR.

       SHIFT COMPONENT_TABLE-MATNR LEFT DELETING LEADING '0'.
       CONCATENATE '物料号:' COMPONENT_TABLE-MATNR
                   ',需求数量:' VS_STR '(' COMPONENT_TABLE-ERFME ')'
                   ',工厂:'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值