ABAP-批导价格程序

********************************************************************
* 事务代码:                                                        *
* 程序名称:ZSDR_035_01_4                                           *
* 程序目的:标准价格主数据批导                                   *
* 使用变式:                                                        *
* 设 计 人:DONGDONG                                                 *
*(修改日志)-------------------------------------------------------- *
* 日志号   修改人     修改时间     修改说明              传输号码     *
*  ----    ------    ------    -----------           -----------
*  001     DONGDONG    20210723      新建                DEVK907609
********************************************************************
REPORT zsdr_035_01_6.
************************************************************************
* TABLES
************************************************************************
TABLES: vbap.
TABLES: sscrfields.
TYPE-POOLS: slis"声明类型池,使slis_t_specialcol_alv所在的包被包含进来
************************************************************************
* 类型定义
************************************************************************
TYPES:BEGIN OF ty_alv,
        vkorg TYPE a511-vkorg,
        kunnr TYPE a511-kunnr,
        name1 TYPE kna1-name1,
        kondm TYPE a511-kondm,
        pltyp TYPE a511-pltyp,
        ptext TYPE t189t-ptext,
        "mvgr5 TYPE a511-mvgr5,
        kbetr TYPE konp-kbetr,
        datab TYPE a511-datab,
        datbi TYPE a511-datbi,
        konwa TYPE konp-konwa,
        kpein TYPE konp-kpein,
        kmein TYPE konp-kmein,
        kschl TYPE a511-kschl,
        knumh TYPE a511-knumh,
        kosrt TYPE konh-kosrt,
        jsl   TYPE n,
        flag  TYPE c,
        light TYPE icon-id"状态灯     "
        msg   TYPE string"返回信息
        cbox  TYPE c,
      END OF ty_alv.

DATA: gt_alv TYPE TABLE OF ty_alv,
      gs_alv TYPE ty_alv.

TYPESBEGIN OF ty_upload,
         vkorg TYPE string,
         kunnr TYPE string,
         kondm TYPE string,
         pltyp TYPE string,
         "mvgr5 TYPE string,
         kbetr TYPE string,
         datab TYPE string,
         datbi TYPE string,
         kosrt TYPE string,
       END OF ty_upload.

DATA: gt_upload TYPE TABLE OF ty_upload,
      gs_upload TYPE ty_upload.
************************************************************************
* 内表&工作区声明
************************************************************************
DATA: gt_fcat   TYPE lvc_t_fcat,
      gs_fcat   TYPE lvc_s_fcat,
      gs_layout TYPE lvc_s_layo.
DATA: gs_grid_settings TYPE lvc_s_glay.
DATA: gt_raw_data TYPE truxs_t_text_data.

*&---弹框报错消息
DATA gt_errormsg TYPE tsmesg.
DATA gs_errormsg LIKE LINE OF gt_errormsg.

*&---声明按钮返回值
DATA: ok_code   LIKE sy-ucomm,
      save_code LIKE sy-ucomm.
DATA: gv_functionkey TYPE char01.
************************************************************************
* 全局变量
************************************************************************
DATA: gv_posnr      TYPE posnr_va,
      gv_sched_line TYPE etenr.

DATA: lv_message TYPE string.
************************************************************************
* 宏声明
************************************************************************
DEFINE m_fill_fieldcat.
  CLEAR gs_fcat.
  gs_fcat-fieldname  = &1.
  gs_fcat-coltext    = &2.
  gs_fcat-no_zero    = &3.
  gs_fcat-outputlen  = &4.
  gs_fcat-key        = &5.
  gs_fcat-fix_column = &6.
  gs_fcat-edit  = &7.
  APPEND gs_fcat TO gt_fcat.
END-OF-DEFINITION"
************************************************************************
* 选择屏幕参数
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_file LIKE rlgrap-filename MODIF ID m1.
SELECTION-SCREEN END OF BLOCK bk1.

SELECTION-SCREEN FUNCTION KEY 1.
*----------------------------------------------------------------------*
*       At Selection Screen Value Request
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM frm_f4_file CHANGING p_file.
************************************************************************
*& 初始化处理
************************************************************************
INITIALIZATION.
  PERFORM frm_initialization.
*&---------------------------------------------------------------------*
*& at selection-screen output/选择屏幕前                                *
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
************************************************************************
*& 选择屏幕控制
************************************************************************
AT SELECTION-SCREEN.
  PERFORM frm_set_sscrfields.
