SAP-MM批量关闭PO用户版

(二)

(三)处理代码

A:
*&---------------------------------------------------------------------*
*& Include YPRUPDATETOP                                      Report YPRUPDATE
*&
*&---------------------------------------------------------------------*

REPORT yprupdate.
INCLUDE zfrm_report_register.

TYPE-POOLS: slis.

DATA: gt_headercat TYPE  slis_t_listheader,
      gs_headercat TYPE  slis_listheader,
      gt_fieldcat  TYPE  slis_t_fieldcat_alv,
      gs_fieldcat  TYPE  slis_fieldcat_alv,
      gs_layout     TYPE   slis_layout_alv,
      gt_sortcat   TYPE  slis_t_sortinfo_alv,
      gs_sortcat   TYPE  slis_sortinfo_alv,
      gt_eventcat  TYPE  slis_t_event,
      gs_eventcat  TYPE  slis_alv_event,
      gs_keyinfo   TYPE   slis_keyinfo_alv.

TABLES:ekko,ekpo,ekbe,t161t.

DATA:BEGIN OF gt_list OCCURS 0,
       ebeln     LIKE ekko-ebeln,  "采购订单编号
       sex       TYPE c,
       ernam     LIKE ekko-ernam,  "创建者
       aedat     LIKE ekko-aedat,   "订单创建日期
       bsart     LIKE ekko-bsart,   "凭证类型
       batxt     LIKE t161t-batxt,  "描述
       werks     LIKE ekpo-werks, "工厂
       ebelp     LIKE ekpo-ebelp,  "行号
       ekgrp     LIKE ekko-ekgrp,  "采购组
       eknam     LIKE t024-eknam,  "采购组描述
       lifnr     LIKE ekko-lifnr,  "供应商编号
       name1     LIKE lfa1-name1,  "供应商名称
       matkl     LIKE ekpo-matkl,  "物料组
       wgbez     LIKE t023t-wgbez,  "物料组描述
       matnr     LIKE ekpo-matnr,  "物料号
       txz01     LIKE ekpo-txz01,  "物料描述
       menge     LIKE ekpo-menge,  "订单数量
       meins     LIKE ekpo-meins,  "订单单位
       jhsl      LIKE ekpo-menge,  "交货数量
       wjhs      LIKE ekpo-menge,  "未交货数量
       elikz     LIKE ekpo-elikz,  "交货完成标记
       frgke     LIKE ekko-frgke,
       name(220) TYPE c,           "备注
     END OF gt_list.

DATA:BEGIN OF lt_po OCCURS 0,
       ernam LIKE ekko-ernam,  "创建者
       aedat LIKE ekko-aedat,   "订单创建日期
       bsart LIKE ekko-bsart,   "凭证类型
       werks LIKE ekpo-werks, "工厂
       ebeln LIKE ekko-ebeln,  "采购订单编号
       ebelp LIKE ekpo-ebelp,  "行号
       ekgrp LIKE ekko-ekgrp,  "采购组
       lifnr LIKE ekko-lifnr,  "供应商编号
       matkl LIKE ekpo-matkl,  "物料组
       matnr LIKE ekpo-matnr,  "物料号
       txz01 LIKE ekpo-txz01,  "物料描述
       menge LIKE ekpo-menge,  "订单数量
       meins LIKE ekpo-meins,  "订单单位
       jhsl  LIKE ekpo-menge,  "交货数量
       wjhs  LIKE ekpo-menge,  "未交货数量
       elikz LIKE ekpo-elikz,  "交货完成标记
       frgke LIKE ekko-frgke, "审批标识
     END OF lt_po.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_werks LIKE ekpo-werks OBLIGATORY,
            p_ekgrp LIKE ekko-ekgrp OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
SELECT-OPTIONS:s_bsart FOR ekko-bsart,
               s_ebeln FOR ekko-ebeln,
               s_matkl FOR ekpo-matkl,
               s_matnr FOR ekpo-matnr,
               s_ernam FOR ekko-ernam,
               s_date  FOR ekko-aedat.
