增强: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 ')'
',工厂:'


8909

被折叠的 条评论
为什么被折叠?



