REPORT zfic015.
TABLES sscrfields .
INCLUDE zbcx_pub_constants .
INCLUDE zfic015_top.
INCLUDE zfic015_scr.
INCLUDE zfic015_forms.
*-----------------------------------------------------------------------*
*--事件处理
*-----------------------------------------------------------------------*
INITIALIZATION.
gs_functxt-icon_id = icon_export.
gs_functxt-icon_text = TEXT-a01.
sscrfields-functxt_01 = gs_functxt .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
PERFORM frm_get_pc_filename.
AT SELECTION-SCREEN OUTPUT.
AT SELECTION-SCREEN .
CASE sscrfields-ucomm.
WHEN cns_ucomm_fc01.
PERFORM frm_download_template.
WHEN OTHERS.
ENDCASE.
START-OF-SELECTION.
PERFORM frm_status_bar USING 5 TEXT-m03. "正在检查文件...
PERFORM frm_check_file .
PERFORM frm_status_bar USING 15 TEXT-m04. "正在上载数据...
PERFORM frm_upload_data .
PERFORM frm_status_bar USING 25 TEXT-m05. "正在检查数据...
PERFORM frm_check_data .
PERFORM frm_status_bar USING 35 TEXT-m06. "正在显示数据...
PERFORM frm_display_data .
*&---------------------------------------------------------------------*
*& 包含 ZFIC015_TOP
*&---------------------------------------------------------------------*
TYPES:BEGIN OF gty_input,
anln1 TYPE anla-anln1, "主资产编号
anln2 TYPE anla-anln2, "子资产编号
anlkl TYPE anla-anlkl, "资产分类
bukrs TYPE anla-bukrs, "公司代码
txt50 TYPE anla-txt50, "资产描述
txa50 TYPE anla-txa50, "原资产编号
* anlhtxt TYPE anlh-anlhtxt, "资产主号文本
sernr TYPE anla-sernr, "资产规格型号
stort TYPE anlz-stort, "存放地点
werks TYPE anlz-werks, "工厂组织
ord41 TYPE anla-ord41, "使用状态
ord42 TYPE anla-ord42, "来源变动方式-增加
ord43 TYPE anla-ord43, "来源变动方式-减少
ord44 TYPE anla-ord44, "生产性生物资产类型
gdlgrp TYPE anla-gdlgrp, "经济用途
menge TYPE anla-menge, " 数量
meins TYPE anla-meins, "单位
aktiv TYPE anla-aktiv, "资产本金化日期
kostlv TYPE anlz-kostlv, "责任成本中心
kostl TYPE anlz-kostl, "成本中心
aufnr TYPE anlz-caufn, "内部订单
zza01 TYPE anlu-zza01, "技术编码
zza02 TYPE anlu-zza02, "保管人
zza03 TYPE anlu-zza03, "保修期限(年)
zza04 TYPE anlu-zza04, "保修号
zza05 TYPE anlu-zza05, "使用人
zza06 TYPE anlu-zza06, "备注
zza07 TYPE anlu-zza07, "猪只品系
zza08 TYPE anlu-zza08, "养殖部猪耳号
zza09 TYPE anlu-zza09, "性别(公母)
zza10 TYPE anlu-zza10, "饲料环模号
zza11 TYPE anlu-zza11, "质保金及期限
zza12 TYPE anlu-zza12, "房产证号
zza13 TYPE anlu-zza13, "采购凭证编号
zza14 TYPE anlu-zza14, "是否缴纳房产税
afasl TYPE anlb-afasl, "折旧码(账面)
odep_date TYPE anlb-afabg, "折旧开始日期(账面)
ndjar TYPE anlb-ndjar, "使用年限(账面)
ndper TYPE anlb-ndper, "使用月份(账面)
ndabj TYPE bf_ndabj, "到期使用期限(期间)
ndabp TYPE bf_ndabp, "到期使用年限
afabe01 TYPE anlb-afabe, "折旧范围(01)
anbtr01 TYPE anlc-kansw, "原值
kaufw TYPE bf_kaufw, "重估减值
anbtr01_1 TYPE anlc-knafa, "以前年度计提折旧
anbtr01_2 TYPE anlc-nafag , "本年计提折旧
END OF gty_input.
TYPES:BEGIN OF gty_out,
sel TYPE c, "选择
icon TYPE icon_d, "状态指示灯
msg TYPE bapi_msg, "消息文本
type TYPE c, "消息类型
menge1(13) TYPE c,
t_msg TYPE /eacc/t_bapiret2. "消息文本
INCLUDE TYPE gty_input.
TYPES: END OF gty_out.
DATA: gt_out TYPE TABLE OF gty_out,
gs_out TYPE gty_out,
gt_input TYPE TABLE OF gty_input,
gs_input TYPE gty_input.
DATA gs_functxt TYPE smp_dyntxt.
DATA:gs_fieldcat TYPE lvc_s_fcat, "FIELDCAT工作区
gt_fieldcat TYPE lvc_t_fcat, "FIELDCAT内表,存放输出栏位名称的列表
gs_layout TYPE lvc_s_layo. "负责整个ALV的界面布局
CONSTANTS:cns_ucomm TYPE sy-ucomm VALUE 'ONLI',
cns_post TYPE sy-ucomm VALUE 'ZPOST',
cns_ic1 TYPE sy-ucomm VALUE '&IC1',
cns_icon TYPE sy-ucomm VALUE 'ICON'.
CONSTANTS:
* cns_alv_gui TYPE c LENGTH 20 VALUE 'GUI_ALV',
* cns_alv_comand TYPE c LENGTH 30 VALUE 'FRM_ALV_USER_COMMAND',
* cns_alv_status TYPE c LENGTH 30 VALUE 'FRM_ALV_PF_STATUS',
cns_sel TYPE c LENGTH 5 VALUE 'SEL',
cns_title TYPE sy-title VALUE 'T1001'.
*--模板信息
CONSTANTS:
cns_mimeobj_1 TYPE w3objid VALUE sy-repid, "SMW0上传的文件模板的名称
* CNS_FNM_DEFAULT TYPE STRING VALUE '供应商主数据批导模板', "Defualt File
* CNS_EXT_DEFAULT TYPE STRING VALUE '.xlsx',
cns_z003 TYPE string VALUE 'Z003',
cns_z006 TYPE string VALUE 'Z006',
cns_cn5 TYPE string VALUE 'CN5',
cns_green_light TYPE char4 VALUE '@08@', " Green light; positive
cns_yellow_light TYPE char4 VALUE '@09@', "#EC NEEDED " Yellow light; neutral
cns_red_light TYPE char4 VALUE '@0A@', " Red light; negative
cns_zh TYPE char2 VALUE 'ZH',
cns_en TYPE char2 VALUE 'EN',
cns_cny TYPE waers VALUE 'CNY',
cns_nocheck TYPE string VALUE 'Z003/ZV03/Z006',
cns_100 TYPE bf_bwasl VALUE '100',
cns_line TYPE string VALUE '|',
cns_d TYPE c VALUE ',',
cns_00 TYPE c LENGTH 10 VALUE '00',
cns_000 TYPE c LENGTH 10 VALUE '000',
cns_exa TYPE c LENGTH 10 VALUE 'EXA',
cns_lnran TYPE bf_lnran VALUE '00001',
cns_0 TYPE d VALUE '00000000',
cns_bapi TYPE te_struc VALUE 'BAPI_TE_ANLU'.
DEFINE check_initial.
IF &1 IS INITIAL OR &1 = space.
CONCATENATE &3 &2 INTO &3 SEPARATED BY cns_line.
&4 = zif_bc_cons=>cns_e.
APPEND VALUE #( id = cns_00 number = cns_000 type = zif_bc_cons=>cns_e message_v1 = &2 ) TO &5.
ENDIF.
END-OF-DEFINITION.
DEFINE check_exists.
CONCATENATE &2 &1 INTO &2 SEPARATED BY cns_line.
&3 = zif_bc_cons=>cns_e.
APPEND VALUE #( id = cns_00 number = cns_000 type = zif_bc_cons=>cns_e message_v1 = &1 ) TO &4.
END-OF-DEFINITION.
DEFINE check_date.
IF &1 <> space.
CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
EXPORTING
date = &1
EXCEPTIONS
plausibility_check_failed = 1.
IF sy-subrc <> 0.
CONCATENATE &3 &2 INTO &3 SEPARATED BY cns_line.
&4 = zif_bc_cons=>cns_e.
ENDIF.
ENDIF.
END-OF-DEFINITION.
DEFINE convert_date.
IF &1 = space.
&2 = cns_0.
ELSE.
&2 = &1.
CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
EXPORTING
date = &2
EXCEPTIONS
plausibility_check_failed = 1.
IF sy-subrc <> 0.
CONCATENATE &4 &3 INTO &4 SEPARATED BY cns_line.
&5 = zif_bc_cons=>cns_e.
ENDIF.
APPEND VALUE #( id = cns_00 number = cns_000 type = zif_bc_cons=>cns_e message_v1 = &3 ) TO &6.
ENDIF.
END-OF-DEFINITION.
DEFINE convert_number.
REPLACE ALL OCCURRENCES OF cns_d IN &1 WITH space.
CONDENSE &1 NO-GAPS.
TRY .
&2 = &1.
CATCH cx_root INTO go_exception.
CONCATENATE &4 &3 INTO &4 SEPARATED BY cns_line.
&5 = zif_bc_cons=>cns_e.
APPEND VALUE #( id = cns_00 number = cns_000 type = zif_bc_cons=>cns_e message_v1 = &3 ) TO &6.
ENDTRY.
END-OF-DEFINITION.
DEFINE check_kunnr.
DATA ls_kna1 TYPE kna1.
IF &1 IS NOT INITIAL.
CALL FUNCTION 'KNA1_READ_SINGLE'
EXPORTING
id_kunnr = &1
* ID_CVP_BEHAVIOR =
IMPORTING
es_kna1 = ls_kna1
EXCEPTIONS
not_found = 1
input_not_specified = 2
kunnr_blocked = 3
OTHERS = 4.
IF ls_kna1 IS INITIAL AND sy-subrc <> 0 .
CONCATENATE &2 TEXT-004 INTO &2 SEPARATED BY cns_line.
&3 = zif_bc_cons=>cns_e.
ENDIF.
ENDIF.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& 包含 ZFIC015_SCR
*&---------------------------------------------------------------------*
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN BEGIN OF BLOCK bl WITH FRAME.
PARAMETERS p_fname TYPE string MEMORY ID f1.
SELECTION-SCREEN END OF BLOCK bl.
*&---------------------------------------------------------------------*
*& 包含 ZFIC015_FORMS
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form frm_get_pc_filename
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_pc_filename .
DATA: lv_rc TYPE i, "返回结果
lv_title TYPE string,
lt_file TYPE filetable, "返回文件路径内表
ls_file TYPE file_table. "返回文件路径内表工作区
CONSTANTS: cns_exten TYPE string VALUE '*.xlsx,*.xls',
cns_filter TYPE string VALUE 'Excel Files (*.xlsx)|*.xlsx|Excel Files (*.xls)|*.xls|All Files (*.*)|*.*',
cns_intdir TYPE string VALUE 'C:\'.
CLEAR: lv_rc, lt_file[], ls_file.
lv_title = TEXT-m01 .
CALL METHOD cl_gui_frontend_services=>file_open_dialog "读取文件路径对话框
EXPORTING
window_title = lv_title
default_extension = cns_exten
file_filter = cns_filter
initial_directory = cns_intdir
CHANGING
file_table = lt_file
rc = lv_rc.
IF lt_file[] IS NOT INITIAL. "返回文件路径给屏幕字段
READ TABLE lt_file INTO ls_file INDEX 1.
IF sy-subrc = 0.
p_fname = ls_file-filename.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_download_template
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_download_template .
DATA: lv_title TYPE string,
lv_file_name TYPE string,
lv_temp_name TYPE string.
lv_title = TEXT-c01 .
lv_file_name = TEXT-c02 .
lv_temp_name = sy-repid .
CALL METHOD zcl_bc_public_method=>mt_template_download
EXPORTING
iv_title = lv_title "提示框文本
iv_file_name = lv_file_name "下载后的文件名称
iv_temp_name = lv_temp_name. "模版名称
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_check_file
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_check_file .
DATA: lv_filename TYPE string, "文件路径
lv_result TYPE abap_bool. "执行结果
* 检查文件类型
CLEAR lv_result.
lv_filename = p_fname.
CALL METHOD cl_gui_frontend_services=>file_exist "检查文件路径是否存在
EXPORTING
file = lv_filename
RECEIVING
result = lv_result
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
wrong_parameter = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0 OR lv_result = abap_false.
MESSAGE TEXT-m02 TYPE zif_bc_cons=>cns_e .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_status_bar
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_5
*& --> TEXT_M03
*&---------------------------------------------------------------------*
FORM frm_status_bar USING uv_percent uv_message.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = uv_percent
text = uv_message.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_upload_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_upload_data .
DATA: lt_excel TYPE TABLE OF zbcs_alsmex_tabline,
lv_sheet_name TYPE char80.
DATA: ls_return TYPE zbcs_data_status .
FIELD-SYMBOLS: <lfs_value>.
CLEAR: gt_out[],gt_input[].
lv_sheet_name = TEXT-002 .
* 读取数据到内表
*-----------------------------------------------------------------*
*--EXCEL 数据读取
*-----------------------------------------------------------------*
CALL METHOD zcl_bc_tools=>mt_excel_read
EXPORTING
iv_flag = abap_true
iv_file = p_fname
iv_col_beg = 2
iv_row_beg = 7
iv_col_end = 80
iv_row_end = 9999
iv_sheet = lv_sheet_name
IMPORTING
es_return = ls_return
et_inter = lt_excel.
IF ls_return-status = zif_bc_cons=>cns_e. "读取EXCEL 数据失败
MESSAGE TEXT-m01 TYPE zif_bc_cons=>cns_e.
ELSE.
SORT lt_excel BY row col.
"#EC CI_LOOP_INTO_HL
LOOP AT lt_excel INTO DATA(ls_excel).
ASSIGN COMPONENT ls_excel-col OF STRUCTURE gs_input TO <lfs_value>.
<lfs_value> = ls_excel-value.
AT END OF row.
APPEND gs_input TO gt_input.
CLEAR gs_input.
ENDAT.
ENDLOOP.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_check_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_check_data .
**成本中心检查
WITH +data AS ( SELECT DISTINCT kostl FROM @gt_input AS lt )
SELECT a~kostl
FROM csks AS a
INNER JOIN +data AS b ON b~kostl = a~kostl
INTO TABLE @DATA(lt_csks).
SORT lt_csks[] BY kostl.
***资产编码检查
WITH +data AS ( SELECT DISTINCT bukrs,anln1,anln2 FROM @gt_input AS lt )
SELECT a~bukrs,
a~anln1,
a~anln2
FROM anla AS a
INNER JOIN +data AS b ON b~anln1 = a~anln1 AND b~anln2 = a~anln2 AND b~bukrs = a~bukrs
INTO TABLE @DATA(lt_anla).
SORT lt_anla[] BY bukrs anln1 anln2.
***折旧范围检查
WITH +data AS ( SELECT DISTINCT bukrs,afabe01 FROM @gt_input AS lt )
SELECT a~comp_code AS bukrs,
a~depr_area AS afabe01
FROM faa_derp_area AS a
INNER JOIN +data AS b ON b~bukrs = a~comp_code AND b~afabe01 = a~depr_area
INTO TABLE @DATA(lt_faa_derp_area).
SORT lt_faa_derp_area[] BY bukrs afabe01.
LOOP AT gt_input ASSIGNING FIELD-SYMBOL(<lfs_input>).
CLEAR gs_out.
MOVE-CORRESPONDING <lfs_input> TO gs_out.
***转化大写
TRANSLATE: gs_out-anlkl TO UPPER CASE,
gs_out-bukrs TO UPPER CASE,
gs_out-kostl TO UPPER CASE,
gs_out-afasl TO UPPER CASE.
* 成本中心内部表示转换
gs_out-anln1 = |{ gs_out-anln1 ALPHA = IN }|.
gs_out-anln2 = |{ gs_out-anln2 ALPHA = IN }|.
gs_out-kostl = |{ gs_out-kostl ALPHA = IN }|.
gs_out-anlkl = |{ gs_out-anlkl ALPHA = IN }|.
**必输检查
check_initial:gs_out-anlkl TEXT-005 gs_out-msg gs_out-type gs_out-t_msg,
gs_out-bukrs TEXT-006 gs_out-msg gs_out-type gs_out-t_msg,
gs_out-txt50 TEXT-009 gs_out-msg gs_out-type gs_out-t_msg,
gs_out-menge TEXT-008 gs_out-msg gs_out-type gs_out-t_msg,
gs_out-kostl TEXT-012 gs_out-msg gs_out-type gs_out-t_msg,
gs_out-afasl TEXT-013 gs_out-msg gs_out-type gs_out-t_msg,
* gs_out-ndjar TEXT-014 gs_out-msg gs_out-type gs_out-t_msg,
* gs_out-ndper TEXT-015 gs_out-msg gs_out-type gs_out-t_msg,
gs_out-anbtr01 TEXT-016 gs_out-msg gs_out-type gs_out-t_msg.
IF gs_out-type IS INITIAL.
***格式检查
convert_date <lfs_input>-aktiv gs_out-aktiv TEXT-007 gs_out-msg gs_out-type gs_out-t_msg.
convert_date <lfs_input>-odep_date gs_out-odep_date TEXT-017 gs_out-msg gs_out-type gs_out-t_msg.
* convert_number <lfs_input>-menge gs_out-menge TEXT-008 gs_out-msg gs_out-type gs_out-t_msg.
**成本中心是否存在
IF gs_out-kostl IS NOT INITIAL AND NOT line_exists( lt_csks[ kostl = gs_out-kostl ] ).
DATA(lv_kostl) = gs_out-kostl && TEXT-018 .
check_exists lv_kostl gs_out-msg gs_out-type gs_out-t_msg.
ENDIF.
IF gs_out-anln1 IS NOT INITIAL AND NOT line_exists( lt_anla[ bukrs = gs_out-bukrs anln1 = gs_out-anln1 ] ).
DATA(lv_anln1) = gs_out-anln1 && TEXT-068.
check_exists lv_anln1 gs_out-msg gs_out-type gs_out-t_msg.
ENDIF.
IF gs_out-afabe01 IS NOT INITIAL AND NOT line_exists( lt_faa_derp_area[ bukrs = gs_out-bukrs afabe01 = gs_out-afabe01 ] ).
DATA(lv_afabe01) = gs_out-afabe01 && TEXT-069.
check_exists lv_afabe01 gs_out-msg gs_out-type gs_out-t_msg.
ENDIF.
ENDIF.
IF gs_out-type IS NOT INITIAL.
gs_out-icon = cns_red_light.
ENDIF.
SHIFT gs_out-msg LEFT DELETING LEADING cns_line.
##UOM_IN_MES
WRITE gs_out-menge TO gs_out-menge1 NO-GROUPING DECIMALS 0.
APPEND gs_out TO gt_out.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_display_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_display_data .
DATA: lwa_grid_settings TYPE lvc_s_glay.
"ALV 输出
PERFORM frm_set_fieldcat.
PERFORM frm_set_layout .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = cns_alv_status "cns_status 按钮
i_callback_user_command = cns_alv_comand "捕获操作命令
is_layout_lvc = gs_layout "lvc布局变量
it_fieldcat_lvc = gt_fieldcat "字段目录变量
i_grid_settings = lwa_grid_settings
i_save = zif_bc_cons=>cns_a
TABLES
t_outtab = gt_out "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.
*&---------------------------------------------------------------------*
*& Form frm_set_status
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_alv_pf_status USING ut_extab TYPE slis_t_extab ##CALLED.
SET PF-STATUS cns_alv_gui ##STAT_UNDEF."EXCLUDING ct_extab.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_user_command
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_alv_user_command USING u_ucomm TYPE sy-ucomm
us_selfield TYPE slis_selfield ##CALLED.
DATA:lo_grid TYPE REF TO cl_gui_alv_grid.
DATA lv_answer .
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lo_grid.
CALL METHOD lo_grid->check_changed_data.
CASE u_ucomm .
WHEN cns_post .
IF line_exists( gt_out[ sel = abap_true ] ).
PERFORM frm_fixedasset_ovrtake_create. "批量过账
ELSE.
MESSAGE TEXT-067 TYPE zif_bc_cons=>cns_s DISPLAY LIKE zif_bc_cons=>cns_e.
ENDIF.
WHEN cns_ic1. "单击
READ TABLE gt_out ASSIGNING FIELD-SYMBOL(<fs_out>) INDEX us_selfield-tabindex.
***消息展示
IF us_selfield-fieldname = cns_icon AND <fs_out>-icon IS NOT INITIAL.
CALL FUNCTION 'FINB_BAPIRET2_DISPLAY'
EXPORTING
it_message = <fs_out>-t_msg.
ENDIF.
ENDCASE.
us_selfield-refresh = abap_true.
us_selfield-col_stable = abap_true.
us_selfield-row_stable = abap_true.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_fieldcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_fieldcat .
CONSTANTS: cns_space TYPE c LENGTH 5 VALUE 'SPACE' .
DATA:ls_fieldcat TYPE lvc_s_fcat,
lv_pos TYPE i.
DEFINE mcr_fieldcat_set.
lv_pos = lv_pos + 1.
ls_fieldcat-col_pos = lv_pos.
ls_fieldcat-fieldname = '&1'.
ls_fieldcat-coltext = &2.
ls_fieldcat-scrtext_l = &2.
ls_fieldcat-scrtext_m = &2.
ls_fieldcat-scrtext_s = &2.
ls_fieldcat-ref_table = '&3'.
ls_fieldcat-ref_field = '&4'.
ls_fieldcat-edit = &5.
ls_fieldcat-outputlen = &6.
ls_fieldcat-key = &7.
ls_fieldcat-checkbox = &8 .
ls_fieldcat-hotspot = &9 .
ls_fieldcat-lzero = space .
* LS_FIELDCAT-JUST = &A .
* LS_FIELDCAT-decimals_o = 0 .
ls_fieldcat-scrtext_l = ls_fieldcat-coltext .
ls_fieldcat-scrtext_m = ls_fieldcat-coltext .
ls_fieldcat-scrtext_s = ls_fieldcat-coltext .
IF ls_fieldcat-ref_table EQ cns_space OR
ls_fieldcat-ref_field EQ cns_space .
CLEAR:ls_fieldcat-ref_table,ls_fieldcat-ref_field .
ENDIF.
ls_fieldcat-col_opt = zif_bc_cons=>cns_a. "自动优化列宽
APPEND ls_fieldcat TO gt_fieldcat .
CLEAR ls_fieldcat.
END-OF-DEFINITION.
REFRESH: gt_fieldcat[] .
mcr_fieldcat_set:
icon TEXT-020 space space space space space space space ," LED
msg TEXT-021 space space space space space space space ,"消息文本
anln1 TEXT-022 anla anln1 space space space space space ,"主资产编号
anln2 TEXT-023 anln1 anln2 space space space space space ,"子资产编号
anlkl TEXT-024 anln1 anlkl space space space space space ,"资产分类
bukrs TEXT-025 space space space space space space space ,"公司代码
txt50 TEXT-026 anla txt50 space space space space space ,"资产描述
txa50 TEXT-027 anla txa50 space space space space space ,"原资产编号
sernr TEXT-028 anla sernr space space space space space ,"资产规格型号
stort TEXT-029 space space space space space space space ,"存放地点
werks TEXT-030 space space space space space space space ,"工厂组织
ord41 TEXT-032 space space space space space space space ,"使用状态
ord42 TEXT-033 space space space space space space space ,"来源变动方式-增加
ord43 TEXT-034 space space space space space space space ,"来源变动方式-减少
ord44 TEXT-034 space space space space space space space ,"生产性生物资产类型
gdlgrp TEXT-035 space space space space space space space ,"经济用途
menge TEXT-036 space space space space space space space ,"数量
meins TEXT-037 anla meins space space space space space ,"单位
aktiv TEXT-038 anla aktiv space space space space space ,"资产本金化日期
kostlv TEXT-039 anlz kostlv space space space space space ,"责任成本中心
kostl TEXT-040 anlz kostl space space space space space ,"成本中心
caufn TEXT-041 anlz caufn space space space space space ,"内部订单
zza01 TEXT-042 anlu zza01 space space space space space ,"技术编码
zza02 TEXT-043 anlu zza02 space space space space space ,"保管人
zza03 TEXT-044 anlu zza03 space space space space space ,"保修期限
zza04 TEXT-045 anlu zza04 space space space space space ,"保修号
zza05 TEXT-046 anlu zza05 space space space space space ,"使用人
zza06 TEXT-047 anlu zza06 space space space space space ,"备注
zza07 TEXT-048 anlu zza07 space space space space space ,"猪只品系
zza08 TEXT-049 anlu zza08 space space space space space ,"养殖部猪耳号
zza09 TEXT-050 anlu zza09 space space space space space ,"性别(公母)
zza10 TEXT-051 anlu zza10 space space space space space ,"饲料环模号
zza11 TEXT-052 anlu zza11 space space space space space ,"质保金及期限
zza12 TEXT-053 anlu zza12 space space space space space ,"房产证号
zza13 TEXT-054 anlu zza13 space space space space space ,"采购凭证编号
zza14 TEXT-055 anlu zza14 space space space space space ,"是否缴纳房产税
afasl TEXT-056 anlb afasl space space space space space ,"折旧码(账面)
odep_date TEXT-057 space space space space space space space ,"折旧开始日期(账面)
ndjar TEXT-058 space space space space space space space ,"使用年限(账面)
ndper TEXT-059 space space space space space space space ,"使用月份(账面)
ndabj TEXT-060 space space space space space space space ,"到期使用期限(期间)
ndabp TEXT-061 space space space space space space space ,"到期使用年限
afabe01 TEXT-062 space space space space space space space ,"折旧范围(01)
anbtr01 TEXT-063 space space space space space space space ,"原值
kaufw TEXT-064 space space space space space space space ,"重估减值
anbtr01_1 TEXT-065 space space space space space space space ,"以前年度计提折旧
anbtr01_2 TEXT-066 space space space space space space space ."本年计提折旧
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_layout
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_layout .
gs_layout = VALUE #( zebra = abap_true
* cwidth_opt = abap_true
sel_mode = zif_bc_cons=>cns_d
* sgl_clk_hd = cns_pick
box_fname = cns_sel
).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_fixedasset_ovrtake_create
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_fixedasset_ovrtake_create .
DATA: ls_key TYPE bapi1022_key,
ls_generaldata LIKE bapi1022_feglg001,
ls_generaldatax LIKE bapi1022_feglg001x,
ls_inventory TYPE bapi1022_feglg011,
ls_inventoryx TYPE bapi1022_feglg011x,
ls_postinginformation LIKE bapi1022_feglg002,
ls_postinginformationx LIKE bapi1022_feglg002x,
ls_timedependentdata LIKE bapi1022_feglg003,
ls_timedependentdatax LIKE bapi1022_feglg003x,
ls_allocations LIKE bapi1022_feglg004,
ls_allocationsx LIKE bapi1022_feglg004x,
ls_origin LIKE bapi1022_feglg009,
ls_originx LIKE bapi1022_feglg009x,
ls_investacctassignmnt LIKE bapi1022_feglg010,
ls_investacctassignmntx LIKE bapi1022_feglg010x,
ls_networthvaluation LIKE bapi1022_feglg006,
ls_networthvaluationx LIKE bapi1022_feglg006x,
ls_assetcreated LIKE bapi1022_reference,
lt_depreciationareas LIKE TABLE OF bapi1022_dep_areas,
lt_depreciationareasx LIKE TABLE OF bapi1022_dep_areasx,
lt_cumulatedvalues LIKE TABLE OF bapi1022_cumval,
lt_postedvalues LIKE TABLE OF bapi1022_postval,
lt_transactions LIKE TABLE OF bapi1022_trtype,
lt_proportionalvalues LIKE TABLE OF bapi1022_propval,
lt_extensionin TYPE TABLE OF bapiparex,
ls_bapi_te_anlu TYPE bapi_te_anlu,
lt_return LIKE TABLE OF bapiret2.
DATA: lv_fisc_year TYPE bapi1022_cumval-fisc_year,
lv_during_fy TYPE c.
DATA:lv_area TYPE anlb-afabe."折旧范围
DATA lv_datum TYPE datum.
DATA lv_flag TYPE c.
DATA lv_anln1 TYPE anla-anln1 .
DATA lv_anln2 TYPE anla-anln2 .
WITH +data AS ( SELECT DISTINCT bukrs FROM @gt_out AS lt )
SELECT a~bukrs,
a~datum
FROM t093c AS a
INNER JOIN +data AS b ON b~bukrs = a~bukrs
INTO TABLE @DATA(lt_t093c).
SORT lt_t093c[] BY bukrs.
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>) WHERE sel = abap_true AND icon <> cns_green_light.
CLEAR:ls_key,
ls_generaldata,
ls_generaldatax,
lv_fisc_year,
lv_during_fy,
ls_postinginformation,
ls_postinginformationx,
ls_timedependentdata,
ls_timedependentdatax,
ls_allocations,
ls_allocationsx,
ls_origin,
ls_originx,
ls_networthvaluation,
ls_networthvaluationx,
ls_assetcreated,
ls_bapi_te_anlu,
lv_datum,
lv_flag,
lv_anln1,
lv_anln2.
REFRESH:lt_return,
lt_postedvalues,
lt_cumulatedvalues,
lt_transactions,
lt_extensionin,
lt_proportionalvalues,
lt_depreciationareas,
lt_depreciationareasx.
CALL FUNCTION 'AISCO_CALCULATE_FIRST_DAY'
EXPORTING
i_bukrs = <fs_out>-bukrs
IMPORTING
e_to_year = lv_fisc_year
e_during_fy = lv_during_fy.
IF <fs_out>-zza14 = TEXT-019.
gs_out-zza14 = abap_true.
ENDIF.
ls_key-companycode = <fs_out>-bukrs. "公司代码
IF <fs_out>-anln1 IS NOT INITIAL.
lv_flag = abap_true.
ls_key-asset = <fs_out>-anln1. "资产号
ENDIF.
IF <fs_out>-anln2 IS NOT INITIAL.
ls_key-subnumber = <fs_out>-anln2. "资产次级编号
ENDIF.
ls_generaldata-assetclass = <fs_out>-anlkl. "资产分类
ls_generaldata-descript = <fs_out>-txt50. "资产描述
ls_generaldata-descript2 = <fs_out>-txa50. "附加资产描述
ls_generaldata-serial_no = <fs_out>-sernr. "资产规格型号
* ls_generaldata-invent_no = <fs_out>-invnr. "库存号
ls_generaldata-quantity = <fs_out>-menge. "数量
ls_generaldata-base_uom = <fs_out>-meins. "基本计量单位
* ls_generaldata-main_descript = pw_itab-anlhtxt. "资产主号说明
ls_generaldatax-assetclass = abap_true. "
ls_generaldatax-descript = abap_true.
ls_generaldatax-descript2 = abap_true.
ls_generaldatax-serial_no = abap_true.
* ls_generaldatax-invent_no = abap_true.
ls_generaldatax-quantity = abap_true.
* ls_generaldatax-main_descript = abap_true.
ls_generaldatax-base_uom = abap_true.
* l_inventory-note = pw_itab-invzu."补充库存说明
* l_inventoryx-note = 'X'.
ls_postinginformation-cap_date = <fs_out>-aktiv. "资产资本化日期
ls_postinginformationx-cap_date = abap_true.
* l_postinginformation-initial_acq = pw_itab-zugdt. "首次购置日期
* l_postinginformationx-initial_acq = 'X'.
* 时间相关信息
ls_timedependentdata-costcenter = <fs_out>-kostl. "成本中心
ls_timedependentdata-resp_cctr = <fs_out>-kostlv. "责任成本中心
* 内部订单
ls_timedependentdata-intern_ord = <fs_out>-aufnr. "内订单号
ls_timedependentdata-location = <fs_out>-stort. "资产地点
ls_timedependentdata-plant = <fs_out>-werks. "工厂
ls_timedependentdatax-costcenter = abap_true.
ls_timedependentdatax-resp_cctr = abap_true.
ls_timedependentdatax-intern_ord = abap_true.
ls_timedependentdatax-location = abap_true.
ls_timedependentdatax-plant = abap_true.
**资产状态,来源变动方式
ls_allocations-evalgroup1 = <fs_out>-ord41."资产状态
ls_allocations-evalgroup2 = <fs_out>-ord42."来源变动方式-增加
ls_allocations-evalgroup3 = <fs_out>-ord43."来源变动方式-减少
ls_allocations-evalgroup4 = <fs_out>-ord44."生产性生物资产类型
ls_allocations-evalgroup5 = <fs_out>-gdlgrp."经济用途
ls_allocationsx-evalgroup1 = abap_true.
ls_allocationsx-evalgroup2 = abap_true.
ls_allocationsx-evalgroup3 = abap_true.
ls_allocationsx-evalgroup4 = abap_true.
ls_allocationsx-evalgroup5 = abap_true.
**账面折旧
APPEND VALUE #( area = <fs_out>-afabe01
dep_key = <fs_out>-afasl
ulife_yrs = <fs_out>-ndjar
ulife_prds = <fs_out>-ndper
odep_start_date = <fs_out>-odep_date )
TO lt_depreciationareas.
APPEND VALUE #( area = <fs_out>-afabe01
dep_key = abap_true
ulife_yrs = abap_true
ulife_prds = abap_true
odep_start_date = abap_true )
TO lt_depreciationareasx.
***本年正常折旧
APPEND VALUE #( fisc_year = lv_fisc_year
area = <fs_out>-afabe01
ord_dep = <fs_out>-anbtr01_2
* rev_repl = <fs_out>-kaufw
* unp_dep = <fs_out>-anbtr01_2 "本年计提折旧
currency = cns_cny )
TO lt_postedvalues.
**"往年折旧
IF <fs_out>-aktiv(4) <> lv_fisc_year.
APPEND VALUE #( fisc_year = lv_fisc_year
area = <fs_out>-afabe01 "以前年度累计折旧
acq_value = <fs_out>-anbtr01 "原值
ord_dep = <fs_out>-anbtr01_1 "以前年度折旧
rev_repl = <fs_out>-kaufw "以前年度重置价值的累计重估
* unp_dep = <fs_out>-anbtr01_2 "以前计提折旧
) TO lt_cumulatedvalues.
ELSE.
READ TABLE lt_t093c INTO DATA(ls_t093c) WITH KEY bukrs = <fs_out>-bukrs BINARY SEARCH.
IF sy-subrc = 0 .
lv_datum = ls_t093c-datum.
ENDIF.
APPEND VALUE #( fisc_year = lv_fisc_year
current_no = cns_lnran
area = <fs_out>-afabe01
assettrtyp = cns_100
valuedate = lv_datum
amount = <fs_out>-anbtr01
currency = cns_cny )
TO lt_transactions.
ENDIF.
***增强字段
ls_bapi_te_anlu-zza01 = <fs_out>-zza01.
ls_bapi_te_anlu-zza02 = <fs_out>-zza02.
ls_bapi_te_anlu-zza03 = <fs_out>-zza03 .
ls_bapi_te_anlu-zza04 = <fs_out>-zza04 .
ls_bapi_te_anlu-zza05 = <fs_out>-zza05 .
ls_bapi_te_anlu-zza06 = <fs_out>-zza06 .
ls_bapi_te_anlu-zza07 = <fs_out>-zza07 .
ls_bapi_te_anlu-zza08 = <fs_out>-zza08 .
ls_bapi_te_anlu-zza09 = <fs_out>-zza09 .
ls_bapi_te_anlu-zza10 = <fs_out>-zza10 .
ls_bapi_te_anlu-zza11 = <fs_out>-zza11 .
ls_bapi_te_anlu-zza12 = <fs_out>-zza12 .
ls_bapi_te_anlu-zza13 = <fs_out>-zza13 .
ls_bapi_te_anlu-zza14 = <fs_out>-zza14 .
APPEND VALUE #( structure = cns_bapi
valuepart1 = ls_bapi_te_anlu )
TO lt_extensionin.
CALL FUNCTION 'BAPI_FIXEDASSET_OVRTAKE_CREATE'
EXPORTING
key = ls_key
* REFERENCE =
createsubnumber = lv_flag
* creategroupasset = 'X'
* testrun = p_testrun
generaldata = ls_generaldata
generaldatax = ls_generaldatax
inventory = ls_inventory
inventoryx = ls_inventoryx
postinginformation = ls_postinginformation
postinginformationx = ls_postinginformationx
timedependentdata = ls_timedependentdata
timedependentdatax = ls_timedependentdatax
allocations = ls_allocations
allocationsx = ls_allocationsx
origin = ls_origin
originx = ls_originx
investacctassignmnt = ls_investacctassignmnt
investacctassignmntx = ls_investacctassignmntx
networthvaluation = ls_networthvaluation
networthvaluationx = ls_networthvaluationx
* REALESTATE =
* REALESTATEX =
* INSURANCE =
* INSURANCEX =
* LEASING =
* LEASINGX =
IMPORTING
* COMPANYCODE =
asset = lv_anln1
subnumber = lv_anln2
assetcreated = ls_assetcreated
TABLES
depreciationareas = lt_depreciationareas
depreciationareasx = lt_depreciationareasx
* INVESTMENT_SUPPORT =
extensionin = lt_extensionin
cumulatedvalues = lt_cumulatedvalues
postedvalues = lt_postedvalues
transactions = lt_transactions
proportionalvalues = lt_proportionalvalues
return = lt_return.
* POSTINGHEADERS =
<fs_out>-t_msg = lt_return.
LOOP AT lt_return INTO DATA(ls_return) WHERE type CA cns_exa. "#EC CI_NESTED
CONCATENATE <fs_out>-msg ls_return-message INTO <fs_out>-msg SEPARATED BY cns_line.
ENDLOOP.
IF sy-subrc = 0 .
SHIFT <fs_out>-msg LEFT DELETING LEADING cns_line.
<fs_out>-icon = cns_red_light.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
READ TABLE lt_return INTO ls_return WITH KEY type = zif_bc_cons=>cns_s.
<fs_out>-msg = ls_return-message.
<fs_out>-anln1 = lv_anln1.
<fs_out>-anln2 = lv_anln2.
<fs_out>-icon = cns_green_light.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
ENDIF.
ENDLOOP.
ENDFORM.
001 必填
002 导入模板
003 格式错误
005 资产分类必填
006 公司代码必填
007 资产资本化日期格式错误
008 数量必填
009 资产描述必填
010 基本计量单位必填
011 资产资本化日期必填
012 成本中心必填
013 折旧码(账面)必填
014 使用年限(账面)必填
015 使用月份(账面)必填
016 原值必填
017 折旧开始日期(账面)格式错误
018 成本中心在系统中不存在,请检查
019 是
020 LED
021 消息文本
022 主资产编号
023 子资产编号
024 资产分类
025 公司代码
026 资产描述
027 原资产编号
028 资产规格型号
029 存放地点
030 工厂组织
032 使用状态
033 来源变动方式-增加
034 来源变动方式-减少
035 经济用途
036 数量
037 单位
038 资产本金化日期
039 责任成本中心
040 成本中心
041 内部订单
042 技术编码
043 保管人
044 保修期限(年)
045 保修号
046 使用人
047 备注
048 猪只品系
049 养殖部猪耳号
050 性别(公母)
051 饲料环模号
052 质保金及期限
053 房产证号
054 采购凭证编号
055 是否缴纳房产税
056 折旧码(账面)
057 折旧开始日期(账面)
058 使用年限(账面)
059 使用月份(账面)
060 到期使用期限(期间)
061 到期使用年限
062 折旧范围(01)
063 原值
064 重估减值
065 以前年度计提折旧
066 本年计提折旧
067 至少选择一行数据
068 资产编号在系统中不存在
069 折旧范围在系统中不存在
A01 模板下载
C01 选择存储路径.
C02 资产批导模板
C03 ZFIC015
M01 数据文件读取失败.
M02 请先检查数据后再导入.
M03 正在检查文件…
M04 正在上载数据…
M05 正在检查数据…
M06 正在显示数据…