*&---------------------------------------------------------------------*
*& Report  ZPPR0024
**&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
*&程序名称:工厂日生产计划待排维护

REPORT zppr0024.

TABLES: ztpp_dpp_pool1.

DATA:edit(1) VALUE ''."ALV是否处于可编辑状态

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

TYPES:BEGIN OF ty_zz.
        INCLUDE TYPE  ztpp_dpp_pool1.
TYPES:menge_x   LIKE fieud_goods_sum-totqty, "修改数量
      matnr_txt LIKE makt-maktx, "物料描述
      extwg_txt LIKE twewt-ewbez, "外部物料组描述
      vstel_txt LIKE tvstt-vtext, "装运点描述
      zline_txt LIKE ztpp_line-ltext, "生产线描述
      werks_txt LIKE t001w-name1, "工厂名称
      style     TYPE lvc_t_styl. "设置隐藏标识
TYPES:      END OF ty_zz.

TYPES:BEGIN OF ty_xls,
        btype     TYPE btype,
        matnr     LIKE mara-matnr,
        matnr_txt LIKE makt-maktx,
        meins     TYPE meins,
        extwg     TYPE extwg,
        extwg_txt LIKE twewt-ewbez,
        pdate     TYPE datum,
        vstel     TYPE vstel,
        vstel_txt LIKE tvstt-vtext,
        zbatch    TYPE zbatch,
        menge_a   TYPE menge_d,
        menge_d   TYPE menge_d,
        menge_n   TYPE menge_d,
        menge_x   TYPE menge_d,
        zline     TYPE zline,
        zline_txt LIKE ztpp_line-ltext,
        werks     TYPE werks_d,
        werks_txt LIKE t001w-name1,
      END OF ty_xls.

DATA:gt_xls TYPE STANDARD TABLE OF ty_xls.
DATA:wa_xls TYPE ty_xls.

DATA: ls_edit TYPE lvc_s_styl,
      lt_edit TYPE lvc_t_styl.

DATA: ls_outtab TYPE ty_zz.

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

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

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.
PARAMETERS: r3 RADIOBUTTON GROUP gr1.
SELECTION-SCREEN END OF BLOCK blk2.

SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.

SELECT-OPTIONS:   p_btype FOR ztpp_dpp_pool1-btype NO-EXTENSION NO INTERVALS MODIF ID rb1,
                    p_matnr FOR ztpp_dpp_pool1-matnr MODIF ID rb1.
SELECTION-SCREEN END OF BLOCK blk1.

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

AT SELECTION-SCREEN OUTPUT .
  PERFORM frm_modify_screen .

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.

ELSEIF r3 EQ 'X'.
    DATA:old_rows TYPE i.
    DATA:new_rows TYPE i.
    DESCRIBE TABLE gt_zz LINES old_rows.

"DATA: filepath LIKE rlgrap-filename.
    CLEAR filepath.
    PERFORM set_file_path CHANGING filepath.
    PERFORM   frm_upload_from_excel USING filepath.
    CLEAR gt_fcat[].

PERFORM set_fcat USING edit.
    PERFORM set_layout.

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

FORM frm_modify_screen .

LOOP AT SCREEN.
    IF screen-group1 = 'RB1'.
      IF r2 EQ 'X'.
        screen-invisible = '1'.
        screen-active = '0'.
        MODIFY SCREEN.
      ELSEIF r1 EQ 'X'.
        screen-invisible = '0'.
        screen-active = '1'.
      ELSEIF r3 EQ 'X'.
        screen-invisible = '1'.
        screen-active = '0'.
        MODIFY SCREEN.
      ENDIF.
    ELSEIF screen-group1 = 'RB2'.
      IF r1 EQ 'X'.
        screen-invisible = '1'.
        screen-active = '0'.
        MODIFY SCREEN.
      ELSEIF r2 EQ 'X'.
        screen-invisible = '0'.
        screen-active = '1'.
        MODIFY SCREEN.

ELSEIF r3 EQ 'X'.
        screen-invisible = '0'.
        screen-active = '1'.
        MODIFY SCREEN.
      ENDIF.
    ENDIF.
  ENDLOOP.

ENDFORM.

*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: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.

CLEAR wa_zz.
      
"READ TABLE gt_zz INTO wa_zz INDEX ls_mod_cells-row_id.
      
"读取焦点的行数据

IF ls_mod_cells-fieldname EQ 'BTYPE'.

IF tvalue EQ 'C'.
          
