采购信息记录批导完美版

采购信息记录批导完美版

采购信息记录批导完美版

采购信息记录批导完美版

采购信息记录批导完美版

采购信息记录批导完美版

采购信息记录批导完美版

*&---------------------------------------------------------------------*
*& Report ZMMR036
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZMMR036B.


INCLUDE ZMMR036B_TOP.
*INCLUDE ZMMR036_top.

INCLUDE ZMMR036B_SCR.
*INCLUDE ZMMR036_scr.

INCLUDE ZMMR036B_FRM.
*INCLUDE ZMMR036_frm.




INITIALIZATION.
  "下载模板按钮
* 工具栏添加下载模板按钮
  CLEAR g_function_key.
  g_function_key-icon_id   = icon_read_file.
  g_function_key-icon_text = '供应商导入模版下载'.
  g_function_key-quickinfo = '供应商导入模版下载'.
  sscrfields-functxt_01 = g_function_key.

*----------------------------------------------------------------------*
*           AT SELECTION-SCREEN OUTPUT                                 *
*----------------------------------------------------------------------*
*显示注释
AT SELECTION-SCREEN OUTPUT.
*  MOVE '1、请选择正确的模板填写数据'  TO T1.
*  MOVE '1、请严格按照模板要求填写数据'  TO t2.

*----------------------------------------------------------------------*
*           AT SELECTION-SCREEN                                        *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
* 下载数据导入模板
  IF sscrfields-ucomm = 'FC01'.
    PERFORM frm_excel_down.
    sscrfields-ucomm = ''.
  ENDIF.
*----------------------------------------------------------------------*
*           AT SELECTION-SCREEN  ON VALUE-REQUEST                      *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
* 选择文件搜索帮助
  PERFORM frm_set_file_f4 USING p_file.




START-OF-SELECTION.
* 文件必输校验
  PERFORM frm_file_obligatory.
* 批量导入数据
  if r_1 eq 'X' .
  PERFORM frm_upload_data.    "模版阶梯纵向
  ENDIF .
  IF R_2 EQ 'X' .
  PERFORM frm_upload_data2.  "模版阶梯横向
  ENDIF .
END-OF-SELECTION.
* alv显示
* PERFORM frm_display_data.
  perform  frm_display_alv2 .
 

*&---------------------------------------------------------------------*
*& 包含               ZMMR036_TOP
*&---------------------------------------------------------------------*

TABLES sscrfields.
INCLUDE <list>.
INCLUDE <icon>.

DATA:   g_function_key TYPE smp_dyntxt .         "功能按钮
DATA: lv_msg TYPE string.


DATA: gs_bdcdata LIKE bdcdata,
      gs_messtab LIKE bdcmsgcoll.
DATA: gt_bdcdata LIKE TABLE OF bdcdata.   "OCCURS 0 WITH HEADER LINE.
DATA:  gwa_messtab LIKE bdcmsgcoll.
DATA: gt_messtab LIKE TABLE OF bdcmsgcoll." O
DATA: l_option TYPE ctu_params.

DATA: wa_eina     TYPE eina,
      wa_eine     TYPE eine,
      wa_eina_new TYPE eina,
      wa_eine_new TYPE eine.


DATA: it_head TYPE STANDARD TABLE OF mestxh,
      it_line TYPE STANDARD TABLE OF mestxl.


DATA: it_eina TYPE STANDARD TABLE OF eina WITH HEADER LINE,
      it_eine TYPE STANDARD TABLE OF eine.


DATA: return TYPE STANDARD TABLE OF bapireturn WITH HEADER LINE.
DATA: l_netpr LIKE ekpo-netpr.
DATA: l_komv TYPE komv,
      l_ekpo TYPE ekpo.

DATA: BEGIN OF gs_alv ,
        matnr    LIKE eina-matnr, "物料
        lifnr    LIKE eina-lifnr, " 供应商编号
        vkorg    LIKE eine-ekorg, "采购组织
        werks    LIKE eine-werks, " 工厂
*        netpr LIKE eine-netpr," 净价
        netpr    TYPE string,
        mwskz    LIKE eine-mwskz ,  "税率
*        peinh    LIKE eine-peinh, " 价格单位
        peinh    TYPE string,  " 价格单位
        waers    LIKE eine-waers , "币种
*        lifab LIKE wa_eina-lifab ,  "
*        lifbi LIKE wa_eina-lifbi  , "
        lifab    TYPE string ,  "
        lifbi    TYPE string  , "
        kstbm    LIKE  konm-kstbm , "等级
        kbetr    LIKE  konm-kbetr , "等级价格
        p        TYPE c,
        w        TYPE c,
        mark     TYPE c,
        light(4),
        result   TYPE c LENGTH 100,

      END OF gs_alv .
DATA : gt_alv LIKE   TABLE OF gs_alv .



DATA: gt_fieldcat TYPE TABLE OF  slis_fieldcat_alv.
DATA: gs_fieldcat TYPE slis_fieldcat_alv.
DATA: gs_layout TYPE slis_layout_alv .


DATA:  gv_c TYPE c ."有效期重叠控制


DATA: ls_alv  LIKE gs_alv .
DATA: lt_alv LIKE TABLE OF gs_alv .
DATA: ls_alv2  LIKE gs_alv .
DATA: lt_alv2 LIKE TABLE OF gs_alv .
 

 

*&---------------------------------------------------------------------*
*& 包含               ZMMR036_SCR
*&---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK blk02 WITH FRAME TITLE TEXT-005.
PARAMETERS p_file LIKE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK blk02.

*SELECTION-SCREEN BEGIN OF BLOCK blk03 WITH FRAME TITLE TEXT-006.
PARAMETERS : r_1 RADIOBUTTON GROUP g1 .
PARAMETERS : r_2 RADIOBUTTON GROUP g1 DEFAULT 'X' .
*SELECTION-SCREEN BEGIN OF BLOCK blk03 WITH FRAME TITLE TEXT-006.

PARAMETERS : r_3 RADIOBUTTON GROUP g2 .
PARAMETERS : r_4 RADIOBUTTON GROUP g2 .


PARAMETERS : cb_1 AS CHECKBOX .
*PARAMETERS : cb_2 AS CHECKBOX .
 

*&---------------------------------------------------------------------*
*& 包含               ZMMR036_FRM
*&---------------------------------------------------------------------*

FORM frm_file_obligatory .
  IF p_file IS INITIAL.
    MESSAGE '请选择导入的文件' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_upload_data .
* 局部变量的定义
  DATA:lt_excel TYPE TABLE OF alsmex_tabline.        "参照类型有标准的调整为ZALSMEX_TABLINE_LINE。
  DATA:    ls_excel TYPE alsmex_tabline.

***  IF RB1 = 'X'.
  CLEAR gt_alv.
