SAP-MM批量创建/修改采购信息记录


*---------------------------------
* Program Name:  ZMMI008
* Project     :
* Program Title:批量创建修改采购信息记录 excel
* Program Type:
* Created on  :  20161113
* Module      :
* Transaction Code:
* Request No.:
* Function description:
*
* Reference doc.:
*----------------------------------------------------------------------*
* Modification log:
* Author      Date      Request No.    Reason
* ---------------------------------------------------------------------*                       *
*----------------------------------------------------------------------*

REPORT zmmi008 NO STANDARD PAGE HEADING.


TYPE-POOLS: slis,icon.
TABLES:sscrfields.

TYPES: BEGIN OF typ_data,
         lifnr     TYPE lifnr, "供应商帐号
         matnr     TYPE matnr, "物料
         ekorg     TYPE ekorg, "采购组织
         werks     TYPE werks_d, "工厂
         msg1(20)  TYPE c, "信息类别
*     urztp(1) TYPE c,"批准目录
*     URZNR type URZNR,"证明号
         meins     TYPE meins, "订单单位
         umren(5)  TYPE c, "转换的分母
         umrez(5)  TYPE c, "转换的分子
         aplfz(3)  TYPE c, "计划交货天数
         ekgrp(3)  TYPE c, "采购组
         norbm(13) TYPE c, "标准数量
         mwskz(2)  TYPE c, "税代码
         "verid(4)  TYPE c, "版本
         netpr(11) TYPE c, "净价
         WAERS  TYPE string, "条件货币

         peinh(5)  TYPE c, ""价格单位
         BPRME     TYPE string,"价格计量单位
         BPUMZ     TYPE string,"订单价格单位转换为订单单位的分子
         BPUMN     TYPE string,"订单价格单位转换为订单单位的分母
         inco2(28) TYPE c, "国际贸易条件
         rdprf(4)  TYPE c, " Rndg Prof
         datab(8)  TYPE c, "价格的有效开始日期
         datbi(8)  TYPE c, "价格的有效截止日期
         UEBTO     TYPE string,"超量收货
         is_exist,
         icon(30),
         msg(200),
         chkbox(1),
         sel(1),
       END OF typ_data.

DATA: gt_itab TYPE TABLE OF typ_data WITH HEADER LINE,
      gs_itab TYPE TABLE OF typ_data WITH HEADER LINE,
      wa_itab TYPE typ_data.
DATA: GV_FILENAME TYPE RLGRAP-FILENAME.
DATA: co_objid TYPE wwwdatatab-objid .

CONSTANTS : cns_excel_scol TYPE i VALUE 1,      "EXCEL START COL
            cns_excel_srow TYPE i VALUE 2,      "EXCEL START ROW
            cns_excel_ecol TYPE i VALUE 50,     "EXCEL END COL
            cns_excel_erow TYPE i VALUE 50000.   "EXCEL END ROW

DATA:BEGIN OF iexcel OCCURS 0.
        INCLUDE STRUCTURE alsmex_tabline.
DATA:END OF iexcel.
DATA: BEGIN OF bdc_tab OCCURS 0.
        INCLUDE STRUCTURE bdcdata.
DATA: END OF bdc_tab.

DATA:mode.
DATA: functxt    TYPE smp_dyntxt,
      g_fullpath TYPE string.
DATA: gt_fieldcat TYPE  lvc_t_fcat,
      gw_fieldcat TYPE  lvc_s_fcat,
      g_repid     TYPE  sy-repid VALUE sy-repid,
      gw_layo     TYPE  lvc_s_layo.
SELECTION-SCREEN: FUNCTION KEY 1.



SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-001.
PARAMETERS:p_fname  TYPE  rlgrap-filename.
SELECTION-SCREEN END OF BLOCK b2.

SELECTION-SCREEN:BEGIN OF BLOCK sel2 WITH FRAME TITLE text-002.
PARAMETER:kn  RADIOBUTTON GROUP nn,
          re RADIOBUTTON GROUP nn
*          fe RADIOBUTTON GROUP nn
          .
PARAMETER: p AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN:END OF BLOCK sel2.




INITIALIZATION.
  functxt-icon_id = icon_export.
  functxt-icon_text = '下载EXCEL模板'.
  functxt-quickinfo = '下载EXCEL模板'.
  sscrfields-functxt_01 = functxt.

AT SELECTION-SCREEN.
  CASE sscrfields-ucomm.
    WHEN 'FC01'.
      PERFORM frm_get_filepath.
      PERFORM frm_downm.
    WHEN 'ONLI'.
      IF p_fname IS INITIAL.
        SET CURSOR FIELD 'P_FNAME'.
        MESSAGE '请选择文件路径!' TYPE 'E'.
      ENDIF.
  ENDCASE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
  PERFORM frm_get_file CHANGING p_fname.

START-OF-SELECTION.
  PERFORM frm_file_read.
  PERFORM frm_display.

*&---------------------------------------------------------------------*
*&      Form  DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_display .
  PERFORM build_fact.
  PERFORM set_layout.
  PERFORM display_alv.