CALL METHOD er_data_changed->modify_cell
            
EXPORTING
              i_row_id    
= ls_mod_cells-row_id
              i_fieldname 
= 'BTYPE'
              i_value     
= ''.
          
MESSAGE i001(00) WITH '不能选择计划类型为C的!'.
          
EXIT.
        
ENDIF.

ENDIF.

IF ls_mod_cells-fieldname EQ 'MENGE_D'.
        
READ TABLE gt_zz INTO wa_zz INDEX ls_mod_cells-row_id.
        
IF tvalue LE wa_zz-menge_a.
          
CALL METHOD er_data_changed->modify_cell
            
EXPORTING
              i_row_id    
= ls_mod_cells-row_id
              i_fieldname 
= 'MENGE_N'
              i_value     
= ( wa_zz-menge_a - tvalue ).

ELSE.
          
MESSAGE i001(00) WITH '已超出总排产量!'.
          
CALL METHOD er_data_changed->modify_cell
            
EXPORTING
              i_row_id    
= ls_mod_cells-row_id
              i_fieldname 
= 'MENGE_D'
              i_value     
= ''.
        
ENDIF.
      
ENDIF.

IF ls_mod_cells-fieldname EQ 'MENGE_X'.
        
READ TABLE gt_zz INTO wa_zz INDEX ls_mod_cells-row_id.
        
IF ( tvalue + wa_zz-menge_n ) GE 0.
          
CALL METHOD er_data_changed->modify_cell
            
EXPORTING
              i_row_id    
= ls_mod_cells-row_id
              i_fieldname 
= 'MENGE_N'
              i_value     
= ( wa_zz-menge_n + tvalue ).

CALL METHOD er_data_changed->modify_cell
            
EXPORTING
              i_row_id    
= ls_mod_cells-row_id
              i_fieldname 
= 'MENGE_A'
              i_value     
= ( wa_zz-menge_a + tvalue ).

ELSE.
          
MESSAGE i001(00) WITH '少于未排产的数量!'.
          
CALL METHOD er_data_changed->modify_cell
            
EXPORTING
              i_row_id    
= ls_mod_cells-row_id
              i_fieldname 
= 'MENGE_X'
              i_value     
= ''.
        
ENDIF.

ENDIF.

IF ls_mod_cells-fieldname EQ 'ZLINE'.
        
SELECT SINGLE werks INTO wa_zz-werks
              
FROM ztpp_line WHERE zline EQ tvalue.
        
SELECT SINGLE ltext INTO wa_zz-zline_txt
              
FROM ztpp_line WHERE zline EQ tvalue.
        
SELECT SINGLE name1 INTO wa_zz-werks_txt
              
FROM t001w WHERE werks EQ wa_zz-werks.

CALL METHOD er_data_changed->modify_cell
          
EXPORTING
            i_row_id    
= ls_mod_cells-row_id
            i_fieldname 
= 'WERKS'
            i_value     
= wa_zz-werks.

CALL METHOD er_data_changed->modify_cell
          
EXPORTING
            i_row_id    
= ls_mod_cells-row_id
            i_fieldname 
= 'WERKS_TXT'
            i_value     
= wa_zz-werks_txt.

CALL METHOD er_data_changed->modify_cell
          
EXPORTING
            i_row_id    
= ls_mod_cells-row_id
            i_fieldname 
= 'ZLINE_TXT'
            i_value     
= wa_zz-zline_txt.
        
"MESSAGE i001(00) WITH '不能选择计划类型为C的!'.

ENDIF.

IF ls_mod_cells-fieldname EQ 'VSTEL'.
        
SELECT SINGLE vtext INTO wa_zz-vstel_txt
              
FROM tvstt WHERE vstel EQ tvalue.

CALL METHOD er_data_changed->modify_cell
          
EXPORTING
            i_row_id    
= ls_mod_cells-row_id
            i_fieldname 
= 'VSTEL_TXT'
            i_value     
= wa_zz-vstel_txt.

"MESSAGE i001(00) WITH '不能选择计划类型为C的!'.

ENDIF.

IF ls_mod_cells-fieldname EQ 'MATNR'.

wa_zz

-extwg_txt = ''.
        
SELECT SINGLE meins INTO wa_zz-meins
              
FROM mara WHERE matnr EQ tvalue.
        
SELECT SINGLE extwg INTO wa_zz-extwg
              
FROM mara WHERE matnr EQ tvalue.
        