* 选择文件后做后续处理
  CHECK p_file IS NOT INITIAL.
* 把文件的数据变成内表
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = p_file
      i_begin_col             = 1
      i_begin_row             = 2
      i_end_col               = 16
      i_end_row               = 5000
      "SHEET_NAME              = '新增修改扩展'
    TABLES
      intern                  = lt_excel
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.

* 处理内表数据
  CLEAR ls_excel.


  LOOP AT lt_excel INTO ls_excel.




    CASE ls_excel-col.
      WHEN 1.
        gs_alv-lifnr             = ls_excel-value."供应商代码 (4)
      WHEN 3.
        gs_alv-matnr            = ls_excel-value."物料代码(4)
      WHEN 5.
        gs_alv-vkorg             = ls_excel-value."采购组织(4)
      WHEN 6.
        gs_alv-werks             = ls_excel-value."工厂 (4)
      WHEN 7.
        gs_alv-netpr             = ls_excel-value."净价 (4)
      WHEN 8.
        gs_alv-waers             = ls_excel-value."币种(4)WHEN 1.
      WHEN 9.
        gs_alv-peinh             = ls_excel-value."价格系数(4)WHEN 1.
      WHEN 10.
        gs_alv-mwskz             = ls_excel-value."税码(4)WHEN 1.
      WHEN 11.
        gs_alv-lifab             = ls_excel-value."有效开始日期 (4)WHEN 1.
      WHEN 12.
        gs_alv-lifbi             = ls_excel-value."有效结束日期 (4)WHEN 1.
      WHEN 13.
        gs_alv-p                 = ls_excel-value."采购
      WHEN 14.
        gs_alv-w                 = ls_excel-value."委外
      WHEN 15.
        gs_alv-kstbm            = ls_excel-value."阶梯数量
      WHEN 16.
        gs_alv-kbetr             = ls_excel-value."阶梯价



    ENDCASE.
    AT END OF row.
      APPEND gs_alv TO gt_alv.
      CLEAR gs_alv.
    ENDAT.

  ENDLOOP .

*  下面是供应商导入程序
*  LOOP AT lt_excel INTO ls_excel.
*    CASE ls_excel-col.
*      WHEN 1.
*        gs_alv-partner          = ls_excel-value."SAP 供应商号码 (10)
*        IF gs_alv-partner IS NOT INITIAL.
*          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
*            EXPORTING
*              input  = gs_alv-partner
*            IMPORTING
*              output = gs_alv-partner.
*        ENDIF.
*
*
*
*      WHEN 2.
*        gs_alv-bukrs            = ls_excel-value."公司代码 (4)
*      WHEN 3.
*        gs_alv-ekorg            = ls_excel-value."采购组织代码 (4)
*      WHEN 4.
*        gs_alv-bu_group         = ls_excel-value."分组(4)
*      WHEN 5.
*        gs_alv-name_org1        = ls_excel-value."供应商名称 1 (40)
*      WHEN 6.
*        gs_alv-name_org2        = ls_excel-value."供应商名称 2(40)
*      WHEN 7.
*        gs_alv-name_org3        = ls_excel-value."供应商名称 3 (40)
*      WHEN 8.
*        gs_alv-name_org4        = ls_excel-value."供应商名称 4 (40)
*      WHEN 9.
*        gs_alv-bu_sort1              = ls_excel-value."搜索项目1 (20)
*      WHEN 10.
*        gs_alv-bu_sort2              = ls_excel-value."搜索项目2 (20)
*      WHEN 11.
*        gs_alv-street              = ls_excel-value."供应商地址 1 (35)
*      WHEN 12.
*        gs_alv-post_code1         = ls_excel-value."邮政编码 (6)
*      WHEN 13.
*        gs_alv-regio         = ls_excel-value."地区(3)
*      WHEN 14.
*        gs_alv-city1         = ls_excel-value."城市(40)
*      WHEN 15.
*        gs_alv-land1         = ls_excel-value."国家 (2)
*      WHEN 16.
*        gs_alv-langu         = ls_excel-value."语言
*      WHEN 17.
*        gs_alv-tel_number          = ls_excel-value."电话
*      WHEN 18.
*        gs_alv-mob_number             = ls_excel-value."移动电话
*      WHEN 19.
*        gs_alv-fax_number              = ls_excel-value."传真
*      WHEN 20.
*        gs_alv-smtp_addr              = ls_excel-value."Email
*      WHEN 21.
*        gs_alv-kunnr              = ls_excel-value."客户
*        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
*          EXPORTING
*            input  = gs_alv-kunnr
*          IMPORTING
*            output = gs_alv-kunnr.
*
*      WHEN 22.
*        gs_alv-taxnum              = ls_excel-value."税号(18)
*      WHEN 23.
*        gs_alv-akont             = ls_excel-value."统驭科目
*        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
*          EXPORTING
*            input  = gs_alv-akont
*          IMPORTING
*            output = gs_alv-akont.
*      WHEN 24.
*        gs_alv-zterm             = ls_excel-value."付款条件
*      WHEN 25.
*        gs_alv-reprf          = ls_excel-value."检查双重发票
*      WHEN 26.
*        gs_alv-waers          = ls_excel-value."订单币别
*      WHEN 27.
*        gs_alv-zterm2              = ls_excel-value."付款条件
*      WHEN 28.
*        gs_alv-webre            = ls_excel-value."基于收货的发票校验
*      WHEN 29.
*        gs_alv-telf1              = ls_excel-value."供应商业务员
*      WHEN 30.
*        gs_alv-verkf              = ls_excel-value."供应商业务员电话
*      WHEN 31.
*        gs_alv-ktonr             = ls_excel-value."伙伴功能:L1
**      WHEN 32.
**        gs_alv-verkf              = ls_excel-value.
**      WHEN 33.
**        gs_alv-telf1              = ls_excel-value.
**      WHEN 34.
**        gs_alv-ktonr              = ls_excel-value.
**      WHEN 35.
**        gs_alv-ekgrp              = ls_excel-value.
*      WHEN OTHERS.
*    ENDCASE.
*    AT END OF row.
*      APPEND gs_alv TO gt_alv.
*      CLEAR gs_alv.
*    ENDAT.
*  ENDLOOP.
*
*  LOOP AT gt_alv INTO gs_alv.
*    SELECT COUNT(*)
*      FROM lfa1
*      WHERE lifnr = gs_alv-partner.
*    IF sy-subrc EQ 0.
*      CONCATENATE '供应商编号:' gs_alv-partner '已经存在' INTO gs_alv-remark.
*      gs_alv-icon_a = '@[email protected] '.
*      MODIFY gt_alv FROM gs_alv.
*    ENDIF.
*  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_EXCEL_DOWN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_excel_down .

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FILE_F4
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->P_P_FILE  text
*&---------------------------------------------------------------------*
FORM frm_set_file_f4  USING    i_file TYPE rlgrap-filename.
* 局部变量-文件名定义
  DATA l_filename TYPE rlgrap-filename.
  CLEAR l_filename.
