SAP-生产订单更改记录

文章详细描述了一个程序ZPP_RP0003的操作过程,涉及CDO定制,处理生产订单(AFKO,AFVC,AFPO)的增删改,以及与MRP控制者物料订单日期的关联,并展示了如何通过ALVGRID_DISPLAY_LVC显示输出数据。
摘要由CSDN通过智能技术生成

  1. 程序说明

       程序:ZPP_RP0003

       事务码:ZP007

  1. 程序实现

  1. .自定义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.

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小啊曼

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值