ENDFORM.                    " DISPLAY
*&---------------------------------------------------------------------*
*&      Form  BUILD_FACT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_fact .
  DEFINE def_fieldcat.
    clear gw_fieldcat.
    gw_fieldcat-fieldname = &1.
    gw_fieldcat-reptext = &2.
    gw_fieldcat-edit = &3.
    gw_fieldcat-no_zero = &4.
    gw_fieldcat-fix_column(1) = &5.
    gw_fieldcat-just = &6.
    append gw_fieldcat to gt_fieldcat.
  END-OF-DEFINITION.
  REFRESH gt_fieldcat[].
  gw_fieldcat-fieldname = 'CHKBOX'.
  gw_fieldcat-datatype = 'CHAR'.
  gw_fieldcat-intlen = 1.
  gw_fieldcat-coltext = '选择'.
  gw_fieldcat-checkbox = 'X'.
  gw_fieldcat-edit = 'X'.
  gw_fieldcat-fix_column = 'X'.
  APPEND gw_fieldcat TO gt_fieldcat.
  CLEAR gw_fieldcat.
  def_fieldcat   'ICON'  '状态'    ''  ''  'X'  ''.
  def_fieldcat   'MSG'  '状态信息'    ''  ''  ''  ''.
  def_fieldcat   'LIFNR'  '供应商'    ''  ''  ''  ''.
  def_fieldcat   'MATNR'  '物料'    ''  ''  ''  ''.
  def_fieldcat   'EKORG'  '采购组织'    ''  ''  ''  ''.
  def_fieldcat   'WERKS'  '工厂'    ''  ''  ''  ''.
  def_fieldcat   'MSG1'  '信息类别'    ''  ''  ''  ''.
*  def_fieldcat   'URZTP'  '批准目录'    ''  ''  ''  ''.
*  def_fieldcat   'URZNR'  '证明号'    ''  ''  ''  ''.
  def_fieldcat   'MEINS'  '订单单位'    ''  ''  ''  ''.
  def_fieldcat   'UMREN'  '转换的分母'    ''  ''  ''  ''.
  def_fieldcat   'UMREZ'  '转换的分子'    ''  ''  ''  ''.
  def_fieldcat   'APLFZ'  '计划交货天数'    ''  ''  ''  ''.
  def_fieldcat   'EKGRP'  '采购组'    ''  ''  ''  ''.
  def_fieldcat   'NORBM'  '标准数量'    ''  ''  ''  ''.
  def_fieldcat   'MWSKZ'  '税代码'    ''  ''  ''  ''.
  "def_fieldcat   'VERID'  '版本'    ''  ''  ''  ''.
  def_fieldcat   'NETPR'  '净价'    ''  ''  ''  ''.
  def_fieldcat   'WAERS'  '货币'    ''  ''  ''  ''.
  def_fieldcat   'PEINH'  '价格单位'    ''  ''  ''  ''.
  def_fieldcat   'BPRME'  '价格计量单位'    ''  ''  ''  ''.
  def_fieldcat   'BPUMZ'  '订单价格单位转换为订单单位的分子'    ''  ''  ''  ''.
  def_fieldcat   'BPUMN'  '订单价格单位转换为订单单位的分母'    ''  ''  ''  ''.
  "def_fieldcat   'INCO2'  '国际贸易条件'    ''  ''  ''  ''.
  "def_fieldcat   'RDPRF'  'Rndg Prof'    ''  ''  ''  ''.
  def_fieldcat   'DATAB'  '价格的有效开始日期'    ''  ''  ''  ''.
  def_fieldcat   'DATBI'  '价格的有效截止日期 '    ''  ''  ''  ''.
  def_fieldcat   'UEBTO'  '超量收货 '    ''  ''  ''  ''.
ENDFORM.                    " BUILD_FACT
*&---------------------------------------------------------------------*
*&      Form  SET_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_layout .
  gw_layo-zebra = 'X'.
  gw_layo-cwidth_opt = 'X'.
  gw_layo-box_fname      = 'SEL'.
ENDFORM.                    " SET_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_alv .
  g_repid = sy-repid.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_pf_status_set = 'SET_PF_STATUS'
      i_callback_user_command  = 'USER_COMMAND'
*     i_callback_top_of_page   = 'FM_ALV_TOP'
      i_callback_program       = g_repid
      it_fieldcat_lvc          = gt_fieldcat
      is_layout_lvc            = gw_layo
    TABLES
      t_outtab                 = gt_itab[].
  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.                    " DISPLAY_ALV
*&---------------------------------------------------------------------*
*&      Form  set_pf_status
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'SET_PF_STATU' EXCLUDING rt_extab.
ENDFORM.                    "set_pf_status