* 选择文件搜索帮助
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_path         = i_file
      mask             = ',*.xlsx,*.XLSX,*.xls,*.XLS.'
      mode             = '0'
      title            = TEXT-002
    IMPORTING
      filename         = l_filename
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.
* 如果选择了文件
  IF sy-subrc = 0 AND l_filename IS NOT INITIAL.
    p_file = l_filename.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_data .
* alv相关变量定义
  DATA:lt_fcat TYPE lvc_t_fcat,
       ls_layo TYPE lvc_s_layo.

* FIELDCAT字段填充
  CLEAR lt_fcat[].
  PERFORM frm_fill_fcat TABLES lt_fcat.

* 布局设置
  CLEAR ls_layo.
  ls_layo-zebra      = 'X'.    "斑马线
  ls_layo-cwidth_opt = 'X'.    "最优宽
  ls_layo-box_fname  = 'SEL'.  "选择模式

* ALV显示数据
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      is_layout_lvc            = ls_layo
      i_callback_pf_status_set = 'FRM_SET_STATUS'
      i_callback_user_command  = 'FRM_USER_COMMAND'
      it_fieldcat_lvc          = lt_fcat[]
      i_save                   = 'A'
    TABLES
      t_outtab                 = gt_alv[]
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
* 数据显示失败
  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*       设定状态栏
*----------------------------------------------------------------------*
FORM frm_set_status USING extab TYPE slis_t_extab.
  SET PF-STATUS 'ZSTANDARD_FULLSCREEN'.
*  DATA: BEGIN OF ls_code,
*          code LIKE sy-ucomm,
*        END OF ls_code.
*  DATA: lt_code LIKE TABLE OF ls_code.
*  ls_code-code = 'INSERT'.
*  APPEND ls_code TO lt_code.
*  ls_code-code = 'CHANGE'.
*  APPEND ls_code TO lt_code.
*
*  SET PF-STATUS 'ZSTANDARD_FULLSCREEN' EXCLUDING lt_code.
*  SET TITLEBAR 'TI_1000'.

ENDFORM. " FRM_SET_STATUS


FORM frm_user_command USING i_ucomm LIKE sy-ucomm
                            i_selfield TYPE slis_selfield.


  IF sy-ucomm  EQ 'IMPORT' .

  ENDIF .
*  CASE i_ucomm.
*    WHEN 'BACK'.
*      LEAVE TO SCREEN 0.
*
*    WHEN 'EXIT'.
*      LEAVE PROGRAM.
*
*    WHEN 'IMPORT'. "采购信息记录创建
*      LOOP AT gt_alv INTO gs_alv.
*        PERFORM frm_data_import.
*      ENDLOOP .

*    WHEN 'CHANGE'.
*      PERFORM frm_data_change.            "供应商信息修改
*
*    WHEN 'INSERT'.
*      PERFORM frm_data_insert.            "已存在供应商扩展
*
*    WHEN 'INSERT2'.
*      " PERFORM FRM_DATA_INSERT2.           "客户扩展供应商

***    WHEN 'EXPORT'.                                    "------------------------------------20160722注销,采用系统标准电子表格。
***      PERFORM FRM_DATA_EXPORT.

*    WHEN OTHERS.
*  ENDCASE.
ENDFORM. " FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form FRM_FILL_FCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->P_LT_FCAT  text
*&---------------------------------------------------------------------*
FORM frm_fill_fcat TABLES t_fcat TYPE lvc_t_fcat.
  "局部变量的定义
  DATA ls_fcat TYPE lvc_s_fcat.

  DEFINE m_fieldcat.
    CLEAR ls_fcat.
    ls_fcat-fieldname = &1.
    ls_fcat-coltext   = &2.
    ls_fcat-outputlen = &3.
    ls_fcat-no_zero   = &4.
    IF ls_fcat-fieldname = 'ICON_A'.
      ls_fcat-icon = 'X'.
    ENDIF.
    APPEND ls_fcat TO t_fcat.
  END-OF-DEFINITION.

*  m_fieldcat 'ICON_A    '  '指示灯                  ' '' ''.
  m_fieldcat 'MATNR'  '物料' '' ''.
  m_fieldcat 'LIFNR'  '供应商代码 ' '' ''.
  m_fieldcat 'VKORG'  '采购组织 ' '' ''.
  m_fieldcat 'WERKS'  '工厂  ' '' ''.
  m_fieldcat 'NETPR'  '净价  ' '' ''.
  m_fieldcat 'MWSKZ'  '税率 ' '' ''.
  m_fieldcat 'PEINH'  '价格单位 ' '' ''.
  m_fieldcat 'WAERS'  '币种' '' ''.
  m_fieldcat 'LIFAB'  '有效开始日期' '' ''.
  m_fieldcat 'LIFBI'  '有效结束日期 ' '' ''.






ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_IMPORT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_data_import .

  CLEAR :wa_eina,wa_eine,wa_eina_new,wa_eine_new,it_head,it_line,it_eina,it_eine,return,l_netpr,l_komv,l_ekpo.

* **供应商主数据加前导零
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = gs_alv-lifnr
    IMPORTING
      output = gs_alv-lifnr.

  wa_eina-lifnr = gs_alv-lifnr.  " 供应商编号
  wa_eina-matnr = gs_alv-matnr.  "物料
  wa_eine-ekorg = gs_alv-vkorg.  "采购组织
  wa_eine-werks = gs_alv-werks.  " 工厂
  wa_eine-esokz = '0'. " 0 标准采购 3 委外
  wa_eine-netpr = gs_alv-netpr.  " 净价
  wa_eine-waers = gs_alv-waers ."币种
*  wa_eine-ekgrp = 'D01'.        ” 采购组
  wa_eine-norbm = '1'.            "标准采购订单数量
  wa_eine-aplfz = '1'.            "计划交货时间
*  wa_eine-effpr = gs_alv-abmpr.   "采购信息记录中的有效价格
  wa_eine-mwskz = gs_alv-mwskz.           " 税码
  wa_eine-peinh = gs_alv-peinh.   " 价格单位

  wa_eine-webre = 'X'  ." 基于收货的发票校验

*  wa_eina-lifab = gs_alv-lifab.  "有效开始日期 没用
*  wa_eina-lifbi = gs_alv-lifbi.  "有效结束日期  没用

  " 报价单号


