采购订单抬头屏幕增强(方法二)

SE19

ME_GUI_PO_CUST

image.png

SUBSCRIBE

  METHOD if_ex_me_gui_po_cust~subscribe.

*---------------采购订单抬头添加附加屏幕增强---------*
    DATA: lw_subscribers TYPE mepo_subscribers.

*    IF sy-tcode EQ 'ME21N' OR sy-tcode EQ 'ME22N' OR sy-tcode EQ 'ME23N' OR sy-tcode EQ 'ME29N' .

* we want to add a customer subscreen on the item detail tab
    CHECK im_application = 'PO'.
    CHECK im_element     = 'HEADER'.

* each line in re_subscribers generates a subscreen. We add one subscreen in this example
    CLEAR:re_subscribers[],lw_subscribers.
* the name is a unique identifier for the subscreen and defined in this class definition
    lw_subscribers-name = subscreen.
* the dynpro number to use
    lw_subscribers-dynpro = '0101'.
* the program where the dynpro can be found
    lw_subscribers-program = 'SAPLZFG_MM_004'.
* each subscreen needs his own DDIC-Structure
    lw_subscribers-struct_name = 'CI_EKKODB'.
* a label can be defined
    lw_subscribers-label = TEXT-001.
* the position within the tabstrib can be defined
    lw_subscribers-position = 11.
* the height of the screen can be defined here. Currently we suport two screen sizes:
* value <= 7 a sevel line subscreen
* value > 7  a 16 line subscreen
    lw_subscribers-height = 2.

    APPEND lw_subscribers TO re_subscribers.
*    ENDIF.
*---------------采购订单抬头添加附加屏幕增强---------*

  ENDMETHOD.

MAP_DYNPRO_FIELDS

  METHOD if_ex_me_gui_po_cust~map_dynpro_fields.


*---------------采购订单抬头添加附加屏幕增强---------*
* given the fieldcatalog of structure mepo_badi_exampl we have to establish a
* mapping to metafields which are used for field selection purposes and error handling
* Standard definitions can be found in type pool MMMFD. It is important for customer
* fields to use integer constants above 90000000 for the metafield.

    FIELD-SYMBOLS: <mapping> LIKE LINE OF ch_mapping.

*    IF sy-tcode EQ 'ME21N' OR sy-tcode EQ 'ME22N' OR sy-tcode EQ 'ME23N' OR sy-tcode EQ 'ME29N'.

    LOOP AT ch_mapping ASSIGNING <mapping>.
      CASE <mapping>-fieldname.
        WHEN 'ZZNFC'. <mapping>-metafield = mmmfd_cust_01.
        WHEN 'ZZCFC'. <mapping>-metafield = mmmfd_cust_02.
        WHEN 'ZZROC'. <mapping>-metafield = mmmfd_cust_03.
        WHEN 'ZZPRN'. <mapping>-metafield = mmmfd_cust_04.
        WHEN 'ZZFTP'. <mapping>-metafield = mmmfd_cust_05.
        WHEN 'ZOANUMBER'. <mapping>-metafield = mmmfd_cust_06.
      ENDCASE.
    ENDLOOP.
*    ENDIF.
*---------------采购订单抬头添加附加屏幕增强---------*
  ENDMETHOD.

TRANSPORT_FROM_MODEL

  METHOD if_ex_me_gui_po_cust~transport_from_model.


*---------------采购订单抬头添加附加屏幕增强---------*
    DATA: lw_header     TYPE REF TO if_purchase_order_mm,
          lw_mepoheader TYPE mepoheader,
          lw_customer   TYPE ci_ekkodb.
*--------------------------------------------------------------------*
* system asks to transport data from the business logic into the view
*--------------------------------------------------------------------*

    IF im_name = subscreen.
* is it an Header? im_model can be header or item.
      mmpur_dynamic_cast lw_header im_model.
      CHECK NOT lw_header IS INITIAL.
* transport standard fields
      lw_mepoheader = lw_header->get_data( ).
* store info for later use
      MOVE-CORRESPONDING lw_mepoheader TO dynp_data_pbo.
    ENDIF.
*---------------采购订单抬头添加附加屏幕增强---------*




  ENDMETHOD.