SELECT SINGLE maktx INTO wa_zz-matnr_txt
              
FROM makt WHERE matnr EQ tvalue.

SELECT SINGLE ewbez INTO wa_zz-extwg_txt
              
FROM twewt WHERE extwg EQ wa_zz-extwg.

CALL METHOD er_data_changed->modify_cell
          
EXPORTING
            i_row_id    
= ls_mod_cells-row_id
            i_fieldname 
= 'MATNR_TXT'
            i_value     
= wa_zz-matnr_txt.

CALL METHOD er_data_changed->modify_cell
          
EXPORTING
            i_row_id    
= ls_mod_cells-row_id
            i_fieldname 
= 'MEINS'
            i_value     
= wa_zz-meins.
        
"MESSAGE i001(00) WITH '不能选择计划类型为C的!'.
        
CALL METHOD er_data_changed->modify_cell
          
EXPORTING
            i_row_id    
= ls_mod_cells-row_id
            i_fieldname 
= 'EXTWG'
            i_value     
= wa_zz-extwg.

CALL METHOD er_data_changed->modify_cell
          
EXPORTING
            i_row_id    
= ls_mod_cells-row_id
            i_fieldname 
= 'EXTWG_TXT'
            i_value     
= wa_zz-extwg_txt.

ENDIF.

IF ls_mod_cells-fieldname EQ 'EXTWG'.

SELECT SINGLE ewbez INTO wa_zz-extwg_txt
                      
FROM twewt WHERE extwg EQ tvalue.
        
CALL METHOD er_data_changed->modify_cell
          
EXPORTING
            i_row_id    
= ls_mod_cells-row_id
            i_fieldname 
= 'EXTWG_TXT'
            i_value     
= wa_zz-extwg_txt.
      
ENDIF.

ENDLOOP.

ENDMETHOD.                    "HANDLE_MODIFY

ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION

DATA gt_event_receiver TYPE REF TO lcl_event_receiver .

FORM get_data.

*  CALL FUNCTION 'VIEW_GET_DATA'

*    EXPORTING

*      view_name = 'V_TVBUR'

*    TABLES

*      data      = gt_xs.

IF p_btype-low NE 'C' AND p_btype-low NE '' .
    
SELECT *
        
FROM ztpp_dpp_pool1 AS z
        
INTO CORRESPONDING FIELDS OF TABLE gt_zz
        
WHERE ( z~btype IN p_btype )
              
AND ( z~matnr  IN p_matnr )  .
  
ELSEIF p_btype-low EQ ''.
    
MESSAGE i001(00) WITH '请选择计划类型!'.
    
LEAVE TO SCREEN 0.
  
ELSE.
    
MESSAGE i001(00) WITH '不能选择产销协调日生产计划类型为C的!'.
    
LEAVE TO SCREEN 0.
  
ENDIF.

CLEAR wa_zz.
  
LOOP AT gt_zz INTO wa_zz.
    
SELECT SINGLE ltext INTO wa_zz-zline_txt
            
FROM ztpp_line WHERE zline EQ wa_zz-zline.
    
SELECT SINGLE name1 INTO wa_zz-werks_txt
          
FROM t001w WHERE werks EQ wa_zz-werks.

SELECT SINGLE maktx INTO wa_zz-matnr_txt
            
FROM makt WHERE matnr EQ wa_zz-matnr.

SELECT SINGLE ewbez INTO wa_zz-extwg_txt
          
FROM twewt WHERE extwg EQ wa_zz-extwg.

SELECT SINGLE vtext INTO wa_zz-vstel_txt
            
FROM tvstt WHERE vstel EQ wa_zz-vstel.
    
MODIFY gt_zz FROM wa_zz.
  
ENDLOOP.

ENDFORM.

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[].

PERFORM set_fcat USING edit.
  
PERFORM set_layout.

PERFORM show_alv  TABLES gt_fcat  gt_zz[]
                 
USING  gs_layo.

ENDFORM.

FORM set_fcat USING edit.
  
PERFORM csalv_set_fcat USING :

" 'Field' 'Text' 'Edit' 'Zero' 'Type' 'Qfieldname' 'Key' 'Hostspot' 'Emphasize' 'Checkbox'
             
'BTYPE'  '产销协调日生产计划类型' '' ''  ''  ''  ''   ''  ''  '' '' '' '' 'X' 'ZTPP_DPP_POOL1' 'BTYPE' '' '' '',
             