*  CONCATENATE 'ZSDP201创建' INTO WA_EINA-IDNLF.

  CALL FUNCTION 'ME_INITIALIZE_INFORECORD'.


  CALL FUNCTION 'ME_DIRECT_INPUT_INFORECORD'
    EXPORTING
      activity         = 'V' "V 修改,H创建
      i_eina           = wa_eina
      i_eine           = wa_eine
      i_no_suppose     = ''
      i_vorga          = 'A'
*     I_NO_SUPPOSE     = 'X'"重要
*     I_VORGA          = 'B'
*     i_skip_nr_check  = '1'
    IMPORTING
      e_eina           = wa_eina_new
      e_eine           = wa_eine_new
    TABLES
      t_head           = it_head
      t_line           = it_line
    EXCEPTIONS
      textname_invalid = 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.




  CALL FUNCTION 'ME_POST_INFORECORD'
    EXPORTING
      i_matnr  = wa_eina-matnr
      o_matnr  = wa_eina-matnr
    TABLES
      t_eina_i = it_eina.


*APPEND wa_eine_new to it_eine.
  CALL FUNCTION 'ME_UPDATE_INFORECORD_COND'
    TABLES
      reine = it_eine.



  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

  READ TABLE it_eina INDEX 1.

*  WRITE:/ icon_green_light   AS ICON, l_tabix,'行','采购信息记录创建成功,信息记录号:',it_eina-infnr.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_alv2 .


  DEFINE append_field.
    gs_fieldcat-fieldname = &1.
    gs_fieldcat-seltext_l = &2.
    APPEND gs_fieldcat TO gt_fieldcat.
    CLEAR: gs_fieldcat.
  END-OF-DEFINITION.


  append_field 'LIGHT'  '指示灯 ' .
  append_field 'RESULT'  '处理结果 ' .
  append_field: 'MATNR'  '编号' .
  append_field 'LIFNR'  '供应商代码 '.
  append_field 'VKORG'  '采购组织 '.
  append_field 'WERKS'  '工厂  '.
  append_field 'NETPR'  '净价  ' .
  append_field 'MWSKZ'  '税率 ' .
  append_field 'PEINH'  '价格单位 ' .
  append_field 'WAERS'  '币种' .
  append_field 'LIFAB'  '有效开始日期' .
  append_field 'LIFBI'  '有效结束日期 ' .
  append_field 'P'  '采购' .
  append_field 'W'  '委外' .
  append_field 'KSTBM'  '阶梯数量' .
  append_field 'KBETR'  '阶梯价格' .





  gs_layout-box_fieldname = 'MARK'.
  gs_layout-colwidth_optimize = 'X'.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'FRM_STATUS_SET2'
      i_callback_user_command  = 'FRM_USER_COMMAND2'
*
*     I_GRID_SETTINGS          =
      is_layout                = gs_layout
      it_fieldcat              = gt_fieldcat
*     ES_EXIT_CAUSED_BY_USER   =
    TABLES
      t_outtab                 = gt_alv
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.


FORM frm_status_set2 USING ut_extab TYPE slis_t_extab.
  SET PF-STATUS 'ZSTANDARD_FULLSCREEN'.

ENDFORM.


FORM frm_user_command2 USING uv_ucomm LIKE sy-ucomm
                          us_selfield TYPE slis_selfield.


  IF  sy-ucomm EQ 'IMPORT' .
*    LOOP AT gt_alv into gs_alv .
*   PERFORM   frm_data_import .
*   ENDLOOP .
    CLEAR gv_c .

    IF cb_1 EQ 'X'.
      gv_c = 'X' .
    ENDIF .


    lt_alv = gt_alv .
    SORT lt_alv BY matnr lifnr vkorg werks p w.
    DELETE  ADJACENT DUPLICATES FROM lt_alv COMPARING matnr lifnr vkorg werks p w .

    LOOP AT lt_alv INTO ls_alv  WHERE mark EQ 'X' .
      IF r_3 EQ 'X' .
        PERFORM  frm_data_import_bdc .  "新增加
      ELSE .
        PERFORM   frm_data_import_bdc2  ."修改
      ENDIF .
      CLEAR ls_alv.
    ENDLOOP .
*     更新结果
    SORT lt_alv BY matnr lifnr vkorg werks p w.
    LOOP AT gt_alv INTO gs_alv .
      CLEAR ls_alv .
      READ TABLE lt_alv INTO ls_alv WITH KEY  matnr = gs_alv-matnr
                                              lifnr = gs_alv-lifnr
                                              vkorg = gs_alv-vkorg
                                              werks = gs_alv-werks
                                              p     = gs_alv-p
                                              w     = gs_alv-w
                                              BINARY SEARCH .
      gs_alv-light = ls_alv-light .
      gs_alv-result = ls_alv-result .

      MODIFY gt_alv FROM gs_alv .

    ENDLOOP .


  ENDIF  .
  us_selfield-refresh = 'X'.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_IMPORT_BDC
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_data_import_bdc .
*   *设置方式
  l_option-dismode = 'N'.