TRANSPORT_FROM_DYNP

  METHOD if_ex_me_gui_po_cust~transport_from_dynp.

    IF im_name = subscreen.

      CALL FUNCTION 'ZFM_EKKODB_POP'
        IMPORTING
          ex_dynp_data = dynp_data_pai.

    ENDIF.

    IF dynp_data_pai <> dynp_data_pbo.
* something has changed therefor we have to notify the framework
* to transport data to the model
      re_changed = mmpur_yes.

    ENDIF.

  ENDMETHOD.

TRANSPORT_TO_MODEL

  METHOD if_ex_me_gui_po_cust~transport_to_model.


*---------------采购订单抬头添加附加屏幕增强---------*
    DATA: lw_header           TYPE REF TO if_purchase_order_mm,
          lw_mepoheader       TYPE mepoheader,
          lw_customer         TYPE ci_ekkodb,
          lw_po_header_handle TYPE REF TO cl_po_header_handle_mm.
*--------------------------------------------------------------------*
* data have to be transported to business logic
*--------------------------------------------------------------------*
    IF im_name = subscreen.
* is it an item? im_model can be header or item.
      mmpur_dynamic_cast lw_header im_model.
      CHECK NOT lw_header IS INITIAL.
      lw_mepoheader = lw_header->get_data( ).
* standard fields changed?
      IF dynp_data_pbo-zznfc <> dynp_data_pai-zznfc
      OR dynp_data_pbo-zzcfc <> dynp_data_pai-zzcfc
      OR dynp_data_pbo-zzroc <> dynp_data_pai-zzroc
      OR dynp_data_pbo-zzprn <> dynp_data_pai-zzprn
      OR dynp_data_pbo-zzftp <> dynp_data_pai-zzftp
      OR dynp_data_pbo-ZOANUMBER <> dynp_data_pai-ZOANUMBER
      .

* update standard fields
        lw_mepoheader-zznfc = dynp_data_pai-zznfc.
        lw_mepoheader-zzcfc = dynp_data_pai-zzcfc.
        lw_mepoheader-zzroc = dynp_data_pai-zzroc.
        lw_mepoheader-zzprn = dynp_data_pai-zzprn.
        lw_mepoheader-zzftp = dynp_data_pai-zzftp.
        lw_mepoheader-ZOANUMBER = dynp_data_pai-ZOANUMBER.


        CALL METHOD lw_header->set_data
          EXPORTING
            im_data = lw_mepoheader.

*        CALL METHOD lw_header->set_changed( ).
      ENDIF.
    ENDIF.

*---------------采购订单抬头添加附加屏幕增强---------*
  ENDMETHOD.



-----------------------------------------------------------------------------------------------

image.png

image.png

IF_EX_ME_PROCESS_PO_CUST~PROCESS_HEADER

  METHOD IF_EX_ME_PROCESS_PO_CUST~PROCESS_HEADER.


    "edit by jack 20191115

    DATA: LS_MEPOHEADER TYPE MEPOHEADER,
          LS_CUSTOMER   TYPE CI_EKKODB,
          LV_FLAG       TYPE INT4.

    INCLUDE MM_MESSAGES_MAC. "useful macros for message handling

    LS_MEPOHEADER = IM_HEADER->GET_DATA( ).
*    IF LS_MEPOHEADER-BSART EQ 'ZCP'. "在建工程采购订单
*      IF LS_MEPOHEADER-ZOANUMBER IS INITIAL .
*        MMPUR_METAFIELD MMMFD_CUST_06.
*        MMPUR_MESSAGE_FORCED 'E' 'ZMM001' '000' '推送人不能为空' '' '' ''.
*        CALL METHOD IM_HEADER->INVALIDATE( ).
*      ELSE.
*        CLEAR:LV_FLAG.
*        SELECT COUNT(*) INTO LV_FLAG  FROM ZPOPUSH2OA WHERE ZOANUMBER =  LS_MEPOHEADER-ZOANUMBER.
*        IF LV_FLAG LE 0.
*          MMPUR_METAFIELD MMMFD_CUST_06.
*          MMPUR_MESSAGE_FORCED 'E' 'ZMM001' '000' '推送人不存在' '请选择正确的值' '' ''.
*          CALL METHOD IM_HEADER->INVALIDATE( ).
*        ENDIF.
*      ENDIF.
*
*    ENDIF.



  ENDMETHOD.

IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM

METHOD if_ex_me_process_po_cust~process_item.

  DATA:re_header               TYPE REF TO if_purchase_order_mm,
       lw_header               TYPE mepoheader,
       lw_item                 TYPE mepoitem,
       lt_purchase_order_items TYPE purchase_order_items,
       lw_purchase_order_item  TYPE purchase_order_item,
       gw_mepoitem             TYPE mepoitem,
       lt_komv1                TYPE STANDARD TABLE OF komv,
       lt_komv                 TYPE mmpur_tkomv.





  DATA:lv_menge_po TYPE menge_d.

  "获取抬头数据
  re_header = im_item->get_header( ).
  lw_header = re_header->get_data( ).

  "行项目数据
  lt_purchase_order_items = re_header->get_items( ).

  "获取行项目数据
  lw_item = im_item->get_data( ).

  "获取条件数据
  im_item->get_conditions( IMPORTING ex_conditions = lt_komv ).


*-------begin of wangpeng 20191113 运费供应商判断---------------------------*


" add by wangpeng  调整 02.01.2020 08:52:03
*  BREAK KS003.
*  IF lw_item-inco1 = 'EXW'   .
    DATA:ls_komv_temp TYPE komv.
    LOOP AT lt_komv INTO ls_komv_temp WHERE kschl =  'ZFR1' AND KWERT NE 0.
      IF ls_komv_temp-lifnr EQ lw_header-lifnr .
        MESSAGE e023(zmm001)  WITH lw_item-ebelp.
      ENDIF.
    ENDLOOP.
*  ENDIF.

IF ( lw_header-bsart EQ 'ZSTO' OR lw_header-bsart EQ 'ZSTR' ).
  DATA:ls_komv_temp1 TYPE komv.
     LOOP AT lt_komv INTO ls_komv_temp1 WHERE kschl =  'ZFR1' AND KWERT NE 0.

       CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
       EXPORTING
         input  = ls_komv_temp1-lifnr
       IMPORTING
         output = ls_komv_temp1-lifnr.

      IF strlen( ls_komv_temp1-lifnr ) = 4 .
        MESSAGE e023(zmm001)  WITH lw_item-ebelp.
      ENDIF.
    ENDLOOP.

ENDIF.





*-------end of wangpeng 20191113 运费判断-----------------------------*


  "创建修改标识
  ASSIGN ('(SAPLMEPO)TRTYP') TO FIELD-SYMBOL(<trtyp>).
*  BREAK sapyh.
*  IF sy-tcode EQ 'ME21N' OR sy-tcode EQ 'ME22N' OR sy-tcode EQ 'ME23N' OR sy-tcode EQ 'ME29N'.
  IF <trtyp> EQ 'H'.
*--------Begin Of Owen 将采购信息记录的采购组记录到PO的订货原因----->
    IF lw_item-infnr IS NOT INITIAL .
      SELECT SINGLE ekgrp INTO @DATA(lv_ekgrp) FROM eine
      WHERE infnr EQ @lw_item-infnr
      AND   ekorg EQ @lw_header-ekorg
      AND   werks EQ @lw_item-werks.
      IF sy-subrc = 0 AND lv_ekgrp IS NOT INITIAL.
        lw_item-bsgru = lv_ekgrp.
        im_item->set_data( im_data = lw_item ).
      ENDIF.
    ENDIF.
*--------End Of Owen 将采购信息记录的采购组记录到PO的订货原因----->


*--------begin Of owen 信息更新字段默认为空----->
    lw_item-spinf = space.
    im_item->set_data( im_data = lw_item ).
*--------End Of Owen 信息更新字段默认为空----->


*--------begin Of owen 公司间的税码默认J5----->
    IF <trtyp> EQ 'H' AND ( lw_header-bsart EQ 'ZSTO' OR lw_header-bsart EQ 'ZSTR' )
                      AND lw_item-mwskz IS INITIAL .
      lw_item-mwskz = 'J5'.
      im_item->set_data( im_data = lw_item ).
    ENDIF.
