*&---------------------------------------------------------------------*
*& Report  ZSDR008
*&
*&---------------------------------------------------------------------*

REPORT zsdr008.

TABLES: tvbvk ,cskt ,ztsd007.
*自建表ztsd007:销售办公室-销售组-成本中心

TYPES:ty_xs LIKE  v_tvbur.
DATA:gt_xs LIKE TABLE OF v_tvbur.
DATA:wa_xs TYPE v_tvbur.
DATA:edit(1) VALUE ''."ALV是否处于可编辑状态

FIELD-SYMBOLS: <f1>, <f2>, <f3>.

TYPES:BEGIN OF ty_zz,
        vkbur     TYPE tvkbt-vkbur,
        vkburtext TYPE tvkbt-bezei,
        vkgrp     TYPE tvkgr-vkgrp,
        vkgrptext TYPE tvgrt-bezei,
        kostl     TYPE csks-kostl,
        ltext     TYPE cskt-ltext.

TYPES:END OF ty_zz.

DATA :gt_zz TYPE STANDARD  TABLE OF ztsd007  .
DATA:wa_zz TYPE ztsd007.

DATA: excel    TYPE ole2_object,
      workbook TYPE ole2_object,
      sheet    TYPE ole2_object,
      cell     TYPE ole2_object,
      row      TYPE ole2_object.

FORM get_data.
*  CALL FUNCTION 'VIEW_GET_DATA'
*    EXPORTING
*      view_name = 'V_TVBUR'
*    TABLES
*      data      = gt_xs.
  SELECT *
    FROM ztsd007
    INTO CORRESPONDING FIELDS OF TABLE gt_zz.
  LOOP AT gt_xs INTO wa_xs.
    wa_zz-vkbur = wa_xs-vkbur.
    wa_zz-vkburtext = wa_xs-bezei.
    APPEND wa_zz TO gt_zz.
  ENDLOOP.
*  SELECT *
*    FROM cskt
*    INTO CORRESPONDING FIELDS OF TABLE gt_zz.
ENDFORM.

DATA: gs_fcat TYPE lvc_s_fcat,
      gt_fcat TYPE lvc_t_fcat,
      gs_layo TYPE lvc_s_layo,
      gs_grid TYPE lvc_s_glay.
DATA: gt_event      TYPE slis_t_event WITH HEADER LINE,
      gt_event_exit TYPE slis_t_event_exit WITH HEADER LINE.

DATA:  ref_grid TYPE REF TO cl_gui_alv_grid .

"parameters: p_ds type c as checkbox.

SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE text-002.
PARAMETERS: r1 RADIOBUTTON GROUP gr1  DEFAULT 'X' USER-COMMAND radio.
PARAMETERS: r2 RADIOBUTTON GROUP gr1.
SELECTION-SCREEN END OF BLOCK blk2.

DATA: filepath LIKE rlgrap-filename .
DATA: file LIKE rlgrap-filename.

START-OF-SELECTION.

IF r1 EQ 'X'.
    PERFORM get_data.
    PERFORM show_data_to_alv.
  ELSEIF r2 EQ 'X'.

PERFORM frm_path_selected CHANGING filepath.
    CONCATENATE filepath '\销售范围维护模板.XLS' INTO file.
    PERFORM frm_download_template USING file.
  ENDIF.

*START-OF-SELECTION.
*  PERFORM get_data.
*  PERFORM show_data_to_alv.

CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS handle_modify
                  FOR EVENT data_changed_finished OF cl_gui_alv_grid
      IMPORTING e_modified et_good_cells.

METHODS data_changed
                  FOR EVENT data_changed OF cl_gui_alv_grid
      IMPORTING er_data_changed.
ENDCLASS.

CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_modify.
*    PERFORM refresh.

DATA stbl TYPE lvc_s_stbl.

stbl-row = 'X'." 基于行的稳定刷新
    stbl-col = 'X'." 基于列稳定刷新
    CALL METHOD ref_grid->refresh_table_display
      EXPORTING
        is_stable = stbl.

ENDMETHOD.
  METHOD data_changed.

DATA: ls_mod_cells TYPE lvc_s_modi,
          tvalue       TYPE string.
    DATA: ls_stable TYPE lvc_s_stbl.
    DATA: l_message TYPE string.
