此博客为原创博客,都是个人工作经历所得,转载请注明出处

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.

 

posted @ 2017-03-29 16:43  Rainystuday  阅读(471)  评论(0)    收藏  举报