'MATNR'  '物料号' '' ''  ''  ''  ''   ''  ''  '' '' '' '' 'X' 'ZTPP_DPP_POOL1' 'MATNR' '' '' '',
             
'MATNR_TXT'  '物料描述' '' ''  ''  ''  ''   ''  ''  '' '' '' '' '' '' '' '' '' '',
             
'MEINS'  '基本计量单位' '' ''  ''  ''  ''   ''  ''  '' '' '' '' 'X' 'MARA' 'MEINS' '' '' '',
             
'EXTWG'  '外部物料组' '' ''  ''  ''  ''   ''  ''  '' '' '' '' 'X' 'MARA' 'EXTWG' '' '' '',
             
'EXTWG_TXT'  '外部物料组描述' '' ''  ''  ''  ''   ''  ''  '' '' '' '' '' '' '' '' '' '',

'PDATE'  '日期' '' ''  ''  ''  ''   ''  ''  '' '' '' '' 'X' 'ZTPP_DPP_POOL1' 'PDATE' '' '' '',
             
'VSTEL'  '装运点/接收点 ' '' ''  ''  ''  ''   ''  ''  '' '' '' '' 'X' 'LIKP' 'VSTEL' '' '' '',
             
'VSTEL_TXT'  '装运点/接收点描述 ' '' ''  ''  ''  ''   ''  ''  '' '' '' '' '' '' '' '' '' '',

'ZBATCH'  '用户批次要求' '' ''  ''  ''  ''   ''  ''  '' '' '' '' 'X' 'ZTPP_DPP_POOL1' 'ZBATCH' '' '' '',

'MENGE_A'  '总需求数量' '' 'X'  ''  ''  ''   ''  ''  '' '' '' '' '' '' '' '' '' '3',
             
'MENGE_D'  '已排产数量' '' 'X'  ''  ''  ''   ''  ''  '' '' '' '' '' '' '' '' '' '3',
             
'MENGE_N'  '未排产数量' '' 'X'  ''  ''  ''   ''  ''  '' '' '' '' '' '' '' '' '' '3',
             
'MENGE_X'  '修改数量' edit 'X'  ''  ''  ''   ''  ''  '' '' '' '' '' '' '' '' '' '3',

'ZLINE'  '生产线' '' ''  ''  ''  ''   ''  ''  '' '' '' '' 'X' 'ZTPP_LINE_LOAD' 'ZLINE' '' '' '',
              
'ZLINE_TXT'  '生产线描述' '' ''  ''  ''  ''   ''  ''  '' '' '' '' '' '' '' '' '' '',

'WERKS'  '工厂' '' ''  ''  ''  ''   ''  ''  '' '' '' '' 'X' 'ZTPP_DPP_POOL1' 'WERKS' '' '' '',
             
'WERKS_TXT'  '工厂名称' '' ''  ''  ''  ''   ''  ''  '' '' '' '' '' '' '' '' '' ''.

ENDFORM.                    " SET_FCAT

FORM set_layout .
  gs_layo
-zebra             = 'X'.
  gs_layo
-stylefname        = '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
      p_inttype
      p_datatype
      p_decimals

.
  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.
  gs_fcat
-inttype     =  p_inttype.
  gs_fcat
-datatype    =  p_datatype.
  gs_fcat
-decimals    =  p_decimals.
  
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 '&CHANGE'.
      
IF edit EQ '' .
        
edit = 'X'.
      
ELSE.
        
edit = ''.
      
ENDIF.
      
PERFORM show_changed_alv.
    
WHEN '&BACK'.
      
LEAVE PROGRAM.
    
WHEN '&ADD_ROW'.

*
      
DATA: last_row LIKE  sy-tabix.
      
CLEAR wa_zz.

IF edit EQ 'X'.
        
APPEND wa_zz TO gt_zz.
        
DESCRIBE TABLE gt_zz LINES last_row.

PERFORM set_status_enabled USING last_row 'BTYPE'.
        
PERFORM set_status_enabled USING last_row 'MATNR'.
        
PERFORM set_status_enabled USING last_row 'PDATE'.
        
PERFORM set_status_enabled USING last_row 'VSTEL'.
        
PERFORM set_status_enabled USING last_row 'ZBATCH'.
        
PERFORM set_status_enabled USING last_row 'MENGE_A'.
        
PERFORM set_status_enabled USING last_row 'MENGE_D'.

PERFORM set_status_enabled USING last_row 'ZLINE'.

INSERT LINES OF lt_edit INTO TABLE ls_outtab-style.