*&---------------------------------------------------------------------*
*&  包括                ZMM_020_PAI
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->IN_UCOMM     text
*      -->IN_SELFIELD  text
*----------------------------------------------------------------------*
FORM user_command USING in_ucomm LIKE sy-ucomm
                         in_selfield TYPE slis_selfield.
  DATA: lw_rtn   TYPE bapiret2,
        lt_rtn   TYPE TABLE OF bapiret2,
        lt_insp  TYPE TABLE OF bapi1001004_qmat,
        lw_insp  TYPE bapi1001004_qmat,
        l_object TYPE bapi1003_key-object.
  DATA myref TYPE REF TO cx_sy_arithmetic_error.
  DATA err_text TYPE string.
  DATA result TYPE i.
  DATA:p_flag.
  DATA t(200).
  in_selfield-refresh = 'X'.
  DATA: lr_grid  TYPE REF TO cl_gui_alv_grid.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lr_grid.
  CALL METHOD lr_grid->check_changed_data.

  CASE in_ucomm.
    WHEN '&SEL'.
      PERFORM frm_select.
    WHEN '&DESEL'.
      PERFORM frm_deselect.
    WHEN '&IC1'.
      IF in_selfield-fieldname = 'EBELN' .
        SET PARAMETER ID 'BES' FIELD in_selfield-value.
        CALL TRANSACTION 'ME23N' .
      ENDIF.
    WHEN '&UPLOAD'.
      PERFORM frm_upload.
  ENDCASE.
ENDFORM.                    "user_command
*&---------------------------------------------------------------------*
*&      Form  FRM_SELECT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_select .
  LOOP AT gt_itab.  "WHERE sel = 'X'.
    gt_itab-chkbox = 'X'.
    MODIFY gt_itab  TRANSPORTING chkbox.
  ENDLOOP.
ENDFORM.                    " FRM_SELECT
*&---------------------------------------------------------------------*
*&      Form  FRM_DESELECT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_deselect .
  LOOP AT gt_itab."  WHERE sel = 'X'.
    gt_itab-chkbox = ''.
    MODIFY gt_itab  TRANSPORTING chkbox.
  ENDLOOP.
ENDFORM.                    " FRM_DESELECT
*&---------------------------------------------------------------------*
*&      Form  FRM_UPLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_upload.
  LOOP AT gt_itab INTO wa_itab WHERE chkbox = 'X' AND icon NE '@0A@'.
    IF kn = 'X'.
      PERFORM frm_x1 USING wa_itab.
    ELSEIF re = 'X'.
      PERFORM frm_x2 USING wa_itab..
    ELSE.
      PERFORM frm_x3 USING wa_itab.
    ENDIF.
*    IF SY-SUBRC = 0.
*      wa_itab-msg = '完成'.
*    ELSE.
*      wa_itab-msg = '失败'.
*    ENDIF.
    MODIFY gt_itab FROM wa_itab.
    CLEAR:wa_itab.
  ENDLOOP.
ENDFORM.                    " FRM_UPLOAD
*&---------------------------------------------------------------------*
*&      Form  FRM_X1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_x1 USING wa_itab TYPE typ_data.
  DATA:BEGIN OF it_result OCCURS 0.
          INCLUDE STRUCTURE bdcmsgcoll.
  DATA: text(200) TYPE c.
  DATA END OF it_result.
  DATA  msg(100).

  REFRESH bdc_tab.
  PERFORM bdc_dynpro      USING 'X' 'SAPMM06I' '0100'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'EINA-MATNR'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'EINA-LIFNR'
                                wa_itab-lifnr.
  PERFORM bdc_field       USING 'EINA-MATNR'
                                wa_itab-matnr.
  PERFORM bdc_field       USING 'EINE-EKORG'
                                wa_itab-ekorg.
  PERFORM bdc_field       USING 'EINE-WERKS'
                                wa_itab-werks.
  PERFORM bdc_field       USING 'RM06I-NORMB'
                                 'X'.

  PERFORM bdc_dynpro      USING 'X' 'SAPMM06I' '0101'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'EINA-UMREZ'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
*  PERFORM bdc_field       USING 'EINA-URZTP'
*                                wa_itab-urztp.
*  PERFORM bdc_field       USING 'EINA-URZNR'
*                                wa_itab-URZNR.

  PERFORM bdc_field       USING 'EINA-URZLA'
                                ''.
  PERFORM bdc_field       USING 'EINA-REGIO'
                                ''.
  PERFORM bdc_field       USING 'EINA-TELF1'
                                ''.
  PERFORM bdc_field       USING 'EINA-MEINS'
                                wa_itab-meins.
  PERFORM bdc_field       USING 'EINA-UMREZ'
                                wa_itab-umrez.
  PERFORM bdc_field       USING 'EINA-UMREN'
                                wa_itab-umren.


  PERFORM bdc_dynpro      USING 'X' 'SAPMM06I' '0102'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'EINE-MWSKZ'.
*  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
*                                '/00'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=KO'.
  PERFORM bdc_field       USING 'EINE-APLFZ'
                                wa_itab-aplfz.
  PERFORM bdc_field       USING 'EINE-EKGRP'
                                wa_itab-ekgrp.
  PERFORM bdc_field       USING 'EINE-NORBM'
                                wa_itab-norbm.
  PERFORM bdc_field       USING 'EINE-WEBRE'
                                'X'.
  PERFORM bdc_field       USING 'EINE-MWSKZ'
                                wa_itab-mwskz.
  PERFORM bdc_field       USING 'EINE-IPRKZ'
                                ''.
  PERFORM bdc_field       USING 'EINE-RDPRF'
                                wa_itab-rdprf.
