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.
post SAP-Garson
原文链接:https://www.cnblogs.com/rainysblog/p/6616710.html文章来自于网络,如果侵犯了您的权益,请联系站长删除!