MODIFY gt_zz INDEX last_row FROM ls_outtab TRANSPORTING style .
        
CLEAR lt_edit.
        
CLEAR ls_outtab.
        
PERFORM show_changed_alv.
      
ENDIF.

WHEN '&SAVE_DATA'.
      
DATA:save_rows TYPE  STANDARD  TABLE OF ztpp_dpp_pool1.
      
CLEAR wa_zz.
      
MOVE-CORRESPONDING gt_zz TO save_rows.
      
MODIFY ztpp_dpp_pool1 FROM TABLE save_rows[].
      
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 ty_zz.

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: git_xls TYPE TABLE OF ty_xls WITH HEADER LINE,
        gwa_xls 
TYPE          ty_xls.

**数据从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               
= 16
      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.
    
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      
EXPORTING
        
input  = gwa_xls-matnr
      
IMPORTING
        
output = gwa_xls-matnr.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      
EXPORTING
        
input  = gwa_xls-zline
      
IMPORTING
        
output = gwa_xls-zline.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      
EXPORTING
        
input  = gwa_xls-vstel
      
IMPORTING
        
output = gwa_xls-vstel.

SELECT SINGLE werks INTO gwa_xls-werks
              
FROM ztpp_line WHERE zline EQ gwa_xls-zline.
    
SELECT SINGLE ltext INTO gwa_xls-zline_txt
          
FROM ztpp_line WHERE zline EQ gwa_xls-zline.
    
SELECT SINGLE name1 INTO gwa_xls-werks_txt
          
FROM t001w WHERE werks EQ gwa_xls-werks.
    
SELECT SINGLE vtext INTO gwa_xls-vstel_txt
                  
FROM tvstt WHERE vstel EQ gwa_xls-vstel.
    
SELECT SINGLE meins INTO gwa_xls-meins
            
FROM mara WHERE matnr EQ gwa_xls-matnr.
    
SELECT SINGLE extwg INTO gwa_xls-extwg
          
FROM mara WHERE matnr EQ gwa_xls-matnr.
    
SELECT SINGLE maktx INTO gwa_xls-matnr_txt
          
FROM makt WHERE matnr EQ gwa_xls-matnr.

SELECT SINGLE ewbez INTO gwa_xls-extwg_txt
          
FROM twewt WHERE extwg EQ gwa_xls-extwg.

gwa_xls

-menge_n = gwa_xls-menge_a - gwa_xls-menge_d.

MODIFY git_xls FROM gwa_xls.
    
CLEAR gwa_xls.

ENDLOOP.
  
MOVE-CORRESPONDING git_xls[]   TO gt_zz.
  
CLEAR git_xls[].

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 'ZPP_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

"设置单元格状态不可编辑

FORM set_status_disabled USING index TYPE sy-tabix  fieldname TYPE lvc_s_styl-fieldname .

sy

-tabix = index.
  ls_edit
-fieldname = fieldname.
  ls_edit
-style = cl_gui_alv_grid=>mc_style_disabled.
  ls_edit
-style2 = space.
  ls_edit
-style3 = space.
  ls_edit
-style4 = space.
  ls_edit
-maxlen = 10.
  
INSERT ls_edit INTO TABLE lt_edit.

ENDFORM.

FORM set_status_enabled USING index TYPE sy-tabix  fieldname TYPE lvc_s_styl-fieldname .

sy

-tabix = index.
  ls_edit
-fieldname = fieldname.
  ls_edit
-style = cl_gui_alv_grid=>mc_style_enabled.
  ls_edit
-style2 = space.
  ls_edit
-style3 = space.
  ls_edit
-style4 = space.
  ls_edit
-maxlen = 10.
  
INSERT ls_edit INTO TABLE lt_edit.

ENDFORM.