*    l_option-dismode = 'E'.
  l_option-updmode = 'S'.
  l_option-defsize = 'X'.
  l_option-nobinpt = 'X'.
  l_option-racommit = 'X'." ne.
  CLEAR:gt_bdcdata,gt_bdcdata[].
  PERFORM frm_bdc_dynpro     USING 'SAPMM06I' '0100'.
  PERFORM frm_bdc_field      USING 'BDC_CURSOR' 'EINE-EKORG' .
  PERFORM frm_bdc_field      USING 'BDC_OKCODE' '/00' .
  PERFORM frm_bdc_field      USING 'EINA-LIFNR' ls_alv-lifnr. "  供应商编号
  PERFORM frm_bdc_field      USING 'EINA-MATNR' ls_alv-matnr. "物料
  PERFORM frm_bdc_field      USING 'EINE-EKORG' ls_alv-vkorg .  "采购组织
  PERFORM frm_bdc_field      USING 'EINE-WERKS' ls_alv-werks .  " 工厂
  IF ls_alv-p EQ 'X' .
    PERFORM frm_bdc_field      USING 'RM06I-NORMB' 'X' .  "标准采购
  ENDIF .

  IF ls_alv-w EQ 'X' .
    PERFORM frm_bdc_field      USING 'RM06I-LOHNB' 'X' .  "标准采购
  ENDIF .




  PERFORM frm_bdc_dynpro     USING 'SAPMM06I' '0101'.
  PERFORM frm_bdc_field      USING 'BDC_CURSOR' 'EINA-MAHN1' .
  PERFORM frm_bdc_field      USING 'BDC_OKCODE' '=EINE' .

  PERFORM frm_bdc_dynpro     USING 'SAPMM06I' '0102'.
  PERFORM frm_bdc_field      USING 'BDC_CURSOR' 'EINE-MWSKZ' .
  PERFORM frm_bdc_field      USING 'BDC_OKCODE' '=KO' .
  PERFORM frm_bdc_field      USING 'EINE-APLFZ' '10' .
  PERFORM frm_bdc_field      USING 'EINE-NORBM' '1' .
  PERFORM frm_bdc_field      USING 'EINE-MWSKZ' ls_alv-mwskz.  " 税码
  PERFORM frm_bdc_field      USING 'EINE-NETPR' ls_alv-netpr . " 净价
  PERFORM frm_bdc_field      USING 'EINE-WAERS' ls_alv-waers . "币种
  PERFORM frm_bdc_field      USING 'EINE-PEINH' ls_alv-peinh . " 价格单位

  PERFORM frm_bdc_dynpro     USING 'SAPMV13A' '0201'.
  PERFORM frm_bdc_field      USING 'BDC_CURSOR' 'RV13A-DATAB' .
  PERFORM frm_bdc_field      USING 'BDC_OKCODE' '=SICH' .
  PERFORM frm_bdc_field      USING 'RV13A-DATAB' ls_alv-lifab .
  PERFORM frm_bdc_field      USING 'RV13A-DATBI' ls_alv-lifbi  .




  CLEAR : gt_messtab[] .
  CALL TRANSACTION 'ME11' USING gt_bdcdata
                           OPTIONS FROM l_option
                           MESSAGES INTO gt_messtab.


 READ TABLE gt_messtab INTO gs_messtab WITH KEY msgid = '06' msgnr = '331'.
  IF sy-subrc <> 0.
    LOOP AT gt_messtab INTO gwa_messtab.
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          msgid               = gwa_messtab-msgid
          msgnr               = gwa_messtab-msgnr
          msgv1               = gwa_messtab-msgv1
          msgv2               = gwa_messtab-msgv2
          msgv3               = gwa_messtab-msgv3
          msgv4               = gwa_messtab-msgv4
        IMPORTING
          message_text_output = lv_msg.

      IF ls_alv-result IS INITIAL.
        ls_alv-result = lv_msg.
      ELSE.
        CONCATENATE lv_msg '/' ls_alv-result INTO ls_alv-result.
      ENDIF.
      CLEAR: gwa_messtab.
    ENDLOOP.
    ls_alv-light = '@[email protected]'.
  ELSE.
    ls_alv-light = '@[email protected]'.
    ls_alv-result = '处理成功!'.

  ENDIF.

  MODIFY lt_alv FROM ls_alv TRANSPORTING light result .
  CLEAR: ls_alv.



ENDFORM.

FORM frm_bdc_dynpro  USING  program  dynpro.
  CLEAR: gs_bdcdata.
  gs_bdcdata-program  = program.
  gs_bdcdata-dynpro   = dynpro.
  gs_bdcdata-dynbegin = 'X'.
  APPEND gs_bdcdata TO gt_bdcdata.
ENDFORM.


FORM frm_bdc_field  USING  fnam  fval.
  CLEAR gs_bdcdata.
  gs_bdcdata-fnam = fnam.
  gs_bdcdata-fval = fval.
  APPEND gs_bdcdata TO gt_bdcdata.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_IMPORT_BDC2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_data_import_bdc2 .

*  *   *设置方式
  l_option-dismode = 'N'.
*    l_option-dismode = 'E'.
  l_option-updmode = 'S'.
  l_option-defsize = 'X'.
  l_option-nobinpt = 'X'.
  l_option-racommit = 'X'." ne.
  CLEAR:gt_bdcdata,gt_bdcdata[].
  PERFORM frm_bdc_dynpro     USING 'SAPMM06I' '0100'.
  PERFORM frm_bdc_field      USING 'BDC_CURSOR' 'EINE-EKORG' .
  PERFORM frm_bdc_field      USING 'BDC_OKCODE' '/00' .
  PERFORM frm_bdc_field      USING 'EINA-LIFNR' ls_alv-lifnr. "  供应商编号
  PERFORM frm_bdc_field      USING 'EINA-MATNR' ls_alv-matnr. "物料
  PERFORM frm_bdc_field      USING 'EINE-EKORG' ls_alv-vkorg .  "采购组织
  PERFORM frm_bdc_field      USING 'EINE-WERKS' ls_alv-werks .  " 工厂
  IF ls_alv-p EQ 'X' .
    PERFORM frm_bdc_field      USING 'RM06I-NORMB' 'X' .  "标准采购
  ENDIF .

  IF ls_alv-w EQ 'X' .
    PERFORM frm_bdc_field      USING 'RM06I-LOHNB' 'X' .  "标准采购
  ENDIF .

  IF ls_alv-p IS INITIAL AND ls_alv-w IS  INITIAL .

    MESSAGE '信息记录类别为空' TYPE 'E' .
    EXIT .

  ENDIF .



  "

  "陶经理
  PERFORM frm_bdc_dynpro     USING 'SAPMM06I' '0101'.
  PERFORM frm_bdc_field      USING 'BDC_CURSOR' 'EINA-MAHN1' .
  PERFORM frm_bdc_field      USING 'BDC_OKCODE' '=EINE' .


  "税码
  PERFORM frm_bdc_dynpro     USING 'SAPMM06I' '0102'.
  PERFORM frm_bdc_field      USING 'BDC_CURSOR' 'EINE-MWSKZ' .
  PERFORM frm_bdc_field      USING 'BDC_OKCODE' '=KO' .
  PERFORM frm_bdc_field      USING 'EINE-MWSKZ' ls_alv-mwskz .



  PERFORM frm_bdc_dynpro     USING 'SAPLV14A' '0102' .
  PERFORM frm_bdc_field      USING 'BDC_CURSOR' 'VAKE-DATAB(01)' .
  PERFORM frm_bdc_field      USING 'BDC_OKCODE' '=NEWD' .