*--------End Of Owen 公司间的税码默认J5----->



*--------begin Of vicky 默认净重毛重---->
    IF <trtyp> EQ 'H'
      AND lw_header-bsart EQ 'ZSTO'
      AND lw_item-matnr IS NOT INITIAL
      AND lw_header-lifnr IS NOT INITIAL.

      SELECT SINGLE marc~werks,marc~zzntgew,marc~zzbrgew
        FROM lfa1
        JOIN marc ON marc~werks = lfa1~werks AND marc~matnr = @lw_item-matnr
        WHERE lfa1~lifnr = @lw_header-lifnr
        INTO @DATA(ls_marc).
      IF sy-subrc = 0 AND ls_marc-zzntgew <> 0 AND ls_marc-zzbrgew <> 0.
        lw_item-ntgew = ls_marc-zzntgew.
        lw_item-brgew = ls_marc-zzbrgew.
        im_item->set_data( im_data = lw_item ).
      ELSE.
        MESSAGE e020(zmm001)  WITH lw_item-matnr ls_marc-werks.
      ENDIF.


    ENDIF.
*--------End Of vicky 默认净重毛重----->


*--------begin Of owen RFQ转PO默认第一次自动带出剩余数量----->
    IF lw_item-anfnr IS NOT INITIAL AND <trtyp> EQ 'H'.

      SELECT COUNT(*) FROM marc WHERE werks EQ lw_item-werks AND matnr EQ lw_item-matnr.
      IF sy-subrc = 0.

        "RFQ数量
        SELECT SINGLE ktmng INTO @DATA(lv_ktmng)
        FROM ekko AS a INNER JOIN ekpo AS b ON  a~ebeln = b~ebeln
        WHERE b~ebeln = @lw_item-anfnr
        AND   b~ebelp = @lw_item-anfps
        AND   a~memory = ''
        AND   b~loekz = ''.

        "RFQ已转PO数
        SELECT b~menge,umrez,umren INTO TABLE @DATA(lt_ttqty)
        FROM  ekko AS a INNER JOIN ekpo AS b ON a~ebeln = b~ebeln
        WHERE b~anfnr = @lw_item-anfnr
        AND   b~anfps = @lw_item-anfps
        AND   a~memory = ''
        AND   b~loekz = ''.

        TYPES:BEGIN OF ty_ebelp,
                ebelp TYPE ekpo-ebelp,
                anfnr TYPE ekpo-anfnr,
                anfps TYPE ekpo-anfps,
              END OF ty_ebelp.


        DATA:lw_ttqty LIKE LINE OF lt_ttqty.
        DATA:lv_menge TYPE menge_d.
        DATA:lv_menge_sum TYPE menge_d.
        DATA:lt_ebelp TYPE STANDARD TABLE OF ty_ebelp.
        DATA:lw_ebelp TYPE ty_ebelp.

        "本次其余ITEM数
        LOOP AT lt_purchase_order_items INTO lw_purchase_order_item.
          gw_mepoitem = lw_purchase_order_item-item->get_data( ).

          IF gw_mepoitem-anfnr EQ lw_item-anfnr
           AND gw_mepoitem-anfps = lw_item-anfps
           AND gw_mepoitem-ebelp NE lw_item-ebelp
           AND gw_mepoitem-loekz = space.

            lw_ttqty = VALUE #( menge = gw_mepoitem-menge
                                umrez = gw_mepoitem-umrez
                                umren = gw_mepoitem-umren ).

            APPEND lw_ttqty TO lt_ttqty.
          ENDIF.
        ENDLOOP.

        "计算本次剩余数量
        LOOP AT lt_ttqty INTO lw_ttqty.
          lv_menge = lw_ttqty-menge * lw_ttqty-umrez / lw_ttqty-umren .
          ADD lv_menge TO lv_menge_sum.
        ENDLOOP.

        "默认带一次逻辑
        IMPORT lt_ebelp = lt_ebelp FROM MEMORY ID 'ME21N_OWEN_MENGE'.
        READ TABLE lt_ebelp INTO lw_ebelp WITH KEY ebelp = gw_mepoitem-ebelp
                                                   anfnr = gw_mepoitem-anfnr
                                                   anfps = gw_mepoitem-anfps.
        IF sy-subrc <> 0.
          lw_item-menge = lv_ktmng - lv_menge_sum.
          IF lw_item-menge < 0.
            lw_item-menge = 0.
          ENDIF.
          im_item->set_data( im_data = lw_item ).
        ENDIF.

        lw_ebelp-ebelp = gw_mepoitem-ebelp.
        lw_ebelp-anfnr = gw_mepoitem-anfnr.
        lw_ebelp-anfps = gw_mepoitem-anfps.
        APPEND lw_ebelp TO lt_ebelp.
        EXPORT lt_ebelp = lt_ebelp TO MEMORY ID 'ME21N_OWEN_MENGE'.
      ENDIF.
    ENDIF.

*--------end Of owen rfq转po默认第一次自动带出剩余数量----->

"---------------------------------增加判断物料是否为分批到货物料,如果是,自动将确认设为0004 2020.1.4 陈永坚
IF lw_item-matnr IS NOT INITIAL AND lw_item-BSTAE IS INITIAL AND lw_item-werks IS NOT INITIAL AND  lw_header-BSART ne 'ZSTO' AND lw_header-BSART ne 'ZSTR' .
SELECT SINGLE zjiaoh INTO @DATA(w_jiaoh) FROM marc
  WHERE
  werks = @lw_item-werks
  AND
  matnr = @lw_item-matnr.
  IF w_jiaoh eq 'X'.
  lw_item-bstae = '0004'.
  im_item->set_data( im_data = lw_item ).
  ENDIF.
ENDIF.

  ENDIF.

ENDMETHOD.

IF_EX_ME_PROCESS_PO_CUST~CHECK

METHOD if_ex_me_process_po_cust~check .

  INCLUDE mm_messages_mac. "useful macros for message handling

  DATA:gw_mepoheader           TYPE mepoheader,
       lt_purchase_order_items TYPE purchase_order_items,
       lw_purchase_order_item  TYPE purchase_order_item,
       gw_mepoitem             TYPE mepoitem,
       lt_purchase             TYPE purchase_order_accountings,
       lw_purchase             TYPE purchase_order_accounting,
       lw_mepoaccounting       TYPE mepoaccounting,
       lt_schedule             TYPE purchase_order_schedules,
       lw_schedule             TYPE purchase_order_schedule,
       lw_meposchedule         TYPE meposchedule,
       lt_condition            TYPE mmpur_tkomv,    " 20191113  add by wangpeng
       ls_condition            TYPE komv.           " 20191113  add by wangpeng


  DATA:lv_menge_po TYPE menge_d.


  "抬头数据
  gw_mepoheader  = im_header->get_data( ).

  "排除创建账号单据
  CHECK gw_mepoheader-ernam NE 'DATAUSER'.

  "行项目数据
  lt_purchase_order_items = im_header->get_items( ).



*--------------------------------------------------------------------*

  IF sy-tcode EQ 'ME21N'
    OR sy-tcode EQ 'ME22N'
    OR sy-tcode EQ 'ME23N'
    OR sy-tcode EQ 'ME59'
    OR sy-tcode EQ 'ME59N'
    OR sy-tcode EQ 'ME29N'.

    BREAK sapvw.
    LOOP AT lt_purchase_order_items INTO lw_purchase_order_item.


      DATA(lv_check_banfn) = space.

      lw_purchase_order_item-item->get_data( RECEIVING re_data = gw_mepoitem ).

*--------------------------------------------------------------------*
  " 条件  20191113 add by wangpeng
  CALL METHOD im_header->get_conditions IMPORTING ex_conditions = lt_condition.

*--------------------------------------------------------------------*


*----add by vicky AT 24.09.2019 09:46:21  begin-----------*
      IF gw_mepoitem-bsgru <> space.
        SELECT COUNT(*) FROM tbsg WHERE bsgru = gw_mepoitem-bsgru.
        IF sy-subrc <> 0.
          MESSAGE e019(zmm001) WITH gw_mepoitem-ebelp gw_mepoitem-bsgru .
        ENDIF.
      ENDIF.

