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
相关推荐
403240731 小时前
[Jetson/Ubuntu 22.04] 解决挂载 exFAT 硬盘报错 “unknown filesystem type“ 及只读权限问题的终极指南
linux·运维·ubuntu
零意@1 小时前
debian如何把新编译的内核镜像替换原来的内核
运维·debian·更新内核版本·linux内核版本更新·debian更新内核
Love丶伊卡洛斯1 小时前
Ubuntu 部署 STUN服务端
linux·运维·ubuntu
有毒的教程3 小时前
SaltStack 开源自动化运维工具详细介绍
运维·开源·saltstack
大房身镇、王师傅3 小时前
【VirtualBox】VirtualBox 7.1.6 RockyLinux10 配置增强功能 设置共享目录
运维·服务器·virtualbox·rockylinux10
betazhou3 小时前
rsync使用案例分析
linux·运维·服务器·rsync·同步数据
minglie14 小时前
谷歌浏览器搜索技巧
运维
脑子进水养啥鱼?5 小时前
Linux find 命令
linux·运维
曹天骄5 小时前
Cloudflare Worker 关联域名访问后出现301 / 308
运维·云计算
EverydayJoy^v^5 小时前
RH124简单知识点——第8章——配置和保护SSH
linux·运维·ssh