您的位置:首页 > 其它

CO11N报工

2016-12-06 16:57 211 查看
重要点:报工bapi:BAPI_PRODORDCONF_CREATE_TT(调用bapi后记得提交到数据库)
FUNCTIONZZPP_DISCRETE_CONF_MES.
*"----------------------------------------------------------------------
*"*"本地接口:
*" EXPORTING
*"    VALUE(E_RTYPE) TYPE  BAPI_MTYPE
*"    VALUE(E_RTMSG) TYPE  BAPI_MSG
*"    VALUE(E_RUECK) TYPE  RUECK
*"  TABLES
*"     T_DATA STRUCTURE  ZSPP0002
*"     T_RESULT STRUCTURE  ZSPP0012
*"----------------------------------------------------------------------
 MACRO_SAVE_LOG_BEFORE_PROC.
 MACRO_SAVE_LOG_AFTER_PROC 'IN'.
 TABLES:AFKO,RESB.
***定义订单表头数据 PP
订单内表
  DATA:BEGIN OFLT_AFKO OCCURS 0,
        AUFNR TYPE AFKO-AUFNR, "订单号
        GAMNG TYPE AFKO-GAMNG, "订单数量总计
        GMEIN TYPE AFKO-GMEIN, "基本计量单位
      END OF LT_AFKO.
  DATA LS_AFKOLIKE LT_AFKO.
*** 预定/相关需求
  DATA:LT_RESBTYPE  RESB OCCURS 0 WITH HEADER LINE,
      LS_RESB TYPE RESB.
 DATA  LS_DATA LIKE T_DATA."t_data是一个代表头的内表
 
*
记录每一条订单的信息
  DATA LV_INDEXTYPE SY-TABIX.
  DATA:GV_GOODSLIKE BAPI2017_GM_ITEM_CREATE-ENTRY_QNT.
***定义bapi相关变量
  DATA:LT_TIMETICKETS TYPE TABLE OF BAPI_PP_TIMETICKET,
       LS_TIMETICKETS TYPE BAPI_PP_TIMETICKET.
  DATA:LT_GOODSMOVEMENTS TYPE TABLE OF BAPI2017_GM_ITEM_CREATE,
       LS_GOODSMOVEMENTS TYPE BAPI2017_GM_ITEM_CREATE.
 DATA: LT_DETAIL_RETURN TYPE TABLE OF BAPI_CORU_RETURN,    "bapi api返回信息
       LS_DETAIL_RETURN TYPE BAPI_CORU_RETURN.
  DATA:LT_RETURN TYPE TABLE OF BAPIRET1,
       LS_RETURN TYPE BAPIRET1.
*
*
*----------------------------------------------------------------------*
*接收的i_data数据传入到bapi对应表中
*处理数据
  IF T_DATA[]IS NOT INITIAL.
    LOOPAT T_DATA INTO LS_DATA.
*    
记录一条数据,保存每一个订单的返回信息,S/E
     LV_INDEX = SY-TABIX.
*    
订单号添加前导0
     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
       EXPORTING
         INPUT  = LS_DATA-AUFNR
       IMPORTING
         OUTPUT = LS_DATA-AUFNR.
*     CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
*       EXPORTING
*         INPUT          = LS_DATA-MEINS
*       IMPORTING
*         OUTPUT         = LS_DATA-MEINS
*       EXCEPTIONS
*         UNIT_NOT_FOUND = 1
*         OTHERS         = 2.
     MODIFY T_DATA.
*-----------------------------------------------------------------------------------*
*获取货物移动数量
***根据订单号获取afko、resb对应的数据
     SELECT DISTINCT
       AFKO~GAMNG
      INTO  CORRESPONDING FIELDS OF TABLE LT_AFKO
       FROM AFKO
        WHERE AFKO~AUFNR = LS_DATA-AUFNR.
     SELECT
       DISTINCT
         RESB~BDMNG    "需求量    resb-MEINS "基本计量单位
         RESB~MATNR    "物料编号
         RESB~WERKS    "工厂
         RESB~LGORT    "库存地点
         RESB~XWAOK    "允许预订的货物移动
         RESB~KZEAR    "该预定的最后发货
    INTOCORRESPONDING FIELDS OF TABLE  LT_RESB
       FROM RESB
       WHERE RESB~AUFNR = LS_DATA-AUFNR    "订单号
         AND RESB~VORNR = LS_DATA-VORNR    "活动编号(工序)
         AND RESB~RGEKZ = 'X'             "反冲                             = 'X'
         AND RESB~XLOEK = ' '             "项目已删除                        = ''
         AND RESB~XWAOK = 'X'             "允许预订的货物移动                 = 'X'
         AND RESB~KZEAR <> 'X'.           "该预定的最后发货                   <> 'X'