*  PERFORM bdc_field       USING 'EINE-MEPRF'
*                                '5'.
  PERFORM bdc_field       USING 'EINE-NETPR'
                                wa_itab-netpr.
  PERFORM bdc_field       USING 'EINE-WAERS'
                                wa_itab-waers.
  PERFORM bdc_field       USING 'EINE-PEINH'
                                wa_itab-peinh.
  PERFORM bdc_field       USING 'EINE-BPRME'
                                wa_itab-bprme.
  PERFORM bdc_field       USING 'EINE-BPUMZ'
                                wa_itab-BPUMZ.
  PERFORM bdc_field       USING 'EINE-BPUMN'
                                wa_itab-BPUMN.
  PERFORM bdc_field       USING 'EINE-UEBTO'
                                wa_itab-UEBTO.

  "==========================New================================

  PERFORM bdc_dynpro      USING 'X' 'SAPMV13A' '0201'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'RV13A-DATBI'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=KDAT'.
  PERFORM bdc_field       USING 'RV13A-DATAB'
                                wa_itab-datab.
  PERFORM bdc_field       USING 'RV13A-DATBI'
                                wa_itab-datbi.

  PERFORM bdc_dynpro      USING 'X' 'SAPMV13A' '0200'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'KONH-KOSRT'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=SICH'.
  PERFORM bdc_field       USING 'RV13A-DATAB'
                                wa_itab-datab.
  PERFORM bdc_field       USING 'RV13A-DATBI'
                                wa_itab-datbi.
  PERFORM bdc_field       USING 'KONH-KOSRT'
                                wa_itab-inco2.

  IF wa_itab-is_exist EQ 'X'.
    CALL TRANSACTION  'ME12' USING bdc_tab MODE mode MESSAGES INTO it_result.
  ELSE.
    CALL TRANSACTION  'ME11' USING bdc_tab MODE mode MESSAGES INTO it_result.
  ENDIF.

  READ TABLE it_result WITH  KEY msgtyp = 'E'.
  IF sy-subrc = 0.
    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        id        = it_result-msgid
        lang      = '1'
        no        = it_result-msgnr
        v1        = it_result-msgv1
        v2        = it_result-msgv2
        v3        = it_result-msgv3
        v4        = it_result-msgv4
      IMPORTING
        msg       = msg
      EXCEPTIONS
        not_found = 1
        OTHERS    = 2.
    wa_itab-msg = msg.
    wa_itab-icon = icon_red_light.
  ELSE.
    READ TABLE it_result WITH KEY msgtyp = 'A'.
    IF sy-subrc = 0.
      CALL FUNCTION 'FORMAT_MESSAGE'
        EXPORTING
          id        = it_result-msgid
          lang      = '1'
          no        = it_result-msgnr
          v1        = it_result-msgv1
          v2        = it_result-msgv2
          v3        = it_result-msgv3
          v4        = it_result-msgv4
        IMPORTING
          msg       = msg
        EXCEPTIONS
          not_found = 1
          OTHERS    = 2.
      wa_itab-msg = msg.
      wa_itab-icon = icon_red_light.
    ELSE.
      READ TABLE it_result WITH KEY msgid = '06' msgnr = '331'.
      IF sy-subrc = 0.
        CALL FUNCTION 'FORMAT_MESSAGE'
          EXPORTING
            id        = it_result-msgid
            lang      = '1'
            no        = it_result-msgnr
            v1        = it_result-msgv1
            v2        = it_result-msgv2
            v3        = it_result-msgv3
            v4        = it_result-msgv4
          IMPORTING
            msg       = msg
          EXCEPTIONS
            not_found = 1
            OTHERS    = 2.
        wa_itab-msg = msg.
        wa_itab-icon = icon_green_light.
      ELSE.
        wa_itab-msg = '失败'.
        wa_itab-icon = icon_red_light.
      ENDIF.
    ENDIF.
  ENDIF.
  CLEAR: it_result[],it_result,msg.
  CLEAR bdc_tab[].
ENDFORM.                                                    " FRM_X1
*&---------------------------------------------------------------------*
*&      Form  FRM_X2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_WA_ITAB  text
*----------------------------------------------------------------------*
FORM frm_x2 USING wa_itab TYPE typ_data.
  DATA:BEGIN OF it_result OCCURS 0.
          INCLUDE STRUCTURE bdcmsgcoll.
  DATA: text(200) TYPE c.
  DATA END OF it_result.
  DATA  msg(100).

  REFRESH bdc_tab.
  REFRESH bdc_tab.
  PERFORM bdc_dynpro      USING 'X' 'SAPMM06I' '0100'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'EINA-MATNR'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'EINA-LIFNR'
                                wa_itab-lifnr..
  PERFORM bdc_field       USING 'EINA-MATNR'
                                wa_itab-matnr.
  PERFORM bdc_field       USING 'EINE-EKORG'
                                wa_itab-ekorg.
  PERFORM bdc_field       USING 'EINE-WERKS'
                                wa_itab-werks.
  PERFORM bdc_field       USING 'RM06I-NORMB'
                                ''.
  PERFORM bdc_field       USING 'RM06I-LOHNB'
                                'X'.
  PERFORM bdc_field       USING 'RM06I-KONSI'
                                 ''.

  PERFORM bdc_dynpro      USING 'X' 'SAPMM06I' '0101'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'EINA-UMREZ'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