*----add by vicky at 24.09.2019 09:46:21 end-----------*


      "删除/完成项目不检查
      IF gw_mepoitem-loekz IS NOT INITIAL OR gw_mepoitem-elikz IS NOT INITIAL.
        CONTINUE.
      ENDIF.

      lw_purchase_order_item-item->get_schedules( RECEIVING re_schedules = lt_schedule ).

      LOOP AT lt_schedule INTO lw_schedule.
        lw_schedule-schedule->get_data( RECEIVING re_data = lw_meposchedule ).

        "判断计划行PR是否为空
        IF lw_meposchedule-banfn IS INITIAL AND lw_meposchedule-bnfpo IS INITIAL.
          lv_check_banfn = abap_true.
        ENDIF.

      ENDLOOP.

*-----begin Of owen 创建po,货源分配标识必须通过rfq转单-----*
*-----Begin Of Owen PO数量不允许 大于RFQ数量-----*
      IF gw_mepoheader-bsart EQ 'ZNB' OR gw_mepoheader-bsart EQ 'ZSTO' OR gw_mepoheader-bsart EQ 'ZEX' OR gw_mepoheader-bsart EQ 'ZSC'.
        "判断货源分配标识
        SELECT COUNT(*) FROM marc WHERE matnr EQ @gw_mepoitem-matnr
                                  AND   werks EQ @gw_mepoitem-werks
                                  AND   kordb EQ @abap_true.
        DATA(lv_subrc) = sy-subrc.

        CASE lv_subrc.
          WHEN '0'.
            IF gw_mepoitem-anfnr IS INITIAL AND gw_mepoitem-anfps IS INITIAL.
              "必须是RFQ转单

*------------add by yakir at 20.08.2019 13:40:11------begin--*
              IF gw_mepoheader-bsart NE 'ZSTO'.
                MESSAGE e002(zmm001) WITH gw_mepoitem-ebelp gw_mepoitem-werks gw_mepoitem-matnr.
              ENDIF.
*------------add by yakir at 20.08.2019 13:40:11------end--*

            ELSE.

              "RFQ数量
              SELECT SUM( ekpo~ktmng ) INTO @DATA(lv_ktmng) FROM ekpo
              WHERE ebeln EQ @gw_mepoitem-anfnr
              AND   ebelp EQ @gw_mepoitem-anfps
              AND   loekz EQ @space.

              "已转PO数量
              SELECT menge,umrez,umren INTO TABLE @DATA(lt_menge) FROM ekpo
              WHERE anfnr EQ @gw_mepoitem-anfnr
              AND   anfps EQ @gw_mepoitem-anfps
              AND ( ebeln NE @gw_mepoitem-ebeln OR ebelp NE @gw_mepoitem-ebelp )
              AND   loekz EQ @space.

              CLEAR lv_menge_po.
              LOOP AT lt_menge INTO DATA(lw_menge).
                lv_ktmng = lv_ktmng - ( lw_menge-menge * lw_menge-umrez / lw_menge-umren ).
              ENDLOOP.

              "PO数量
              lv_menge_po = ( gw_mepoitem-menge * gw_mepoitem-umrez / gw_mepoitem-umren ).

              IF lv_menge_po GT lv_ktmng.
                MESSAGE e006(zmm001) WITH gw_mepoitem-ebelp lv_ktmng.
              ENDIF.

            ENDIF.
          WHEN OTHERS.

            IF lv_check_banfn = abap_true
            AND ( gw_mepoheader-ekgrp NE 'Z98' AND gw_mepoheader-ekgrp NE 'Z99'
              AND gw_mepoheader-ekgrp NE 'C01' AND gw_mepoheader-ekgrp NE 'Z96' ).
              "必须是PR转单
              MESSAGE e003(zmm001) WITH gw_mepoitem-ebelp gw_mepoitem-werks gw_mepoitem-matnr.
            ENDIF.
        ENDCASE.
      ENDIF.

*-----End Of owen 创建po类型是znb 必须通过rfq转单-----*
*-----End Of Owen PO数量不允许 大于RFQ数量-----*