*
    DATA :wa_tvbkt  TYPE tvkbt,
          tab_tvbkt TYPE TABLE OF tvkbt.
    DATA:wa_tvgrt  TYPE tvgrt,
         tab_tvgrt TYPE TABLE OF tvgrt.
    DATA:wa_cskt  TYPE cskt,
         tab_cskt TYPE TABLE OF cskt.
    DATA:row_no TYPE i.
    CHECK er_data_changed->mt_inserted_rows[] IS INITIAL.

LOOP AT  er_data_changed->mt_good_cells INTO ls_mod_cells.

CLEAR tvalue.
      CALL METHOD er_data_changed->get_cell_value
        EXPORTING
          i_row_id    = ls_mod_cells-row_id
          i_fieldname = ls_mod_cells-fieldname
        IMPORTING
          e_value     = tvalue.

SELECT *
          FROM tvkbt
      INTO CORRESPONDING FIELDS OF TABLE tab_tvbkt.
      SELECT *
            FROM tvgrt
      INTO CORRESPONDING FIELDS OF TABLE tab_tvgrt.

SELECT *
            FROM cskt
      INTO CORRESPONDING FIELDS OF TABLE tab_cskt.

IF ls_mod_cells-fieldname EQ 'VKBUR'.

LOOP AT tab_tvbkt INTO wa_tvbkt .
          IF wa_tvbkt-vkbur EQ tvalue.
            CALL METHOD er_data_changed->modify_cell
              EXPORTING
                i_row_id    = ls_mod_cells-row_id
                i_fieldname = 'VKBURTEXT'
                i_value     = wa_tvbkt-bezei.
            EXIT.
          ENDIF.
          CLEAR wa_tvbkt.
        ENDLOOP.
      ENDIF.

IF ls_mod_cells-fieldname EQ 'VKGRP'.

DATA:blank_zz TYPE ztsd007.

LOOP AT tab_tvgrt INTO wa_tvgrt .
          IF wa_tvgrt-vkgrp EQ tvalue.
            CLEAR wa_zz.
            LOOP AT gt_zz INTO wa_zz.
              IF wa_zz-vkgrp EQ tvalue  AND tvalue NE ''.
                MESSAGE i001(00) WITH '已有相同的销售组!'.

"MODIFY  gt_zz INDEX ls_mod_cells-row_id FROM blank_zz .
                CLEAR wa_tvgrt.
                "如果有重复的销售组,那么将输入的销售组清空
                CALL METHOD er_data_changed->modify_cell
                  EXPORTING
                    i_row_id    = ls_mod_cells-row_id
                    i_fieldname = 'VKGRP'
                    i_value     = ''.
              ENDIF.

CONTINUE.
            ENDLOOP.

CALL METHOD er_data_changed->modify_cell
              EXPORTING
                i_row_id    = ls_mod_cells-row_id
                i_fieldname = 'VKGRPTEXT'
                i_value     = wa_tvgrt-bezei.
          ENDIF.
          CLEAR wa_tvgrt.
        ENDLOOP.

ENDIF.

IF ls_mod_cells-fieldname EQ 'KOSTL'.

LOOP AT tab_cskt INTO wa_cskt .
          IF wa_cskt-kostl EQ tvalue.
            CALL METHOD er_data_changed->modify_cell
              EXPORTING
                i_row_id    = ls_mod_cells-row_id
                i_fieldname = 'LTEXT'
                i_value     = wa_cskt-ltext.
            EXIT.
          ENDIF.
          CLEAR wa_cskt.
        ENDLOOP.
      
ENDIF.

ENDLOOP.

ENDMETHOD.                    "HANDLE_MODIFY

ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION

DATA gt_event_receiver TYPE REF TO lcl_event_receiver .

FORM show_data_to_alv.

PERFORM set_fcat USING edit.
  
PERFORM set_layout.

PERFORM show_alv  TABLES gt_fcat  gt_zz[]
                     
USING  gs_layo.

ENDFORM.

FORM frm_edit_alv." TABLES GT.

*DATA:   ls_row      TYPE lvc_s_cell,

*       lt_rows     TYPE lvc_t_cell.

*  "CLEAR GT_HEADER.

*  "CLEAR GT_ITEMS.

*  CALL METHOD ref_grid->GET_SELECTED_CELLS

*    IMPORTING