*  PERFORM bdc_field       USING 'EINA-URZTP'
*                                wa_itab-urztp.
*  PERFORM bdc_field       USING 'EINA-URZNR'
*                                wa_itab-URZNR.
  PERFORM bdc_field       USING 'EINA-URZLA'
                                ''.
  PERFORM bdc_field       USING 'EINA-REGIO'
                                ''.
  PERFORM bdc_field       USING 'EINA-TELF1'
                                ''.
*  PERFORM bdc_field       USING 'EINA-MEINS'
*                                'EA'.
  PERFORM bdc_field       USING 'EINA-UMREZ'
                                wa_itab-umrez.
  PERFORM bdc_field       USING 'EINA-UMREN'
                               wa_itab-umren.

  PERFORM bdc_dynpro      USING 'X' 'SAPMM06I' '0102'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'EINE-MWSKZ'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'EINE-APLFZ'
                                wa_itab-aplfz.
  PERFORM bdc_field       USING 'EINE-EKGRP'
                                wa_itab-ekgrp.
  PERFORM bdc_field       USING 'EINE-NORBM'
                                wa_itab-norbm.
  PERFORM bdc_field       USING 'EINE-WEBRE'
                                'X'.
  PERFORM bdc_field       USING 'EINE-IPRKZ'
                                ''.
*  PERFORM bdc_field       USING 'EINE-VERID'
*                                wa_itab-verid.
  PERFORM bdc_field       USING 'EINE-MWSKZ'
                                wa_itab-mwskz.
*  PERFORM bdc_field       USING 'EINE-MEPRF'
*                                '5'.
  PERFORM bdc_field       USING 'EINE-NETPR'
                                wa_itab-netpr.
  PERFORM bdc_field       USING 'EINE-WAERS'
                                wa_itab-waers.
  PERFORM bdc_field       USING 'EINE-PEINH'
                                wa_itab-peinh.
 PERFORM BDC_FIELD       USING 'EINE-BPRME'
                                wa_itab-BPRME.
  PERFORM bdc_field       USING 'EINE-BPUMZ'
                                wa_itab-BPUMZ.
  PERFORM bdc_field       USING 'EINE-BPUMN'
                                wa_itab-BPUMN.
  PERFORM bdc_field       USING 'EINE-UEBTO'
                                wa_itab-UEBTO.

  PERFORM bdc_dynpro      USING 'X' 'SAPMM06I' '0105'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'EINE-ANGNR'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=KO'.

  PERFORM bdc_dynpro      USING 'X' 'SAPMV13A' '0201'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'RV13A-DATBI'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'RV13A-DATAB'
                                wa_itab-datab.
  PERFORM bdc_field       USING 'RV13A-DATBI'
                                wa_itab-datbi.

  PERFORM bdc_dynpro      USING 'X' 'SAPMV13A' '0201'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'RV13A-DATAB'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=SICH'.
  PERFORM bdc_field       USING 'RV13A-DATAB'
                                wa_itab-datab.
  PERFORM bdc_field       USING 'RV13A-DATBI'
                                wa_itab-datbi.


  IF wa_itab-is_exist EQ 'X'.
    CALL TRANSACTION  'ME12' USING bdc_tab MODE mode MESSAGES INTO it_result.
  ELSE.
    CALL TRANSACTION  'ME11' USING bdc_tab MODE mode MESSAGES INTO it_result.
  ENDIF.

  READ TABLE it_result WITH  KEY msgtyp = 'E'.
  IF sy-subrc = 0.
    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        id        = it_result-msgid
        lang      = '1'
        no        = it_result-msgnr
        v1        = it_result-msgv1
        v2        = it_result-msgv2
        v3        = it_result-msgv3
        v4        = it_result-msgv4
      IMPORTING
        msg       = msg
      EXCEPTIONS
        not_found = 1
        OTHERS    = 2.
    wa_itab-msg = msg.
    wa_itab-icon = icon_red_light.
  ELSE.
    READ TABLE it_result WITH KEY msgtyp = 'A'.
    IF sy-subrc = 0.
      CALL FUNCTION 'FORMAT_MESSAGE'
        EXPORTING
          id        = it_result-msgid
          lang      = '1'
          no        = it_result-msgnr
          v1        = it_result-msgv1
          v2        = it_result-msgv2
          v3        = it_result-msgv3
          v4        = it_result-msgv4
        IMPORTING
          msg       = msg
        EXCEPTIONS
          not_found = 1
          OTHERS    = 2.
      wa_itab-msg = msg.
      wa_itab-icon = icon_red_light.
    ELSE.
      READ TABLE it_result WITH KEY msgid = '06' msgnr = '331'.
      IF sy-subrc = 0.
        CALL FUNCTION 'FORMAT_MESSAGE'
          EXPORTING
            id        = it_result-msgid
            lang      = '1'
            no        = it_result-msgnr
            v1        = it_result-msgv1
            v2        = it_result-msgv2
            v3        = it_result-msgv3
            v4        = it_result-msgv4
          IMPORTING
            msg       = msg
          EXCEPTIONS
            not_found = 1
            OTHERS    = 2.
        wa_itab-msg = msg.
        wa_itab-icon = icon_green_light.
      ELSE.
        wa_itab-msg = '失败'.
        wa_itab-icon = icon_red_light.
      ENDIF.
    ENDIF.
  ENDIF.
  CLEAR: it_result[],it_result,msg.
  CLEAR bdc_tab[].
