ZGET_PO_INFO-获取采购订单相关数据
ZGET_PO_INFO
FUNCTION zget_po_info. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(OBJECT_KEY) TYPE EBELN OPTIONAL *" VALUE(ISUSR1) TYPE ZSUSR1 OPTIONAL *" VALUE(ISUSR2) TYPE ZSUSR2 OPTIONAL *" VALUE(ISUSR3) TYPE ZSUSR3 OPTIONAL *" VALUE(ISUSR4) TYPE ZSUSR4 OPTIONAL *" VALUE(ISUSR5) TYPE ZSUSR5 OPTIONAL *" EXPORTING *" VALUE(POKEY) TYPE EBELN *" VALUE(PODATE) TYPE ERDAT *" VALUE(VENDER) TYPE LIFNR *" VALUE(POTYPE) TYPE ESART *" VALUE(POSTATUS) TYPE CHAR1 *" VALUE(OUTPLANT) TYPE RESWK *" VALUE(HEADER) TYPE ZPO_HEADER *" VALUE(OSUSR1) TYPE ZSUSR1 *" VALUE(OSUSR2) TYPE ZSUSR2 *" VALUE(OSUSR3) TYPE ZSUSR3 *" VALUE(OSUSR4) TYPE ZSUSR4 *" VALUE(OSUSR5) TYPE ZSUSR5 *" TABLES *" PURCHASING STRUCTURE ZPURCHASING OPTIONAL *" ITEMS STRUCTURE ZPO_ITEMS OPTIONAL *"---------------------------------------------------------------------- TABLES:ekko,ekpo,t006a,eket,makt,stxh,zwmsbukrs,t001,ekbe. DATA:BEGIN OF itab OCCURS 0, ebeln LIKE ekpo-ebeln, ebelp LIKE ekpo-ebelp, matnr LIKE ekpo-matnr, maktx LIKE makt-maktx, "物料描述 meins LIKE ekpo-meins, "order form unit mseht LIKE t006a-mseht, lmein LIKE ekpo-lmein, "measure unit mseht1 LIKE t006a-mseht, menge LIKE ekpo-menge, "order form No. ktmng LIKE ekpo-ktmng, "measure No. eindt LIKE eket-eindt, "consignment date pstyp LIKE ekpo-pstyp, "item style epstp TYPE epstp, loekz LIKE ekpo-loekz, "delete sign werks LIKE ekpo-werks, lgort LIKE ekpo-lgort, mfrnr LIKE ekpo-mfrnr, "manufacturer repos LIKE ekpo-repos, "free income sign umrez LIKE ekpo-umrez, "numerator mwskz LIKE ekpo-mwskz, xersy LIKE ekpo-xersy, umren LIKE ekpo-umren, "denominator uebto LIKE ekpo-uebto, untto LIKE ekpo-untto, netpr LIKE ekpo-netpr, "gw add 净价 uebtk LIKE ekpo-uebtk, bednr LIKE ekpo-bednr, "LZH INSERT 需求跟踪号 elikz LIKE ekpo-elikz, "LZH INSERT 交货完成标记 retpo LIKE ekpo-retpo, "退货项目标记 txz01 LIKE ekpo-txz01, "短文本 charg LIKE eket-charg, zfreesign TYPE c, zfreetxt(30) TYPE c, END OF itab. DATA:ls_maabc TYPE maabc. DATA:ebelp(5) TYPE c, zobject LIKE thead-tdobject, name LIKE thead-tdname. DATA:BEGIN OF zfree OCCURS 1. INCLUDE STRUCTURE tline. DATA: END OF zfree. DATA:BEGIN OF iwrk OCCURS 0, werks LIKE mard-werks, END OF iwrk. DATA:BEGIN OF ibuk OCCURS 0, bukrs LIKE t001k-bukrs, END OF ibuk. ***************************LZH INSERT DATA BEGIN OF ixekbes OCCURS 0. INCLUDE STRUCTURE ekbes. DATA: END OF ixekbes. DATA: BEGIN OF iekbe OCCURS 0. INCLUDE STRUCTURE ekbe. DATA:END OF iekbe. DATA: w_iekbe LIKE iekbe. DATA: BEGIN OF ixekbez OCCURS 0. INCLUDE STRUCTURE ekbez. DATA:END OF ixekbez. DATA:BEGIN OF ixekbnk OCCURS 0. INCLUDE STRUCTURE ekbnk. DATA: END OF ixekbnk. DATA:BEGIN OF ixekbz OCCURS 0. INCLUDE STRUCTURE ekbz. DATA:END OF ixekbz. DATA:tmp_itmsusr1 LIKE ekbes-wamng. DATA:tmp_itmsusr101 LIKE ekbes-wamng. DATA:tmp_itmsusr103 LIKE ekbes-wamng. DATA:tmp_itmsusr105 LIKE ekbes-wamng. DATA:tbekbe TYPE TABLE OF ekbe. DATA:itekbe TYPE ekbe. DATA:zj1 TYPE zje, zpoje TYPE p DECIMALS 2. zj1 = '1.17'. DATA: budat101 TYPE budat. DATA: budat103 TYPE budat. DATA: budat105 TYPE budat. DATA: bukrs TYPE bukrs. DATA: hdrelikz TYPE elikz. "全部行项收货完成 0-未收完 1-已收完 DATA: hdrloekz TYPE loekz. "全部行项标识删除 0-未删除 1-已删除 *查找采购订单抬头信息------------------------------------------------- SELECT SINGLE * FROM ekko WHERE ebeln = object_key. IF sy-subrc = 0. MOVE-CORRESPONDING ekko TO header. "采购订单抬头信息 *& Start You Jing on 10.02.2015 13:42:49 - *--供应商电话号码存储了索赔标志,这里讲使用保留字段1传输 IF ekko-telf1 = 'SRM_SP'. header-iresv1 = ekko-telf1. ENDIF. *& End You Jing on 10.02.2015 13:42:49 - pokey = ekko-ebeln. podate = ekko-aedat. vender = ekko-lifnr. potype = ekko-bsart. outplant = ekko-reswk. osusr1 = ekko-verkf. "LZH INSERT '销售员字段' osusr2 = ekko-unsez. "我方参考 ENDIF. IF ekko-bukrs EQ '4100' OR * OR EKKO-BUKRS EQ 'A000' OR "广东长虹暂未上线,不传递该公司的采购订单,上线后将该注释去掉 ekko-bukrs EQ 'B000' OR ekko-bukrs EQ '5000' OR ekko-bukrs EQ '5200'. "包含广东长虹 osusr5 = 'X'. "退出标记 ENDIF. osusr3 = ekko-bukrs. bukrs = ekko-bukrs. ************公司代码筛选(根据上线库存地确定上线的公司代码) * SELECT WERKS INTO TABLE IWRK FROM ZKCDSX WHERE ZDJBJ NE 'X'. * SORT IWRK. * DELETE ADJACENT DUPLICATES FROM IWRK COMPARING WERKS. * IF NOT IWRK[] IS INITIAL. * SELECT BUKRS INTO TABLE IBUK FROM T001K FOR ALL ENTRIES IN IWRK * WHERE BWKEY = IWRK-WERKS. * SORT IBUK. * DELETE ADJACENT DUPLICATES FROM IBUK. * ENDIF. * READ TABLE IBUK WITH KEY BUKRS = EKKO-BUKRS. * IF SY-SUBRC NE 0. * OSUSR5 = 'X'. * ELSE. * OSUSR3 = IBUK-BUKRS. * ENDIF. * CLEAR IBUK. *查找采购订单行项目数据--------------------------------------------- SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE itab WHERE ebeln = object_key. LOOP AT itab. ************************************************************************* **取物料物述 gw 2010.04.29 add IF potype EQ 'LB'. itab-maktx = itab-txz01. ELSE. SELECT SINGLE * FROM makt WHERE matnr = itab-matnr "物料描述 AND spras = '1'. IF sy-subrc = 0. itab-maktx = makt-maktx. IF itab-maktx CS '&'. REPLACE SUBSTRING '&' IN itab-maktx WITH '&'. ENDIF. ENDIF. ENDIF. ************************************************************************ SELECT SINGLE * FROM t006a WHERE msehi = itab-meins "单位文本 AND spras = '1'. IF sy-subrc = 0. itab-mseht = t006a-mseht. IF itab-mseht CS '&'. REPLACE SUBSTRING '&' IN itab-mseht WITH '&'. ENDIF. ENDIF. SELECT SINGLE * FROM t006a WHERE msehi = itab-lmein "单位文本1 AND spras = '1'. IF sy-subrc = 0. itab-mseht1 = t006a-mseht. IF itab-mseht1 CS '&'. REPLACE SUBSTRING '&' IN itab-mseht1 WITH '&'. ENDIF. ENDIF. SELECT SINGLE * FROM eket WHERE ebeln = itab-ebeln "交货日期 AND ebelp = itab-ebelp. IF sy-subrc = 0. itab-eindt = eket-eindt. itab-charg = eket-charg. ENDIF. SELECT SINGLE epstp FROM t163y INTO itab-epstp WHERE spras = '1' AND pstyp = itab-pstyp. IF itab-repos = ' ' AND itab-pstyp <> '2'. "免费标志和文本 itab-zfreesign = 'X'. zobject = 'EKPO'. ebelp = itab-ebelp. CONCATENATE itab-ebeln ebelp INTO name. SELECT SINGLE * FROM stxh WHERE tdobject = zobject AND tdname = name AND tdid = 'F01' AND tdspras = sy-langu. IF sy-subrc EQ 0 . CALL FUNCTION 'READ_TEXT' EXPORTING id = 'F01' language = sy-langu name = name object = zobject TABLES lines = zfree. LOOP AT zfree. ENDLOOP. TRANSLATE zfree-tdline TO UPPER CASE. CONDENSE zfree-tdline NO-GAPS. IF zfree-tdline CS 'FREEA'. itab-zfreetxt = '赠送不付款'. ELSEIF zfree-tdline CS 'FREEB'. itab-zfreetxt = '磅标差不付款'. ENDIF. ENDIF. ENDIF. *****处理全部行项收货完成标识 IF itab-elikz IS INITIAL. hdrelikz = '0'. ELSEIF itab-elikz EQ 'X' AND hdrelikz IS INITIAL. hdrelikz = '1'. ENDIF. *****处理全部行项删除标识 IF itab-loekz IS INITIAL. hdrloekz = '0'. ELSEIF itab-loekz EQ 'L' AND hdrloekz IS INITIAL. hdrloekz = '1'. ENDIF. MODIFY itab. ENDLOOP. header-elikz = hdrelikz. header-loekz = hdrloekz. REFRESH: items, purchasing. LOOP AT itab. *美菱物料直配信息 SELECT SINGLE maabc FROM marc INTO ls_maabc WHERE matnr = itab-matnr AND werks = itab-werks AND maabc = 'C'. IF sy-subrc = 0. items-susr11 = 'X'. ENDIF. *新加的采购订单行项目信息 MOVE-CORRESPONDING itab TO items. *原来的采购订单行项目信息 CHECK itab-pstyp NE '5'. "LZH INSERT IF potype NE 'LB'. CHECK NOT itab-lgort IS INITIAL. "LZH INSERT ENDIF. purchasing-susr2 = itab-bednr. "LZH INSERT 需求跟踪号 purchasing-susr3 = itab-retpo. "MHY INSERT 退货标记 purchasing-polinenumber = itab-ebelp. purchasing-sku = itab-matnr. purchasing-descr = itab-maktx. purchasing-opu = itab-meins. purchasing-opu_descr = itab-mseht. purchasing-bum = itab-lmein. purchasing-bum_descr = itab-mseht1. purchasing-opuqty = itab-menge. IF potype EQ 'LB' AND vender = '0000000100'. purchasing-opu_convertqty = 1. ELSE. purchasing-opu_convertqty = itab-umrez / itab-umren. ENDIF. purchasing-bumqty = itab-menge * ( itab-umrez / itab-umren ). purchasing-deliverydate = itab-eindt. purchasing-polinetype = itab-epstp. purchasing-charg = itab-charg. IF itab-uebtk = 'X'. purchasing-susr5 = '1000'. ELSE. purchasing-susr5 = itab-uebto. ENDIF. purchasing-polinestatus = itab-loekz. IF NOT itab-elikz IS INITIAL AND itab-loekz IS INITIAL. purchasing-polinestatus = 'C'. "采购订单行项目关闭标记FOR WMS ENDIF. purchasing-plant = itab-werks. purchasing-slocation = itab-lgort. IF itab-pstyp = '2'. purchasing-consignment_flag = 'X'. ELSE. purchasing-consignment_flag = ' '. ENDIF. purchasing-manufacturer = itab-mfrnr. purchasing-free_flag = itab-zfreesign. purchasing-free_flag_descr = itab-zfreetxt. ************************************LZH INSERT CALL FUNCTION 'ME_READ_HISTORY' EXPORTING ebeln = itab-ebeln ebelp = itab-ebelp webre = 'X' "webre TABLES xekbe = iekbe xekbes = ixekbes xekbez = ixekbez xekbnk = ixekbnk xekbz = ixekbz EXCEPTIONS OTHERS = 1. CLEAR ixekbes. READ TABLE ixekbes INDEX 1. IF potype EQ 'LB' AND vender = '0000000100'. CLEAR budat101. CLEAR budat103. CLEAR budat105. tmp_itmsusr105 = 0. LOOP AT tbekbe INTO itekbe. IF itekbe-bwart = '101'. budat101 = itekbe-budat. tmp_itmsusr101 = tmp_itmsusr101 + itekbe-menge. ELSEIF itekbe-bwart = '102'. budat101 = itekbe-budat. tmp_itmsusr101 = tmp_itmsusr101 - itekbe-menge. ELSEIF itekbe-bwart = '105'. budat105 = itekbe-budat. tmp_itmsusr1 = tmp_itmsusr1 + itekbe-menge. ELSEIF itekbe-bwart = '106'. budat105 = itekbe-budat. tmp_itmsusr1 = tmp_itmsusr1 - itekbe-menge. tmp_itmsusr105 = tmp_itmsusr105 - itekbe-menge. ENDIF. ENDLOOP. ELSEIF bukrs EQ 'A000'. *******广东长虹103、105实收数处理 CLEAR budat101. CLEAR budat103. CLEAR budat105. tmp_itmsusr1 = 0. tmp_itmsusr103 = 0. tmp_itmsusr105 = 0. LOOP AT iekbe INTO itekbe. IF itekbe-bwart = '101'. budat101 = itekbe-budat. tmp_itmsusr101 = tmp_itmsusr101 + itekbe-menge. budat105 = itekbe-budat. tmp_itmsusr1 = tmp_itmsusr1 + itekbe-menge. tmp_itmsusr105 = tmp_itmsusr105 + itekbe-menge. ELSEIF itekbe-bwart = '102'. budat101 = itekbe-budat. tmp_itmsusr101 = tmp_itmsusr101 - itekbe-menge. budat105 = itekbe-budat. tmp_itmsusr1 = tmp_itmsusr1 - itekbe-menge. tmp_itmsusr105 = tmp_itmsusr105 - itekbe-menge. ELSEIF itekbe-bwart = '103'. budat103 = itekbe-budat. tmp_itmsusr103 = tmp_itmsusr103 + itekbe-wesbs. ELSEIF itekbe-bwart = '104'. budat103 = itekbe-budat. tmp_itmsusr103 = tmp_itmsusr103 - itekbe-wesbs. ELSEIF itekbe-bwart = '105'. budat105 = itekbe-budat. tmp_itmsusr1 = tmp_itmsusr1 + itekbe-menge. tmp_itmsusr105 = tmp_itmsusr105 + itekbe-menge. ELSEIF itekbe-bwart = '106'. budat105 = itekbe-budat. tmp_itmsusr1 = tmp_itmsusr1 - itekbe-menge. tmp_itmsusr105 = tmp_itmsusr105 - itekbe-menge. ENDIF. ENDLOOP. tmp_itmsusr1 = purchasing-opu_convertqty * tmp_itmsusr1. * TMP_ITMSUSR103 = PURCHASING-OPU_CONVERTQTY * TMP_ITMSUSR103. ELSEIF bukrs EQ 'I000'. LOOP AT iekbe INTO itekbe. IF itekbe-bwart = '101'. tmp_itmsusr101 = tmp_itmsusr101 + itekbe-menge. ELSEIF itekbe-bwart = '102'. tmp_itmsusr101 = tmp_itmsusr101 - itekbe-menge. ENDIF. ENDLOOP. tmp_itmsusr1 = purchasing-opu_convertqty * ( ixekbes-wemng + ixekbes-wesbs ). ELSE. tmp_itmsusr1 = purchasing-opu_convertqty * ( ixekbes-wemng + ixekbes-wesbs ). ENDIF. CLEAR iekbe[]. REFRESH:ixekbes , iekbe , ixekbez , ixekbnk , ixekbz. IF tmp_itmsusr1 < 0. tmp_itmsusr1 = 0 - tmp_itmsusr1. purchasing-susr1 = tmp_itmsusr1. items-susr1 = tmp_itmsusr1. "2010.08.13 gw add 将实收数传到SRM CONCATENATE '-' purchasing-susr1 INTO purchasing-susr1. CONDENSE purchasing-susr1 NO-GAPS. ELSE. purchasing-susr1 = tmp_itmsusr1. items-susr1 = tmp_itmsusr1. "2010.08.13 gw add 将实收数传到SRM ENDIF. items-susr2 = itab-netpr. "2010.09.19 gw add 将净价传到SRM IF itab-mwskz = 'J0'. zpoje = tmp_itmsusr1 * ekpo-netpr. ELSEIF itab-mwskz = 'J1'. zpoje = tmp_itmsusr1 * ekpo-netpr * zj1. ENDIF. items-susr3 = zpoje. *****采购订单位换算 items-susr4 = purchasing-opu_convertqty. IF budat101 = '00000000'. items-susr5 = ''. ELSE. items-susr5 = budat101. "101最后收货日期 ENDIF. items-susr6 = tmp_itmsusr101. "101收货数量 IF budat103 = '00000000'. items-susr7 = ''. ELSE. items-susr7 = budat103. "103最后收货日期 ENDIF. items-susr8 = tmp_itmsusr103. "103收货数量 IF budat105 = '00000000'. items-susr9 = ''. ELSE. items-susr9 = budat105. "105最后收货日期 ENDIF. items-susr10 = tmp_itmsusr105. "105收货数量 *****给行项采购组赋值 items-ekgrp = header-ekgrp. CLEAR tmp_itmsusr1. CLEAR tmp_itmsusr101. CLEAR tmp_itmsusr103. CLEAR tmp_itmsusr105. ixekbes-wamng = 0. ixekbes-wemng = 0. ************************************ APPEND items. CLEAR items. APPEND purchasing. CLEAR purchasing. ENDLOOP. IF osusr5 = 'X'. REFRESH:purchasing,items. ENDIF. ENDFUNCTION.
本人常年接收SAP运维和远程项目,ECC,S/4HANA,CRM,WDA.
远程人天可谈,终身售后,有活请联系V信:18925782767(问问题免费,欢迎交流!)
!!请关注本人技术分享公众号:SAP翔子(可扫头像二维码)
每天分享新知识,博客文章也会陆续整理并迁移至公众号,与您一起共同学习

浙公网安备 33010602011771号