*  PERFORM frm_bdc_dynpro     USING 'SAPLV13A' '0201' .
*  PERFORM frm_bdc_field      USING 'BDC_CURSOR' 'RV13A-DATAB' .
*  PERFORM frm_bdc_field      USING 'BDC_OKCODE' '/00' .
*  PERFORM frm_bdc_field      USING 'RV13A-DATAB' ls_alv-lifab . "开始有效日
*  PERFORM frm_bdc_field      USING 'RV13A-DATBI' ls_alv-lifbi  ."结束有效日






  PERFORM frm_bdc_dynpro     USING 'SAPMV13A' '0201'.
  PERFORM frm_bdc_field      USING 'BDC_CURSOR' 'KONP-KSCHL(01)' .
  PERFORM frm_bdc_field      USING 'BDC_OKCODE' '=PSTF' .
  PERFORM frm_bdc_field      USING 'RV13A-DATAB' ls_alv-lifab . "开始有效日
  PERFORM frm_bdc_field      USING 'RV13A-DATBI' ls_alv-lifbi  ."结束有效日
  PERFORM frm_bdc_field      USING 'RV130-SELKZ(01)' 'X' .



  PERFORM frm_bdc_dynpro     USING 'SAPMV13A' '0303'.
  PERFORM frm_bdc_field      USING 'BDC_CURSOR' 'KONM-KBETR(07)' .
  PERFORM frm_bdc_field      USING 'BDC_OKCODE' '/00' .
  PERFORM frm_bdc_field      USING 'RV13A-DATAB' ls_alv-lifab . "开始有效日
  PERFORM frm_bdc_field      USING 'RV13A-DATBI' ls_alv-lifbi  ."结束有效日





  CLEAR lt_alv2[] .
  LOOP AT gt_alv INTO gs_alv    WHERE  matnr = ls_alv-matnr
                                  AND  lifnr = ls_alv-lifnr
                                  AND  vkorg = ls_alv-vkorg
                                  AND  werks  = ls_alv-werks
                                  AND   p     = ls_alv-p
                                  AND   w     = ls_alv-w .

    APPEND gs_alv TO lt_alv2 .
    CLEAR gs_alv .

  ENDLOOP .

  SORT lt_alv2 BY  lifnr matnr vkorg werks kstbm p w.

  DATA lv_lines TYPE i .
  DESCRIBE TABLE lt_alv2  LINES lv_lines .
  DATA: ls_str TYPE string .
  DATA lv_tabix TYPE sy-tabix .
  LOOP AT lt_alv2 INTO ls_alv2 .
    CLEAR lv_tabix .
    lv_tabix =  sy-tabix  .
    ls_str =  ls_alv2-kstbm  .
    IF lv_tabix EQ 1 .
      PERFORM frm_bdc_field      USING 'KONM-KSTBM(01)' ls_str ."结束有效日
    ENDIF .
    IF lv_tabix EQ 2 .
      PERFORM frm_bdc_field      USING 'KONM-KSTBM(02)' ls_str ."结束有效日
    ENDIF .
    IF lv_tabix EQ 3 .
      PERFORM frm_bdc_field      USING 'KONM-KSTBM(03)' ls_str  ."结束有效日
    ENDIF .
    IF lv_tabix EQ 4 .
      PERFORM frm_bdc_field      USING 'KONM-KSTBM(04)' ls_str  ."结束有效日
    ENDIF .
    IF lv_tabix EQ 5 .
      PERFORM frm_bdc_field      USING 'KONM-KSTBM(05)' ls_str  ."结束有效日
    ENDIF .
    IF lv_tabix EQ 6 .
      PERFORM frm_bdc_field      USING 'KONM-KSTBM(06)' ls_str  ."结束有效日
    ENDIF .
    IF lv_tabix EQ 7 .
      PERFORM frm_bdc_field      USING 'KONM-KSTBM(07)' ls_str  ."结束有效日
    ENDIF .

    CLEAR  : ls_alv2 ,ls_str .
  ENDLOOP .


  LOOP AT lt_alv2 INTO ls_alv2 .
    CLEAR lv_tabix .
    lv_tabix =  sy-tabix  .

    ls_str = ls_alv2-kbetr   .
    IF lv_tabix EQ 1 .
      PERFORM frm_bdc_field      USING 'KONM-KBETR(01)' ls_str  ."结束有效日
    ENDIF .
    IF lv_tabix EQ 2 .
      PERFORM frm_bdc_field      USING 'KONM-KBETR(02)' ls_str  ."结束有效日
    ENDIF .
    IF lv_tabix EQ 3 .
      PERFORM frm_bdc_field      USING 'KONM-KBETR(03)' ls_str  ."结束有效日
    ENDIF .
    IF lv_tabix EQ 4 .
      PERFORM frm_bdc_field      USING 'KONM-KBETR(04)' ls_str  ."结束有效日
    ENDIF .
    IF lv_tabix EQ 5 .
      PERFORM frm_bdc_field      USING 'KONM-KBETR(05)' ls_str  ."结束有效日
    ENDIF .
    IF lv_tabix EQ 6 .
      PERFORM frm_bdc_field      USING 'KONM-KBETR(06)' ls_str  ."结束有效日
    ENDIF .
    IF lv_tabix EQ 7 .
      PERFORM frm_bdc_field      USING 'KONM-KBETR(07)' ls_str  ."结束有效日
    ENDIF .


    CLEAR  : ls_alv2 ,ls_str .
  ENDLOOP .
  "价格系数
  PERFORM frm_bdc_field      USING 'RV13A-KPEIN(01)'  ls_alv-peinh  ."价格单位


  IF lv_lines < 8 .
    PERFORM frm_bdc_dynpro     USING 'SAPMV13A' '0303'.
    PERFORM frm_bdc_field      USING 'BDC_CURSOR' 'KONM-KSTBM(01)' .
    PERFORM frm_bdc_field      USING 'BDC_OKCODE' '=SICH' .
    PERFORM frm_bdc_field      USING 'RV13A-DATAB' ls_alv-lifab . "开始有效日
    PERFORM frm_bdc_field      USING 'RV13A-DATBI' ls_alv-lifbi  ."结束有效日

  ENDIF .

  "8~阶梯处理
  IF lv_lines >= 8 .
    PERFORM frm_bdc_dynpro     USING 'SAPMV13A' '0303'.
    PERFORM frm_bdc_field      USING 'BDC_CURSOR' 'KONM-KBETR(01)' .
    PERFORM frm_bdc_field      USING 'BDC_OKCODE' '=NEWP' .
    PERFORM frm_bdc_field      USING 'RV13A-DATAB' ls_alv-lifab . "开始有效日
    PERFORM frm_bdc_field      USING 'RV13A-DATBI' ls_alv-lifbi  ."结束有效日

    PERFORM frm_bdc_dynpro     USING 'SAPMV13A' '0303'.
    PERFORM frm_bdc_field      USING 'BDC_CURSOR' 'KONM-KBETR(07)' .
    PERFORM frm_bdc_field      USING 'BDC_OKCODE' '=SICH' .
    PERFORM frm_bdc_field      USING 'RV13A-DATAB' ls_alv-lifab . "开始有效日
    PERFORM frm_bdc_field      USING 'RV13A-DATBI' ls_alv-lifbi  ."结束有效日



    LOOP AT lt_alv2 INTO ls_alv2 .
      CLEAR lv_tabix .
      lv_tabix =  sy-tabix  .
      ls_str =  ls_alv2-kstbm  .
      IF lv_tabix EQ 8 .
        PERFORM frm_bdc_field      USING 'KONM-KSTBM(02)' ls_str ."结束有效日
      ENDIF .
      IF lv_tabix EQ 9 .
        PERFORM frm_bdc_field      USING 'KONM-KSTBM(03)' ls_str  ."结束有效日
      ENDIF .
      IF lv_tabix EQ 10 .
        PERFORM frm_bdc_field      USING 'KONM-KSTBM(04)' ls_str  ."结束有效日
      ENDIF .
      IF lv_tabix EQ 11 .
        PERFORM frm_bdc_field      USING 'KONM-KSTBM(05)' ls_str  ."结束有效日
      ENDIF .
      IF lv_tabix EQ 12 .
        PERFORM frm_bdc_field      USING 'KONM-KSTBM(06)' ls_str  ."结束有效日
      ENDIF .
      IF lv_tabix EQ 13 .
        PERFORM frm_bdc_field      USING 'KONM-KSTBM(07)' ls_str  ."结束有效日
      ENDIF .

      CLEAR  : ls_alv2 ,ls_str .
    ENDLOOP .


    LOOP AT lt_alv2 INTO ls_alv2 .
      CLEAR lv_tabix .
      lv_tabix =  sy-tabix  .

      ls_str = ls_alv2-kbetr   .
      IF lv_tabix EQ 8 .
        PERFORM frm_bdc_field      USING 'KONM-KBETR(02)' ls_str  ."结束有效日
      ENDIF .
      IF lv_tabix EQ 9 .
        PERFORM frm_bdc_field      USING 'KONM-KBETR(03)' ls_str  ."结束有效日
      ENDIF .
      IF lv_tabix EQ 10 .
        PERFORM frm_bdc_field      USING 'KONM-KBETR(04)' ls_str  ."结束有效日
      ENDIF .
      IF lv_tabix EQ 11 .
        PERFORM frm_bdc_field      USING 'KONM-KBETR(05)' ls_str  ."结束有效日
      ENDIF .
      IF lv_tabix EQ 12 .
        PERFORM frm_bdc_field      USING 'KONM-KBETR(06)' ls_str  ."结束有效日
      ENDIF .
      IF lv_tabix EQ 13 .
        PERFORM frm_bdc_field      USING 'KONM-KBETR(07)' ls_str  ."结束有效日
      ENDIF .


      CLEAR  : ls_alv2 ,ls_str .
    ENDLOOP .


  ENDIF .


  IF gv_c EQ 'X' .
    PERFORM frm_bdc_dynpro     USING 'SAPMV13A' '0121'.
    PERFORM frm_bdc_field      USING 'BDC_CURSOR' 'RV13A-DATAB' .
    PERFORM frm_bdc_field      USING 'BDC_OKCODE' '=BSTA' .
  ENDIF .



  CLEAR : gt_messtab[] .


  CALL TRANSACTION 'ME12' USING gt_bdcdata
                           OPTIONS FROM l_option
                           MESSAGES INTO gt_messtab.




  READ TABLE gt_messtab INTO gs_messtab WITH KEY msgid = '06' msgnr = '335'.
  IF sy-subrc <> 0.
    LOOP AT gt_messtab INTO gwa_messtab.
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          msgid               = gwa_messtab-msgid
          msgnr               = gwa_messtab-msgnr
          msgv1               = gwa_messtab-msgv1
          msgv2               = gwa_messtab-msgv2
          msgv3               = gwa_messtab-msgv3
          msgv4               = gwa_messtab-msgv4
        IMPORTING
          message_text_output = lv_msg.

      IF ls_alv-result IS INITIAL.
        ls_alv-result = lv_msg.
      ELSE.
        CONCATENATE lv_msg '/' ls_alv-result INTO ls_alv-result.
      ENDIF.
      CLEAR: gwa_messtab.
    ENDLOOP.
    ls_alv-light = '@[email protected]'.
  ELSE.
    ls_alv-light = '@[email protected]'.
    ls_alv-result = '处理成功!'.

  ENDIF.

  MODIFY lt_alv FROM ls_alv TRANSPORTING light result .
  CLEAR: ls_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_DATA2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_upload_data2 .

