*&---------------------------------------------------------------------* *& 包括 ZXCO1U01 *&---------------------------------------------------------------------* ***生產訂單關鍵參數修改日志記錄 IF HEADER_TABLE-AUTYP = '10' AND HEADER_TABLE-VBKZ <> 'I' AND SY-TCODE <> 'COHV'. "10-PP生產訂單 *--------------------------------------------------------------------* * 數據定義 *--------------------------------------------------------------------* TABLES:ZPPCO02_LOG. DATA:IT_CO02LOG TYPE STANDARD TABLE OF ZPPCO02_LOG, IT_CO02LOGN TYPE STANDARD TABLE OF ZPPCO02_LOG, IW_CO02LOG TYPE ZPPCO02_LOG, IW_CO02LOGN TYPE ZPPCO02_LOG. DATA:IPX TYPE MSXXLIST-HOSTADR, IP TYPE ZPPCO02_LOG-CHIPA, HOST TYPE ZPPCO02_LOG-CHHST. DATA:VI_OPNUM TYPE ZPPCO02_LOG-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 ')' ',工廠:' COMPONENT_TABLE-WERKS INTO IW_CO02LOG-VLNEW. IF NOT COMPONENT_TABLE-LGORT IS INITIAL. CONCATENATE IW_CO02LOG-VLNEW ',庫存地點:' COMPONENT_TABLE-LGORT INTO IW_CO02LOG-VLNEW. ENDIF. IF NOT COMPONENT_TABLE-RGEKZ IS INITIAL. CONCATENATE IW_CO02LOG-VLNEW ',反沖:' COMPONENT_TABLE-RGEKZ INTO IW_CO02LOG-VLNEW. ENDIF. APPEND IW_CO02LOG TO IT_CO02LOG. "追加記錄 * --------------------------- * 記錄組件的修改日志 * --------------------------- WHEN 'U'. * -------------------------------- * 根據預留及項目查詢更改前的信息 * -------------------------------- READ TABLE COMPONENT_TABLE_OLD WITH KEY RSNUM = COMPONENT_TABLE-RSNUM RSPOS = COMPONENT_TABLE-RSPOS. CHECK SY-SUBRC = 0. SHIFT COMPONENT_TABLE_OLD-MATNR LEFT DELETING LEADING '0'. SHIFT COMPONENT_TABLE-MATNR LEFT DELETING LEADING '0'. SHIFT COMPONENT_TABLE_OLD-LIFNR LEFT DELETING LEADING '0'. SHIFT COMPONENT_TABLE-LIFNR LEFT DELETING LEADING '0'. ULOG_ITAB: COMPONENT_TABLE OLD POSNR 訂單組件 BOM項目號 預留項目號 RSPOS BOM項目號 POSNR, COMPONENT_TABLE OLD MATNR 訂單組件 物料號 預留項目號 RSPOS BOM項目號 POSNR, COMPONENT_TABLE OLD ERFMG 訂單組件 需求數量 預留項目號 RSPOS BOM項目號 POSNR, COMPONENT_TABLE OLD ERFME 訂單組件 計量單位 預留項目號 RSPOS BOM項目號 POSNR, COMPONENT_TABLE OLD WERKS 訂單組件 工廠 預留項目號 RSPOS BOM項目號 POSNR, COMPONENT_TABLE OLD LGORT 訂單組件 庫存地點 預留項目號 RSPOS BOM項目號 POSNR, COMPONENT_TABLE OLD RGEKZ 訂單組件 反沖標識 預留項目號 RSPOS BOM項目號 POSNR, COMPONENT_TABLE OLD SOBKZ 訂單組件 特殊庫存 預留項目號 RSPOS BOM項目號 POSNR, COMPONENT_TABLE OLD LIFNR 訂單組件 供應商(特殊庫存) 預留項目號 RSPOS BOM項目號 POSNR, COMPONENT_TABLE OLD XLOEK 訂單組件 已刪除標識 預留項目號 RSPOS BOM項目號 POSNR. WHEN 'D'. CLEAR:IW_CO02LOG. VI_OPNUM = VI_OPNUM + 1. "記錄本次操作的流水編碼(自增1) IW_CO02LOG-CHNUM = VI_OPNUM. "記錄本次操作的流水編碼 IW_CO02LOG-CHTYP = 'D'. "操作類型: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 ')' ',工廠:' COMPONENT_TABLE-WERKS INTO IW_CO02LOG-VLNEW. IF NOT COMPONENT_TABLE-LGORT IS INITIAL. CONCATENATE IW_CO02LOG-VLNEW ',庫存地點:' COMPONENT_TABLE-LGORT INTO IW_CO02LOG-VLNEW. ENDIF. IF NOT COMPONENT_TABLE-RGEKZ IS INITIAL. CONCATENATE IW_CO02LOG-VLNEW ',反沖:' COMPONENT_TABLE-RGEKZ INTO IW_CO02LOG-VLNEW. ENDIF. APPEND IW_CO02LOG TO IT_CO02LOG. "追加記錄 ENDCASE. ENDLOOP. *--------------------------------------------------------------------* * 訂單工序更改 *--------------------------------------------------------------------* LOOP AT OPERATION_TABLE WHERE NOT VBKZ IS INITIAL. CASE OPERATION_TABLE-VBKZ. * --------------------------- * 記錄工序的新增日志 * --------------------------- WHEN 'I'. 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 = OPERATION_TABLE-APLZL. "工序計數器(例如:00000001) SHIFT IW_CO02LOG-OBJLU LEFT DELETING LEADING '0'. "去除前置0 CONCATENATE '工序計數器(' IW_CO02LOG-OBJLU ')' INTO IW_CO02LOG-OBJLU. "拼寫描述 * ------------------------------------------- * 操作對象輔助行標記,例如:BOM項目號(0010) * 輔助行標記一般不唯一或可修改,但最常用 * ------------------------------------------- IW_CO02LOG-OBJLA = OPERATION_TABLE-VORNR. "工序號(例如:0010) CONCATENATE '工序號(' IW_CO02LOG-OBJLA ')' INTO IW_CO02LOG-OBJLA. "拼寫描述 * ------------------------------------------------------------------- * 將新增工序的所有信息組合為一行存入NEW字段 * 由於ALV的列寬最大為128字符,所以將工時部分組合為一行存入NEW2字段 * ------------------------------------------------------------------- CLEAR V_ARBPL_NEW. SELECT SINGLE ARBPL FROM CRHD INTO V_ARBPL_NEW WHERE OBJTY = 'A' AND OBJID = OPERATION_TABLE-ARBID. IF SY-SUBRC = 0. CONCATENATE '工作中心:' V_ARBPL_NEW ',' INTO IW_CO02LOG-VLNEW. ENDIF. CONCATENATE IW_CO02LOG-VLNEW '工廠:' OPERATION_TABLE-WERKS ',控制碼:' OPERATION_TABLE-STEUS INTO IW_CO02LOG-VLNEW. IF NOT OPERATION_TABLE-KTSCH IS INITIAL. CONCATENATE IW_CO02LOG-VLNEW ',標准文本碼:' OPERATION_TABLE-KTSCH INTO IW_CO02LOG-VLNEW. ENDIF. CONCATENATE IW_CO02LOG-VLNEW ',工序短文本:' OPERATION_TABLE-LTXA1 INTO IW_CO02LOG-VLNEW. * ------------------------ * 工時部分存入NEW2字段 * ------------------------ IF NOT OPERATION_TABLE-VGW01 IS INITIAL. VS_STR = OPERATION_TABLE-VGW01. DEL_ZERO_R VS_STR. CONCATENATE IW_CO02LOG-VLNE2 ',准備工時:' VS_STR '(' OPERATION_TABLE-VGE01 ')' INTO IW_CO02LOG-VLNE2. ENDIF. IF NOT OPERATION_TABLE-VGW02 IS INITIAL. VS_STR = OPERATION_TABLE-VGW02. DEL_ZERO_R VS_STR. CONCATENATE IW_CO02LOG-VLNE2 ',機器工時:' VS_STR '(' OPERATION_TABLE-VGE02 ')' INTO IW_CO02LOG-VLNE2. ENDIF. IF NOT OPERATION_TABLE-VGW03 IS INITIAL. VS_STR = OPERATION_TABLE-VGW03. DEL_ZERO_R VS_STR. CONCATENATE IW_CO02LOG-VLNE2 ',人工工時:' VS_STR '(' OPERATION_TABLE-VGE03 ')' INTO IW_CO02LOG-VLNE2. ENDIF. IF NOT OPERATION_TABLE-PREIS IS INITIAL. VS_STR = OPERATION_TABLE-PREIS. CONCATENATE IW_CO02LOG-VLNE2 ',外協價格:' VS_STR '(' OPERATION_TABLE-WAERS ')/' INTO IW_CO02LOG-VLNE2. VS_STR = OPERATION_TABLE-PEINH. CONCATENATE IW_CO02LOG-VLNE2 VS_STR '(' OPERATION_TABLE-MEINH ')' INTO IW_CO02LOG-VLNE2. ENDIF. SHIFT IW_CO02LOG-VLNE2 LEFT DELETING LEADING ','. CONDENSE IW_CO02LOG-VLNE2 NO-GAPS. APPEND IW_CO02LOG TO IT_CO02LOG. "追加記錄 CLEAR IW_CO02LOG. * --------------------------- * 記錄工序的修改日志 * --------------------------- WHEN 'U'. * ---------------------------------------------- * 根據工藝路線號及計數器查詢更改前的信息(AFVC) * ---------------------------------------------- READ TABLE OPERATION_TABLE_OLD_AFVC WITH KEY AUFPL = OPERATION_TABLE-AUFPL APLZL = OPERATION_TABLE-APLZL. IF SY-SUBRC = 0. * ------------------------------------- * 可直接記錄更改的參數(工序基本信息) * ------------------------------------- ULOG_ITAB: OPERATION_TABLE OLD_AFVC VORNR 訂單工序 工序號 工序計數器 APLZL 工序號 VORNR, OPERATION_TABLE OLD_AFVC WERKS 訂單工序 工廠 工序計數器 APLZL 工序號 VORNR, OPERATION_TABLE OLD_AFVC STEUS 訂單工序 控制碼 工序計數器 APLZL 工序號 VORNR, OPERATION_TABLE OLD_AFVC KTSCH 訂單工序 標准文本碼 工序計數器 APLZL 工序號 VORNR, OPERATION_TABLE OLD_AFVC LTXA1 訂單工序 工序短文本 工序計數器 APLZL 工序號 VORNR. * ------------------------------------- * 可直接記錄更改的參數(外協價格信息) * ------------------------------------- ULOG_ITAB: OPERATION_TABLE OLD_AFVC PREIS 訂單工序 外協價格 工序計數器 APLZL 工序號 VORNR, OPERATION_TABLE OLD_AFVC WAERS 訂單工序 外協價格貨幣 工序計數器 APLZL 工序號 VORNR, OPERATION_TABLE OLD_AFVC PEINH 訂單工序 外協價格單位(每) 工序計數器 APLZL 工序號 VORNR. * --------------------------------------------- * 比較工作中心是否修改,因未直接記錄工作中心, * 只能根據AFVC-ARBID查找工作中心並比較 * --------------------------------------------- IF OPERATION_TABLE-ARBID <> OPERATION_TABLE_OLD_AFVC-ARBID. * ---------------------------------------- * 根據AFVC-ARBID查詢工作中心的原值與新值 * ---------------------------------------- CLEAR: V_ARBPL_OLD,V_ARBPL_NEW. SELECT SINGLE ARBPL FROM CRHD INTO V_ARBPL_OLD WHERE OBJTY = 'A' AND OBJID = OPERATION_TABLE_OLD_AFVC-ARBID. SELECT SINGLE ARBPL FROM CRHD INTO V_ARBPL_NEW WHERE OBJTY = 'A' AND OBJID = OPERATION_TABLE-ARBID. * ---------------------------------------- * 如果工作中心的原值與新值不同則記錄 * ---------------------------------------- IF V_ARBPL_OLD <> V_ARBPL_NEW. VI_OPNUM = VI_OPNUM + 1. "記錄本次操作的流水編碼(自增1) IW_CO02LOG-CHNUM = VI_OPNUM. "記錄本次操作的流水編碼 IW_CO02LOG-CHTYP = 'U'. "操作類型:U-更新 IW_CO02LOG-OBJTP = '訂單工序'. "操作對象類型(抬頭、組件、工藝等) IW_CO02LOG-OBJNM = '工作中心'. "操作對象描述 * ------------------------------------------- * 操作對象唯一行標記,例如:預留項目號(1) * 唯一行標記一般前台不可見,但唯一且不可更改 * ------------------------------------------- IW_CO02LOG-OBJLU = OPERATION_TABLE-APLZL. "工序計數器(例如:00000001) SHIFT IW_CO02LOG-OBJLU LEFT DELETING LEADING '0'. "去除前置0 CONCATENATE '工序計數器(' IW_CO02LOG-OBJLU ')' INTO IW_CO02LOG-OBJLU. "拼寫描述 * ------------------------------------------- * 操作對象輔助行標記,例如:BOM項目號(0010) * 輔助行標記一般不唯一或可修改,但最常用 * ------------------------------------------- IW_CO02LOG-OBJLA = OPERATION_TABLE-VORNR. "工序號(例如:0010) CONCATENATE '工序號(' IW_CO02LOG-OBJLA ')' INTO IW_CO02LOG-OBJLA. "拼寫描述 IW_CO02LOG-VLOLD = V_ARBPL_OLD. "操作對象的舊值 IW_CO02LOG-VLNEW = V_ARBPL_NEW. "操作對象的新值 APPEND IW_CO02LOG TO IT_CO02LOG. "追加記錄 CLEAR IW_CO02LOG. ENDIF. ENDIF. ENDIF. * ---------------------------------------------- * 根據工藝路線號及計數器查詢更改前的信息(AFVV) * ---------------------------------------------- READ TABLE OPERATION_TABLE_OLD_AFVV WITH KEY AUFPL = OPERATION_TABLE-AUFPL APLZL = OPERATION_TABLE-APLZL. IF SY-SUBRC = 0. * --------------------------------------------- * 可直接記錄更改的參數(工時信息) * --------------------------------------------- ULOG_ITAB: OPERATION_TABLE OLD_AFVV VGW01 訂單工序 准備工時(數值) 工序計數器 APLZL 工序號 VORNR, OPERATION_TABLE OLD_AFVV VGE01 訂單工序 准備工時(單位) 工序計數器 APLZL 工序號 VORNR, OPERATION_TABLE OLD_AFVV VGW02 訂單工序 機器工時(數值) 工序計數器 APLZL 工序號 VORNR, OPERATION_TABLE OLD_AFVV VGE02 訂單工序 機器工時(單位) 工序計數器 APLZL 工序號 VORNR, OPERATION_TABLE OLD_AFVV VGW03 訂單工序 人工工時(數值) 工序計數器 APLZL 工序號 VORNR, OPERATION_TABLE OLD_AFVV VGE03 訂單工序 人工工時(單位) 工序計數器 APLZL 工序號 VORNR, OPERATION_TABLE OLD_AFVV MEINH 訂單工序 作業的計量單位 工序計數器 APLZL 工序號 VORNR. ENDIF. WHEN 'D'. VI_OPNUM = VI_OPNUM + 1. "記錄本次操作的流水編碼(自增1) IW_CO02LOG-CHNUM = VI_OPNUM. "記錄本次操作的流水編碼 IW_CO02LOG-CHTYP = 'D'. "操作類型:I-新增 IW_CO02LOG-OBJTP = '訂單工序'. "操作對象類型(抬頭、組件、工藝等) IW_CO02LOG-OBJNM = '訂單工序(刪除)'. "操作對象描述 * ------------------------------------------- * 操作對象唯一行標記,例如:預留項目號(1) * 唯一行標記一般前台不可見,但唯一且不可更改 * ------------------------------------------- IW_CO02LOG-OBJLU = OPERATION_TABLE-APLZL. "工序計數器(例如:00000001) SHIFT IW_CO02LOG-OBJLU LEFT DELETING LEADING '0'. "去除前置0 CONCATENATE '工序計數器(' IW_CO02LOG-OBJLU ')' INTO IW_CO02LOG-OBJLU. "拼寫描述 * ------------------------------------------- * 操作對象輔助行標記,例如:BOM項目號(0010) * 輔助行標記一般不唯一或可修改,但最常用 * ------------------------------------------- IW_CO02LOG-OBJLA = OPERATION_TABLE-VORNR. "工序號(例如:0010) CONCATENATE '工序號(' IW_CO02LOG-OBJLA ')' INTO IW_CO02LOG-OBJLA. "拼寫描述 * ------------------------------------------------------------------- * 將新增工序的所有信息組合為一行存入NEW字段 * 由於ALV的列寬最大為128字符,所以將工時部分組合為一行存入NEW2字段 * ------------------------------------------------------------------- CLEAR: V_ARBPL_NEW, IW_CO02LOG-VLNEW. SELECT SINGLE ARBPL FROM CRHD INTO V_ARBPL_NEW WHERE OBJTY = 'A' AND OBJID = OPERATION_TABLE-ARBID. IF SY-SUBRC = 0. CONCATENATE '工作中心:' V_ARBPL_NEW ',' INTO IW_CO02LOG-VLNEW. ENDIF. CONCATENATE IW_CO02LOG-VLNEW '工廠:' OPERATION_TABLE-WERKS ',控制碼:' OPERATION_TABLE-STEUS INTO IW_CO02LOG-VLNEW. IF NOT OPERATION_TABLE-KTSCH IS INITIAL. CONCATENATE IW_CO02LOG-VLNEW ',標准文本碼:' OPERATION_TABLE-KTSCH INTO IW_CO02LOG-VLNEW. ENDIF. CONCATENATE IW_CO02LOG-VLNEW ',工序短文本:' OPERATION_TABLE-LTXA1 INTO IW_CO02LOG-VLNEW. * ------------------------ * 工時部分存入NEW2字段 * ------------------------ IF NOT OPERATION_TABLE-VGW01 IS INITIAL. VS_STR = OPERATION_TABLE-VGW01. DEL_ZERO_R VS_STR. CONCATENATE IW_CO02LOG-VLNE2 ',准備工時:' VS_STR '(' OPERATION_TABLE-VGE01 ')' INTO IW_CO02LOG-VLNE2. ENDIF. IF NOT OPERATION_TABLE-VGW02 IS INITIAL. VS_STR = OPERATION_TABLE-VGW02. DEL_ZERO_R VS_STR. CONCATENATE IW_CO02LOG-VLNE2 ',機器工時:' VS_STR '(' OPERATION_TABLE-VGE02 ')' INTO IW_CO02LOG-VLNE2. ENDIF. IF NOT OPERATION_TABLE-VGW03 IS INITIAL. VS_STR = OPERATION_TABLE-VGW03. DEL_ZERO_R VS_STR. CONCATENATE IW_CO02LOG-VLNE2 ',人工工時:' VS_STR '(' OPERATION_TABLE-VGE03 ')' INTO IW_CO02LOG-VLNE2. ENDIF. IF NOT OPERATION_TABLE-PREIS IS INITIAL. VS_STR = OPERATION_TABLE-PREIS. CONCATENATE IW_CO02LOG-VLNE2 ',外協價格:' VS_STR '(' OPERATION_TABLE-WAERS ')/' INTO IW_CO02LOG-VLNE2. VS_STR = OPERATION_TABLE-PEINH. CONCATENATE IW_CO02LOG-VLNE2 VS_STR '(' OPERATION_TABLE-MEINH ')' INTO IW_CO02LOG-VLNE2. ENDIF. SHIFT IW_CO02LOG-VLNE2 LEFT DELETING LEADING ','. CONDENSE IW_CO02LOG-VLNE2 NO-GAPS. APPEND IW_CO02LOG TO IT_CO02LOG. "追加記錄 CLEAR IW_CO02LOG. ENDCASE. ENDLOOP. *--------------------------------------------------------------------* * 更新到數據庫表 *--------------------------------------------------------------------* IF NOT IT_CO02LOG[] IS INITIAL. * ----------------------------------- * 獲取客戶端IP地址(16進制)、主機名 * ----------------------------------- CALL FUNCTION 'TH_USER_INFO' IMPORTING HOSTADDR = IPX "IP地址(16進制) TERMINAL = HOST. "主機名 * -------------------------------------- * 轉換IP地址(16進制轉換為10進制字符串) * -------------------------------------- CALL FUNCTION 'GWY_IPADR2STRING' EXPORTING IPADR = IPX IMPORTING STRING = IP. "IP地址(10進制字符串) * ------------------------------------ * 補充日志內表的公共部分 * ------------------------------------ GET TIME. "獲取最新的時間 IW_CO02LOG-AUFNR = HEADER_TABLE-AUFNR. "訂單編碼 SHIFT IW_CO02LOG-AUFNR LEFT DELETING LEADING '0'. IW_CO02LOG-CHDAT = SY-DATUM. "操作日期(服務器) IW_CO02LOG-CHTIM = SY-UZEIT. "操作時間(服務器) IW_CO02LOG-TCODE = SY-TCODE. "事務代碼 IW_CO02LOG-CHUSR = SY-UNAME. "操作客戶端用戶名 IW_CO02LOG-CHIPA = IP. "操作客戶端IP地址 IW_CO02LOG-CHHST = HOST. "操作客戶端主機名 MODIFY IT_CO02LOG FROM IW_CO02LOG TRANSPORTING AUFNR CHDAT CHTIM TCODE CHUSR CHIPA CHHST WHERE AUFNR IS INITIAL. "全部更新 *--------------------------------------------------------------------* * 讀生產計划數據時 特殊處理 *--------------------------------------------------------------------* SORT IT_CO02LOG DESCENDING BY CHTYP. CLEAR:IW_CO02LOG. LOOP AT IT_CO02LOG INTO IW_CO02LOG. CONDENSE:IW_CO02LOG-VLNEW NO-GAPS, IW_CO02LOG-VLOLD NO-GAPS. IF IW_CO02LOG-CHTYP <> 'D'. APPEND IW_CO02LOG TO IT_CO02LOGN. ELSE. DELETE IT_CO02LOGN WHERE AUFNR = IW_CO02LOG-AUFNR AND CHTYP = 'I' AND CHDAT = IW_CO02LOG-CHDAT AND CHTIM = IW_CO02LOG-CHTIM AND OBJTP = IW_CO02LOG-OBJTP AND VLNEW = IW_CO02LOG-VLNEW AND VLNE2 = IW_CO02LOG-VLNE2 . IF SY-SUBRC <> 0. APPEND IW_CO02LOG TO IT_CO02LOGN. ENDIF. ENDIF. ENDLOOP. *--------------------------------------------------------------------* * 訂單總需求量變更時,只記錄總需求量的變更,刪除組件的同比例變更記錄 *--------------------------------------------------------------------* SORT IT_CO02LOGN BY CHNUM. LOOP AT IT_CO02LOGN INTO IW_CO02LOGN. * * 訂單總需求量變更時,只記錄總需求量的變更,刪除組件的同比例變更記錄 IF IW_CO02LOGN-OBJTP = '訂單抬頭' AND IW_CO02LOGN-OBJNM = '訂單總數量' AND IW_CO02LOGN-CHTYP = 'U' AND IW_CO02LOGN-VLNEW <> '0.000'. CLEAR: L_RATE. L_RATE = IW_CO02LOGN-VLOLD / IW_CO02LOGN-VLNEW. ENDIF. IF IW_CO02LOGN-OBJTP = '訂單組件' AND IW_CO02LOGN-OBJNM = '需求數量' AND IW_CO02LOGN-CHTYP = 'U' AND IW_CO02LOGN-VLNEW <> '0.000'. CLEAR: L_RATE1. L_RATE1 = IW_CO02LOGN-VLOLD / IW_CO02LOGN-VLNEW. IF L_RATE = L_RATE1 AND L_RATE <> 0. DELETE TABLE IT_CO02LOGN FROM IW_CO02LOGN. ENDIF. ENDIF. ENDLOOP. IF IT_CO02LOGN IS INITIAL. IW_CO02LOG-CHNUM = '1'. IW_CO02LOG-CHTYP = 'U'. IW_CO02LOG-OBJTP = '讀生產主數據'. IW_CO02LOG-OBJNM = '組件、工序均未變更,可能是重讀主數據'. CLEAR:IW_CO02LOG-OBJLU, IW_CO02LOG-OBJLA, IW_CO02LOG-VLNEW, IW_CO02LOG-VLNE2. APPEND IW_CO02LOG TO IT_CO02LOGN. ENDIF. * --------------------------- * 將日志保存至數據庫 * --------------------------- INSERT ZPPCO02_LOG FROM TABLE IT_CO02LOGN ACCEPTING DUPLICATE KEYS. "忽略索引相同的記錄 * --------------------------- * 刪除過早歷史數據 * --------------------------- CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL' EXPORTING DATE = SY-DATUM DAYS = 0 MONTHS = 3 SIGNUM = '-' YEARS = 0 IMPORTING CALC_DATE = L_DATUM . DELETE FROM ZPPCO02_LOG WHERE CHDAT <= L_DATUM. ENDIF. ENDIF.
----------------湊字數-------------------------
勵志美文、《抉擇》
人的一生常處於抉擇之中,如:念哪一間大學?選哪一種職業?娶哪一種女子?……等等傷腦筋的事情。一個人抉擇力的有無,可以顯示其人格成熟與否。
倒是哪些胸無主見的人,不受抉擇之苦。因為逢到需要決定的時候,他總是求詢別人說:"嘿,你看怎么做?"
大凡能夠成大功業的人,都是抉擇力甚強的人。他知道事之成敗,全在乎已沒有人可以代勞,更沒有人能代你決定。
在抉擇的哪一刻,成敗實已露出端倪。
1 *&---------------------------------------------------------------------* 2 ** 程序名稱:Z 3 ** 程序描述: 4 ** 創建人 : 5 ** 創建日期: 6 *&---------------------------------------------------------------------* 7 ** 修改記錄: 8 9 REPORT Z. 10 11 TYPE-POOLS: SLIS. 12 TABLES: AFKO,USR02,ZPPCO02_LOG. 13 14 TYPES: BEGIN OF LINE_LOG. "輸出日志的結構 15 INCLUDE STRUCTURE ZPPCO02_LOG. "包含結構ZCO02_LOG_TABLE 16 TYPES: DDTEXT LIKE DD07T-DDTEXT, "更新類型描述 17 NAME_TEXT LIKE ADRP-NAME_TEXT, 18 END OF LINE_LOG. 19 20 DATA: IT_LOG TYPE STANDARD TABLE OF LINE_LOG WITH HEADER LINE, 21 BEGIN OF IT_USER OCCURS 0, 22 BNAME LIKE USR21-BNAME, 23 NAME_TEXT LIKE ADRP-NAME_TEXT, 24 END OF IT_USER. 25 26 27 ************************************************************************ 28 * SELECTION-SCREEN 29 ************************************************************************ 30 SELECTION-SCREEN BEGIN OF BLOCK FLAG1 WITH FRAME TITLE TEXT-001. 31 SELECT-OPTIONS: 32 R_AUFNR FOR AFKO-AUFNR OBLIGATORY MEMORY ID ANR, 33 R_OPDAT FOR SY-DATUM, 34 R_OPTIM FOR SY-UZEIT, 35 R_OPTYP FOR ZPPCO02_LOG-CHTYP, 36 R_OPUSR FOR USR02-BNAME MATCHCODE OBJECT USER_COMP, 37 R_CHIPA FOR ZPPCO02_LOG-CHIPA, 38 R_CHHST FOR ZPPCO02_LOG-CHHST LOWER CASE. 39 SELECTION-SCREEN END OF BLOCK FLAG1. 40 41 ************************************************************************ 42 * Initialization 43 ************************************************************************ 44 INITIALIZATION. 45 46 ************************************************************************ 47 * AT SELECTION-SCREEN 48 ************************************************************************ 49 AT SELECTION-SCREEN. 50 51 52 ************************************************************************ 53 * START-OF-SELECTION 54 ************************************************************************ 55 START-OF-SELECTION. 56 57 PERFORM FRM_GET_DATA. 58 PERFORM FRM_DISPLAY_ALV. 59 60 *&--------------------------------------------------------------------* 61 *& Form FRM_GET_DATA 62 *&--------------------------------------------------------------------* 63 * 主程序 64 *---------------------------------------------------------------------* 65 FORM FRM_GET_DATA. 66 67 LOOP AT R_AUFNR. 68 SHIFT R_AUFNR-LOW LEFT DELETING LEADING '0'. 69 MODIFY R_AUFNR. 70 ENDLOOP. 71 72 SELECT * 73 FROM ZPPCO02_LOG 74 LEFT JOIN DD07T ON ZPPCO02_LOG~CHTYP = DD07T~DOMVALUE_L AND 75 DD07T~DDLANGUAGE = SY-LANGU AND 76 DD07T~AS4LOCAL = 'A' AND 77 DD07T~DOMNAME = 'VERBUCHER' 78 INTO CORRESPONDING FIELDS OF TABLE IT_LOG 79 WHERE AUFNR IN R_AUFNR AND 80 CHDAT IN R_OPDAT AND 81 CHTIM IN R_OPTIM AND 82 CHTYP IN R_OPTYP AND 83 CHUSR IN R_OPUSR AND 84 CHIPA IN R_CHIPA AND 85 CHHST IN R_CHHST. 86 IF SY-SUBRC <> 0. 87 MESSAGE S001(00) WITH '變更日志不存在' DISPLAY LIKE 'E'. 88 LEAVE TO TRANSACTION SY-TCODE. 89 ENDIF. 90 91 SELECT A~BNAME B~NAME_TEXT 92 INTO TABLE IT_USER 93 FROM USR21 AS A 94 JOIN ADRP AS B ON A~PERSNUMBER = B~PERSNUMBER 95 FOR ALL ENTRIES IN IT_LOG 96 WHERE BNAME = IT_LOG-CHUSR. 97 IF SY-SUBRC = 0. 98 LOOP AT IT_LOG. 99 READ TABLE IT_USER WITH KEY BNAME = IT_LOG-CHUSR. 100 IF SY-SUBRC = 0. 101 IT_LOG-NAME_TEXT = IT_USER-NAME_TEXT. 102 MODIFY IT_LOG. 103 ENDIF. 104 ENDLOOP. 105 ENDIF. 106 107 * IT_LOG-DDTEXT = '刪除'. 108 * MODIFY IT_LOG TRANSPORTING DDTEXT WHERE OBJNM = '組件刪除'. 109 SORT IT_LOG BY CHDAT DESCENDING CHTIM DESCENDING CHNUM ASCENDING. 110 111 ENDFORM. "SUB_MAIN 112 113 114 *&--------------------------------------------------------------------* 115 *& Form FRM_DISPLAY_ALV 116 *&--------------------------------------------------------------------* 117 * 輸出 118 *---------------------------------------------------------------------* 119 FORM FRM_DISPLAY_ALV. 120 121 DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE, "ALV列屬性 122 GT_LAYOUT TYPE SLIS_LAYOUT_ALV, "ALV布局設置 123 ALV_TITLE TYPE LVC_TITLE. "ALV表頭 124 125 GT_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. "ALV布局設置為自動優化列寬 126 GT_LAYOUT-ZEBRA = 'X'. 127 128 DEFINE GT_TITLE . 129 GT_FIELDCAT-FIELDNAME = '&1'. "字段ID 130 GT_FIELDCAT-JUST = '&2'. "對齊方式 131 GT_FIELDCAT-EMPHASIZE = &3 . "列顏色 132 * GT_FIELDCAT-NO_ZERO = &4 . "不輸出前置0 133 GT_FIELDCAT-KEY = &4 . 134 GT_FIELDCAT-NO_OUT = &5 . "不輸出標識 135 GT_FIELDCAT-SELTEXT_L = '&6'. "字段描述 136 137 APPEND GT_FIELDCAT. 138 CLEAR GT_FIELDCAT. 139 END-OF-DEFINITION. 140 141 GT_TITLE: 142 AUFNR C ' ' 'X' '' 生產訂單號, 143 CHDAT C ' ' 'X' '' 操作日期, 144 CHTIM C ' ' 'X' '' 操作時間, 145 CHTYP C 'C600' '' 'X' 更新標志, 146 DDTEXT C ' ' 'X' '' 操作類型, 147 CHNUM C 'C410' 'X' '' 流水編號, 148 CHUSR C 'C300' '' '' SAP用戶名, 149 NAME_TEXT C '' '' '' 姓名, 150 CHIPA L ' ' '' '' 客戶端IP地址, 151 CHHST L ' ' '' '' 客戶端主機名, 152 OBJTP L 'C300' '' '' 操作對象類別, 153 OBJNM L 'C300' '' '' 操作對象, 154 OBJLU L ' ' '' '' 行標記(唯一), 155 OBJLA L ' ' '' '' 行標記(輔助), 156 VLOLD L 'C300' '' '' 操作對象原值, 157 VLNEW L 'C500' '' '' 操作對象新值, 158 VLNE2 L 'C500' '' '' 操作對象新值(補充), 159 TCODE C 'C300' '' '' 事務代碼. 160 161 DESCRIBE TABLE IT_LOG[] LINES ALV_TITLE. 162 CONDENSE ALV_TITLE NO-GAPS. 163 164 CONCATENATE '生產訂單變更日志' '(' ALV_TITLE 'ROWS )' INTO ALV_TITLE 165 SEPARATED BY SPACE. 166 167 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 168 EXPORTING 169 I_CALLBACK_PROGRAM = SY-REPID 170 I_CALLBACK_PF_STATUS_SET = 'FRM_STATUS_SET' 171 IT_FIELDCAT = GT_FIELDCAT[] 172 IS_LAYOUT = GT_LAYOUT 173 I_SAVE = 'A' 174 I_GRID_TITLE = ALV_TITLE "表頭信息 175 TABLES 176 T_OUTTAB = IT_LOG 177 EXCEPTIONS 178 PROGRAM_ERROR = 1 179 OTHERS = 2. 180 181 IF SY-SUBRC <> 0. 182 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 183 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 184 ENDIF. 185 186 ENDFORM. " DISPLAY 187 *&---------------------------------------------------------------------* 188 *& FORM FRM_STATUS_SET 189 *&---------------------------------------------------------------------* 190 * TEXT 191 *----------------------------------------------------------------------* 192 * --> P1 TEXT 193 * <-- P2 TEXT 194 *----------------------------------------------------------------------* 195 FORM FRM_STATUS_SET USING EXTAB TYPE SLIS_T_EXTAB. 196 197 SET PF-STATUS 'ZPPR0052_GS'. 198 ENDFORM.