ENDFORM.                                                    "FRM_X2
*&---------------------------------------------------------------------*
*&      Form  FRM_X3
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_WA_ITAB  text
*----------------------------------------------------------------------*
FORM frm_x3  USING wa_itab  TYPE typ_data.
  DATA:BEGIN OF it_result OCCURS 0.
          INCLUDE STRUCTURE bdcmsgcoll.
  DATA: text(200) TYPE c.
  DATA END OF it_result.
  DATA  msg(100).

  REFRESH bdc_tab.
  PERFORM bdc_dynpro      USING 'X' 'SAPMM06I' '0100'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'EINA-MATNR'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'EINA-LIFNR'
                                wa_itab-lifnr.
  PERFORM bdc_field       USING 'EINA-MATNR'
                                wa_itab-matnr.
  PERFORM bdc_field       USING 'EINE-EKORG'
                                wa_itab-ekorg.
  PERFORM bdc_field       USING 'EINE-WERKS'
                                wa_itab-werks.
  PERFORM bdc_field       USING 'RM06I-LOHNB'
                                ''.
  PERFORM bdc_field       USING 'RM06I-KONSI'
                                'X'.
  PERFORM bdc_dynpro      USING 'X' 'SAPMM06I' '0101'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'EINA-UMREZ'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
*  PERFORM bdc_field       USING 'EINA-URZTP'
*                                wa_itab-urztp.
*  PERFORM bdc_field       USING 'EINA-URZNR'
*                                wa_itab-URZNR.
  PERFORM bdc_field       USING 'EINA-URZLA'
                                ''.
  PERFORM bdc_field       USING 'EINA-REGIO'
                                ''.
  PERFORM bdc_field       USING 'EINA-TELF1'
                                ''.
  PERFORM bdc_field       USING 'EINA-MEINS'
                                'EA'.
  PERFORM bdc_field       USING 'EINA-UMREZ'
                                '1'.
  PERFORM bdc_field       USING 'EINA-UMREN'
                                '1'.
  PERFORM bdc_dynpro      USING 'X' 'SAPMM06I' '0102'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'EINE-MWSKZ'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'EINE-APLFZ'
                                wa_itab-aplfz.
  PERFORM bdc_field       USING 'EINE-EKGRP'
                                wa_itab-ekgrp.
  PERFORM bdc_field       USING 'EINE-NORBM'
                                wa_itab-norbm.
  PERFORM bdc_field       USING 'EINE-WEBRE'
                                'X'.
  PERFORM bdc_field       USING 'EINE-MWSKZ'
                                wa_itab-mwskz.
  PERFORM bdc_field       USING 'EINE-IPRKZ'
                                ''.
