- 程序说明
事务码:ZP007
- 程序实现
- .自定义CDO (T-CODE SCDO) :
(2) CMOD: ZPP02 (TCODE:CMOD)
增强分配 PPCO0001
功能出口 EXIT_SAPLCOBT_001
INCLUDE ZXCO1U01.
WA_HDR-OBJECTID = 'ZPP_CDO'.
WA_HDR-TCODE = SY-TCODE.
WA_HDR-UTIME = SY-UZEIT.
WA_HDR-UDATE = SY-DATUM.
WA_HDR-USERNAME = SY-UNAME.
LOOP AT HEADER_TABLE.
MOVE-CORRESPONDING HEADER_TABLE TO NAFKO.
NAFKO-KZ = HEADER_TABLE-VBKZ.
APPEND NAFKO.
MOVE-CORRESPONDING HEADER_TABLE TO NAUFK.
APPEND NAUFK.
NAUFK-KZ = HEADER_TABLE-VBKZ.
SELECT *
APPENDING CORRESPONDING FIELDS OF TABLE OAFKO
FROM AFKO
WHERE AUFNR = HEADER_TABLE-AUFNR.
SELECT *
APPENDING CORRESPONDING FIELDS OF TABLE OAUFK
FROM AUFK
WHERE AUFNR = HEADER_TABLE-AUFNR.
SELECT *
APPENDING CORRESPONDING FIELDS OF TABLE OAFPO
FROM AFPO
WHERE AUFNR = POSITION_TABLE-AUFNR.
SELECT *
APPENDING CORRESPONDING FIELDS OF TABLE OAFVC
FROM AFVC
WHERE AUFPL = HEADER_TABLE-AUFPL.
ENDLOOP.
LOOP AT POSITION_TABLE.
MOVE-CORRESPONDING POSITION_TABLE TO NAFPO.
APPEND NAFPO.
ENDLOOP.
*AFVC更新插入和删除分开处理
*New里面没有有o里没有 ,就是D
LOOP AT OPERATION_TABLE
WHERE VBKZ <> 'D'.
MOVE-CORRESPONDING OPERATION_TABLE TO NAFVC.
NAFVC-KZ = OPERATION_TABLE-VBKZ.
APPEND NAFVC.
ENDLOOP.
LOOP AT NAUFK.
READ TABLE OAUFK WITH KEY AUFNR = NAUFK-AUFNR.
IF SY-SUBRC = 0.
IF NAUFK = OAUFK.
DELETE OAUFK INDEX SY-TABIX.
DELETE NAUFK.
CONTINUE.
ELSE.
NAUFK-KZ = 'U'.
MODIFY NAUFK.
ENDIF.
ELSE.
NAUFK-KZ = 'I'.
MODIFY NAUFK.
ENDIF.
ENDLOOP.
LOOP AT NAFKO.
READ TABLE OAFKO WITH KEY AUFNR = NAFKO-AUFNR.
IF SY-SUBRC = 0.
IF NAFKO = OAFKO.
DELETE OAFKO INDEX SY-TABIX.
DELETE NAFKO.
CONTINUE.
ELSE.
NAFKO-KZ = 'U'.
MODIFY NAFKO.
ENDIF.
ELSE.
NAFKO-KZ = 'I'.
MODIFY NAFKO.
ENDIF.
ENDLOOP.
*U
LOOP AT NAFPO.
READ TABLE OAFPO WITH KEY AUFNR = NAFPO-AUFNR POSNR = NAFPO-POSNR.
IF SY-SUBRC = 0.
IF NAFPO = OAFPO.
DELETE OAFPO INDEX SY-TABIX.
DELETE NAFPO.
CONTINUE.
ELSE.
NAFPO-KZ = 'U'.
MODIFY NAFPO.
ENDIF.
ELSE.
NAFPO-KZ = 'I'.
MODIFY NAFPO.
ENDIF.
ENDLOOP.
LOOP AT NAFVC.
G_TABIX = SY-TABIX.
READ TABLE OAFVC WITH KEY AUFPL = NAFVC-AUFPL APLZL = NAFVC-APLZL.
IF SY-SUBRC = 0.
IF NAFVC = OAFVC.
DELETE OAFVC INDEX SY-TABIX.
DELETE NAFVC INDEX G_TABIX.
CONTINUE.
ELSE.
NAFVC-KZ = 'U'.
MODIFY NAFVC.
ENDIF.
ELSE.
NAFVC-KZ = 'I'.
MODIFY NAFVC.
ENDIF.
ENDLOOP.
IF SY-SUBRC NE 0.
UAFVC = ''.
ENDIF.
IF NAUFK[] NE OAUFK[].
UAUFK = 'U'.
ENDIF.
IF NAFKO[] NE OAFKO[].
UAFKO = 'U'.
ENDIF.
IF NAFPO[] NE OAFPO[].
UAFPO = 'U'.
ENDIF.
IF NAFVC[] NE OAFVC[].
UAFVC = 'U'.
ENDIF.
CALL FUNCTION 'ZPP_CDO_WRITE_DOCUMENT'
EXPORTING
OBJECTID = WA_HDR-OBJECTID
TCODE = WA_HDR-TCODE
UTIME = WA_HDR-UTIME
UDATE = WA_HDR-UDATE
USERNAME = WA_HDR-USERNAME
UPD_AFKO = UAFKO
UPD_AFPO = UAFPO
UPD_AFVC = UAFVC
UPD_AUFK = UAUFK
TABLES
ICDTXT_ZPP_CDO = IT_CDT
XAFKO = NAFKO
YAFKO = OAFKO
XAUFK = NAUFK
YAUFK = OAUFK
XAFPO = NAFPO
YAFPO = OAFPO
XAFVC = NAFVC
YAFVC = OAFVC.
(3) ZPP_RP0003
(3-1) 使用标准FM取得系统表(CDHDR CDPOS)中生产订单的修改记录
CALL FUNCTION 'CHANGEDOCUMENT_READ'
EXPORTING
* DATE_OF_CHANGE = '00000000'
OBJECTCLASS = 'ZPP_CDO'
* TIME_OF_CHANGE = '000000'
* USERNAME = ' '
* DATE_UNTIL = '99991231'
* TIME_UNTIL = '235959'
TABLES
EDITPOS = GT_EDITPOS_WITH_HEADER.
(3-2)上述取得的记录没有: 工厂 生产订单 MRP控制者 物料 订单日期
FORM FRM_GET_DETAILS USING LS_CDRED TYPE CDRED
CHANGING WA_LS_OUT TYPE TYP_OUT.
* 获取生产订单, MRP控制者
CASE LS_CDRED-TABNAME.
WHEN 'AFVC' OR 'AFVV'.
SELECT AUFNR DISPO
INTO (WA_LS_OUT-AUFNR,WA_LS_OUT-DISPO)
FROM AFKO
UP TO 1 ROWS
WHERE AUFPL = LS_CDRED-TABKEY+3(10).
ENDSELECT.
*删除工序需要更多说明
IF LS_CDRED-TABNAME = 'AFVC'
AND ls_cdred-CHNGIND = 'D'.
WA_LS_OUT-FTEXT = '删除工序'.
WA_LS_OUT-F_OLD = LS_CDRED-TABKEY+3(18) .
ENDIF.
WHEN 'AFKO' OR 'AUFK' OR 'AFPO'.
WA_LS_OUT-AUFNR = LS_CDRED-TABKEY+3(12).
SELECT DISPO
INTO WA_LS_OUT-DISPO
FROM AFKO
UP TO 1 ROWS
WHERE AUFNR = WA_LS_OUT-AUFNR.
ENDSELECT.
ENDCASE.
* 通过生产订单获取工厂物料
SELECT DWERK MATNR
INTO (WA_LS_OUT-WERKS,WA_LS_OUT-MATNR)
FROM AFPO
UP TO 1 ROWS
WHERE AUFNR =
WA_LS_OUT-AUFNR.
ENDSELECT.
* 生产订单日期
SELECT SINGLE ERDAT
FROM AUFK
INTO WA_LS_OUT-DATUM
WHERE AUFNR = WA_LS_OUT-AUFNR.
ENDFORM.
(3-3) output alv
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IT_FIELDCAT_LVC = GT_FIELD
IS_LAYOUT_LVC = GS_LAYOUT
I_SAVE = 'A'
I_DEFAULT = 'X'
TABLES
T_OUTTAB = GT_OUT.