************************************************************************
* EVENT START OF SELECTION
************************************************************************
START-OF-SELECTION.
  IF gv_functionkey IS INITIAL.
**--上载数据
    PERFORM frm_upload_data.
**--检查数据
    PERFORM check_data.
  ELSE.
**--下载模板
    PERFORM frm_download_model.
  ENDIF.

************************************************************************
*EVENT END OF SELECTION
************************************************************************
END-OF-SELECTION.
  IF gv_functionkey IS INITIAL.
    PERFORM frm_create_fieldcat.
    PERFORM frm_layout_init.
    PERFORM frm_display_alv.
  ENDIF.
*&---------------------------------------------------------------------*
*& Form FRM_F4_FILE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_f4_file CHANGING p_p_file.
  DATA: lt_filetable   TYPE filetable,
        ls_filetable   TYPE file_table,
        lv_rc          TYPE i,
        lv_user_action TYPE i,
        lv_filter      TYPE string.

  CONCATENATE cl_gui_frontend_services=>filetype_excel
              cl_gui_frontend_services=>filetype_all INTO lv_filter.
  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      file_filter             = lv_filter
      initial_directory       'C:\'
    CHANGING
      file_table              = lt_filetable[]
      rc                      = lv_rc
      user_action             = lv_user_action
    EXCEPTIONS
      file_open_dialog_failed 1
      cntl_error              2
      error_no_gui            3
      not_supported_by_gui    4
      OTHERS                  5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  IF lv_user_action EQ cl_gui_frontend_services=>action_cancel.
    LEAVE LIST-PROCESSING.
  ENDIF.

  READ TABLE lt_filetable INTO ls_filetable INDEX 1.
  CHECK sy-subrc EQ 0.
  p_file = ls_filetable-filename.

ENDFORM"
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_upload_data .
*--数据导入转换成内表
  FIELD-SYMBOLS:<fs> TYPE any.

  DATA: lt_intern TYPE TABLE OF alsmex_tabline,
        ls_intern TYPE alsmex_tabline,
        lv_index  TYPE kcd_ex_col_n.

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = p_file
      i_begin_col             1
      i_begin_row             2
      i_end_col               99
      i_end_row               99999
    TABLES
      intern                  = lt_intern
    EXCEPTIONS
      inconsistent_parameters 1
      upload_ole              2
      OTHERS                  3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  "将数据转换成一般处理内表结构的数据
  LOOP AT lt_intern INTO ls_intern.    
MOVE ls_intern-col TO lv_index.    
ASSIGN COMPONENT lv_index OF STRUCTURE gs_upload TO <fs>.    
MOVE ls_intern-value TO <fs>.    
AT END OF row.      
APPEND gs_upload TO gt_upload.      
CLEAR gs_upload.    
ENDAT.  
ENDLOOP.  

LOOP AT gt_upload INTO gs_upload.    
MOVE-CORRESPONDING gs_upload TO gs_alv.

*    SELECT SINGLE mvgr5 INTO  @DATA(l_mvgr5)
*      FROM ztsd_018
*      WHERE zcity = @gs_upload-mvgr5
*      .
*    IF sy-subrc NE 0.
*      gs_alv-mvgr5 = '000'.
*    ELSE.
*      gs_alv-mvgr5 = l_mvgr5.
*    ENDIF.
*    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
*      EXPORTING
*        input        = gs_alv-matnr
*      IMPORTING
*        output       = gs_alv-matnr
*      EXCEPTIONS
*        length_error = 1
*        OTHERS       = 2.
*    IF sy-subrc <> 0.
** Implement suitable error handling here
*    ENDIF.    gs_alv

-konwa 'CNY'.    gs_alv
-kpein '1'.    gs_alv
-kmein 'M2'.    gs_alv
-kschl 'ZPR0'.    

CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'      
EXPORTING        
input          = gs_alv-kmein        
language       = sy-langu      
IMPORTING        
output         = gs_alv-kmein      
EXCEPTIONS        unit_not_found 
1        
OTHERS         2.    
IF sy-subrc <> 0.
* Implement suitable error handling here    
ENDIF.    gs_alv

-kunnr = |{ gs_alv-kunnr ALPHA IN }|.    

APPEND gs_alv TO gt_alv.    
CLEAR:gs_alv.  
ENDLOOP.  

IF gt_alv IS  INITIAL.    
LEAVE LIST-PROCESSING.  
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form CHECK_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM check_data .  
IF gt_alv IS NOT INITIAL.
*    SELECT
*      matnr,
*      maktx
*      FROM makt
*      INTO TABLE @DATA(lt_makt)
*      FOR ALL ENTRIES IN @gt_alv
*      WHERE matnr = @gt_alv-matnr.
*    SORT lt_makt BY matnr.    

