SAP MM 采购订单号 excel上传 获取订单状态 审批 取消审批


取消后

复制代码
*&---------------------------------------------------------------------*
*& Report ZRPT_MM_PURCHAS_APPROVE
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zrpt_mm_purchas_approve.

TABLES: sscrfields,ekko.
DATA: it_bapiret2  LIKE bapiret2  OCCURS 0 WITH HEADER LINE.

DATA:l_filename TYPE string,l_muban TYPE string.
DATA:gv_fullpath TYPE string,gv_path TYPE string,gv_name TYPE string.
TYPES:BEGIN OF i_itab,
        ebeln      TYPE ekko-ebeln,
        rel_ind    TYPE frgke,
        rel_status TYPE frgzu,
        ztype      TYPE c,
        zmsg(80)     ,
      END OF i_itab.

DATA:itab_load TYPE TABLE OF i_itab.

DATA: return(01),
      message(100),
      gt_fieldcat  TYPE lvc_t_fcat,
      gs_fieldcat  TYPE lvc_s_fcat,
      gs_layout    TYPE lvc_s_layo.

*&---------------------------------------------------------------------*
*& 选择屏幕
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK fu WITH FRAME TITLE TEXT-001.
  PARAMETERS:p_file LIKE rlgrap-filename MEMORY ID zy1 .
  PARAMETERS:pline TYPE i.
SELECTION-SCREEN END OF BLOCK fu.
SELECTION-SCREEN:FUNCTION KEY 1.


INITIALIZATION.
  DATA:
        lv_repid TYPE sy-repid.

  "下载按钮

  lv_repid = sy-repid.
  sscrfields-functxt_01 = icon_export && '模版下载'.

*&---------------------------------------------------------------------*
*& At Selection-Screen
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
  l_filename = 'ZMM040.xlsx'.
  l_muban = 'ZMM040'.
  CASE sscrfields-ucomm.
    WHEN 'FC01'.
      PERFORM download_data(zabap_common_program) USING l_filename l_muban gv_fullpath gv_path gv_name.
  ENDCASE.

*&---------------------------------------------------------------------*
*& AT SELECTION-SCREEN ON VALUE-REQUEST
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  = syst-cprog
      dynpro_number = syst-dynnr
    IMPORTING
      file_name     = p_file.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  IF p_file IS INITIAL OR p_file = space.
    MESSAGE s055(00)  DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.

  PERFORM frm_get_data.
  PERFORM frm_getstatue.
  PERFORM frm_display_alv.

FORM frm_getstatue.
  FIELD-SYMBOLS:<fs> TYPE  i_itab.
  DATA: pohead TYPE bapiekkol.
  LOOP AT itab_load ASSIGNING <fs>.
    CALL FUNCTION 'BAPI_PO_GETDETAIL'
      EXPORTING
        purchaseorder = <fs>-ebeln
      IMPORTING
        po_header     = pohead.
    <fs>-rel_ind = pohead-rel_ind.
    <fs>-rel_status = pohead-rel_status.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  frm_get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_data .
  DATA:lt_raw TYPE truxs_t_text_data.
  DATA:lt_excel TYPE TABLE OF zalsmex_tabline_line,
       ls_excel TYPE zalsmex_tabline_line,
       l_type   TYPE c LENGTH 2.

  DATA: lo_data TYPE REF TO data.
  FIELD-SYMBOLS: <fs_data>,
                 <fs_value>.
  CREATE DATA lo_data LIKE LINE OF itab_load.
  ASSIGN lo_data->* TO <fs_data>.

