下面为 主程序代码
。
PARAMETERS:
P_FILE LIKE RLGRAP-FILENAME MODIF ID M1. "上载路径
INCLUDE ZFIR0008_16_top.
INCLUDE ZFIR0008_16_frm.
START-OF-SELECTION.
"读取excel数据
PERFORM frm_get_exdata.
"获取数据
PERFORM frm_get_data.
"展示列名内表设置
PERFORM frm_set_fieldcat.
"数据展示
PERFORM frm_display.
下面为 TOP代码
。
TYPES: BEGIN OF ty_extab,
bukrs TYPE anek-bukrs, "(公司代码)
anln1 TYPE anek-anln1, "(资产编码)
anln2 TYPE anek-anln2, "(资产子编号)
gjahr TYPE anek-gjahr. "(会计年度)
TYPES: END OF ty_extab.
DATA:
gt_extab TYPE TABLE OF ty_extab,
gw_extab TYPE ty_extab.
TYPES: BEGIN OF ty_data,
zindex TYPE c, "选中标识
status TYPE char10, "(状态)
bukrs TYPE anek-bukrs, "(公司代码)
anln1 TYPE anek-anln1, "(资产编码)
anln2 TYPE anek-anln2, "(资产子编号)
gjahr TYPE anek-gjahr, "(会计年度)
bzdat TYPE anep-bzdat, "(资产价值日)
bwasl TYPE anep-bwasl, "(事务类型)
anbtr TYPE anep-anbtr, "(已过账的金额)
awtyp TYPE anek-awtyp, "(参考过程)
belnr TYPE anek-belnr, "(参考凭证号)
aworg TYPE anek-aworg, "(参考组织单位)
zmessage TYPE char100, "(消息)
f_style TYPE lvc_t_styl.
TYPES: END OF ty_data.
DATA:
gt_author TYPE TABLE OF ty_data,
gw_author TYPE ty_data,
gt_events TYPE slis_t_event WITH HEADER LINE,
gi_layout_lvc TYPE lvc_s_layo,
gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat LIKE LINE OF gt_fieldcat.
下面为 FRM代码
。
*&---------------------------------------------------------------------*
*& 包含 ZFIR0008_16_FRM
*&---------------------------------------------------------------------*
FORM frm_get_exdata. "获取数据
DATA lt_raw TYPE truxs_t_text_data .
DATA lv_path TYPE rlgrap-filename .
DATA lt_line TYPE c VALUE 1.
CLEAR: lv_path , gt_extab.
lv_path = p_file .
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_field_seperator = 'X'
i_line_header = lt_line "第一行不读
i_tab_raw_data = lt_raw "必输参数
i_filename = lv_path "路径
TABLES
i_tab_converted_data = gt_extab[] "读取EXCEL数据到内表
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE '上传失败' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
ENDFORM.
FORM frm_get_data. "获取数据
DATA lt_author TYPE TABLE OF ty_data.
DATA lw_author TYPE ty_data.
DATA l_lnsan TYPE anep-lnsan.
CLEAR l_lnsan.
CLEAR: gt_author , gw_author.
LOOP AT gt_extab INTO gw_extab.
IF gw_extab-anln2 IS INITIAL OR gw_extab-anln2 = ''.
gw_extab-anln2 = '0000'.
ENDIF.
CLEAR: lt_author , lw_author.
SELECT
a~bukrs
a~anln1
a~anln2
a~gjahr
b~bzdat
b~bwasl
b~anbtr
a~awtyp
a~belnr
a~aworg
INTO CORRESPONDING FIELDS OF TABLE lt_author
FROM anek AS a
JOIN anep AS b
ON a~bukrs = b~bukrs
AND a~anln1 = b~anln1
AND a~anln2 = b~anln2
AND a~gjahr = b~gjahr
and a~belnr = b~belnr
WHERE a~bukrs = gw_extab-bukrs
AND a~anln1 = gw_extab-anln1
AND a~anln2 = gw_extab-anln2
AND a~gjahr = gw_extab-gjahr
AND b~afabe = '01'
AND b~lnsan = l_lnsan
.
IF sy-subrc = 0 AND lt_author IS NOT INITIAL.
LOOP AT lt_author INTO lw_author.
APPEND lw_author TO gt_author.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDFORM. "frm_get_data
*&---------------------------------------------------------------------*
*& Form frm_display
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_display. "数据展示
* 全局格式布局
DATA: l_grid_settings TYPE lvc_s_glay.
gi_layout_lvc-zebra = 'X' . " 使ALV界面呈现颜色交替
gi_layout_lvc-sel_mode = 'A' . " 选择模式,“A”在最左端有选择按钮
* gi_layout_lvc-box_fname = 'ZINDEX'. "标记选项
gi_layout_lvc-cwidth_opt = 'X' . " 自动优化列宽
gi_layout_lvc-detailinit = 'X' . " 是否出现细节屏幕
gi_layout_lvc-detailtitl = '详细内容'. " 细节屏幕标题
gi_layout_lvc-totals_bef = 'X'. " 在个别记录前总计输出
gi_layout_lvc-edit = 'X'. "可编辑
gi_layout_lvc-stylefname = 'F_STYLE'. "可编辑字段设置
l_grid_settings-edt_cll_cb = 'X'. "可编辑重置
PERFORM frm_loop_data_f_style."可编辑字段设置
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'FRM_SET_STATUS'
i_callback_user_command = 'FRM_COMMAND'
i_grid_settings = l_grid_settings
is_layout_lvc = gi_layout_lvc
it_fieldcat_lvc = gt_fieldcat
i_save = 'A'
TABLES
t_outtab = gt_author
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. "frm_display
*&---------------------------------------------------------------------*
*& Form frm_set_status
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_EXTAB text
*----------------------------------------------------------------------*
FORM frm_set_status USING p_extab TYPE slis_t_extab .
SET PF-STATUS 'ZFIR0008_16'.
SET TITLEBAR 'TITLE001' WITH '资产业务-批量冲销'.
ENDFORM. "frm_set_status
*&---------------------------------------------------------------------*
*& Form frm_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_UCOMM text
* -->P_SELFIELD text
*----------------------------------------------------------------------*
FORM frm_command USING p_ucomm TYPE sy-ucomm
p_selfield TYPE slis_selfield.
DATA: g_alv TYPE REF TO cl_gui_alv_grid.
DATA: ls_tab TYPE lvc_s_stbl.
ls_tab-row = 'X'.
ls_tab-col = 'X'.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' "获取当前的ALV,
IMPORTING
e_grid = g_alv.
CALL METHOD g_alv->check_changed_data.
CASE p_ucomm.
WHEN 'ZCHALL'."全选
LOOP AT gt_author INTO gw_author.
gw_author-zindex = 'X'.
MODIFY gt_author FROM gw_author.
ENDLOOP.
p_selfield-refresh = 'X'.
WHEN 'ZDEALL'."取消全选
LOOP AT gt_author INTO gw_author.
CLEAR gw_author-zindex.
MODIFY gt_author FROM gw_author.
ENDLOOP.
p_selfield-refresh = 'X'.
WHEN 'ZDELA'."冲销
READ TABLE gt_author INTO gw_author WITH KEY zindex = 'X'.
IF sy-subrc <> 0.
MESSAGE '未选择冲销的凭证!' TYPE 'E' .
ENDIF.
PERFORM frm_chongxiao_data.
p_selfield-refresh = 'X'.
ENDCASE.
ENDFORM. "frm_command
*&---------------------------------------------------------------------*
*& Form frm_change_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_chongxiao_data.
DATA: it_value TYPE TABLE OF sval,
wa_value TYPE sval,
lv_rtn_cd.
CLEAR:it_value,wa_value,lv_rtn_cd.
* wa_value-tabname = 'ANEK'.
* wa_value-fieldname = 'ANLN1'.
* wa_value-field_attr = '01'.
* wa_value-field_obl = 'X'.
* APPEND wa_value TO it_value.
it_value = VALUE #(
( tabname = 'ANEK' fieldname = 'GJAHR' field_obl = 'X' )
( tabname = 'BKPF' fieldname = 'BUDAT' value = sy-datum field_obl = 'X' )
( tabname = 'ANEK' fieldname = 'MONAT' value = sy-datum+4(2) field_obl = 'X' )
( tabname = 'BKPF' fieldname = 'STGRD' field_obl = 'X' )
).
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
popup_title = '冲销过账说明'
IMPORTING
returncode = lv_rtn_cd
TABLES
fields = it_value.
IF lv_rtn_cd IS INITIAL.
DATA:
origindocreference TYPE bapi6037_doc_ref,
reversaldata TYPE bapi6037_rev_data,
documentreference TYPE bapi6037_doc_ref,
return_parameter TYPE bapiret2,
return_all TYPE STANDARD TABLE OF bapiret2.
* DATA:
* ld_documentreference TYPE bapi6037_doc_ref,
* ld_return TYPE bapiret2,
* it_return_all TYPE STANDARD TABLE OF bapiret2, "TABLES PARAM
* wa_return_all LIKE LINE OF it_return_all.
* DATA(ld_origindocreference) = 'Check type of data required'.
* DATA(ld_origindocumentkey) = 'Check type of data required'.
* DATA(ld_reversaldata) = 'Check type of data required'.
* APPEND wa_return_all TO it_return_all.
* CALL FUNCTION 'BAPI_ASSET_REVERSAL_POST'
* EXPORTING
* origindocreference = ld_origindocreference
* origindocumentkey = ld_origindocumentkey
* reversaldata = ld_reversaldata
* IMPORTING
* documentreference = ld_documentreference
* return = ld_return.
* " BAPI_ASSET_REVERSAL_POST
* IF sy-subrc EQ 0.
* "All OK
* ENDIF.
LOOP AT gt_author INTO gw_author WHERE zindex = 'X'.
origindocreference-obj_type = gw_author-awtyp.
origindocreference-ref_doc = gw_author-belnr.
origindocreference-ref_org_un = gw_author-aworg.
READ TABLE it_value INTO wa_value WITH KEY fieldname = 'GJAHR'.
reversaldata-fisc_year = wa_value-value.
READ TABLE it_value INTO wa_value WITH KEY fieldname = 'BUDAT'.
reversaldata-pstng_date = wa_value-value.
READ TABLE it_value INTO wa_value WITH KEY fieldname = 'MONAT'.
reversaldata-fis_period = wa_value-value.
READ TABLE it_value INTO wa_value WITH KEY fieldname = 'STGRD'.
reversaldata-reason_rev = wa_value-value.
CALL FUNCTION 'BAPI_ASSET_REVERSAL_POST'
EXPORTING
origindocreference = origindocreference
"ORIGINDOCUMENTKEY " This is parameter is not needed
reversaldata = reversaldata
IMPORTING
documentreference = documentreference
return = return_parameter
TABLES
return_all = return_all.
IF return_parameter-type = 'S'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
IF return_parameter-number = '605' AND
return_parameter-id = 'RW'.
gw_author-zmessage = return_parameter-message.
MODIFY gt_author FROM gw_author.
ENDIF.
ELSE.
gw_author-zmessage = return_parameter-message.
MODIFY gt_author FROM gw_author.
ENDIF.
ENDLOOP.
ELSE.
MESSAGE '操作已取消' TYPE 'S'.
ENDIF.
ENDFORM. "frm_change_data
*&---------------------------------------------------------------------*
*& Form frm_set_fieldcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_set_fieldcat . "展示列名内表设置
CLEAR gt_fieldcat[].
PERFORM frm_add_fieldcat USING 'ZINDEX' '复选框' '' 8 '' '' ''.
PERFORM frm_add_fieldcat USING 'STATUS' '状态' '' 8 '' '' ''.
PERFORM frm_add_fieldcat USING 'BUKRS' '公司代码 ' '' 8 '' '' ''.
PERFORM frm_add_fieldcat USING 'ANLN1' '资产编码 ' '' 8 '' '' ''.
PERFORM frm_add_fieldcat USING 'ANLN2' '资产子编号' '' 8 '' '' ''.
PERFORM frm_add_fieldcat USING 'GJAHR' '会计年度' '' 8 '' '' ''.
PERFORM frm_add_fieldcat USING 'BZDAT' '资产价值日' '' 8 '' '' ''.
PERFORM frm_add_fieldcat USING 'BWASL' '事务类型' '' 8 '' '' ''.
PERFORM frm_add_fieldcat USING 'ANBTR' '已过账的金额' '' 8 '' '' ''.
PERFORM frm_add_fieldcat USING 'AWTYP' '参考过程' '' 8 '' '' ''.
PERFORM frm_add_fieldcat USING 'BELNR' '参考凭证号' '' 8 '' '' ''.
PERFORM frm_add_fieldcat USING 'AWORG' '参考组织织单位' '' 8 '' '' ''.
PERFORM frm_add_fieldcat USING 'ZMESSAGE' '消息' '' 8 '' '' ''.
ENDFORM. "frm_set_fieldcat
FORM frm_add_fieldcat USING p_name TYPE c
p_text TYPE c
p_key TYPE c
p_lenth TYPE i
p_edit TYPE c
p_rfname TYPE lvc_s_fcat-ref_field
p_rftab TYPE lvc_s_fcat-ref_table.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = p_name.
gs_fieldcat-scrtext_l = p_text.
gs_fieldcat-key = p_key.
gs_fieldcat-outputlen = p_lenth.
gs_fieldcat-edit = p_edit.
gs_fieldcat-ref_field = p_rfname.
gs_fieldcat-ref_field = p_rftab.
IF gs_fieldcat-fieldname = 'ZINDEX'.
gs_fieldcat-checkbox = 'X'.
ENDIF.
APPEND gs_fieldcat TO gt_fieldcat.
ENDFORM. "frm_fcat_field
FORM frm_loop_data_f_style.
DATA stylelin TYPE lvc_s_styl.
LOOP AT gt_author INTO gw_author.
CLEAR :gw_author-f_style[].
CLEAR stylelin.
stylelin-fieldname = 'ANBTR'. " 需要编辑的列名
stylelin-style = cl_gui_alv_grid=>mc_style_disabled. " 设置为不可编辑状态 "mc_style_enabled. 设置可编辑状态
APPEND stylelin TO gw_author-f_style.
CLEAR stylelin.
stylelin-fieldname = 'ANLN1'.
stylelin-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND stylelin TO gw_author-f_style.
CLEAR stylelin.
stylelin-fieldname = 'ANLN2'.
stylelin-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND stylelin TO gw_author-f_style.
CLEAR stylelin.
stylelin-fieldname = 'AWORG'.
stylelin-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND stylelin TO gw_author-f_style.
CLEAR stylelin.
stylelin-fieldname = 'AWTYP'.
stylelin-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND stylelin TO gw_author-f_style.
CLEAR stylelin.
stylelin-fieldname = 'BELNR'.
stylelin-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND stylelin TO gw_author-f_style.
CLEAR stylelin.
stylelin-fieldname = 'BUKRS'.
stylelin-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND stylelin TO gw_author-f_style.
CLEAR stylelin.
stylelin-fieldname = 'BWASL'.
stylelin-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND stylelin TO gw_author-f_style.
CLEAR stylelin.
stylelin-fieldname = 'BZDAT'.
stylelin-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND stylelin TO gw_author-f_style.
CLEAR stylelin.
stylelin-fieldname = 'GJAHR'.
stylelin-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND stylelin TO gw_author-f_style.
CLEAR stylelin.
stylelin-fieldname = 'STATUS'.
stylelin-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND stylelin TO gw_author-f_style.
CLEAR stylelin.
stylelin-fieldname = 'ZINDEX'.
stylelin-style = cl_gui_alv_grid=>mc_style_enabled.
APPEND stylelin TO gw_author-f_style.
CLEAR stylelin.
stylelin-fieldname = 'ZMESSAGE'.
stylelin-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND stylelin TO gw_author-f_style.
MODIFY gt_author FROM gw_author.
ENDLOOP.
ENDFORM. "frm_loop_itdata
优化上传数据
REPORT z_excel_007.
TABLES: ztfz_ccxx_zb007.
TYPES: BEGIN OF ty_extab,
zyear TYPE ztfz_ccxx_zb007-zyear ,
bukrs TYPE ztfz_ccxx_zb007-bukrs ,
lgort TYPE ztfz_ccxx_zb007-lgort ,
matnr TYPE ztfz_ccxx_zb007-matnr ,
charg TYPE ztfz_ccxx_zb007-charg ,
createdate TYPE ztfz_ccxx_zb007-createdate,
createtime TYPE ztfz_ccxx_zb007-createtime,
meins TYPE ztfz_ccxx_zb007-meins ,
clabs_ex TYPE ztfz_ccxx_zb007-clabs_ex ,
menge_sh TYPE ztfz_ccxx_zb007-menge_sh ,
menge_fh TYPE ztfz_ccxx_zb007-menge_fh ,
clabs TYPE ztfz_ccxx_zb007-clabs ,
price TYPE ztfz_ccxx_zb007-price ,
money TYPE ztfz_ccxx_zb007-money ,
budat TYPE ztfz_ccxx_zb007-budat ,
tkonn TYPE ztfz_ccxx_zb007-tkonn ,
submi TYPE ztfz_ccxx_zb007-submi ,
ztkonn_out TYPE ztfz_ccxx_zb007-ztkonn_out,
ekorg TYPE ztfz_ccxx_zb007-ekorg ,
ekorg_nam TYPE ztfz_ccxx_zb007-ekorg_nam ,
ekgrp TYPE ztfz_ccxx_zb007-ekgrp ,
eknam TYPE ztfz_ccxx_zb007-eknam ,
person TYPE ztfz_ccxx_zb007-person ,
lgobe TYPE ztfz_ccxx_zb007-lgobe ,
atwrt TYPE ztfz_ccxx_zb007-atwrt ,
kname TYPE ztfz_ccxx_zb007-kname ,
atwrt_tf TYPE ztfz_ccxx_zb007-atwrt_tf ,
kname_tf TYPE ztfz_ccxx_zb007-kname_tf ,
atwrt_te TYPE ztfz_ccxx_zb007-atwrt_te ,
kname_te TYPE ztfz_ccxx_zb007-kname_te ,
lifnr TYPE ztfz_ccxx_zb007-lifnr ,
name1 TYPE ztfz_ccxx_zb007-name1 ,
maktx TYPE ztfz_ccxx_zb007-maktx ,
spec TYPE ztfz_ccxx_zb007-spec ,
le_vbeln TYPE ztfz_ccxx_zb007-le_vbeln ,
vbeln TYPE ztfz_ccxx_zb007-vbeln ,
erdat TYPE ztfz_ccxx_zb007-erdat.
TYPES: END OF ty_extab.
DATA: lt_extab TYPE TABLE OF ty_extab,
lw_extab TYPE ty_extab.
DATA lt_raw TYPE truxs_t_text_data .
DATA lv_path TYPE rlgrap-filename .
DATA lt_line TYPE c VALUE 1.
CLEAR: lv_path , lt_extab .
DATA: lt_data TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE.
DATA: ls_data TYPE alsmex_tabline.
FIELD-SYMBOLS: <fs_value>.
PARAMETERS: p_file LIKE rlgrap-filename MODIF ID m1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_path = 'C:\'
* mask = ',Text Files,*.txt;*.prn,All Files,*.*.'(101)
mask = ',*.xls*.xlsx,*.' " upload for excel
title = 'Select File'(100)
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0 AND sy-subrc <> 3.
ENDIF.
START-OF-SELECTION.
lv_path = p_file .
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' "读取excel文件中的内容
EXPORTING
filename = lv_path "路径
i_begin_col = '1'
i_begin_row = '2'
i_end_col = '37'
i_end_row = '50000'
TABLES
intern = lt_data[].
LOOP AT lt_data INTO ls_data.
ASSIGN COMPONENT ls_data-col OF STRUCTURE lw_extab TO <fs_value>.
"动态方法将值传到相应的内表
<fs_value> = ls_data-value.
AT END OF row.
APPEND lw_extab TO lt_extab.
CLEAR: lw_extab.
ENDAT.
ENDLOOP.
IF sy-subrc = 0.
* DATA lt_02 TYPE TABLE OF ztfz_ccxx_zb007.
* SELECT * FROM ztfz_ccxx_zb007 INTO TABLE lt_02.
* DELETE ztfz_ccxx_zb007 FROM TABLE lt_02.
LOOP AT lt_extab INTO lw_extab.
MOVE-CORRESPONDING lw_extab TO ztfz_ccxx_zb007.
MODIFY ztfz_ccxx_zb007.
ENDLOOP.
ENDIF.
IF sy-subrc <> 0.
MESSAGE '上传失败' TYPE 'S' DISPLAY LIKE 'E'.
ELSE.
MESSAGE '上传成功' TYPE 'S' .
ENDIF.