SELECTION-SCREEN END OF BLOCK b2.
B:逻辑处理
*&---------------------------------------------------------------------*
*&  包含                YPRUPDATEO01
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.

AT SELECTION-SCREEN.

START-OF-SELECTION.
  PERFORM save_report_register.
  PERFORM check.
  PERFORM getdata.
  PERFORM build_fieldcat.
  PERFORM build_sortcat.
  PERFORM build_event.
  PERFORM build_layout.


END-OF-SELECTION.

  PERFORM dispaly_alv_data.
C:逻辑处理
*&---------------------------------------------------------------------*
*&  包含                YPRUPDATEF01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  GETDATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM getdata .
*  DATA :BEGIN OF lt_t161t OCCURS 0,
*          bsart LIKE t161t-bsart,
*          batxt LIKE t161t-batxt,
*        END OF lt_t161t.

  DATA:BEGIN OF lt_t024 OCCURS 0,
         ekgrp LIKE t024-ekgrp,
         eknam LIKE t024-eknam,
       END OF lt_t024.

  DATA:BEGIN OF lt_lfa1 OCCURS 0,
         lifnr LIKE lfa1-lifnr,
         name1 LIKE lfa1-name1,
       END OF lt_lfa1.

  DATA:BEGIN OF lt_t023t OCCURS 0,
         matkl LIKE t023t-matkl,
         wgbez LIKE t023t-wgbez,
       END OF lt_t023t.
  DATA:lt_poa LIKE lt_po OCCURS 0 WITH HEADER LINE.

  DATA:BEGIN OF lt_ekbe OCCURS 0,
         ebeln LIKE ekbe-ebeln,
         ebelp LIKE ekbe-ebelp,
         menge LIKE ekbe-menge,
         shkzg LIKE ekbe-shkzg,
       END OF lt_ekbe.

  DATA:lt_ekbea LIKE lt_ekbe OCCURS 0 WITH HEADER LINE.

*  SELECT *
*    INTO CORRESPONDING FIELDS OF TABLE lt_t161t
*    FROM t161t
*    WHERE spras = 1
*    AND bstyp  = 'F'.

  SELECT      *
    INTO CORRESPONDING FIELDS OF TABLE lt_t024
    FROM t024.

  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE lt_t023t
    FROM t023t
    WHERE spras = 1.

  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE lt_po
    FROM ekko
    INNER JOIN ekpo
    ON ekko~ebeln = ekpo~ebeln
    WHERE ekko~ebeln IN s_ebeln
    AND   ekko~ekgrp = p_ekgrp
    AND   ekko~bsart IN s_bsart
    AND   ekko~ernam IN s_ernam
    AND   ekko~aedat IN s_date
    AND   ekpo~werks = p_werks
    AND   ekpo~matkl IN s_matkl
    AND   ekpo~matnr IN s_matnr
    AND   ekpo~elikz = ''
    AND   ekko~frgke IN ('','E')
    AND   ekpo~loekz = ''.

  SORT lt_po BY ebeln ebelp.

  IF lt_po[] IS INITIAL.
    MESSAGE'未发现符合条件的数据,请查证后重新输入条件'
      TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ELSE.
    SELECT *
      INTO CORRESPONDING FIELDS OF TABLE lt_ekbe
      FROM ekbe
      FOR ALL ENTRIES IN lt_po
      WHERE ebeln = lt_po-ebeln
      AND   ebelp = lt_po-ebelp
      AND   vgabe = 1.
  ENDIF.

  lt_poa[] = lt_po[].
  SORT lt_poa BY lifnr.
  DELETE ADJACENT DUPLICATES FROM lt_poa COMPARING lifnr.
  IF lt_poa[] IS NOT INITIAL.
    SELECT *
      INTO CORRESPONDING FIELDS OF TABLE lt_lfa1
      FROM lfa1
      FOR ALL ENTRIES IN lt_poa
      WHERE lifnr = lt_poa-lifnr.
  ENDIF.

  LOOP AT lt_ekbe.
    MOVE-CORRESPONDING lt_ekbe TO lt_ekbea.
    IF lt_ekbe-shkzg = 'H'.
      lt_ekbea-menge = lt_ekbe-menge * -1.
    ENDIF.
    lt_ekbea-shkzg = ''.
    COLLECT lt_ekbea.
    CLEAR:lt_ekbe,lt_ekbea.
  ENDLOOP.

  SORT lt_po BY ernam aedat.
  SORT lt_lfa1 BY lifnr.
  SORT lt_t023t BY matkl.
  SORT lt_t024 BY ekgrp.
  SORT lt_ekbea BY ebeln ebelp.

  LOOP AT lt_po.
    MOVE-CORRESPONDING lt_po TO gt_list.

    READ TABLE lt_lfa1 WITH KEY lifnr = lt_po-lifnr.
    IF sy-subrc EQ 0.
      gt_list-name1 = lt_lfa1-name1.
    ENDIF.

    READ TABLE lt_t023t WITH KEY matkl = lt_po-matkl.
    IF sy-subrc EQ 0.
      gt_list-wgbez = lt_t023t-wgbez.
    ENDIF.

    READ TABLE lt_t024 WITH KEY ekgrp = lt_po-ekgrp.
    IF sy-subrc EQ 0.
      gt_list-eknam = lt_t024-eknam.
    ENDIF.

    READ TABLE lt_ekbea WITH KEY ebeln = lt_po-ebeln
                                 ebelp = lt_po-ebelp.
    IF sy-subrc EQ 0.
      gt_list-jhsl = lt_ekbea-menge.
    ENDIF.
    gt_list-wjhs = gt_list-menge - gt_list-jhsl.