* 读取Excel文件数据到内表

  CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = p_file
      i_begin_col             = 1
      i_begin_row             = 2
      i_end_col               = 12
      i_end_row               = pline
    TABLES
      intern                  = lt_excel
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.

  IF sy-subrc <> 0.
    MESSAGE '导入数据文件失败!' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  SORT lt_excel BY row col.

  IF NOT lt_excel IS INITIAL.

    LOOP AT lt_excel INTO ls_excel. "检查内表中的数据

      AT NEW row.
        CLEAR <fs_data>.
      ENDAT.

      ASSIGN COMPONENT ls_excel-col OF STRUCTURE <fs_data> TO <fs_value>.

      DESCRIBE FIELD <fs_value> TYPE l_type .

      CASE l_type.
        WHEN 'D'.
          "检查是否为日期
          CALL FUNCTION 'RP_01C_FORMAL_DATE_CHECK'
            EXPORTING
              i13_datum        = ls_excel-value
            EXCEPTIONS
              no_date_input    = 1
              date_not_numeric = 2
              invald_date      = 3
              OTHERS           = 4.
          IF sy-subrc <> 0.
            ls_excel-row = ls_excel-row + 1.
            MESSAGE ID 'ZGD' TYPE 'E' NUMBER '000'  WITH ls_excel-row ls_excel-col ls_excel-value l_type  .
          ENDIF.
        WHEN 'P'.
          "检查数字型
          IF ls_excel-value CO '0123456789,. '.
            REPLACE ALL OCCURRENCES OF ',' IN ls_excel-value WITH ''.
            CONDENSE ls_excel-value.
          ELSE.
            ls_excel-row = ls_excel-row + 1.
            MESSAGE ID 'ZGD' TYPE 'E' NUMBER '000'  WITH ls_excel-row ls_excel-col ls_excel-value l_type  .
          ENDIF.
        WHEN 'C'.

      ENDCASE.

      <fs_value> = ls_excel-value.

      AT END OF row.
        APPEND <fs_data> TO itab_load.
      ENDAT.

    ENDLOOP.
  ELSE .
    MESSAGE 'EXCEL数据为空!' TYPE 'E' .
  ENDIF.

ENDFORM.                    " frm_get_data


*&---------------------------------------------------------------------*
*&      Form  frm_display_log
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_display_alv .
  PERFORM build_fieldcat USING 'EBELN' '' '' 'EKKO' 'EBELN' '' '' '采购订单' 'X'.
  PERFORM build_fieldcat USING 'REL_IND' '' '' '' '' '' '' '批准标识:采购凭证' ''.
  PERFORM build_fieldcat USING 'REL_STATUS' '' '' '' '' '' '' '发布状态' ''.
  PERFORM build_fieldcat USING 'ZTYPE' '' '' '' '' '' '' '状态' ''.
  PERFORM build_fieldcat USING 'ZMSG' '' '' '' '' '' '' '信息' ''.

  gs_layout-cwidth_opt = 'X'.
  gs_layout-zebra = 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
"     I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_ALV'
      i_callback_user_command  = 'USER_COMMAND'
      i_callback_pf_status_set = 'SET_PF_STATUS'
      it_fieldcat_lvc          = gt_fieldcat
      is_layout_lvc            = gs_layout
      i_default                = 'X'
      i_save                   = 'A'
    TABLES
      t_outtab                 = itab_load[]
    EXCEPTIONS
      OTHERS                   = 1.
ENDFORM.                    " frm_display_log

*&--------------------------------------------------------------------- *
*&      Form  g_status_form 调用自定义屏幕
*&---------------------------------------------------------------------
FORM set_pf_status  USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'STANDARD' EXCLUDING rt_extab.
ENDFORM.                    "SET_PF_STATUS