*  * 局部变量的定义
  DATA:lt_excel TYPE TABLE OF alsmex_tabline.        "参照类型有标准的调整为ZALSMEX_TABLINE_LINE。
  DATA:    ls_excel TYPE alsmex_tabline.
  DATA:  kstbm2    LIKE  konm-kstbm ."等级
  DATA:  kbetr2    LIKE  konm-kbetr . "等级价格
  DATA:  kstbm3    LIKE  konm-kstbm ."等级
  DATA:  kbetr3    LIKE  konm-kbetr . "等级价格
  DATA:  kstbm4  LIKE  konm-kstbm ."等级
  DATA:  kbetr4  LIKE  konm-kbetr . "等级价格
  DATA:  kstbm5  LIKE  konm-kstbm ."等级
  DATA:  kbetr5  LIKE  konm-kbetr . "等级价格
  DATA:  kstbm6  LIKE  konm-kstbm ."等级
  DATA:  kbetr6  LIKE  konm-kbetr . "等级价格
  DATA:  kstbm7  LIKE  konm-kstbm ."等级
  DATA:  kbetr7  LIKE  konm-kbetr . "等级价格
  DATA:  kstbm8  LIKE  konm-kstbm ."等级
  DATA:  kbetr8  LIKE  konm-kbetr . "等级价格
  DATA:  kstbm9  LIKE  konm-kstbm ."等级
  DATA:  kbetr9  LIKE  konm-kbetr . "等级价格
  DATA:  kstbm10 LIKE  konm-kstbm ."等级
  DATA:  kbetr10 LIKE  konm-kbetr . "等级价格
  DATA:  kstbm11 LIKE  konm-kstbm ."等级
  DATA:  kbetr11 LIKE  konm-kbetr . "等级价格
  DATA:  kstbm12 LIKE  konm-kstbm ."等级
  DATA:  kbetr12 LIKE  konm-kbetr . "等级价格
  DATA:  kstbm13 LIKE  konm-kstbm ."等级
  DATA:  kbetr13 LIKE  konm-kbetr . "等级价格
  DATA:  kstbm14 LIKE  konm-kstbm ."等级
  DATA:  kbetr14 LIKE  konm-kbetr . "等级价格



***  IF RB1 = 'X'.
  CLEAR gt_alv.
* 选择文件后做后续处理
  CHECK p_file IS NOT INITIAL.
* 把文件的数据变成内表
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = p_file
      i_begin_col             = 1
      i_begin_row             = 2
      i_end_col               = 42
      i_end_row               = 5000
      "SHEET_NAME              = '新增修改扩展'
    TABLES
      intern                  = lt_excel
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.