*    READ TABLE lt_t161t WITH KEY bsart = lt_po-bsart.
*    IF sy-subrc EQ 0.
*      gt_list-batxt = lt_t161t-batxt.
*    ENDIF.

    APPEND gt_list.
    CLEAR  gt_list.
  ENDLOOP.

  SORT gt_list BY ebeln ebelp.

ENDFORM.                    " GETDATA
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_fieldcat .
  FIELD-SYMBOLS <lfs_fieldcat> TYPE slis_fieldcat_alv.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name     = sy-repid
      i_internal_tabname = 'GT_LIST'
      i_inclname         = 'ZMMPO002'
    CHANGING
      ct_fieldcat        = gt_fieldcat.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  LOOP AT  gt_fieldcat ASSIGNING <lfs_fieldcat>.
    CASE <lfs_fieldcat>-fieldname.
      WHEN 'SEX'.
        <lfs_fieldcat>-tech = 'X'.
      WHEN 'BATXT'.
        <lfs_fieldcat>-tech = 'X'.
      WHEN'EKGRP'.
        <lfs_fieldcat>-tech = 'X'.
      WHEN'WERKS'.
        <lfs_fieldcat>-tech = 'X'.
      WHEN'MATKL'.
        <lfs_fieldcat>-tech = 'X'.
      WHEN'NAME'.
        <lfs_fieldcat>-seltext_l = text-f01.
        <lfs_fieldcat>-seltext_m = text-f01.
        <lfs_fieldcat>-seltext_s = text-f01.
        <lfs_fieldcat>-reptext_ddic = text-f01.
      WHEN'ELIKZ'.
        <lfs_fieldcat>-edit = 'X'.
      WHEN'JHSL'.
        <lfs_fieldcat>-seltext_l = text-f02.
        <lfs_fieldcat>-seltext_m = text-f02.
        <lfs_fieldcat>-seltext_s = text-f02.
        <lfs_fieldcat>-reptext_ddic = text-f02.
      WHEN'WJHS'.
        <lfs_fieldcat>-seltext_l = text-f03.
        <lfs_fieldcat>-seltext_m = text-f03.
        <lfs_fieldcat>-seltext_s = text-f03.
        <lfs_fieldcat>-reptext_ddic = text-f03.
    ENDCASE.

  ENDLOOP.

ENDFORM.                    " BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  BUILD_SORTCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_sortcat .

ENDFORM.                    " BUILD_SORTCAT
*&---------------------------------------------------------------------*
*&      Form  BUILD_EVENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_event .