*      et_index_cells = lt_rows

ENDFORM.

FORM show_changed_alv.

CLEAR gt_fcat[].

*  IF edit EQ '' .

*    edit = 'X'.

*  ELSE.

*    edit = ''.

*  ENDIF.

PERFORM set_fcat USING edit.
  
PERFORM set_layout.

PERFORM show_alv  TABLES gt_fcat  gt_zz[]
                 
USING  gs_layo.
  
PERFORM frm_edit_alv.

ENDFORM.

FORM set_fcat USING edit.
  
PERFORM csalv_set_fcat USING :

" 'Field' 'Text' 'Edit' 'Zero' 'Type' 'Qfieldname' 'Key' 'Hostspot' 'Emphasize' 'Checkbox'
             
'VKBUR'  '销售部门' edit ''  ''  ''  ''   ''  ''  '' '' '' '' 'X' 'ZTSD007' 'VKBUR',
             
"'NAME1'  '客户' EDIT ''  ''  ''  ''   ''  ''  '' '' '' '',
            
'VKBURTEXT' '销售部门描述' ''  ''  ''  ''  ''  ''  ''  '' ''  '' '' '' '' '',
            
'VKGRP' '销售组'       edit  ''  ''  ''  ''  ''  ''  '' ''  '' '' 'X' 'ZTSD007' 'VKGRP',
            
'VKGRPTEXT' '销售组描述'   ''  ''  ''  ''  ''  ''  ''  '' ''  '' '' '' '' '',
            
'KOSTL' '成本中心'    edit ''  ''  ''  ''  ''  ''  '' ''   '' '' 'X' 'CSKS' 'KOSTL' ,
            
'LTEXT'  '成本中心描述'  ''  ''  ''  ''  ''  ''  ''  '' ''  '' '' '' '' '' .

ENDFORM.                    " SET_FCAT

FORM set_layout .
  gs_layo
-zebra             = 'X'.

*  gs_layout-stylefname     = 'FIELD_STYLE'.
  gs_layo
-cwidth_opt        =  'X'.

ENDFORM.                    " SET_LAYOUT

*&---------------------------------------------------------------------*

FORM csalv_set_fcat USING
      p_name
      p_text
      p_edit
      p_zero
      p_type
      p_qfieldname
      p_key
      p_hotspot
      p_emphasize
      p_checkbox
      p_do_sum
      p_decimals_out
      p_no_out
      p_f4availabl
      p_ref_table
      p_ref_field

.
  gs_fcat
-fieldname   =  p_name.

*  gs_fcat-reptext_l   =

*  gs_fcat-selddictxt   =
  gs_fcat
-reptext     =  p_text.
  gs_fcat
-edit        =  p_edit.
  gs_fcat
-no_zero     =  p_zero.
  gs_fcat
-datatype    =  p_type.
  gs_fcat
-qfieldname  =  p_qfieldname.
  gs_fcat
-key         =  p_key.
  gs_fcat
-hotspot     =  p_hotspot.
  gs_fcat
-emphasize   =  p_emphasize.
  gs_fcat
-checkbox    =   p_checkbox.
  gs_fcat
-do_sum      =  p_do_sum.
  gs_fcat
-decimals_o  =  p_decimals_out.
  gs_fcat
-no_out      =  p_no_out.
  gs_fcat
-f4availabl  =  p_f4availabl.
  gs_fcat
-ref_table   =  p_ref_table.
  gs_fcat
-ref_field   =  p_ref_field.

APPEND gs_fcat TO  gt_fcat.

ENDFORM.                    "csalv_set_fcat

FORM show_alv TABLES  pt_fcat
                      pt_tab

USING   ps_layout.

gs_grid

-edt_cll_cb = 'X'."当屏幕失去焦点时,自动刷新

gt_event

-name = 'CALLER_EXIT'.   "slis_ev_caller_exit_at_start事件
  gt_event
-form = 'FM_BUTTON'.
  
APPEND gt_event .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    
EXPORTING
      i_callback_program       
= sy-repid
      i_callback_user_command  
= 'USER_COMMAND'
      i_grid_settings          
= gs_grid
      i_callback_pf_status_set 
= 'SET_PF_STATUS'
      is_layout_lvc            
= ps_layout
      it_fieldcat_lvc          
= pt_fcat[]
      it_events                