*          PERFORM BDC_FIELD       USING 'EINE-MEPRF'
*                                        '5'.
  PERFORM bdc_field       USING 'EINE-NETPR'
                                wa_itab-netpr.
  PERFORM bdc_field       USING 'EINE-WAERS'
                                'RMB'.
  PERFORM bdc_field       USING 'EINE-PEINH'
                                wa_itab-peinh.
  PERFORM bdc_field       USING 'EINE-BPRME'
                                'EA'.
  PERFORM bdc_field       USING 'EINE-BPUMZ'
                                '1'.
  PERFORM bdc_field       USING 'EINE-BPUMN'
                                '1'.
  PERFORM bdc_dynpro      USING 'X' 'SAPMM06I' '0105'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'EINE-ANGNR'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=KO'.
  PERFORM bdc_dynpro      USING 'X' 'SAPMV13A' '0201'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'RV13A-DATBI'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'RV13A-DATAB'
                                wa_itab-datab.
  PERFORM bdc_field       USING 'RV13A-DATBI'
                                wa_itab-datbi.
  PERFORM bdc_dynpro      USING 'X' 'SAPMV13A' '0201'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'RV13A-DATAB'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=SICH'.
  PERFORM bdc_field       USING 'RV13A-DATAB'
                                wa_itab-datab.
  PERFORM bdc_field       USING 'RV13A-DATBI'
                                wa_itab-datbi.

  IF wa_itab-is_exist EQ 'X'.
    CALL TRANSACTION  'ME12' USING bdc_tab MODE mode MESSAGES INTO it_result.
  ELSE.
    CALL TRANSACTION  'ME11' USING bdc_tab MODE mode MESSAGES INTO it_result.
  ENDIF.

  READ TABLE it_result WITH  KEY msgtyp = 'E'.
  IF sy-subrc = 0.
    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        id        = it_result-msgid
        lang      = '1'
        no        = it_result-msgnr
        v1        = it_result-msgv1
        v2        = it_result-msgv2
        v3        = it_result-msgv3
        v4        = it_result-msgv4
      IMPORTING
        msg       = msg
      EXCEPTIONS
        not_found = 1
        OTHERS    = 2.
    wa_itab-msg = msg.
    wa_itab-icon = icon_red_light.
  ELSE.
    READ TABLE it_result WITH KEY msgtyp = 'A'.
    IF sy-subrc = 0.
      CALL FUNCTION 'FORMAT_MESSAGE'
        EXPORTING
          id        = it_result-msgid
          lang      = '1'
          no        = it_result-msgnr
          v1        = it_result-msgv1
          v2        = it_result-msgv2
          v3        = it_result-msgv3
          v4        = it_result-msgv4
        IMPORTING
          msg       = msg
        EXCEPTIONS
          not_found = 1
          OTHERS    = 2.
      wa_itab-msg = msg.
      wa_itab-icon = icon_red_light.
    ELSE.
      READ TABLE it_result WITH KEY msgid = '06' msgnr = '331'.
      IF sy-subrc = 0.
        CALL FUNCTION 'FORMAT_MESSAGE'
          EXPORTING
            id        = it_result-msgid
            lang      = '1'
            no        = it_result-msgnr
            v1        = it_result-msgv1
            v2        = it_result-msgv2
            v3        = it_result-msgv3
            v4        = it_result-msgv4
          IMPORTING
            msg       = msg
          EXCEPTIONS
            not_found = 1
            OTHERS    = 2.
        wa_itab-msg = msg.
        wa_itab-icon = icon_green_light.
      ELSE.
        wa_itab-msg = '失败'.
        wa_itab-icon = icon_red_light.
      ENDIF.
    ENDIF.
  ENDIF.
  CLEAR: it_result[],it_result,msg.
  CLEAR bdc_tab[].
ENDFORM.                                                    " FRM_X3

*&---------------------------------------------------------------------*
*&  包括                ZMM_020_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  FM_GET_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_P_FNAME  text
*----------------------------------------------------------------------*
FORM frm_get_file  CHANGING p_p_fname.
  DATA: work_rc          TYPE i.          "Return Code
  DATA: lstr_filter    TYPE string.
  DATA: ltb_file_table TYPE filetable,
        lwk_file_table TYPE filename.

  CONCATENATE 'Excel 2003-2013(*.XLS)|*.XLS|' 'Excel(*.XLSX)|*.XLSX'
         INTO lstr_filter.
  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      window_title            = 'Select the file '
*     DEFAULT_EXTENSION       =
      default_filename        = ''
      file_filter             = lstr_filter
      initial_directory       = 'C:'
*     MULTISELECTION          =
*     WITH_ENCODING           =
    CHANGING
      file_table              = ltb_file_table
      rc                      = work_rc
*     USER_ACTION             =
*     FILE_ENCODING           =
    EXCEPTIONS
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 4
      OTHERS                  = 5.
  IF sy-subrc = 0.
    LOOP AT ltb_file_table INTO lwk_file_table.
      MOVE lwk_file_table TO p_fname.
      EXIT.
    ENDLOOP.
  ELSE.
    MESSAGE 'File Name Get Failed' TYPE 'E'.
  ENDIF.
ENDFORM.                    " FM_GET_FILE
*&---------------------------------------------------------------------*
*&      Form  FM_GET_FILEPATH
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_filepath .
  DATA: l_filename TYPE string,
        l_path     TYPE string,
        l_fullpath TYPE string,
        l_title    TYPE string.
  co_objid = 'ZMMI008'.

  CONCATENATE  co_objid '-' sy-datum  sy-uzeit INTO l_title .
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = '模板保存为EXCEL'
      default_extension    = 'xlsx'
      default_file_name    = l_title
*     file_filter          = '.xls'
      file_filter          = 'Excel 文件 (*.XLSX)'
      initial_directory    = 'C:/'
*     DEFAULT_FILE_NAME    = p_filename
    CHANGING
      filename             = l_filename
      path                 = l_path
      fullpath             = g_fullpath
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
  IF sy-subrc <> 0.
    STOP.
  ENDIF.
  IF g_fullpath IS INITIAL.
    MESSAGE '请选择保存EXCEL文件的路径' TYPE 'E'.
  ENDIF.