ENDFORM.                    " BUILD_EVENT
*&---------------------------------------------------------------------*
*&      Form  BUILD_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_layout .
  gs_layout-colwidth_optimize = 'X'.      " 自动调整列宽
  gs_layout-box_fieldname = 'SEX'.

ENDFORM.                    " BUILD_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  DISPALY_ALV_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM dispaly_alv_data .
  DATA:lv_settings TYPE lvc_s_glay.
  lv_settings-edt_cll_cb = 'X'.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = sy-repid
      it_fieldcat              = gt_fieldcat
      it_sort                  = gt_sortcat
      it_events                = gt_eventcat
      is_layout                = gs_layout
      i_save                   = 'A'
      i_grid_settings          = lv_settings
      i_callback_user_command  = 'USER_COMMAND'
      i_callback_pf_status_set = 'SET_PF_STATUS'
    TABLES
      t_outtab                 = gt_list
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                    " DISPALY_ALV_DATA

FORM user_command USING r_ucomm LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield .
  DATA: g_grid TYPE REF TO cl_gui_alv_grid.
  DATA:lt_list LIKE gt_list OCCURS 0 WITH HEADER LINE.
  DATA:ls_list LIKE LINE OF gt_list.
  DATA purchaseorder TYPE bapimepoheader-po_number.
  DATA:lt_return LIKE bapireturn OCCURS 0 WITH HEADER LINE.
  DATA:lt_item LIKE bapimepoitem OCCURS 0 WITH HEADER LINE.
  DATA:lt_itemx LIKE bapimepoitemx OCCURS 0 WITH HEADER LINE.
  DATA:lt_rt LIKE bapiret2 OCCURS 0 WITH HEADER LINE.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = g_grid.
*  CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY.
  CALL METHOD g_grid->check_changed_data.
  rs_selfield-refresh = 'X'.
  rs_selfield-col_stable = 'X'.
  rs_selfield-row_stable = 'X'.

  CASE r_ucomm.
    WHEN '&DATA_SAVE'.
*      CLEAR:lt_list,lt_list[].