*-----Begin Of owen 工程公司采购订单检查内部订单与仓库的关系-----*
      IF gw_mepoheader-bsart EQ 'ZEN'.

        IF gw_mepoitem-knttp EQ 'I'."判断项目类别为I则判断仓位是否跟内部订单分类仓位一致

          "获取科目分配数据
          lw_purchase_order_item-item->get_accountings( RECEIVING re_accountings = lt_purchase ).

          LOOP AT lt_purchase INTO lw_purchase .

            lw_purchase-accounting->get_data( RECEIVING re_data = lw_mepoaccounting ).

            IF lw_mepoaccounting-aufnr IS NOT INITIAL AND lw_mepoaccounting-aufnr+1(4) NE gw_mepoitem-lgort.
              MESSAGE e010(zmm001) WITH gw_mepoitem-ebelp gw_mepoitem-lgort lw_mepoaccounting-aufnr+1(4).

*              DATA(lv_objek) = 'OR' && lw_mepoaccounting-aufnr.
*              SELECT SINGLE atwrt INTO @DATA(lv_atwrt) FROM ausp
*              WHERE objek EQ @lv_objek AND atinn IN ( SELECT atinn FROM cabn WHERE atnam EQ 'ZLGORT').
*              IF sy-subrc = 0 AND lv_atwrt IS NOT INITIAL AND gw_mepoitem-lgort NE lv_atwrt.
*
*              ENDIF.
            ENDIF.

          ENDLOOP.

        ENDIF.

      ENDIF.
*-----End Of owen 工程公司采购订单检查内部订单与仓库的关系-----*

*-----Begin Of owen 转单数量不是最小包装数的倍数-----*

      "PO数量
      lv_menge_po = ( gw_mepoitem-menge * gw_mepoitem-umrez / gw_mepoitem-umren ).

      SELECT SINGLE bstrf INTO @DATA(lv_bstrf) FROM marc WHERE werks EQ @gw_mepoitem-werks
                                                         AND   matnr EQ @gw_mepoitem-matnr.
      IF sy-subrc = 0 AND lv_bstrf IS NOT INITIAL.
        DATA(lv_mod_bstrf) = lv_menge_po MOD lv_bstrf.
        IF lv_mod_bstrf IS NOT INITIAL.
          MESSAGE w015(zmm001) WITH gw_mepoitem-ebelp lv_bstrf.
        ENDIF.
      ENDIF.

*-----end Of owen 转单数量不是最小包装数的倍数-----*


      IF gw_mepoitem-emlif IS NOT INITIAL AND gw_mepoitem-lblkz IS INITIAL.
        MESSAGE e016(zmm001) WITH gw_mepoitem-ebelp.
      ENDIF.

*----------begin of  by  Luolin 15.01.2020 15:32:45----------
*ZCP在建工程采购订单行项申请人如果传X,就要求发票页签预付定金类别必须填写
    IF GW_MEPOHEADER-BSART EQ 'ZCP'
      AND ( GW_MEPOITEM-AFNAM EQ 'X' OR GW_MEPOITEM-AFNAM EQ 'x' )
      AND GW_MEPOITEM-DPTYP IS INITIAL.
      MESSAGE e029(zmm001) WITH gw_mepoitem-EBELN gw_mepoitem-ebelp.
    ENDIF.
*----------end of  by Luolin 15.01.2020 15:32:45----------

    ENDLOOP.

    IF ( gw_mepoheader-zznfc IS INITIAL OR gw_mepoheader-zzcfc IS INITIAL ) AND gw_mepoheader-bsart EQ 'ZCP'.
      MESSAGE e018(zmm001).
    ENDIF.
  ENDIF.

ENDMETHOD.                    "IF_EX_ME_PROCESS_PO_CUST~CHECK

IF_EX_ME_PROCESS_PO_CUST~POST

  METHOD IF_EX_ME_PROCESS_PO_CUST~POST.

*--------Begin Of owen rfq转po默认第一次自动带出剩余数量----->
    FREE MEMORY ID 'ME21N_OWEN_MENGE'.
