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.
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.
相关文章推荐
- Android 6.0指纹识别App开发demo
- TCPIP协议详解----网络基础知识
- 微信公众号的八大价值
- nginx + FastDFS分布式文件服务器搭建
- redis中的key设置过期时间
- 在linux上一行代码不用写实现自动采集+hadoop分词
- python实现查看目录下重复的文件
- 禁止鼠标双击造成窗体大小的变化
- 80端口被占用如何查询
- Day89: Tomorrow is check day
- 设置red5流媒体服务器中red5.bat文件开机自启动
- 1234567890
- #pragma once和#ifundef的区别
- JAVA将上传的PPT/PPTX转为图片
- DNSmasq – 配置DNS和DHCP
- 在linux上一行代码不用写实现自动采集+hadoop分词
- JDK-Proxy示例
- 1100. Mars Numbers (20)
- infobright中导入数据避免特殊字符问题
- 使用OpenVSwitch、netns构建复杂的虚拟网络