ENDFORM.                    " FM_GET_FILEPATH
*&---------------------------------------------------------------------*
*&      Form  FM_DOWNM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_downm .
  DATA:  ls_indcatortxt TYPE string,
         p_filename     TYPE sapb-sappfad.
  DATA: lo_objdata     LIKE wwwdatatab,
        lo_mime        LIKE w3mime,
        ls_destination LIKE rlgrap-filename,
        ls_objnam      TYPE string,
        li_rc          LIKE sy-subrc,
        ls_errtxt      TYPE string.

  p_filename = g_fullpath.
  ls_indcatortxt = '程序正在下载模板'.
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      percentage = 0
      text       = ls_indcatortxt.
  CONCATENATE co_objid '.XLSX' INTO ls_objnam.
  CONDENSE ls_objnam NO-GAPS.
  SELECT SINGLE relid objid FROM wwwdata
    INTO CORRESPONDING FIELDS OF lo_objdata
    WHERE srtf2    = 0
      AND relid    = 'MI'
      AND objid    = co_objid.
  IF sy-subrc NE 0 OR lo_objdata-objid EQ space.
    CONCATENATE '模板文件:' ls_objnam '不存在,请用TCODE:SMW0进行加载' INTO ls_errtxt.
    MESSAGE ls_errtxt  TYPE  'E'.
  ENDIF.
  ls_destination   = g_fullpath.
  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      key         = lo_objdata
      destination = ls_destination
    IMPORTING
      rc          = li_rc.
  IF li_rc NE 0.
    CONCATENATE '模板文件:' ls_objnam '下载失败' INTO ls_errtxt.
    MESSAGE ls_errtxt TYPE 'E'.
  ENDIF.
ENDFORM.                    " FM_DOWNM
*&---------------------------------------------------------------------*
*&      Form  FM_FILE_READ
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_file_read .

  DATA: BEGIN OF it_header OCCURS 0,
          col       LIKE alsmex_tabline-col,
          field(20),
        END OF it_header.

  FIELD-SYMBOLS:       <fs>.
  DATA: l_intern   TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE.

  DATA: c_row     TYPE i VALUE 3,      "读EXCEL第3行开始
        c_col     TYPE i VALUE 1,      "读EXCEL第1列开始
        l_index   TYPE i,
        l_msg(60) TYPE c,
        g_mod     TYPE d,
        l_row(5)  TYPE n,
        li_len    TYPE sy-tabix,
        l_cstr(4).
  gv_filename = p_fname.
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = gv_filename
      i_begin_col             = c_col
      i_begin_row             = c_row
      i_end_col               = 103
      i_end_row               = 50000
    TABLES
      intern                  = l_intern
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

  SORT l_intern BY row col.
  l_row = c_row.
  LOOP AT l_intern.
    IF l_intern-row = 1.
      it_header-col = l_intern-col.
      CONDENSE l_intern-value.
      it_header-field = l_intern-value.
      APPEND it_header.
    ELSE.
      MOVE l_intern-col TO l_index.
*      READ TABLE IT_HEADER INDEX L_INDEX.
      READ TABLE it_header WITH KEY col = l_index.
      IF sy-subrc = 0.
        ASSIGN COMPONENT it_header-field OF STRUCTURE gs_itab TO <fs>.
        IF sy-subrc = 0.
          MOVE l_intern-value TO <fs>.
        ENDIF.
      ENDIF.

      AT END OF row.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  = gs_itab-matnr
          IMPORTING
            output = gs_itab-matnr.

        MOVE-CORRESPONDING gs_itab TO gt_itab.

        APPEND gt_itab.
        CLEAR: gt_itab, gs_itab.
*          IT_RECORD-ROWNO = L_ROW.
*          APPEND IT_RECORD.
        g_mod = l_row MOD 100.
        IF g_mod = 0.
*          CONCATENATE C_PROGRESS0 L_ROW INTO L_MSG SEPARATED BY SPACE.
*            PROGRESS_INDICATOR: L_MSG.
        ENDIF.
        l_row = l_row + 1.
*          CLEAR  IT_RECORD.
      ENDAT.
    ENDIF.
  ENDLOOP.


  IF p EQ 'X'.
    mode = 'N'.
  ELSE.
    mode = 'A'.
  ENDIF.

  IF gt_itab[] IS INITIAL.
    MESSAGE 'No data can be read from excel file' TYPE 'E'.
    EXIT.
  ELSE.
*    PERFORM fm_bc_data.
  ENDIF.
ENDFORM.                    " FM_FILE_READ
*&---------------------------------------------------------------------*
*&      Form  BDC_DYNPRO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM bdc_dynpro USING dynbegin name value.
  IF dynbegin = 'X'.
    CLEAR bdc_tab.
    MOVE:  name TO bdc_tab-program,
           value TO bdc_tab-dynpro,
           'X' TO bdc_tab-dynbegin.
    APPEND bdc_tab.
  ELSE.
    CLEAR bdc_tab.
    MOVE:  name TO bdc_tab-fnam,
           value TO bdc_tab-fval.
    APPEND bdc_tab.
  ENDIF.
ENDFORM.                    "BDC_DYNPRO
*&---------------------------------------------------------------------*
*&      Form  BDC_FIELD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0322   text
*      -->P_0323   text
*----------------------------------------------------------------------*

FORM bdc_field USING field_name
                     field_value.
  CLEAR bdc_tab.
  bdc_tab-fnam  = field_name.
  bdc_tab-fval  = field_value.
  APPEND bdc_tab.
ENDFORM.                    " BDC_FIELD

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小啊曼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值