*      LOOP AT gt_list WHERE elikz  = 'X' AND name = ''.
*        MOVE-CORRESPONDING gt_list TO lt_list.
*        lt_list-name = ''.
*        APPEND lt_list.
*        CLEAR:gt_list,lt_list.
*      ENDLOOP.

      LOOP AT gt_list WHERE sex = 'X'.
        MOVE-CORRESPONDING gt_list TO lt_list.
        lt_list-name = ''.
        APPEND lt_list.
        CLEAR:gt_list,lt_list.
      ENDLOOP.

      IF lt_list[] IS INITIAL.
        MESSAGE'请选中修改行后再保存。' TYPE 'S' DISPLAY LIKE 'E'.
        LEAVE LIST-PROCESSING.
      ENDIF.

      SORT lt_list BY ebeln ebelp.
      LOOP AT lt_list .
        CLEAR:ls_list,lt_item,lt_itemx,lt_rt,lt_return.
        ls_list = lt_list.

        lt_item-po_item = lt_list-ebelp.
        lt_item-no_more_gr = lt_list-elikz.
        APPEND lt_item.
        CLEAR  lt_item.

        lt_itemx-po_item = lt_list-ebelp.
        lt_itemx-po_itemx = 'X'.
        lt_itemx-no_more_gr = 'X'.
        APPEND lt_itemx.
        CLEAR  lt_itemx.

        AT END OF ebeln.

          IF ls_list-frgke = ''.
            CALL FUNCTION 'BAPI_PO_CHANGE'
              EXPORTING
                purchaseorder = lt_list-ebeln
              TABLES
                return        = lt_rt
                poitem        = lt_item
                poitemx       = lt_itemx.

            IF sy-subrc EQ 0.
              READ TABLE lt_rt WITH KEY type = 'E'.
              IF sy-subrc EQ 0.
                CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
                ls_list-name = lt_rt-message.
                MODIFY  lt_list FROM ls_list.
                CONTINUE.
              ELSE.
                ls_list-name = '修改成功'.
                MODIFY lt_list FROM ls_list.
                CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                  EXPORTING
                    wait = 'X'.
                CONTINUE.
              ENDIF.

              CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                EXPORTING
                  wait = 'X'.
            ELSE.
              CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
              ls_list-name = '修改失败,请检查'.
              MODIFY  lt_list FROM ls_list.
              CONTINUE.
            ENDIF.

          ELSE.

            CALL FUNCTION 'BAPI_PO_RESET_RELEASE'
              EXPORTING
                purchaseorder = lt_list-ebeln
                po_rel_code   = '10'
              TABLES
                return        = lt_return.

            IF sy-subrc EQ 0.
              READ TABLE lt_return WITH KEY type = 'E'.
              IF sy-subrc EQ 0.
                CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
                ls_list-name = lt_rt-message.
                MODIFY  lt_list FROM ls_list.
                CONTINUE.
              ENDIF.

              CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                EXPORTING
                  wait = 'X'.
            ELSE.
              CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
              ls_list-name = '取消审批失败,请检查'.
              MODIFY  lt_list FROM ls_list.
              CONTINUE.
            ENDIF.

            WAIT UP TO '0.5' SECONDS.
            CALL FUNCTION 'BAPI_PO_CHANGE'
              EXPORTING
                purchaseorder = lt_list-ebeln
              TABLES
                return        = lt_rt
                poitem        = lt_item
                poitemx       = lt_itemx.

            IF sy-subrc EQ 0.
              READ TABLE lt_rt WITH KEY type = 'E'.
              IF sy-subrc EQ 0.
               CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
                ls_list-name = lt_rt-message.
                MODIFY  lt_list FROM ls_list.
                CONTINUE.
              ENDIF.

              CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                EXPORTING
                  wait = 'X'.
            ELSE.
              CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
              ls_list-name = '修改失败,请检查'.
              MODIFY  lt_list FROM ls_list.
              CONTINUE.
            ENDIF.

            WAIT UP TO '0.5' SECONDS.
            CALL FUNCTION 'BAPI_PO_RELEASE'
              EXPORTING
                purchaseorder = lt_list-ebeln
                po_rel_code   = '10'
              TABLES
                return        = lt_return.

            IF sy-subrc EQ 0.
              READ TABLE lt_return WITH KEY type = 'E'.
              IF sy-subrc EQ 0.
                ls_list-name = lt_return-message && '请联系系统管理员'.
                MODIFY  lt_list FROM ls_list.
                CONTINUE.
              ENDIF.

              CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                EXPORTING
                  wait = 'X'.
            ELSE.
              ls_list-name = lt_return-message && '请联系系统管理员'.
              MODIFY  lt_list FROM ls_list.
              CONTINUE.
            ENDIF.

            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              EXPORTING
                wait = 'X'.

            WAIT UP TO '0.5' SECONDS.
**--PO审批 mod by baosl 20210311.
           IF sy-mandt = '900' OR sy-mandt = '600'.
            CALL FUNCTION 'ZMM_PO_RELEASE' DESTINATION 'PRD900'
              EXPORTING
                i_ebeln = lt_list-ebeln
                i_rel_code   = '20'
              TABLES
                return        = lt_return.