= gt_event[]

*     it_event_exit            = gt_event_exit[]
    
TABLES
      t_outtab                 
= pt_tab
    
EXCEPTIONS
      program_error            
= 1
      
OTHERS                   = 2.

ENDFORM.                    "csalv_set_fcat

FORM user_command USING r_ucomm LIKE sy-ucomm
      rs_selfield 
TYPE slis_selfield.

CASE r_ucomm.
    
WHEN '&DATA_SAVE'.
    
WHEN '&CHANGE'.
      
IF edit EQ '' .
        
edit = 'X'.
      
ELSE.
        
edit = ''.
      
ENDIF.
      
PERFORM show_changed_alv.
    
WHEN '&BACK'.
      
LEAVE PROGRAM.
    
WHEN '&ADD_ROW'.

*      CLEAR wa_zz.

*      DATA:end TYPE i.

*      DESCRIBE TABLE gt_zz LINES end.

*

*          READ TABLE gt_zz  INDEX  end  INTO wa_zz.

*          IF wa_zz-vkbur IS INITIAL AND gt_zz is NOT INITIAL  .

*            MESSAGE i001(00) WITH '不能继续添加行!'.

*            exit.

*            ENDIF.

"edit = ''.
      
CLEAR wa_zz.
      
IF edit EQ 'X'.
        
APPEND wa_zz TO gt_zz.
        
PERFORM show_changed_alv.
      
ENDIF.

WHEN '&SAVE_DATA'.
      
CLEAR wa_zz.
      
DELETE FROM ztsd007 .
      
IF gt_zz IS NOT INITIAL.
        
LOOP AT gt_zz INTO wa_zz.
          
INSERT INTO  ztsd007 VALUES wa_zz.
        
ENDLOOP.
      
ENDIF.

IF sy-subrc EQ 0.
        
MESSAGE i001(00) WITH '保存成功!'.

ELSE.
        
MESSAGE i001(00) WITH '保存失败!'.
      
ENDIF.

WHEN '&DELE_ROW'.
      
DATA:ls_row  TYPE lvc_s_row,
           lt_rows 
TYPE lvc_t_row.

DATA:del_rows TYPE  STANDARD  TABLE OF ztsd007.

CALL METHOD ref_grid->get_selected_rows
        
IMPORTING
          et_index_rows 
= lt_rows

*         et_row_no     =
        
.
      
CLEAR wa_zz.

LOOP AT lt_rows INTO ls_row.

READ TABLE gt_zz INTO wa_zz INDEX ls_row-index.
        
"delete  gt_zz INDEX ls_row-index.
        
"DELETE ztsd007 FROM wa_zz.
        
APPEND wa_zz  TO del_rows.

ENDLOOP.
      
LOOP AT del_rows INTO wa_zz.
        
DELETE TABLE gt_zz FROM wa_zz.
      
ENDLOOP.

CLEAR del_rows.
      
CLEAR ls_row.
      
CLEAR lt_rows.
      
PERFORM show_changed_alv.

WHEN '&IN'.
      
DATA: filepath LIKE rlgrap-filename.
      
PERFORM set_file_path CHANGING filepath.
      
PERFORM   frm_upload_from_excel USING filepath.
      
PERFORM show_changed_alv.

ENDCASE.

ENDFORM.

FORM set_pf_status USING rt_extab TYPE slis_t_extab..
  
SET PF-STATUS 'STANDARD'.

ENDFORM.                    "SET_PF_STATUS

FORM fm_button USING e_grid TYPE slis_data_caller_exit.
  
DATA:   lt_f4 TYPE lvc_t_f4,
          ls_f4 
TYPE lvc_s_f4.
  
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

*   EXPORTING

*     IR_SALV_FULLSCREEN_ADAPTER       =
    
IMPORTING

*     ET_EXCLUDING                     =

*     E_REPID                          =

*     E_CALLBACK_PROGRAM               =

*     E_CALLBACK_ROUTINE               =
      e_grid 
= ref_grid

*     ET_FIELDCAT_LVC                  =

*     ER_TRACE                         =

*     E_FLG_NO_HTML                    =

*     ES_LAYOUT_KKBLO                  =

*     ES_SEL_HIDE                      =

*     ET_EVENT_EXIT                    =

*     ER_FORM_TOL                      =