SELECT      kunnr
,      name1      

FROM kna1      
INTO TABLE @DATA(lt_kna1)      
FOR ALL ENTRIES IN @gt_alv      
WHERE kunnr = @gt_alv-kunnr.    
SORT lt_kna1 BY kunnr.    

SELECT      pltyp
,      ptext      

FROM t189t      
INTO TABLE @DATA(lt_t189t)      
FOR ALL ENTRIES IN @gt_alv      
WHERE pltyp = @gt_alv-pltyp        
AND spras = @sy-langu.    
SORT lt_t189t BY pltyp.    

SELECT      kappl
,      kschl
,      vkorg
,      kunnr
,      kondm
,      pltyp
,      
"mvgr5,      kfrst
,      datbi
,      datab
,      kbstat
,      knumh      

FROM a511      
INTO TABLE @DATA(lt_a511)      
FOR ALL ENTRIES IN @gt_alv      
WHERE vkorg = @gt_alv-vkorg        
AND kondm = @gt_alv-kondm        
AND pltyp = @gt_alv-pltyp        
"AND mvgr5 = @gt_alv-mvgr5        
AND kunnr = @gt_alv-kunnr        
AND datbi = @gt_alv-datbi        
AND datab = @gt_alv-datab.    
SORT lt_a511 BY vkorg DESCENDING kondm DESCENDING pltyp DESCENDING datbi DESCENDING kunnr DESCENDING.  
ENDIF.  

LOOP AT gt_alv INTO gs_alv.
*    READ TABLE lt_makt INTO DATA(ls_makt) WITH KEY matnr = gs_alv-matnr BINARY SEARCH.
*    IF sy-subrc = 0.
*      gs_alv-maktx = ls_makt-maktx.
*    ENDIF.    