*--------end Of owen rfq转po默认第一次自动带出剩余数量----->


*    edit by jack 20191116
    DATA: LS_MEPOHEADER TYPE MEPOHEADER,
          LS_CUSTOMER   TYPE CI_EKKODB.


    LS_MEPOHEADER = IM_HEADER->GET_DATA( ).
*集团  批准标识 已批准 可变性 价值更改 描述
*300   B               4       0.0     未批准,可修改
*300   G        X      2      40.0     已释放
*300   R        X      1       0.0     已释放,无更改
*300   Z        X      4       0.0     已批准,可修改

    IF LS_MEPOHEADER-FRGKE EQ 'Z'."批准标识:采购凭证
    IF LS_MEPOHEADER-ZOANUMBER IS NOT INITIAL AND LS_MEPOHEADER-BSART EQ 'ZCP'. "在建工程采购订单
      DATA:LS_ZMMD007 TYPE ZMMD007_T,
           LV_COUNT   TYPE INT2.
      SELECT COUNT(*)
        INTO LV_COUNT
        FROM ZMMD007_T
        WHERE EBELN = LS_MEPOHEADER-EBELN
          AND FRGKE = LS_MEPOHEADER-FRGKE
        .
      IF LV_COUNT EQ 0.

        LS_ZMMD007-MANDT    = SY-MANDT.               "集团
        LS_ZMMD007-EBELN    = LS_MEPOHEADER-EBELN.   "采购凭证编号
        LS_ZMMD007-FRGKE    = LS_MEPOHEADER-FRGKE.   "批准标识:采购凭证
        LS_ZMMD007-E_CODE   = '1'.  "版本号组件
*       LS_ZMMD007-OAWFNAME = LS_MEPOHEADER-OAWFNAME."OA单据号
        LS_ZMMD007-AEDAT    = LS_MEPOHEADER-AEDAT.   "记录建立日期
        LS_ZMMD007-BSART    = LS_MEPOHEADER-BSART.   "订单类型(采购)
*       LS_ZMMD007-ZMSG     = LS_MEPOHEADER-ZMSG.    "文本字段长度 200
        LS_ZMMD007-ZZCFC    = LS_MEPOHEADER-ZZCFC.   "合同编号
        LS_ZMMD007-ZZNFC    = LS_MEPOHEADER-ZZNFC.   "项目名称
        LS_ZMMD007-ZOANUMBER    = LS_MEPOHEADER-ZOANUMBER.
        INSERT ZMMD007_T FROM LS_ZMMD007 .
      ENDIF.
    ENDIF.

    ENDIF.



  ENDMETHOD.






IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_HEADER

  METHOD if_ex_me_process_po_cust~fieldselection_header.

*-------------Begin Of Owen 采购订单创建/修改显示附加屏幕---------------*
    DATA: lw_header TYPE mepoheader.
    DATA: lv_persistent TYPE mmpur_bool.
    FIELD-SYMBOLS: <fs> LIKE LINE OF ch_fieldselection.

    lw_header = im_header->get_data( ).

    DEFINE set_input.
      READ TABLE ch_fieldselection ASSIGNING <fs> WITH TABLE KEY metafield = &1.
      IF sy-subrc = 0.
       IF im_header->is_changeable( ) = mmpur_yes.
         <fs>-fieldstatus = '+'.
       ELSE.
         <fs>-fieldstatus = '*'.
       ENDIF.

       IF lw_header-bsart NE 'ZCP' AND lw_header-bsart NE 'ZEN' AND lw_header-bsart NE 'ZNB' .
         <fs>-fieldstatus = '-'.
       ENDIF.
      ENDIF.
    END-OF-DEFINITION.

* if the item is already on the database, we disallow to change field badi_bsgru
    lv_persistent = im_header->is_persistent( ).

    set_input mmmfd_cust_01.
    set_input mmmfd_cust_02.
    set_input mmmfd_cust_03.
    set_input mmmfd_cust_04.
    set_input mmmfd_cust_05.
    set_input mmmfd_cust_06.
*-------------End Of Owen 采购订单创建/修改显示附加屏幕---------------*


  ENDMETHOD.


关键词: ABAP MM

网友评论

发表评论