*     ER_FORM_EOL                      =
    
.

*   CALL METHOD ref_grid->check_changed_data.

* 设置enter事件
  
CALL METHOD ref_grid->register_edit_event
    
EXPORTING
      i_event_id 
= cl_gui_alv_grid=>mc_evt_enter
    
EXCEPTIONS
      error      
= 1
      
OTHERS     = 2.

CREATE OBJECT gt_event_receiver.
  
SET HANDLER   gt_event_receiver->handle_modify FOR ref_grid.
  
SET HANDLER   gt_event_receiver->data_changed FOR ref_grid.

ENDFORM.                    "FM_BUTTON

FORM frm_upload_from_excel  USING  p_pa_fname LIKE rlgrap-filename.

*  TYPES: BEGIN OF ty_tmp,

*           lifnr      LIKE ztmm002-lifnr,

*           lifnr_name LIKE lfa1-name1,

*           werks      LIKE ztmm002-werks,

*           werks_name LIKE t001w-name1,

*           menge      LIKE ztmm002-menge,

*           meins      LIKE ztmm002-meins,

*         END OF ty_tmp.
  
DATA:vkbur_tmp LIKE tvkbt-vkbur,
       vkgrp_tmp 
LIKE tvkgr-vkgrp.

DATA: git_xls TYPE TABLE OF ty_zz WITH HEADER LINE,
        gwa_xls 
TYPE          ty_zz.

**数据从EXCEL导入程序
  
DATA: l_exception TYPE REF TO cx_root.
  
DATA: lit_intern TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE,
        l_index    
TYPE i,
        l_no       
TYPE i.
  
DATA: ls_style TYPE lvc_s_styl.
  
FIELD-SYMBOLS: <f>.

CHECK p_pa_fname IS NOT INITIAL.
  
REFRESH: git_xls.

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    
EXPORTING
      filename                
= p_pa_fname
      i_begin_col             
= 1
      i_begin_row             
= 2
      i_end_col               
= 6
      i_end_row               
= 30000
    
TABLES
      intern                  
= lit_intern
    
EXCEPTIONS
      inconsistent_parameters 
= 1
      upload_ole              
= 2
      
OTHERS                  = 3.
  
IF sy-subrc = 0.
    l_no 
= 0.
    
LOOP AT lit_intern.
      
MOVE lit_intern-col TO l_index.
      
ASSIGN COMPONENT l_index OF STRUCTURE gwa_xls TO <f>.

TRY.
          
MOVE lit_intern-value TO <f>.
        
CATCH cx_root INTO l_exception.

*          gwa_xls-err_info = l_exception->get_text( ).

*          gwa_xls-status = icon_led_red.
      
ENDTRY.

AT END OF row.
        
ADD 1 TO l_no.
        
"gwa_xls-no = l_no.
        
APPEND gwa_xls TO git_xls.
        
CLEAR gwa_xls.
      
ENDAT.
    
ENDLOOP.
  
ENDIF.

LOOP AT git_xls INTO gwa_xls.

MOVE-CORRESPONDING gwa_xls TO wa_zz.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      
EXPORTING
        
input  = wa_zz-vkbur
      
IMPORTING
        
output = wa_zz-vkbur.

SELECT SINGLE bezei INTO wa_zz-vkburtext
    
FROM tvkbt WHERE   vkbur EQ wa_zz-vkbur.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      
EXPORTING
        
input  = wa_zz-vkgrp
      
IMPORTING
        
output = wa_zz-vkgrp.

SELECT SINGLE bezei INTO wa_zz-vkgrptext
    
FROM tvgrt WHERE  vkgrp EQ wa_zz-vkgrp.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      
EXPORTING
        
input  = wa_zz-kostl
      
IMPORTING
        
output = wa_zz-kostl.

SELECT SINGLE ltext INTO wa_zz-ltext
    
FROM cskt WHERE  kostl EQ wa_zz-kostl.

DATA: gt_v_tvbvk LIKE TABLE OF v_tvbvk_assign,
          wa_v_tvbvk 
LIKE v_tvbvk_assign.
    
CALL FUNCTION 'VIEW_GET_DATA'
      
EXPORTING
        view_name 
= 'V_TVBVK_ASSIGN'
      
TABLES
        
data      = gt_v_tvbvk.