**--end add 20210311
            ELSE.
               CALL FUNCTION 'BAPI_PO_RELEASE'
               EXPORTING
                purchaseorder = lt_list-ebeln
                po_rel_code   = '20'
               TABLES
                return        = lt_return.
           ENDIF.

            IF sy-subrc EQ 0.
              READ TABLE lt_return WITH KEY type = 'E'.
              IF sy-subrc EQ 0.
                ls_list-name = lt_return-message && '请联系系统管理员'.
                MODIFY  lt_list FROM ls_list.

                CALL FUNCTION 'BAPI_PO_RESET_RELEASE'
                  EXPORTING
                    purchaseorder = lt_list-ebeln
                    po_rel_code   = '10'
                  TABLES
                    return        = lt_return.
                CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                  EXPORTING
                    wait = 'X'.
                CONTINUE.
              ELSE.
                ls_list-name =  '修改成功'.
                CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                  EXPORTING
                    wait = 'X'.
                MODIFY lt_list FROM ls_list.
              ENDIF.

              CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                EXPORTING
                  wait = 'X'.
            ELSE.
              ls_list-name = lt_return-message && '请联系系统管理员'.
              MODIFY  lt_list FROM ls_list.
              CONTINUE.
            ENDIF.

          ENDIF.
          CLEAR:lt_item,lt_item[],lt_itemx,lt_itemx[],lt_return,lt_return[],
                lt_rt,lt_rt[].

        ENDAT.
        MODIFY  lt_list FROM ls_list.
        CLEAR:lt_list,ls_list,lt_item,lt_itemx.
      ENDLOOP.

      LOOP AT gt_list.
        READ TABLE lt_list WITH KEY ebeln = gt_list-ebeln
                                    ebelp = gt_list-ebelp.
        IF sy-subrc EQ 0.
          MOVE-CORRESPONDING lt_list TO gt_list.
          MODIFY gt_list.
        ENDIF.

        CLEAR:lt_list,gt_list.
      ENDLOOP.

      SORT gt_list BY ebeln ebelp.
    WHEN 'ZALL'.
      LOOP AT gt_list.
        gt_list-elikz = 'X'.
        MODIFY gt_list.
        CLEAR gt_list.
      ENDLOOP.
    WHEN 'ZSAL'.
      LOOP AT gt_list.
        gt_list-elikz = ''.
        MODIFY gt_list.
        CLEAR gt_list.
      ENDLOOP.
    WHEN OTHERS.
  ENDCASE.

ENDFORM.                    "user_command
*&---------------------------------------------------------------------*
*&      Form  CHANGE_PR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM change_pr .



ENDFORM.                    " CHANGE_PR
*&---------------------------------------------------------------------*
*&      Form  CHECK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check .
  AUTHORITY-CHECK OBJECT 'M_BEST_WRK'
  ID 'ACTVT' FIELD '03'
  ID 'WERKS' FIELD p_werks.
  IF sy-subrc <> 0.
    MESSAGE '您没有' &&  p_werks && '工厂的权限,请重新选择。'
        TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  AUTHORITY-CHECK OBJECT 'M_BEST_EKG'
           ID 'ACTVT' FIELD '03'
           ID 'EKGRP' FIELD p_ekgrp.
  IF sy-subrc <> 0.
    MESSAGE '您没有' &&  p_ekgrp && '采购组的权限,请重新选择。'
        TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.


ENDFORM.                    " CHECK

FORM set_pf_status USING rt_extab TYPE slis_t_extab.

  SET PF-STATUS 'ZMMPO002'.
*  SET TITLEBAR  'TITLE' .

ENDFORM.
D:PO反审批函数  ZMM_PO_RELEASE
FUNCTION ZMM_PO_RELEASE.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_EBELN) TYPE  EBELN OPTIONAL
*"     VALUE(I_REL_CODE) TYPE  FRGCO OPTIONAL
*"  TABLES
*"      RETURN STRUCTURE  BAPIRETURN OPTIONAL
*"----------------------------------------------------------------------

IF I_EBELN IS NOT INITIAL AND I_REL_CODE IS NOT INITIAL..
    CALL FUNCTION 'BAPI_PO_RELEASE'
      EXPORTING
        PURCHASEORDER          = I_EBELN
        PO_REL_CODE            = I_REL_CODE
*       USE_EXCEPTIONS         = 'X'
*       NO_COMMIT              = ' '
*   IMPORTING
*       REL_STATUS_NEW         =
*       REL_INDICATOR_NEW      =
*       RET_CODE               =
      TABLES
        RETURN                 = RETURN
      EXCEPTIONS
        AUTHORITY_CHECK_FAIL   = 1
        DOCUMENT_NOT_FOUND     = 2
        ENQUEUE_FAIL           = 3
        PREREQUISITE_FAIL      = 4
        RELEASE_ALREADY_POSTED = 5
        RESPONSIBILITY_FAIL    = 6
        OTHERS                 = 7.

  ENDIF.

ENDFUNCTION.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小啊曼

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值