0、创建数据库
ZPCO02
1、运行事务码 COMD
2、命名项目名称 ZCO02
3、短文描述,因为我们增强的程序与PPCO0001有关,所以描述为 PPCO0001
4、选择开发类及传输请求
5、选择红色部分,增强分配
6、在第一栏里输入 PPCO0001 这个就是我么要增强的程序,之后选择上面的按钮“组件”
7、双击 EXIT_SAPLCOBT_001 进入到出口程序中
8、找到 SPAN { font-family: "Courier New"; font-size: 11pt; color: #000000; background: #FFFFFF; } .L0S52 { color: #0000FF; } INCLUDE ZXCO1U01. 双击进去,就是我们要写代码的地方了
9、把增强代码写入进来,调试、激活、传到服务器。
如下是代码部分:
SPAN { font-family: "Courier New"; font-size: 11pt; color: #000000; background: #FFFFFF; } .L1S31 { font-style. italic; color: #808080; } .L1S32 { color: #3399FF; } .L1S33 { color: #4DA619; } .L1S52 { color: #0000FF; }
TABLES:caufv,resb.
DATA:
BEGIN
OF old_resb
OCCURS
0,
"更改后未保存之RESB.
aufnr
LIKE resb-aufnr,
posnr
LIKE resb-posnr,
matnr
LIKE resb-matnr,
rsnum
LIKE resb-rsnum,
rspos
LIKE resb-rspos,
xloek
LIKE resb-xloek,
bdmng
LIKE resb-bdmng,
objnr
LIKE resb-objnr,
END
OF old_resb.
DATA:
BEGIN
OF new_resb
OCCURS
0.
"数据库中的RESB.
INCLUDE
STRUCTURE old_resb.
DATA:
END
OF new_resb.
DATA:
BEGIN
OF obj_resb
OCCURS
0.
"插入的RESB
INCLUDE
STRUCTURE old_resb.
DATA:
END
OF obj_resb.
DATA: i_zpco02
LIKE zpco02
OCCURS
0
WITH
HEADER
LINE.
DATA: i_temp
LIKE zpco02
OCCURS
0
WITH
HEADER
LINE.
DATA: iporg
LIKE msxxlist-hostadr,
ipdec(
16)
TYPE
c,
host(
18)
TYPE
c.
DATA: char1(
20)
TYPE
c,
char2(
20)
TYPE
c.
DATA: inst_flg
TYPE
c
VALUE
'N',
chan_had
TYPE
c
VALUE
'N'.
* teco_flg TYPE c VALUE 'N',
* read_flg TYPE c .
*BREAK-POINT.
CHECK sy-tcode
EQ
'CO02'.
** Get user IP,hostname
CALL
FUNCTION
'TH_USER_INFO'
" Get user IP,hostname
EXPORTING
client = sy-mandt
user = sy-uname
IMPORTING
hostaddr = iporg
terminal = host
EXCEPTIONS
OTHERS =
1.
**"Conv.IP addr to format 'xxx.xxx.xxx.xxx'
CALL
FUNCTION
'GWY_IPADR2STRING'
"Conv.IP addr
EXPORTING
ipadr = iporg
IMPORTING
string = ipdec.
***Common var.
MOVE: sy-mandt
TO i_temp-mandt,
sy-uname
TO i_temp-aenam,
sy-datum
TO i_temp-laeda,
sy-uzeit
TO i_temp-
times,
sy-tcode
TO i_temp-tcode,
ipdec
TO i_temp-hostip,
host
TO i_temp-host,
header_table-aufnr
TO i_temp-aufnr.
***Check M/O header
**check if status eq 'TECO'.
*LOOP AT status_table WHERE objnr EQ header_table-objnr
* AND stat EQ 'I0045'.
*
* MOVE: 'Y' TO teco_flg.
*ENDLOOP.
*CHECK teco_flg NE 'Y'.
*CHECK read_flg NE 'Y'.
SELECT
SINGLE gamng gltrp
INTO (caufv-gamng, caufv-gltrp)
FROM caufv
WHERE aufnr
EQ header_table-aufnr.
**qty
IF header_table-gamng
NE caufv-gamng.
MOVE: caufv-gamng
TO char1, header_table-gamng
TO char2.
MOVE-CORRESPONDING i_temp
TO i_zpco02.
MOVE:
'更改工单总数'
TO i_zpco02-filed,
'U'
TO i_zpco02-chnid,
char1
TO i_zpco02-value_old,
char2
TO i_zpco02-value_new.
APPEND i_zpco02.
inst_flg =
'Y'.
chan_had =
'Y'.
ENDIF.
**date
IF header_table-gltrp
NE caufv-gltrp.
MOVE-CORRESPONDING i_temp
TO i_zpco02.
MOVE:
'更改完成时间'
TO i_zpco02-filed,
'U'
TO i_zpco02-chnid,
caufv-gltrp
TO i_zpco02-value_old,
header_table-gltrp
TO i_zpco02-value_new.
APPEND i_zpco02.
inst_flg =
'Y'.
ENDIF.
IF inst_flg =
'Y'.
INSERT zpco02
FROM
TABLE i_zpco02 ACCEPTING DUPLICATE KEYS.
inst_flg =
'N'.
ENDIF.
*DELETE component_table WHERE vbkz EQ 'I'.
LOOP
AT component_table
WHERE vbkz
EQ
'U'
OR vbkz
EQ
'I'
OR vbkz
EQ
'D'.
CASE component_table-vbkz.
WHEN
'I'.
MOVE-CORRESPONDING i_temp
TO i_zpco02.
MOVE:
'新增组件'
TO i_zpco02-filed,
'I'
TO i_zpco02-chnid,
''
TO i_zpco02-value_old,
"old_resb-matnr
component_table-matnr
TO i_zpco02-value_new,
'新增的组件'
TO i_zpco02-matnr,
* read_flg TO i_zpco02-readf,
component_table-alpos
TO i_zpco02-alpos,
sy-tabix
TO i_zpco02-loopid.
APPEND i_zpco02.
inst_flg =
'Y'.
WHEN
'D'.
MOVE-CORRESPONDING i_temp
TO i_zpco02.
MOVE:
'删除组件'
TO i_zpco02-filed,
'D'
TO i_zpco02-chnid,
resb-xloek
TO i_zpco02-value_old,
component_table-xloek
TO i_zpco02-value_new,
component_table-matnr
TO i_zpco02-matnr,
* read_flg TO i_zpco02-readf,
component_table-alpos
TO i_zpco02-alpos,
sy-tabix
TO i_zpco02-loopid.
APPEND i_zpco02.
inst_flg =
'Y'.
WHEN
'U'.
SELECT
SINGLE matnr bdmng
INTO (resb-matnr, resb-bdmng)
FROM resb
WHERE aufnr
EQ component_table-aufnr
AND posnr
EQ component_table-posnr
AND matnr
EQ component_table-matnr
AND rsnum
EQ component_table-rsnum
AND rspos
EQ component_table-rspos.
IF component_table-matnr
NE resb-matnr.
MOVE-CORRESPONDING i_temp
TO i_zpco02.
MOVE:
'更改组件'
TO i_zpco02-filed,
'U'
TO i_zpco02-chnid,
resb-matnr
TO i_zpco02-value_old,
component_table-matnr
TO i_zpco02-value_new,
'更改的工单组件'
TO i_zpco02-matnr,
* read_flg TO i_zpco02-readf,
component_table-alpos
TO i_zpco02-alpos,
sy-tabix
TO i_zpco02-loopid.
APPEND i_zpco02.
inst_flg =
'Y'.
ELSEIF component_table-bdmng
NE resb-bdmng.
CHECK chan_had
NE
'Y'.
MOVE: component_table-bdmng
TO char1, resb-bdmng
TO char2.
MOVE-CORRESPONDING i_temp
TO i_zpco02.
MOVE:
'需求数量'
TO i_zpco02-filed,
'U'
TO i_zpco02-chnid,
char2
TO i_zpco02-value_old,
char1
TO i_zpco02-value_new,
component_table-matnr
TO i_zpco02-matnr,
* read_flg TO i_zpco02-readf,
component_table-alpos
TO i_zpco02-alpos,
sy-tabix
TO i_zpco02-loopid.
APPEND i_zpco02.
inst_flg =
'Y'.
ENDIF.
ENDCASE.
ENDLOOP.
IF inst_flg =
'Y'.
INSERT zpco02
FROM
TABLE i_zpco02 ACCEPTING DUPLICATE KEYS.
IF sy-subrc
EQ
0.
inst_flg =
'N'.
chan_had =
'N'.
* MESSAGE ID 'ZX' TYPE 'W'
* NUMBER '000' WITH 'SAP系统已记录您的更改!'.
ENDIF.
ENDIF.