READ TABLE gt_v_tvbvk INTO wa_v_tvbvk WITH KEY vkbur = wa_zz-vkbur
                                                   vkgrp 
= wa_zz-vkgrp.

*    SELECT SINGLE vkbur  INTO vkbur_tmp FROM v_tvbvk_assign

*      WHERE vkbur EQ wa_zz-vkbur.

*    SELECT SINGLE vkgrp  INTO vkgrp_tmp FROM v_tvbvk_assign

*    WHERE vkgrp EQ wa_zz-vkgrp.
    
IF ( wa_v_tvbvk-vkbur IS NOT INITIAL ) AND ( wa_v_tvbvk-vkgrp IS NOT INITIAL ) .
      
APPEND wa_zz TO gt_zz.
    
ELSE.
      
MESSAGE e001(00) WITH '销售办公室:' && wa_zz-vkbur && '与销售组:' &&
                                wa_zz
-vkgrp && '的组合不存在!'.
      
EXIT.

ENDIF.

CLEAR wa_zz.

ENDLOOP.

ENDFORM.

FORM set_file_path CHANGING filepath LIKE rlgrap-filename.
  
FIELD-SYMBOLS: <f> TYPE file_table .
  
DATA: gd_path TYPE string.
  
DATA: it_tab   TYPE filetable,
        gd_subrc 
TYPE i.
  
DATA: ld_filename TYPE string,
        ld_path     
TYPE string,
        ld_fullpath 
TYPE string,
        ld_result   
TYPE i,
        gd_file     
TYPE c.

DATA:"filepath LIKE rlgrap-filename,
  openfile 
LIKE rlgrap-filename.

*  CALL METHOD cl_gui_frontend_services=>directory_browse

*    EXPORTING

*      window_title    = '文件路径选择'

*      initial_folder  = 'C:'

*    CHANGING

*      selected_folder = gd_path.

*  CALL METHOD cl_gui_cfw=>flush.

*  CONCATENATE gd_path '' INTO filepath.

CALL METHOD cl_gui_frontend_services=>file_open_dialog
    
EXPORTING
      window_title     
= 'Select File'
      default_filename 
= '销售范围维护模板.XLS'
      multiselection   
= 'X'
    
CHANGING
      file_table       
= it_tab
      rc               
= gd_subrc.

CALL METHOD cl_gui_cfw=>flush.
  
READ TABLE it_tab ASSIGNING <f> INDEX 1.
  
IF sy-subrc EQ 0.
    filepath 
= <f>-filename.
  
ENDIF.

*CALL METHOD cl_gui_frontend_services=>file_save_dialog

*    EXPORTING

*      default_extension = 'XLS'

*      default_file_name = '产品出库单'

*      initial_directory = 'c:/temp/'

*    CHANGING

*      filename          = ld_filename

*      path              = filepath

*      fullpath          = ld_fullpath

*      user_action       = ld_result.

ENDFORM.

FORM frm_path_selected CHANGING filepath LIKE rlgrap-filename.
  
DATA: gd_path TYPE string.
  
DATA: it_tab   TYPE filetable,
        gd_subrc 
TYPE i.
  
DATA: ld_filename TYPE string,
        ld_path     
TYPE string,
        ld_fullpath 
TYPE string,
        ld_result   
TYPE i,
        gd_file     
TYPE c.

DATA:"filepath LIKE rlgrap-filename,
  openfile 
LIKE rlgrap-filename.

CALL METHOD cl_gui_frontend_services=>directory_browse
    
EXPORTING
      window_title    
= '文件路径选择'
      initial_folder  
= 'C:'
    
CHANGING
      selected_folder 
= gd_path.
  
CALL METHOD cl_gui_cfw=>flush.
  
CONCATENATE gd_path '' INTO filepath.

ENDFORM.

FORM frm_download_template USING c_path .

DATA: lv_objdata     LIKE wwwdatatab,
        lv_obj_name    
LIKE wwwdatatab-objid,
        lv_destination 
LIKE rlgrap-filename,
        lv_objid       
LIKE sy-repid,
        lv_subrc       
LIKE sy-subrc.
  
DATA:l_ret TYPE abap_bool,        lv_answer
  
.
  
DATA:lv_file TYPE string.

MOVE c_path TO lv_file.
  
CALL METHOD cl_gui_frontend_services=>file_exist
    