FORM user_command USING rf_ucomm    LIKE sy-ucomm
      rs_selfield TYPE slis_selfield.
  FIELD-SYMBOLS:<fs> TYPE  i_itab.

  CASE rf_ucomm.
    WHEN '&LCK'. "审批
      LOOP AT itab_load ASSIGNING  <fs>.
        CALL FUNCTION 'BAPI_PO_RELEASE'
          EXPORTING
            purchaseorder = <fs>-ebeln
            po_rel_code   = '01'
          TABLES
            return        = it_bapiret2.

        LOOP AT it_bapiret2 INTO DATA(ls_return_release) WHERE type = 'E' OR type = 'A'.
          DATA(pv_release) = 'E'.
          <fs>-ztype = 'E'.
          <fs>-zmsg =      <fs>-zmsg && ls_return_release-message.
        ENDLOOP.

        IF <fs>-ztype <> 'E'.
          <fs>-ztype = 'S'.
          <fs>-zmsg = '审批成功'.
        ENDIF.

        IF pv_release EQ 'E'.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        ELSE.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.
        ENDIF.

      ENDLOOP.
    WHEN '&UNL'."取消审批

      LOOP AT itab_load ASSIGNING  <fs>.
        CALL FUNCTION 'BAPI_PO_RESET_RELEASE'
          EXPORTING
            purchaseorder = <fs>-ebeln
            po_rel_code   = '01'
          TABLES
            return        = it_bapiret2.

        LOOP AT it_bapiret2 INTO DATA(ls1_return_release) WHERE type = 'E' OR type = 'A'.
          DATA(pv1_release) = 'E'.
          <fs>-ztype = 'E'.
          <fs>-zmsg =      <fs>-zmsg && ls1_return_release-message.
        ENDLOOP.

        IF <fs>-ztype <> 'E'.
          <fs>-ztype = 'S'.
          <fs>-zmsg = '取消审批成功'.
        ENDIF.

        IF pv_release EQ 'E'.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        ELSE.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.
        ENDIF.

      ENDLOOP.

  ENDCASE.
  rs_selfield-refresh = 'X'.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
FORM build_fieldcat USING p_fieldname   TYPE fieldname
      p_qfieldname  TYPE lvc_qfname
      p_cfieldname  TYPE lvc_cfname
      p_ref_table   TYPE lvc_rtname
      p_ref_field   TYPE lvc_rfname
      p_convexit    TYPE convexit
      p_emphasize   TYPE lvc_emphsz
      p_scrtext_l   TYPE scrtext_l
      p_no_zero     TYPE xflag.
  gs_fieldcat-fieldname     = p_fieldname.
  gs_fieldcat-qfieldname    = p_qfieldname.
  gs_fieldcat-cfieldname    = p_cfieldname.
  gs_fieldcat-ref_table     = p_ref_table.
  gs_fieldcat-ref_field     = p_ref_field.
  gs_fieldcat-convexit      = p_convexit.
  gs_fieldcat-emphasize     = p_emphasize.
  gs_fieldcat-scrtext_l     = p_scrtext_l.
  gs_fieldcat-no_zero   = p_no_zero.
  gs_fieldcat-colddictxt    = 'L'.
  APPEND gs_fieldcat TO gt_fieldcat.
  CLEAR: gs_fieldcat.
ENDFORM.                    "BUILD_FIELDCAT
相关推荐
菜鸟小九1 小时前
mysql运维(读写分离)
运维·数据库·mysql
菜鸟小九1 小时前
mysql运维(分库分表)
运维·数据库·mysql
邪恶喵喵1 小时前
nginx反向代理和负载均衡
运维·nginx·负载均衡
AI 搜索引擎技术1 小时前
智能电网中的AI Agent负载均衡
运维·人工智能·ai·负载均衡
dragoooon341 小时前
[Linux网络基础——Lesson14.「高性能网络模式:Reactor 反应堆模式」]
linux·运维·网络
@YDWLCloud1 小时前
谷歌云 Compute Engine 实操手册:虚拟机配置与负载均衡全流程
java·运维·服务器·云计算·负载均衡·googlecloud
alden_ygq1 小时前
Ingress的负载均衡高吞吐量配置实战
运维·负载均衡
超级奇幻大蛋蛋1 小时前
CUDA & OLLAMA 配置多显卡负载均衡
运维·负载均衡
Cx330❀1 小时前
Git 基础操作通关指南:版本回退、撤销修改与文件删除深度解析
大数据·运维·服务器·git·算法·搜索引擎·面试