* 处理内表数据
  CLEAR ls_excel.


  LOOP AT lt_excel INTO ls_excel.




    CASE ls_excel-col.
      WHEN 1.
        gs_alv-lifnr             = ls_excel-value."供应商代码 (4)
      WHEN 3.
        gs_alv-matnr            = ls_excel-value."物料代码(4)
      WHEN 5.
        gs_alv-vkorg             = ls_excel-value."采购组织(4)
      WHEN 6.
        gs_alv-werks             = ls_excel-value."工厂 (4)
      WHEN 7.
        gs_alv-netpr             = ls_excel-value."净价 (4)
      WHEN 8.
        gs_alv-waers             = ls_excel-value."币种(4)WHEN 1.
      WHEN 9.
        gs_alv-peinh             = ls_excel-value."价格系数(4)WHEN 1.
      WHEN 10.
        gs_alv-mwskz             = ls_excel-value."税码(4)WHEN 1.
      WHEN 11.
        gs_alv-lifab             = ls_excel-value."有效开始日期 (4)WHEN 1.
      WHEN 12.
        gs_alv-lifbi             = ls_excel-value."有效结束日期 (4)WHEN 1.
      WHEN 13.
        gs_alv-p                 = ls_excel-value."采购
      WHEN 14.
        gs_alv-w                 = ls_excel-value."委外
      WHEN 15.
        gs_alv-kstbm            = ls_excel-value."阶梯数量
      WHEN 16.
        gs_alv-kbetr             = ls_excel-value."阶梯价
      WHEN 17.
        kstbm2            = ls_excel-value."阶梯数量
      WHEN 18.
        kbetr2             = ls_excel-value."阶梯价
      WHEN 19.
        kstbm3            = ls_excel-value."阶梯数量
      WHEN 20.
        kbetr3             = ls_excel-value."阶梯价
      WHEN 21.
        kstbm4            = ls_excel-value."阶梯数量
      WHEN 22.
        kbetr4             = ls_excel-value."阶梯价
      WHEN 23.
        kstbm5            = ls_excel-value."阶梯数量
      WHEN 24.
        kbetr5             = ls_excel-value."阶梯价
      WHEN 25.
        kstbm6            = ls_excel-value."阶梯数量
      WHEN 26.
        kbetr6             = ls_excel-value."阶梯价
      WHEN 27.
        kstbm7            = ls_excel-value."阶梯数量
      WHEN 28.
        kbetr7             = ls_excel-value."阶梯价
      WHEN 29.
        kstbm8            = ls_excel-value."阶梯数量
      WHEN 30.
        kbetr8             = ls_excel-value."阶梯价
      WHEN 31.
        kstbm9            = ls_excel-value."阶梯数量
      WHEN 32.
        kbetr9             = ls_excel-value."阶梯价
      WHEN 33.
        kstbm10            = ls_excel-value."阶梯数量
      WHEN 34.
        kbetr10             = ls_excel-value."阶梯价
      WHEN 35.
        kstbm11            = ls_excel-value."阶梯数量
      WHEN 36.
        kbetr11             = ls_excel-value."阶梯价
      WHEN 37.
        kstbm12            = ls_excel-value."阶梯数量
      WHEN 38.
        kbetr12             = ls_excel-value."阶梯价
      WHEN 39.
        kstbm13            = ls_excel-value."阶梯数量
      WHEN 40.
        kbetr13             = ls_excel-value."阶梯价
      WHEN 41.
        kstbm14            = ls_excel-value."阶梯数量
      WHEN 42.
        kbetr14             = ls_excel-value."阶梯价




    ENDCASE.
    AT END OF row.
      APPEND gs_alv TO gt_alv.
      IF kstbm2  <> 0 .
        gs_alv-kstbm = kstbm2 .
        gs_alv-kbetr = kbetr2 .
        APPEND gs_alv TO gt_alv.
      ENDIF .
      IF kstbm3  <> 0 .
        gs_alv-kstbm = kstbm3 .
        gs_alv-kbetr = kbetr3 .
        APPEND gs_alv TO gt_alv.
      ENDIF .
      IF kstbm4  <> 0 .
        gs_alv-kstbm = kstbm4 .
        gs_alv-kbetr = kbetr4 .
        APPEND gs_alv TO gt_alv.
      ENDIF .
      IF kstbm5  <> 0 .
        gs_alv-kstbm = kstbm5 .
        gs_alv-kbetr = kbetr5 .
        APPEND gs_alv TO gt_alv.
      ENDIF .
      IF kstbm6  <> 0 .
        gs_alv-kstbm = kstbm6 .
        gs_alv-kbetr = kbetr6 .
        APPEND gs_alv TO gt_alv.
      ENDIF .
      IF kstbm7  <> 0 .
        gs_alv-kstbm = kstbm7 .
        gs_alv-kbetr = kbetr7 .
        APPEND gs_alv TO gt_alv.
      ENDIF .
      IF kstbm8  <> 0 .
        gs_alv-kstbm = kstbm8 .
        gs_alv-kbetr = kbetr8 .
        APPEND gs_alv TO gt_alv.
      ENDIF .
      IF kstbm9  <> 0 .
        gs_alv-kstbm = kstbm9 .
        gs_alv-kbetr = kbetr9 .
        APPEND gs_alv TO gt_alv.
      ENDIF .
      IF kstbm10  <> 0 .
        gs_alv-kstbm = kstbm10 .
        gs_alv-kbetr = kbetr10 .
        APPEND gs_alv TO gt_alv.
      ENDIF .
      IF kstbm11  <> 0 .
        gs_alv-kstbm = kstbm11 .
        gs_alv-kbetr = kbetr11 .
        APPEND gs_alv TO gt_alv.
      ENDIF .
      IF kstbm12  <> 0 .
        gs_alv-kstbm = kstbm12 .
        gs_alv-kbetr = kbetr12 .
        APPEND gs_alv TO gt_alv.
      ENDIF .
      IF kstbm13  <> 0 .
        gs_alv-kstbm = kstbm13 .
        gs_alv-kbetr = kbetr13 .
        APPEND gs_alv TO gt_alv.
      ENDIF .
      IF kstbm14  <> 0 .
        gs_alv-kstbm = kstbm14 .
        gs_alv-kbetr = kbetr14 .
        APPEND gs_alv TO gt_alv.
      ENDIF .

      CLEAR gs_alv.
      CLEAR : kstbm2 , kbetr2 ,kstbm3 , kbetr3  ,kstbm4 , kbetr4 ,kstbm5 , kbetr5 ,kstbm6 , kbetr6 ,
              kstbm7 , kbetr7 ,kstbm8 , kbetr8  ,kstbm9 , kbetr9 ,kstbm10 , kbetr10 ,kstbm11 , kbetr11  ,
              kstbm12 , kbetr12 ,kstbm13 , kbetr13  ,kstbm14 , kbetr14 .

    ENDAT.

  ENDLOOP .

ENDFORM.