EXPORTING
      file                 
= lv_file
    RECEIVING
      result

= l_ret
    
EXCEPTIONS
      cntl_error           
= 1
      error_no_gui         
= 2
      wrong_parameter      
= 3
      not_supported_by_gui 
= 4
      
OTHERS               = 5.

IF sy-subrc <> 0.
    
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    
EXIT.
  
ENDIF.
  
IF l_ret EQ 'X'.

* 模版已存在,是否覆盖

CALL FUNCTION 'POPUP_TO_CONFIRM'
      
EXPORTING
        text_question  
= '模版已存在,是否覆盖?'
        text_button_1  
= '是'(001)
        text_button_2  
= '否'(002)
      
IMPORTING
        answer         
= lv_answer
      
EXCEPTIONS
        text_not_found 
= 1
        
OTHERS         = 2.
    
IF sy-subrc <> 0.

ENDIF.

IF lv_answer EQ 'A'. "取消
      
EXIT.
    
ELSEIF lv_answer NE '1'. "否
      
"p_filepath = c_path.
    
ENDIF.
  
ELSE.
    lv_answer

= '1'.
  
ENDIF.

CREATE OBJECT excel 'EXCEL.APPLICATION'.
  
GET PROPERTY OF excel 'Workbooks' = workbook .
  
CALL METHOD OF workbook
    
'Close'.

IF lv_answer EQ '1'.
    
MOVE 'ZSD_XLS_002' TO lv_obj_name."引用传入到服务器中xls模板
    
SELECT relid objid
    
FROM wwwdata
    
INTO  CORRESPONDING FIELDS OF lv_objdata
    
UP TO 1 ROWS
    
WHERE srtf2 = 0 AND relid = 'MI'
    
AND objid = lv_obj_name.
    
ENDSELECT.

CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
      
EXPORTING
        
key         = lv_objdata
        destination 
= c_path
      
IMPORTING
        rc          
= lv_subrc.

*    IF lv_subrc = 0.

*      p_filepath = c_path.

*    ENDIF.
  
ENDIF.

*  CALL METHOD OF

*      g_workbook

*      'open'

*

*    EXPORTING

*      #1         = c_path.

*

*  CALL METHOD OF

*      g_excel

*      'worksheets' = g_sheet

*    EXPORTING

*      #1           = 1.

*  CALL METHOD OF

*      g_sheet

*      'activate'.

"SET PROPERTY OF g_excel 'visible' = 0.

FREE OBJECT sheet.
  
"FREE OBJECT g_applica.
  
FREE OBJECT workbook.
  
FREE OBJECT excel.

ENDFORM.                    "frm_download_template

最新文章

  1. Spring的前期配置
  2. 使用WMI和性能计数器监控远程服务器权限设置
  3. 【bzoj1211】 HNOI2004—树的计数
  4. Winform_ComBox三种赋值方式
  5. iOS LaunchScreen启动图设置
  6. org.eclipse.wst.common.project.facet.core.xml文件模板,解决eclipse编译报错。
  7. Corn Fields(POJ 3254状压dp)
  8. Codeforces Round #172 (Div. 2) B. Nearest Fraction 二分
  9. FatMouse&#39;s Speed 基础DP
  10. cmake的安装和卸载
  11. Tween 若干年后我尽然还要学数学 曲线到底是什么鬼啊
  12. 侧滑面板(对viewGroup的自定义)
  13. 关于PL/SQL Developer与Oracle客户端
  14. [LINQ] group by 与连接查询
  15. markdownpad目录格式配置
  16. .NET 同步与异步 之 EventWaitHandle(Event通知) (十三)
  17. 【python深入】获取对象类型及属性
  18. Python序列结构
  19. mysql系列七、mysql索引优化、搜索引擎选择
  20. tp5 auth权限设置

热门文章

  1. va_list深究
  2. Java Programming Test Question 2
  3. 推荐近期15个 Node.js 开发工具
  4. linux系统命令:yum和apt-get
  5. oracle 中的dual表简介与用法
  6. Teradata SQL programming
  7. MySQL的Order By Rand()的效率问题
  8. Windows 操作小技巧 之一(持续更新)
  9. 统计学 nested_design 嵌套设计
  10. 【活动】不用买书,不用花钱,可以免费看HTML5入门连载了