READ TABLE lt_kna1 INTO DATA(ls_kna1WITH KEY kunnr = gs_alv-kunnr BINARY SEARCH.    
IF sy-subrc 0.      gs_alv
-name1 = ls_kna1-name1.    
ENDIF.    

READ TABLE lt_t189t INTO DATA(ls_t189tWITH KEY pltyp = gs_alv-pltyp BINARY SEARCH.    
IF sy-subrc 0.      gs_alv
-ptext = ls_t189t-ptext.    
ENDIF.    

READ TABLE lt_a511 INTO DATA(ls_a511WITH KEY vkorg = gs_alv-vkorg                                                   kondm 
= gs_alv-kondm                                                   pltyp 
= gs_alv-pltyp                                                   
"mvgr5 = gs_alv-mvgr5                                                   kunnr 
= gs_alv-kunnr                                                   datbi 
= gs_alv-datbi                                                   datab 
= gs_alv-datab.    
IF sy-subrc 0.      gs_alv
-flag 'U'.      gs_alv
-knumh = ls_a511-knumh.    
ELSE.      gs_alv
-flag 'I'.    
ENDIF.    gs_alv

-jsl '1'.    

MODIFY gt_alv FROM gs_alv.    
CLEAR gs_alv.  
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*&      FORM  FRM_CREATE_FIELDCAT
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
FORM frm_create_fieldcat .  m_fill_fieldcat
:     
'LIGHT'     '状态灯'           'X' 50   '' '' '',     
'MSG'       '消息'             'X' 50   '' '' '',     
'JSL'       '计数列'           'X' 50   '' '' '',     
'VKORG'     '销售组织'         'X' 50   '' '' '',     
'KUNNR'     '客户编码'         'X' 50   '' '' '',     
'NAME1'     '客户名称'         'X' 50   '' '' '',     
'KONDM'     '物料价格组'            'X' 50   '' '' '',     
'PLTYP'     '价格清单'         '' 50   '' '' '',     
'PTEXT'     '价格清单描述'         '' 50   '' '' '',     
"'MVGR5'     '城市'         '' 50   '' '' '',     
'KBETR'     '单价/M2'         'X' 50   '' '' '',     
'DATAB'     '价格有效期从'    'X' 50   '' '' '',     
'DATBI'     '有效期至'        'X' 50   '' '' '',     
'KOSRT'     '创建人'          'X' 50   '' '' '',     
'KONWA'     '货币'            'X' 50   '' '' '',     
'KPEIN'     '条件定价单位'    'X' 50   '' '' '',     
'KMEIN'     '条件单位'        'X' 50   '' '' ''.
ENDFORM" FRM_CR
*&---------------------------------------------------------------------*
*&      FORM  LAYOUT_INIT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
FORM frm_layout_init .  gs_layout
-zebra      'X'.  gs_layout
-cwidth_opt 'X'.  gs_layout
-box_fname  'CBOX'.
ENDFORM"LAYOUT_INIT
*&---------------------------------------------------------------------*
*&      FORM  FRM_DISPLAY_BY_ALV
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
FORM frm_display_alv .  

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'    
EXPORTING      i_callback_program       
= sy-repid      is_layout_lvc            
= gs_layout      i_callback_pf_status_set 
'SET_PF_STATUS'      i_callback_user_command  
'USER_COMMAND'      it_fieldcat_lvc          
= gt_fcat      i_save                   
'A' "变式是否可以保存      i_grid_settings          
= gs_grid_settings    
TABLES      t_outtab                 
= gt_alv    
EXCEPTIONS      program_error            
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.
ENDFORM" FRM_DISPLAY_BY_ALV
*&---------------------------------------------------------------------*
*&      FORM  FRM_RNPNT_CHANGE
*&---------------------------------------------------------------------*
*       设置状态栏
*----------------------------------------------------------------------*
FORM set_pf_status USING p_extab TYPE slis_t_extab .  
SET PF-STATUS 'STANDARD' .
ENDFORM"SET_PF_STATUS
*&---------------------------------------------------------------------*
*&      FORM  USER_COMMAND
*&---------------------------------------------------------------------*
*       响应用户命令
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm                        rs_selfield 
TYPE slis_selfield.  

DATA: lt_data TYPE TABLE OF ty_alv,        ls_data 
TYPE ty_alv.  

DATA: ls_keyfield  TYPE komg,        p_vakey      
TYPE vakey_long,        key_fields   
TYPE komg,        ls_komk      
TYPE komk,        ls_komp      
TYPE komp,        copy_records 
TYPE TABLE OF komv WITH HEADER LINE,        copy_staffel 
TYPE TABLE OF condscale WITH HEADER LINE,        t_komv_idoc  
TYPE TABLE OF komv_idoc WITH HEADER LINE,        lv_mode      
TYPE VALUE 'A'.  

DATA: lt_knumh_comp TYPE TABLE OF knumh_comp WITH HEADER LINE.  

DATA: l_perc(5TYPE p,        l_lin1    
TYPE string,        l_txt     
TYPE string.
*&---刷新屏幕数据到内表  
DATA: lr_grid1 TYPE REF TO cl_gui_alv_grid.  
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'    
IMPORTING      e_grid 
= lr_grid1.  
CALL METHOD lr_grid1->check_changed_data.  

CASE r_ucomm.    
WHEN '&POST'.      lt_data 

VALUE #FOR wa IN gt_alv WHERE ( cbox 'X' ( wa ).      

SORT lt_data BY vkorg kunnr kondm pltyp .      
DELETE ADJACENT DUPLICATES FROM lt_data COMPARING vkorg kunnr kondm pltyp.      

DESCRIBE TABLE lt_data LINES DATA(l_lin).      

LOOP AT lt_data INTO ls_data.        l_perc 
= sy-tabix / l_lin * 100.        l_lin1 
=  l_perc.        
CONCATENATE l_lin1 '%' ',' '正在处理...' INTO l_txt.        

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'          
EXPORTING            percentage 
= l_perc            
text       = l_txt.        

CLEAR ls_keyfield.        ls_keyfield
-vkorg = ls_data-vkorg.                    "销售组织        ls_keyfield
-kunnr = |{ ls_data-kunnr ALPHA IN }|.    "客户        ls_keyfield
-kondm = ls_data-kondm.  "物料号        ls_keyfield
-pltyp = ls_data-pltyp.        
"ls_keyfield-mvgr5 = ls_data-mvgr5.        ls_keyfield
-cmpgn_id = ls_data-kosrt.        

CLEAR p_vakey.        p_vakey 
= ls_keyfield-vkorg &&                  ls_keyfield
-kunnr &&                  ls_keyfield
-kondm &&                  ls_keyfield
-pltyp .  "主键

*- Fill Key fields        
CLEAR key_fields.        
CALL FUNCTION 'SD_CONDITION_KOMG_FILL'          
EXPORTING            p_kotabnr 
'511'            p_kvewe   
'A'            p_vakey   
= p_vakey          
IMPORTING            p_komg    
= key_fields.        key_fields
-cmpgn_id = ls_data-kosrt.        

CLEAR ls_komk.        
MOVE-CORRESPONDING key_fields TO ls_komk.        ls_komk
-mandt = sy-mandt.        

CLEAR ls_komp.        
MOVE-CORRESPONDING key_fields TO ls_komp.        ls_komp
-kposn '000001'.        

LOOP AT gt_alv INTO gs_alv WHERE vkorg = ls_data-vkorg                                      
AND kunnr = ls_data-kunnr                                      
AND kondm = ls_data-kondm                                      
AND pltyp = ls_data-pltyp.                                      
"AND mvgr5 = ls_data-mvgr5.
*条件记录行项目          
REFRESH copy_records[].          copy_records
-kschl = gs_alv-kschl.          copy_records
-kappl 'V'.          copy_records
-kbetr = gs_alv-kbetr.          copy_records
-waers = gs_alv-konwa.          copy_records
-kpein = gs_alv-kpein.          copy_records
-kmein = gs_alv-kmein.          copy_records
-krech 'C'.          
IF gs_alv-flag 'I'.            copy_records
-knumh '$000000001'"条件记录号自动+1          
ELSEIF gs_alv-flag 'U'.            copy_records
-knumh = gs_alv-knumh.          
ENDIF.          copy_records

-kopos 1.          copy_records
-konms = gs_alv-kmein.          copy_records
-stfkz 'A'.          copy_records
-kzbzg 'C'.          
APPEND copy_records.          
CLEAR copy_records.        
ENDLOOP.        

CLEAR t_komv_idoc.        
REFRESH t_komv_idoc[].        t_komv_idoc
-kosrt = ls_data-kosrt.        
APPEND t_komv_idoc.        

IF gs_alv-flag 'I'.          lv_mode 
'A'.        
ELSEIF gs_alv-flag 'U'.          lv_mode 
'A'.        
ENDIF.

*        CALL FUNCTION 'RV_CONDITION_RESET'.        

CALL FUNCTION 'RV_CONDITION_COPY'          
EXPORTING            application                 
'V'            condition_table             
'511'            condition_type              
= ls_data-kschl            date_from                   
= ls_data-datab            date_to                     
= ls_data-datbi            enqueue                     
'X'        " LOCK ENTRY  LOCK INDICATORS OF CONDITION RECOR   CONDITION RECORD IS LOCKED      ##########            i_komk                      
= ls_komk    "COMMUNICATION BLOCK HEADER (PRICING)            i_komp                      
= ls_komp    "COMMUNICATION BLOCK ITEM (PRICING)            key_fields                  
= ls_keyfield            maintain_mode               
= lv_mode "MODE: CREATE, CHANGE, DISPLAY*            keep_old_records            
'X'    " INDICATOR: OLD RECORDS ARE NOT DELETED*            used_by_idoc                
'X'  "等价价格必填            overlap_confirmed           
'X'          
TABLES            copy_records                
= copy_records[]            copy_staffel                
= copy_staffel[]            copy_recs_idoc              
= t_komv_idoc          
EXCEPTIONS            enqueue_on_record           
1   " CONDITION RECORD IS LOCKED            invalid_application         
2            invalid_condition_number    
3            invalid_condition_type      
4            no_authority_ekorg          
5            no_authority_kschl          
6            no_authority_vkorg          
7            no_selection                
8            table_not_valid             
9            no_material_for_settlement  
10            no_unit_for_period_cond     
11            no_unit_reference_magnitude 
12            invalid_condition_table     
13            
OTHERS                      14.        
IF sy-subrc 0.          
CALL FUNCTION 'RV_CONDITION_SAVE' "保存            
TABLES              knumh_map 
= lt_knumh_comp.

*          IF SY-SUBRC = 0.
*            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*              EXPORTING
*                WAIT = 'X'.
*          ENDIF.          

LOOP AT gt_alv INTO gs_alv WHERE vkorg = ls_data-vkorg                                        
AND kunnr = ls_data-kunnr                                        
AND kondm = ls_data-kondm                                        
AND pltyp = ls_data-pltyp.                                        
"AND mvgr5 = ls_data-mvgr5.            gs_alv
-light '@08@'.            gs_alv
-msg '成功'.            

MODIFY gt_alv FROM gs_alv.            
CLEAR gs_alv.          
ENDLOOP.          

CALL FUNCTION 'RV_CONDITION_RESET'.          

COMMIT WORK.        
ELSE.          
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.          

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO lv_message.          

LOOP AT gt_alv INTO gs_alv WHERE vkorg = ls_data-vkorg                                       
AND kunnr = ls_data-kunnr                                       
AND kondm = ls_data-kondm                                      
AND pltyp = ls_data-pltyp.                                      
"AND mvgr5 = ls_data-mvgr5..            gs_alv
-light '@0A@'.            gs_alv
-msg = lv_message.            

MODIFY gt_alv FROM gs_alv.            
CLEAR gs_alv.          
ENDLOOP.        
ENDIF.      
ENDLOOP.  

ENDCASE.  rs_selfield

-refresh 'X'.  "刷新内表
ENDFORM.         "USER_COMMAND
*&---------------------------------------------------------------------*
*& Form FRM_INITIALIZATION
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_initialization .
**--增加选择屏幕自定义按钮  
DATA: lw_functxt TYPE smp_dyntxt.  lw_functxt

-icon_id = icon_export.  lw_functxt
-quickinfo '下载模板'.  lw_functxt
-icon_text '下载模板'.  sscrfields
-functxt_01 = lw_functxt.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_MODEL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_download_model .  
DATA: lv_path      TYPE string,        lv_file      
TYPE string,        lv_filter    
TYPE string,        lv_title     
TYPE string VALUE '请选择保存的路径及文件名',        lv_name      
TYPE string VALUE '镀膜-标准价格批导模板(客户+物料价格组)',        lv_mode      
TYPE string,        lv_overwrite 
TYPE abap_bool VALUE '0',        lt_doc_table 
TYPE STANDARD TABLE OF w3mime"数据表        lv_doc_size  
TYPE i.                        "文件大小

**--选择保存路径  
CONCATENATE cl_gui_frontend_services=>filetype_excel              cl_gui_frontend_services
=>filetype_all INTO lv_filter.  

CALL METHOD cl_gui_frontend_services=>file_save_dialog    
EXPORTING      window_title        
= lv_title      default_file_name   
= lv_name      file_filter         
= lv_filter      prompt_on_overwrite 
= lv_overwrite    
CHANGING      filename            
= lv_file      path                
= lv_path      fullpath            
= lv_mode.

**--下载模板  
CHECK lv_mode IS NOT INITIAL.  

CALL FUNCTION 'SAP_OI_LOAD_MIME_DATA'    
EXPORTING      object_id        
'ZSDR_035_01_6'   "模板名字    
IMPORTING      data_size        
= lv_doc_size    
TABLES      data_table       
= lt_doc_table    
EXCEPTIONS      object_not_found 
1      internal_error   
2      
OTHERS           3.  
IF sy-subrc <> 0.    
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno            
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.  
ENDIF.  

CHECK lt_doc_table IS NOT INITIAL.  

CALL FUNCTION 'GUI_DOWNLOAD'    
EXPORTING      bin_filesize            
= lv_doc_size      filename                
= lv_mode      filetype                
'BIN'    
TABLES      data_tab                
= lt_doc_table    
EXCEPTIONS      file_write_error        
1      no_batch                
2      gui_refuse_filetransfer 
3      invalid_type            
4      no_authority            
5      unknown_error           
6      header_not_allowed      
7      separator_not_allowed   
8      filesize_not_allowed    
9      header_too_long         
10      dp_error_create         
11      dp_error_send           
12      dp_error_write          
13      unknown_dp_error        
14      access_denied           
15      dp_out_of_memory        
16      disk_full               
17      dp_timeout              
18      file_not_found          
19      dataprovider_exception  
20      control_flush_error     
21      
OTHERS                  22.  

IF sy-subrc 0.    
CONCATENATE lv_name TEXT-003 INTO lv_mode.    
MESSAGE  lv_mode TYPE 'S'.  
ELSE.    
MESSAGE ID     sy-msgid            
TYPE   sy-msgty            
NUMBER sy-msgno            
WITH   sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.  
ENDIF.  
CLEAR: lv_path,lv_file,lv_filter,lv_mode,lt_doc_table,lv_doc_size.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_SSCRFIELDS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_set_sscrfields .  
CASE sscrfields-ucomm.    
WHEN 'FC01'.      sscrfields
-ucomm 'ONLI'.      gv_functionkey 
'1'.  
ENDCASE.
ENDFORM.

posted @ 2021-12-31 14:25  東東東東  阅读(299)  评论(0编辑  收藏  举报