代码
*&---------------------------------------------------------------------*
*& Report ZRPT_FI_FIXEDASSETS_MAINTAIN
*&---------------------------------------------------------------------*
*& 固定资产导入并折旧
*&---------------------------------------------------------------------*
REPORT zrpt_fi_fixedassets_maintain.
*----------------------------------------------------------------------*
* TABLES
*----------------------------------------------------------------------*
TABLES: sscrfields.
*----------------------------------------------------------------------*
* Types
*----------------------------------------------------------------------*
TYPES: BEGIN OF type_out,
posnr TYPE posnr, "序号
bukrs TYPE anla-bukrs, "公司代码
anln1 TYPE anla-anln1, "资产号
anlkl TYPE anla-anlkl, "资产类
txt50 TYPE anla-txt50, "资产描述
sernr TYPE anla-sernr, "序列号
invnr TYPE anla-invnr, "库存编号
menge TYPE anla-menge, "数量
meins TYPE anla-meins, "基本单位
aktiv TYPE anla-aktiv, "资产化日期
kostl TYPE anlz-kostl, "成本中心
kostlv TYPE anlz-kostl, "责任成本中心
werks TYPE anlz-werks, "工厂
stort TYPE anlz-stort, "位置
raumn TYPE anlz-raumn, "房间
lifnr TYPE anla-lifnr, "供应商
afabe TYPE anlb-afabe, "折旧范围
kansw TYPE anlc-kansw, "购置价值
knafa TYPE anlc-knafa, "累计折旧
nafag TYPE anlc-nafag, "本年折旧
ndjar TYPE anlb-ndjar, "使用年限
ndper TYPE anlb-ndper, "期间
afasl TYPE anlb-afasl, "折旧码
herst TYPE anla-herst, "制造商
txa50 TYPE anla-txa50, "描述扩展
ord41 TYPE anla-ord41, "评审小组1
ord42 TYPE anla-ord42, "评审小组2
ord43 TYPE anla-ord43, "评审小组3
* anln1 TYPE anla-anln1, "资产号
anln2 TYPE anla-anln2, "子资产号
icon TYPE icon_d, "消息类型
msg TYPE bapi_msg, "消息
sel TYPE c,
END OF type_out.
*定义内表
DATA: gt_tab TYPE TABLE OF type_out WITH HEADER LINE.
*ALV定义
DATA: gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat LIKE LINE OF gt_fieldcat,
gt_layout TYPE TABLE OF lvc_s_layo,
gs_layout TYPE lvc_s_layo,
gt_events TYPE slis_t_event,
gs_events LIKE LINE OF gt_events.
*----------------------------------------------------------------------*
* Definition
*----------------------------------------------------------------------*
DEFINE init_fieldcat.
gs_fieldcat-fieldname = &1. " 需要输出的内表的字段名
gs_fieldcat-coltext = &2. " 列名称
gs_fieldcat-no_zero = &3. "可编辑
gs_fieldcat-ref_table = &4.
gs_fieldcat-ref_field = &5.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
END-OF-DEFINITION.
*----------------------------------------------------------------------*
* Selection Screen
*----------------------------------------------------------------------*
SELECTION-SCREEN:FUNCTION KEY 1.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_file LIKE rlgrap-filename.
PARAMETERS: p_mjahr TYPE mjahr OBLIGATORY .
PARAMETERS:
P_SUB TYPE CHAR1 AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK desc WITH FRAME TITLE blktext1.
SELECTION-SCREEN COMMENT 1(78) txt1.
SELECTION-SCREEN END OF BLOCK desc.
*&---------------------------------------------------------------------*
*& Initialization
*&---------------------------------------------------------------------*
INITIALIZATION.
DATA:
LV_REPID TYPE SY-REPID.
LV_REPID = SY-REPID.
p_mjahr = sy-datum+0(4).
sscrfields-functxt_01 = icon_export && '模版下载'.
* 获取程序执行记录
PERFORM frm_get_rptrunif(zabap_common_program) USING '20230313'
CHANGING blktext1 txt1 lv_repid.
*&---------------------------------------------------------------------*
*& At Selection-Screen
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
IF sscrfields-ucomm = 'FC01'.
PERFORM frm_get_model USING 'ZRPT_FI_FIXEDASSETS_MAINTAIN'.
ELSEIF sy-ucomm <> 'FC01' AND p_file IS INITIAL.
MESSAGE e055(00).
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM frm_f4."路径搜索帮助打开
*&---------------------------------------------------------------------*
*& Start-Of-Selection
*&---------------------------------------------------------------------*
START-OF-SELECTION.
DATA:
LV_STDATUM TYPE SY-DATUM,
LV_STUZEIT TYPE SY-UZEIT.
LV_STDATUM = SY-DATUM. "程序执行日期
LV_STUZEIT = SY-UZEIT. "程序执行时间
PERFORM frm_upload_data.
PERFORM frm_getdata.
* 写入执行记录
PERFORM frm_writerptrunrecord(zabap_common_program)
USING '20230313' LV_STDATUM LV_STUZEIT .
PERFORM frm_layout.
PERFORM frm_fieldcat.
PERFORM frm_output.
*&---------------------------------------------------------------------*
*& Form FRM_GETDATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_getdata .
LOOP AT gt_tab.
gt_Tab-anln1 = |{ gt_tab-anln1 ALPHA = IN }|.
gt_tab-kostl = |{ gt_tab-kostl ALPHA = IN }|.
gt_tab-kostlv = |{ gt_tab-kostlv ALPHA = IN }|.
gt_tab-lifnr = |{ gt_tab-lifnr ALPHA = IN }|.
IF P_SUB IS NOT INITIAL.
SELECT SINGLE COUNT(*)
FROM ANLA
WHERE BUKRS = gt_Tab-BUKRS
AND ANLN1 = GT_TAB-ANLN1.
IF SY-SUBRC <> 0.
gt_tab-ICON = icon_led_red.
gt_tab-msg = '对应的主资产不存在,无法创建'.
ENDIF.
ENDIF.
MODIFY gt_tab.
ENDLOOP.
SORT gt_tab BY posnr.
ENDFORM. " FRM_GETDATA
*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT
*----------------------------------------------------------------------*
FORM frm_layout .
gs_layout-zebra = 'X' . " 使ALV界面呈现颜色交替
gs_layout-sel_mode = 'A' . " 选择模式,“A”在最左端有选择按钮
gs_layout-cwidth_opt = 'X' . " 自动优化列宽
gs_layout-detailinit = 'X' . " 是否出现细节屏幕
gs_layout-box_fname = 'SEL' . " 选中行
ENDFORM. " FRM_LAYOUT
*&---------------------------------------------------------------------*
*& Form FRM_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_fieldcat .
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'ICON' '' '' '标识' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'MSG' '' '' '消息' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'ANLN1' 'ANLA' 'ANLN1' '资产号' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'ANLN2' 'ANLA' 'ANLN2' '子资产号' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'POSNR' 'VBAP' 'POSNR' '序号' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'BUKRS' 'ANLA' 'BUKRS' '公司代码' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'ANLKL' 'ANLA' 'ANLKL' '资产类' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'TXT50' 'ANLA' 'TXT50' '资产描述' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'SERNR' 'ANLA' 'SERNR' '序列号' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'INVNR' 'ANLA' 'INVNR' '库存编号' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'MENGE' 'ANLA' 'MENGE' '数量' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'MEINS' 'ANLA' 'MEINS' '基本单位' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'AKTIV' 'ANLA' 'AKTIV' '资产化日期' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'KOSTL' 'ANLZ' 'KOSTL' '成本中心' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'KOSTLV' 'ANLZ' 'KOSTL' '责任成本中心' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'WERKS' 'ANLZ' 'WERKS' '工厂' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'STORT' 'ANLZ' 'STORT' '位置' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'RAUMN' 'ANLZ' 'RAUMN' '房间' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'LIFNR' 'ANLA' 'LIFNR' '供应商' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'AFABE' 'ANLB' 'AFABE' '折旧范围' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'KANSW' 'ANLC' 'KANSW' '购置价值' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'KNAFA' 'ANLC' 'KNAFA' '累计折旧' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'NAFAG' 'ANLC' 'NAFAG' '本年折旧' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'NDJAR' 'ANLB' 'NDJAR' '使用年限' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'NDPER' 'ANLB' 'NDPER' '期间' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'AFASL' 'ANLB' 'AFASL' '折旧码' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'HERST' 'ANLA' 'HERST' '制造商' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'TXA50' 'ANLA' 'TXA50' '描述扩展' '' '' '' '' ''.
PERFORM frm_field_lvc TABLES gt_fieldcat USING 'ORD41' 'ANLA' 'ORD41' '模/盘具类型' '' '' '' '' ''.
* PERFORM frm_field_lvc TABLES gt_fieldcat USING 'ORD42' 'ANLA' 'ORD42' '标签打印' '' '' '' '' ''.
ENDFORM. " FRM_FIELDCAT
*&---------------------------------------------------------------------*
*& Form FRM_FIELD_LVC
*&---------------------------------------------------------------------*
* 设置字段目录
*----------------------------------------------------------------------*
FORM frm_field_lvc TABLES pt_fieldcat_lvc STRUCTURE lvc_s_fcat
USING pv_fieldname TYPE lvc_rfname
pv_ref_table TYPE lvc_tname
pv_ref_field TYPE lvc_rfname
pv_text TYPE string
pv_edit TYPE c
pv_nzero TYPE c
pv_f4 TYPE c
pv_no_out TYPE c
pv_outputlen TYPE i.
DATA:ls_fieldcat_lvc TYPE lvc_s_fcat.
CLEAR ls_fieldcat_lvc.
ls_fieldcat_lvc-fieldname = pv_fieldname.
ls_fieldcat_lvc-ref_field = pv_ref_field.
ls_fieldcat_lvc-ref_table = pv_ref_table.
ls_fieldcat_lvc-colddictxt = 'L'.
ls_fieldcat_lvc-scrtext_l = pv_text.
ls_fieldcat_lvc-edit = pv_edit.
ls_fieldcat_lvc-no_zero = pv_nzero.
ls_fieldcat_lvc-f4availabl = pv_f4.
ls_fieldcat_lvc-no_out = pv_no_out.
ls_fieldcat_lvc-outputlen = pv_outputlen.
APPEND ls_fieldcat_lvc TO pt_fieldcat_lvc.
ENDFORM. "FRM_FIELD_LVC
*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_output .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'ALV_PF_STATUS'
i_callback_user_command = 'FRM_USER_COMMAD'
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
TABLES
t_outtab = gt_tab
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. " FRM_OUTPUT
*&---------------------------------------------------------------------*
*& Form alv_pf_status
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM alv_pf_status USING rt_extab TYPE slis_t_extab. "#EC *
SET PF-STATUS 'STANDARD'.
ENDFORM. "alv_pf_status
*&---------------------------------------------------------------------*
*& Form frm_user_commad
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_user_commad USING p_ucomm TYPE sy-ucomm p_rs_selfield TYPE slis_selfield.
CASE p_ucomm.
WHEN '&CRET'.
PERFORM frm_create. "创建
WHEN OTHERS.
ENDCASE.
* ALV刷新
PERFORM frm_refresh.
ENDFORM. "frm_user_commad
*&---------------------------------------------------------------------*
*& Form FRM_REFRESH
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_refresh .
DATA: gcl_grid TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = gcl_grid.
gs_layout-no_toolbar = 'X' . "隐藏工具栏
CALL METHOD gcl_grid->set_frontend_layout
EXPORTING
is_layout = gs_layout. " 自动优化列宽
CALL METHOD gcl_grid->check_changed_data.
CALL METHOD gcl_grid->refresh_table_display.
ENDFORM. "frm_refresh
*&---------------------------------------------------------------------*
*& Form FRM_F4
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_f4 .
CALL FUNCTION 'WS_FILENAME_GET' "Get file name
EXPORTING
mask = ',*.* ,*.*.' "',*.xls,*.xlsx.'
mode = '0'
title = TEXT-h10
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_create .
DATA: ls_key TYPE bapi1022_key,
ls_generaldata TYPE bapi1022_feglg001,
ls_generaldatax TYPE bapi1022_feglg001x,
ls_postinginformation TYPE bapi1022_feglg002,
ls_postinginformationx TYPE bapi1022_feglg002x,
ls_timedependentdata TYPE bapi1022_feglg003,
ls_timedependentdatax TYPE bapi1022_feglg003x,
ls_allocations TYPE bapi1022_feglg004,
ls_allocationsx TYPE bapi1022_feglg004x,
ls_origin TYPE bapi1022_feglg009,
ls_originx TYPE bapi1022_feglg009x,
ls_depreciationareas TYPE bapi1022_dep_areas,
ls_depreciationareasx TYPE bapi1022_dep_areasx,
lt_depreciationareas TYPE TABLE OF bapi1022_dep_areas,
lt_depreciationareasx TYPE TABLE OF bapi1022_dep_areasx,
ls_cumulatedvalues TYPE bapi1022_cumval,
lt_cumulatedvalues TYPE TABLE OF bapi1022_cumval,
ls_postedvalues TYPE bapi1022_postval,
lt_postedvalues TYPE TABLE OF bapi1022_postval,
ls_extensionin TYPE bapiparex,
lt_extensionin TYPE TABLE OF bapiparex,
ls_return TYPE bapiret2,
lt_return TYPE TABLE OF bapiret2,
lt_transactions TYPE TABLE OF bapi1022_trtype,
ls_transactions TYPE bapi1022_trtype.
FIELD-SYMBOLS: <ls_tab> TYPE type_out.
DATA:
LV_XSUB TYPE CHAR1,
lv_ann1 TYPE bapi1022_1-assetmaino, "固定资产编号
lv_area TYPE bf_afabe_d. "折旧范围
IF P_SUB IS NOT INITIAL.
LV_XSUB = 'X'.
ENDIF.
lv_area = '01'. "
LOOP AT gt_tab ASSIGNING <ls_tab> WHERE ICON <> icon_led_red.
AT NEW posnr.
CLEAR ls_key.
ls_key-companycode = <ls_tab>-bukrs.
ls_key-asset = <ls_tab>-anln1.
*-- 常规
CLEAR: ls_generaldata, ls_generaldatax.
ls_generaldata-assetclass = <ls_tab>-anlkl. "资产分类
ls_generaldata-descript = <ls_tab>-txt50. "资产描述
ls_generaldata-descript2 = <ls_tab>-txa50. "附加资产描述
ls_generaldata-serial_no = <ls_tab>-sernr. "序列号
ls_generaldata-invent_no = <ls_tab>-invnr. "库存编号
ls_generaldata-quantity = <ls_tab>-menge. "数量
ls_generaldata-base_uom = <ls_tab>-meins. "单位
ls_generaldatax-assetclass = 'X'.
ls_generaldatax-descript = 'X'.
ls_generaldatax-descript2 = 'X'.
ls_generaldatax-serial_no = 'X'.
ls_generaldatax-invent_no = 'X'.
ls_generaldatax-quantity = 'X'.
ls_generaldatax-base_uom = 'X'.
CLEAR: ls_postinginformation, ls_postinginformationx .
ls_postinginformation-cap_date = <ls_tab>-aktiv. "资产化日期
ls_postinginformationx-cap_date = 'X'.
*-- 与时间相关
CLEAR: ls_timedependentdata, ls_timedependentdatax.
ls_timedependentdata-costcenter = <ls_tab>-kostl. "成本中心
ls_timedependentdata-resp_cctr = <ls_tab>-kostlv. "成本中心对资产负责
ls_timedependentdata-plant = <ls_tab>-werks. "工厂
ls_timedependentdata-location = <ls_tab>-stort. "位置
ls_timedependentdata-room = <ls_tab>-raumn. "房间
ls_timedependentdatax-costcenter = 'X'.
ls_timedependentdatax-resp_cctr = 'X'.
ls_timedependentdatax-plant = 'X'.
ls_timedependentdatax-location = 'X'.
ls_timedependentdatax-room = 'X'.
*-- 分配
CLEAR:ls_allocations,ls_allocationsx.
ls_allocations-evalgroup1 = <ls_tab>-ord41. "评估组1
ls_allocations-evalgroup2 = <ls_tab>-ord42. "评估组2
ls_allocations-evalgroup3 = <ls_tab>-ord43. "评估组3
ls_allocationsx-evalgroup1 = 'X'.
ls_allocationsx-evalgroup2 = 'X'.
ls_allocationsx-evalgroup3 = 'X'.
*-- 源
CLEAR: ls_origin, ls_originx.
ls_origin-vendor_no = <ls_tab>-lifnr. "供应商
ls_origin-manufacturer = <ls_tab>-herst. "制造商
IF ls_origin-vendor_no IS NOT INITIAL.
ls_originx-vendor_no = 'X'.
ENDIF.
IF ls_origin-manufacturer IS NOT INITIAL.
ls_originx-manufacturer = 'X'.
ENDIF.
ENDAT.
*- 折旧范围
CLEAR: ls_depreciationareas, ls_depreciationareasx.
ls_depreciationareas-area = <ls_tab>-afabe. "折旧范围
ls_depreciationareas-ulife_yrs = <ls_tab>-ndjar. "使用年限
ls_depreciationareas-ulife_prds = <ls_tab>-ndper. "期间
ls_depreciationareas-dep_key = <ls_tab>-afasl. "折旧码
APPEND ls_depreciationareas TO lt_depreciationareas.
ls_depreciationareasx-area = <ls_tab>-afabe.
ls_depreciationareasx-ulife_yrs = 'X'.
ls_depreciationareasx-ulife_prds = 'X'.
ls_depreciationareasx-dep_key = 'X'.
APPEND ls_depreciationareasx TO lt_depreciationareasx.
* CLEAR: ls_depreciationareas, ls_depreciationareasx.
* ls_depreciationareas-area = '30'.
* ls_depreciationareas-ulife_yrs = <ls_tab>-ndjar.
* ls_depreciationareas-ulife_prds = <ls_tab>-ndper.
* ls_depreciationareas-dep_key = <ls_tab>-afasl.
* APPEND ls_depreciationareas TO lt_depreciationareas.
*
* ls_depreciationareasx-area = '30'.
* ls_depreciationareasx-ulife_yrs = 'X'.
* ls_depreciationareasx-ulife_prds = 'X'.
* ls_depreciationareasx-dep_key = 'X'.
* APPEND ls_depreciationareasx TO lt_depreciationareasx.
IF p_mjahr <> sy-datum+0(4). "往年资产
*-- 增加累计折旧
CLEAR ls_cumulatedvalues.
* ls_cumulatedvalues-fisc_year = p_mjahr. “20230624 DEL 报错往年年度不可用
ls_cumulatedvalues-fisc_year = sy-datum+0(4). "20230624 ADD 会计年度换成当年
* ls_cumulatedvalues-fisc_year = sy-datum+0(4) - 1.
ls_cumulatedvalues-area = <ls_tab>-afabe. "折旧范围
ls_cumulatedvalues-acq_value = <ls_tab>-kansw. "购置价值
ls_cumulatedvalues-ord_dep = <ls_tab>-knafa. "累计折旧
APPEND ls_cumulatedvalues TO lt_cumulatedvalues.
* CLEAR ls_cumulatedvalues.
* ls_cumulatedvalues-fisc_year = p_mjahr .
** ls_cumulatedvalues-fisc_year = sy-datum+0(4) - 1.
* ls_cumulatedvalues-area = '30'.
* ls_cumulatedvalues-acq_value = <ls_tab>-kansw.
* ls_cumulatedvalues-ord_dep = <ls_tab>-knafa.
* APPEND ls_cumulatedvalues TO lt_cumulatedvalues.
ELSE. "本年资产
*-- 增加购置价值
CLEAR:ls_transactions.
ls_transactions-fisc_year = p_mjahr.
ls_transactions-area = <ls_tab>-afabe. "折旧范围
ls_transactions-current_no = '1'.
ls_transactions-amount = <ls_tab>-kansw. "购置价值
ls_transactions-assettrtyp = '100'.
ls_transactions-valuedate = <ls_tab>-aktiv. "资产化日期
ls_transactions-currency = 'CNY'.
APPEND ls_transactions TO lt_transactions.
ENDIF.
*- 增加正常折旧
CLEAR ls_postedvalues.
* ls_postedvalues-fisc_year = p_mjahr. “20230624 DEL 报错往年年度不可用
ls_postedvalues-fisc_year = sy-datum+0(4). "20230624 ADD 会计年度换成当年
ls_postedvalues-area = <ls_tab>-afabe. "折旧范围
ls_postedvalues-ord_dep = <ls_tab>-nafag. "本年折旧
APPEND ls_postedvalues TO lt_postedvalues.
*- 启用平行评估或者需要合并就用30
* CLEAR ls_postedvalues.
* ls_postedvalues-fisc_year = p_mjahr.
* ls_postedvalues-area = '30'.
* ls_postedvalues-ord_dep = <ls_tab>-nafag.
* APPEND ls_postedvalues TO lt_postedvalues.
AT END OF posnr.
CLEAR gt_tab.
CALL FUNCTION 'BAPI_FIXEDASSET_OVRTAKE_CREATE'
EXPORTING
key = ls_key
CREATESUBNUMBER = LV_XSUB
generaldata = ls_generaldata
generaldatax = ls_generaldatax
postinginformation = ls_postinginformation
postinginformationx = ls_postinginformationx
timedependentdata = ls_timedependentdata
timedependentdatax = ls_timedependentdatax
allocations = ls_allocations
allocationsx = ls_allocationsx
origin = ls_origin
originx = ls_originx
IMPORTING
asset = lv_ann1
subnumber = gt_tab-anln2
TABLES
depreciationareas = lt_depreciationareas
depreciationareasx = lt_depreciationareasx
cumulatedvalues = lt_cumulatedvalues
postedvalues = lt_postedvalues
transactions = lt_transactions
extensionin = lt_extensionin
return = lt_return.
LOOP AT lt_return INTO ls_return WHERE type CA 'EXA'.
IF ls_return-message IS INITIAL.
MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number
WITH ls_return-message_v1 ls_return-message_v2 ls_return-message_v3 ls_return-message_v4
INTO ls_return-message.
ENDIF.
gt_tab-msg = gt_tab-msg && ls_return-message && ','.
ENDLOOP.
IF sy-subrc = 0 OR lv_ann1 IS INITIAL.
gt_tab-icon = icon_led_red.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
gt_tab-icon = icon_led_green.
gt_tab-msg = '固定资产创建成功!'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
gt_tab-anln1 = lv_ann1.
MODIFY gt_tab TRANSPORTING anln1 anln2 icon msg WHERE posnr = <ls_tab>-posnr AND ICON <> icon_led_red.
CLEAR:ls_key,
ls_generaldata,
ls_generaldatax,
ls_postinginformation,
ls_postinginformationx,
ls_timedependentdata,
ls_timedependentdatax,
ls_allocations,
ls_allocationsx,
ls_origin,
ls_originx,
ls_depreciationareas,
ls_depreciationareasx,
ls_cumulatedvalues,
ls_postedvalues,
ls_extensionin,
ls_return.
CLEAR: gt_tab, lt_depreciationareas, lt_depreciationareasx,lt_transactions,
lt_cumulatedvalues, lt_postedvalues,lt_extensionin, lt_return.
ENDAT.
ENDLOOP.
UNASSIGN <ls_tab>.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_MODEL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_get_model USING p_objid TYPE wwwdata-objid.
DATA: ls_objdata LIKE wwwdatatab,
lv_destination LIKE rlgrap-filename,
lv_rc LIKE sy-subrc,
lv_errtxt TYPE string,
lv_fullpath TYPE string,
lv_extension TYPE string,
lv_fname LIKE rlgrap-filename,
ls_formkey LIKE wwwdatatab.
lv_extension = p_objid.
PERFORM get_file_name USING '.xls'
'Excel|*.xls;'
CHANGING lv_fullpath.
IF lv_fullpath = space.
MESSAGE '请选择下载文件名' TYPE 'E'.
ELSE.
CONCATENATE lv_fullpath '' INTO lv_fname.
SELECT SINGLE relid objid
FROM wwwdata
INTO CORRESPONDING FIELDS OF ls_objdata
WHERE relid = 'MI'
AND objid = p_objid .
IF sy-subrc NE 0 OR ls_objdata-objid = space.
MESSAGE e001(00) WITH '文件不存在!'.
ELSE.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = ls_objdata
destination = lv_fname
IMPORTING
rc = lv_rc
CHANGING
temp = lv_fname.
IF lv_rc NE 0.
MESSAGE e001(00) WITH '文件下载失败!'.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_FILE_NAME
*&---------------------------------------------------------------------*
* 获取要下载的文件名字
*----------------------------------------------------------------------*
FORM get_file_name USING p_extension
p_file_filter
CHANGING p_fullpath.
DATA: lv_filename TYPE string VALUE '固定资产导入模板',
lv_path TYPE string,
lv_fullpath TYPE string,
lv_titile TYPE string,
lv_init_dir TYPE string.
CLEAR p_fullpath.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = '保存至'
default_extension = 'xlsx'
default_file_name = lv_filename
file_filter = 'Excel Files (*.xlsx)'
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
p_fullpath = lv_fullpath.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_upload_data .
DATA: lt_intern TYPE STANDARD TABLE OF kcde_intern_struc,
ls_excel LIKE LINE OF lt_intern.
FIELD-SYMBOLS: <field> TYPE any.
REFRESH lt_intern.
CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
EXPORTING
filename = p_file "dataset
i_begin_col = 1
i_begin_row = 3
i_end_col = 26
i_end_row = 65535
TABLES
intern = lt_intern.
LOOP AT lt_intern INTO ls_excel.
ASSIGN COMPONENT ls_excel-col OF STRUCTURE gt_tab TO <field>.
<field> = ls_excel-value.
AT END OF row.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = gt_tab-meins
IMPORTING
output = gt_tab-meins
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
APPEND gt_tab.
CLEAR gt_tab.
ENDAT.
ENDLOOP.
LOOP AT gt_tab.
gt_tab-knafa = gt_tab-knafa * -1.
gt_tab-nafag = gt_tab-nafag * -1.
MODIFY gt_tab.
ENDLOOP.
ENDFORM.