SAP 工厂日生产计划待排维护的更多相关文章

  1. 为什么众多软件厂商无法提供APS高级计划排程系统?工厂目前生产计划是怎么排产的?

    一.行业现状如想了解一下目前现状,去考察一下上了ERP的企业,会发现一个有趣的现象该企业无论ERP软件搞得如何如火如荼,似乎都与生产调度人员无关. 车间里或者生产线上的生产作业计划.生产过程的调度和管 ...

  2. APS中生产计划排程模块的基本原理

    高级计划系统(APS)作为ERP和MES的补充,用于协调物流.开发瓶颈资源和保证交货日期. APS包括需求和供应计划.运输和生产计划排程等各种供应链计划模块,本文主要介绍APS中生产计划排程模块的基本 ...

  3. 易普优APS应用案例:线束行业生产计划排产

    一.线束行业生产现状 (1)产品种类以及标准繁多,生产计划难协调 线束行业的生产,虽然原材料不多,但线束产品却多达几万种.一般线束企业,虽然不是每个月都生产数万种产品,但每月生产的产品品种在300种以 ...

  4. 什么是APS高级计划排程(生产计划排产)系统主要功能模块有哪些?

    什么是APS高级计划排程(生产计划排产)系统? APS高级计划排程(高级计划排产)系统主要解决“在有限产能条件下,交期产能精确预测.工序生产与物料供应最优详细计划”的问题.APS高级计划排程(高级计划 ...

  5. 【案例】电子生产中的排程问题如何解决?APS助力智能化排产

    共进电子是典型的消费类电子制造企业,以ODM业务为主,立足双O(OEM/ODM),发展自主品牌.其中,生产模式特点包括: 批量制造.多品种小批量.面向订单生产: 产品结构复杂,设计变更频繁:生产计划复 ...

  6. MRP生产计划模式在多品种小批量生产过程中遭遇挑战

    传统的MPS主生产计划和MRP物料需求计划的方式,已很难适应按需生产环境,很多企业正在转向按需生产环境,按需生产的最大的挑战是模拟计算CTP可以承诺交期.准时交货和应对不确定的插单等变化.不仅需要订单 ...

  7. 关于APS在企业生产计划上的应用

    本人本身是一个码农,已经服务了共和国各项事业(好像是说得有点漂,没办法段子看多了)大约一半工作时候了(按60岁退休的话),从一线的小码农,到现在成了老农,出产了不少或优或劣的各种码,几乎啥都做过.近几 ...

  8. SAP APO-供应网络计划

    供应网络计划整合了供应链中的所有流程-采购,制造和分销. 供应网络计划可以优化采购和生产,缩短订单完成时间,并改善客户服务. 供应网络计划与高级计划和优化的其他过程紧密集成,以开发用于购买,制造和分配 ...

  9. SAP 关于标准成本、计划成本、目标成本、实际成本

    SAP 关于标准成本.计划成本.目标成本.实际成本 <A style="MARGIN-RIGHT: 10px" target=_blank data-ext="{v ...

随机推荐

  1. 也谈Promise

    最新的ES6标准添加有Promise方法,但自己在项目中一直使用jQuery(jQuery自己实现了不标准的Promise),加上es6标准还没有得到普及,也就懒得学习相关资料. 最近手头上的活少了, ...

  2. (1)apply族函数总论

                  来自为知笔记(Wiz) 附件列表

  3. 【C++】递增递减操作符与指针的关系

    可以将递增与递减操作符用于指针和基本变量,将递增操作符用于指针时,将把指针的值增加其指向的数据类型占用的字节数,这种规则适用于对指针递增和递减. int arr[5] = {21,32,23,45,3 ...

  4. UI第三节——UIView详解

    - (void)viewDidLoad { [super viewDidLoad]; UIView *redView = [[UIView alloc] initWithFrame:CGRectMak ...

  5. java之BASE64加解密

    1.简介 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到. 注:位于jdk的java.util包中. 2. ...

  6. Javascript高级程序设计——函数

    函数Function 通过函数封装多条语句,在任何地方执行.javascript函数不会重载,相同名字函数,名字属于后定义的函数通过function关键词声明. function functionNa ...

  7. 各大互联网公司前端面试题(js)

    对于巩固复习js更是大有裨益.    初级Javascript: 1.JavaScript是一门什么样的语言,它有哪些特点? 没有标准答案. 2.JavaScript的数据类型都有什么? 基本数据类型 ...

  8. CSS3.0盒模型display:box;的使用

    CSS3.0盒模型display:-webkit-box;的使用 box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典的一个布局应用就是布局的垂 ...

  9. hiho #1372:平方求 (bfs)

    #1372 : 平方求和 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 对于一个非负整数n,最少需要几个完全平方数,使其和为n? 输入 输入包含多组数据.对于每组数据: ...

  10. am335x 虚拟机环境变量的设置及注释

    我用的还是老的Linux3.2.0的内核,只是借用了TI am335x SDK 3.0里面的工具. 首先下载TI官方的SDK,上一章已经安装了一个Ubuntu14.04的虚拟机. TI 最新的SDK下 ...