*  读取表中数据进行运算
     READ TABLE LT_AFKO INTO LS_AFKO.
     READ TABLE LT_RESB INTO LS_RESB.
*循环resb中的多条数据添加到goods中去生成一条物料凭证
     IF SY-SUBRC = 0.
       LOOP AT LT_RESB INTO LS_RESB.
*计算最终移动的货物数量
         GV_GOODS = ( LS_DATA-PSMNG + LS_DATA-PSAMG ) * ( LS_RESB-BDMNG /LS_AFKO-GAMNG ).
***** goodsmovements
         REFRESH:LT_GOODSMOVEMENTS.
         CLEAR LS_GOODSMOVEMENTS.
         LS_GOODSMOVEMENTS-MATERIAL  =LS_RESB-MATNR."物料编号
         LS_GOODSMOVEMENTS-PLANT     =LS_RESB-WERKS."工厂
         LS_GOODSMOVEMENTS-STGE_LOC  =LS_RESB-LGORT."库存地点
         LS_GOODSMOVEMENTS-MOVE_TYPE = '261'.       "移动类型
         LS_GOODSMOVEMENTS-ENTRY_QNT = GV_GOODS.    "数量
         LS_GOODSMOVEMENTS-ENTRY_UOM = LS_DATA-MEINS."单位
         APPEND  LS_GOODSMOVEMENTS TO LT_GOODSMOVEMENTS .
       ENDLOOP.
     ENDIF.
*----------------------------------------------------------------------*
***** timeticket
     REFRESH:LT_TIMETICKETS.
     CLEAR LS_TIMETICKETS.
     LS_TIMETICKETS-ORDERID            =LS_DATA-AUFNR."订单号
     LS_TIMETICKETS-POSTG_DATE         =LS_DATA-BUDAT."过账日期
     LS_TIMETICKETS-OPERATION          =LS_DATA-VORNR."活动编号(工序)
     LS_TIMETICKETS-CONF_QUAN_UNIT     =LS_DATA-MEINS."单位
     LS_TIMETICKETS-CONF_QUAN_UNIT_ISO = LS_DATA-MEINS."单位
     LS_TIMETICKETS-YIELD             = LS_DATA-PSMNG."良品数量
     LS_TIMETICKETS-SCRAP             = LS_DATA-PSAMG. "废品数量
     LS_TIMETICKETS-TARGET_ACTI1      = 'X'.
     LS_TIMETICKETS-TARGET_ACTI2      = 'X'.
     LS_TIMETICKETS-TARGET_ACTI3      = 'X'.
     LS_TIMETICKETS-TARGET_ACTI4      = 'X'.
     LS_TIMETICKETS-TARGET_ACTI5      = 'X'.
     LS_TIMETICKETS-TARGET_ACTI6      = 'X'.
     LS_TIMETICKETS-FIN_CONF          = '1'.
     APPEND  LS_TIMETICKETS TO LT_TIMETICKETS .
*-----------------------------------------------------------------------------*
***调用bapi
     CALL FUNCTION 'BAPI_PRODORDCONF_CREATE_TT'
       TABLES
         TIMETICKETS    = LT_TIMETICKETS[]
         GOODSMOVEMENTS = LT_GOODSMOVEMENTS[]
         DETAIL_RETURN  = LT_DETAIL_RETURN[].
     READ TABLE LT_DETAIL_RETURN INTO LS_DETAIL_RETURN WITH KEY TYPE = 'E'.
     IF SY-SUBRC EQ 0.
       LS_DATA-RTYPE = 'E'.
       LS_DATA-RTMSG = LS_DETAIL_RETURN-MESSAGE.
     ELSE.
       LS_DATA-RTYPE = 'S'.
       LS_DATA-RTMSG = '创建成功!'.
    
  COMMITWORK . “提交至数据库”
       WAIT UP TO '0.5' SECONDS.
     ENDIF.
     MODIFY T_DATA FROM LS_DATA INDEX LV_INDEX.
     CLEAR LS_DATA.
   ENDLOOP.
  ENDIF.
 MACRO_SAVE_LOG_AFTER_PROC 'OUT'.
ENDFUNCTION.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: