20170325 生产订单完工/冲销数量同步SCP系统
一、需求
业务目的
将Sap生产订单完工信息定时推送到SCP。
接口方式
1. 采用RFC;
2. 采用同步传输;
3. 提供RFC 接口供SCP调用;
业务逻辑
选择屏幕输入字段:
字段 类型 长度 字段名称fieldname 字段内容解释
AUFNR CHAR 12 生产订单---表
BUDAT DAYS 8 日期区间 默认为当天
输出的表接口表及其字段:
字段 Key 类型 长度 字段名称fieldname 字段内容解释
AUFNR Y CHAR 12 生产订单
BUDAT Y DATS 8 过帐日期
CPUTM Y TIMS 6 输入时间
MENGE QUAN 13 本次完工数量
GWEMG CHAR 12 完工总数量
MSGTX CHAR 100 预留文本
ZDATUM DATS 8 创建日期
ZCPUTM TIMS 6 创建时间
USNAM CHAR 12 用户
处理逻辑:
1.
Select AUFM -AUFNR,AUFM -MENGE, AUFNR-BUDAT, MKPF- CPUTM,AUFM-BWART ,
FROM AUFM , MKPF
ORDER BY AUFM-BWART , MKPF- CPUTM
WHERE AUFM-MBLNR = MKPF-MBLNR
And (WERKS = ‘I060’ OR WERKS = ‘I061’ OR WERKS = ‘I070’ OR WERKS = ‘I071’ OR WERKS = ‘I080’ OR WERKS = ‘I081’)
And ( AUFM- BWART = ‘101’ or AUFM-BWART = ‘102’)
And BUDAT = 选择屏幕输入
And KZBEW = ‘F’
2.移动类型处理,若为101移动类型MENGE为正值,若为102移动类型MENGE为负值
3.计算完工总数量:对相同的生产订单,完工总数量GWEMG= 上条记录的本次完工数量MENGE+当前记录的本次完工数量MENGE,
4.将过账日期和输入时间以两个字段分别存值,
5. 将输出结果存放在自建表 ZMLSCP_LOG002 中,
二、实现
FUNCTION ZMLSCP1_FR0007. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(I_BUDAT) TYPE ZST_BUDAT *" EXPORTING *" VALUE(O_STATU) TYPE CHAR1 *" VALUE(O_MSG) TYPE CHAR255 *" TABLES *" OT_FINISHED STRUCTURE ZMLSCP_LOG002 *"---------------------------------------------------------------------- TYPES:BEGIN OF TY_AUFM, MBLNR LIKE AUFM-MBLNR, MJAHR LIKE AUFM-MJAHR, ZEILE LIKE AUFM-ZEILE, AUFNR LIKE AUFM-AUFNR, BUDAT LIKE AUFM-BUDAT, MENGE LIKE AUFM-MENGE, BWART LIKE AUFM-BWART, CPUTM LIKE MKPF-CPUTM, GWEMG LIKE AUFM-MENGE, END OF TY_AUFM. DATA:LT_AUFM TYPE TABLE OF TY_AUFM, LW_AUFM LIKE LINE OF LT_AUFM. DATA:GR_WERKS TYPE RANGE OF WERKS_D, GW_WERKS LIKE LINE OF GR_WERKS. DATA:GR_BUDAT TYPE RANGE OF AUFM-BUDAT, GW_BUDAT LIKE LINE OF GR_BUDAT. RANGES:R_AUFNR FOR AUFM-AUFNR. DATA:LT_ZMLCND LIKE TABLE OF ZMLCND WITH HEADER LINE. DATA:L_TABIX TYPE SY-TABIX. DATA:L_MENGE LIKE AUFM-MENGE. CLEAR:GR_BUDAT[],GR_WERKS[],R_AUFNR[]. *&s1.input check * IF I_AUFNR IS INITIAL. * O_STATU = 'E'. * O_MSG = '生产订单号必输!'. * RETURN. * ENDIF. R_AUFNR(3) = 'IEQ'. LOOP AT OT_FINISHED WHERE AUFNR NE SPACE. R_AUFNR-LOW = OT_FINISHED-AUFNR. APPEND R_AUFNR. ENDLOOP. IF R_AUFNR[] IS INITIAL. O_STATU = 'E'. O_MSG = '生产订单号必输!'. RETURN. ELSE. CLEAR OT_FINISHED[]. ENDIF. IF I_BUDAT IS INITIAL. O_STATU = 'E'. O_MSG = '过帐日期必输!'. RETURN. ENDIF. IF I_BUDAT-BUDAT_E IS INITIAL. I_BUDAT-BUDAT_E = I_BUDAT-BUDAT_B. ENDIF. IF I_BUDAT-BUDAT_B > I_BUDAT-BUDAT_E. O_STATU = 'E'. O_MSG = '过账日期的开始日期不能大于结束日期!'. RETURN. ENDIF. *&get budat GW_BUDAT(3) = 'IBT'. GW_BUDAT-LOW = I_BUDAT-BUDAT_B. GW_BUDAT-HIGH = I_BUDAT-BUDAT_E. APPEND GW_BUDAT TO GR_BUDAT. *&get werks SELECT * INTO TABLE LT_ZMLCND FROM ZMLCND WHERE TYPE_01 = 'A01'. GW_WERKS(3) = 'IEQ'. LOOP AT LT_ZMLCND. GW_WERKS-LOW = LT_ZMLCND-VALUE. APPEND GW_WERKS TO GR_WERKS. ENDLOOP. *&s2.get data SELECT A~MBLNR A~MJAHR A~ZEILE A~AUFNR A~BUDAT A~MENGE A~BWART B~CPUTM INTO TABLE LT_AUFM FROM AUFM AS A JOIN MKPF AS B ON A~MBLNR = B~MBLNR AND A~MJAHR = B~MJAHR WHERE A~AUFNR IN R_AUFNR AND A~BUDAT IN GR_BUDAT AND A~WERKS IN GR_WERKS AND A~BWART IN ('101' , '102') AND A~KZBEW = 'F'."移动标识-有关生产单的货物移动 IF SY-SUBRC NE 0. O_STATU = 'E'. O_MSG = '没有找到符合条件的数据!'. RETURN. ENDIF. *&需要sort by budat cputm. SORT LT_AUFM BY AUFNR BUDAT CPUTM. *&s3.deal with data CLEAR:L_MENGE. LOOP AT LT_AUFM INTO LW_AUFM. L_TABIX = SY-TABIX. IF LW_AUFM-BWART = '102'. LW_AUFM-MENGE = LW_AUFM-MENGE * -1. ENDIF. L_MENGE = L_MENGE + LW_AUFM-MENGE. LW_AUFM-GWEMG = L_MENGE. * SELECT SINGLE CPUTM INTO LW_AUFM-CPUTM * FROM MKPF * WHERE MBLNR = LW_AUFM-MBLNR * AND MJAHR = LW_AUFM-MJAHR. OT_FINISHED-AUFNR = LW_AUFM-AUFNR. OT_FINISHED-BUDAT = LW_AUFM-BUDAT. OT_FINISHED-CPUTM = LW_AUFM-CPUTM. OT_FINISHED-MENGE = LW_AUFM-MENGE. OT_FINISHED-GWEMG = LW_AUFM-GWEMG. OT_FINISHED-ZDATUM = SY-DATUM. OT_FINISHED-ZCPUTM = SY-UZEIT. OT_FINISHED-USNAM = SY-UNAME. APPEND OT_FINISHED. CLEAR:OT_FINISHED. MODIFY LT_AUFM FROM LW_AUFM INDEX L_TABIX. CLEAR:LW_AUFM. ENDLOOP. *&s4.modify into ZLOG IF OT_FINISHED[] IS NOT INITIAL. MODIFY ZMLSCP_LOG002 FROM TABLE OT_FINISHED. IF SY-SUBRC EQ 0. COMMIT WORK AND WAIT . DESCRIBE TABLE OT_FINISHED LINES L_TABIX. O_STATU = 'S'. O_MSG = '成功存入ZMLSCP_LOG002表' && L_TABIX && '条记录!'. ELSE. ROLLBACK WORK. O_STATU = 'E'. O_MSG = '数据存入ZMLSCP_LOG002表失败!'. ENDIF. ENDIF. ENDFUNCTION.
本人常年接收SAP运维和远程项目,ECC,S/4HANA,CRM,WDA.
远程人天可谈,终身售后,有活请联系V信:18925782767(问问题免费,欢迎交流!)
!!请关注本人技术分享公众号:SAP翔子(可扫头像二维码)
每天分享新知识,博客文章也会陆续整理并迁移至公众号,与您一起共同学习

浙公网安备 33010602011771号