SAP ABAP 顾问(开发工程师)能力模型_Terry谈企业数字化的博客-CSDN博客文章浏览阅读304次。目标:基于对SAP abap 顾问能力模型的梳理,给一年左右经验的abaper 快速成长为三年经验提参考ALV/REPORT|SMARTFROM|SCREEN|OLE|BAPI|BDC|PI|IDOC|RFC|API|WEBSERVICE|Enhancement|UserExits|Badi|Debughttps://blog.csdn.net/java_zhong1990/article/details/132469977目标: 掌握SAP FI模块,主要流程相关的BAPI 函数的使用,主要有如下模块:
凭证创建 | 固定资产创建
BAPI是SAP系统标准函数,比如:采购申请创建函数、采购订单创建函数等等。
1.2.1 模块导航
会计凭证创建 | SAP_ABAP_FI_BAPI清单案例教程——采购付款/销售收款_BAPI_ACC_DOCUMENT_POST_F-02-CSDN博客 |
固定资产创建 | SAP_ABAP_FI_BAPI清单案例教程——固定资产创建_BAPI_FIXEDASSET_OVRTAKE_CREATE_AS01-CSDN博客 |
1.2.2 BAPI清单
BAPI_ACC_DOCUMENT_POST | 会计凭证创建 |
BAPI_FIXEDASSET_OVRTAKE_CREATE | 固定资产创建 |
REPORT zficp002.
INCLUDE ZFICP002_TOP.
INCLUDE ZFICP002_FRM.
INITIALIZATION.
PERFORM initialization.
AT SELECTION-SCREEN .
CASE sscrfields-ucomm .
WHEN 'FC01'.
PERFORM download_template
USING
'固定资产切换数据导入模板.xls'
'ZFICP002'.
WHEN OTHERS.
ENDCASE.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file .
PERFORM select_file CHANGING p_file .
START-OF-SELECTION .
PERFORM upload_data .
PERFORM show_data .
*&---------------------------------------------------------------------*
*& 包含 ZFICP002_TOP
*&---------------------------------------------------------------------*
TYPE-POOLS: esp1,slis .
TABLES: sscrfields,t001 .
TYPES: BEGIN OF tt_extd ,
t_msg TYPE esp1_message_tab_type,
style TYPE lvc_t_styl,
END OF tt_extd .
DATA: go_cx TYPE REF TO cx_root,
lv_msg TYPE string,
lv_msg_total TYPE string.
TYPES: BEGIN OF tt_show,
id TYPE num08, "索引号
anlkl TYPE anla-anlkl, "资产分类
bukrs TYPE anla-bukrs, "公司代码
txt50 TYPE anla-txt50, "描述1
txa50 TYPE anla-txa50, "描述2
anlhtxt TYPE anlh-anlhtxt,"资产主号文本
sernr TYPE anla-sernr, "序列号
invnr TYPE anla-invnr, "存货号
menge TYPE anla-menge, "数量
meins TYPE anla-meins, "单位
invzu TYPE anla-invzu, "库存注记
aktiv TYPE anla-aktiv, "资本化日期
kostl TYPE anlz-kostl, "成本中心
kostlv TYPE anlz-kostlv, "责任成本中心
caufn TYPE anlz-caufn, "内部订单
werks TYPE anlz-werks, "工厂
stort TYPE anlz-stort, "位置
raumn TYPE anlz-raumn, "房间
afasl_01 TYPE anlb-afasl, "区域01 折旧码
ndjar_01 TYPE anlb-ndjar, "区域01 计划使用(年)
ndper_01 TYPE anlb-ndper, "区域01 计划使用(月)
afabg_01 TYPE anlb-afabg, "区域01 折旧开始日期
ndabj_01 TYPE anlc-ndabj, "区域01 已折旧时间(年)
ndabp_01 TYPE anlc-ndabp, "区域01 已折旧时间(月)
* afasl_20 TYPE anlb-afasl, "区域20 折旧码
* ndjar_20 TYPE anlb-ndjar, "区域20 计划使用(年)
* ndper_20 TYPE anlb-ndper, "区域20 计划使用(月)
* afabg_20 TYPE anlb-afabg, "区域20 折旧开始日期
* ndabj_20 TYPE anlc-ndabj, "区域20 已折旧时间(年)
* ndabp_20 TYPE anlc-ndabp, "区域20 已折旧时间(月)
bwasl TYPE tabw-bwasl, "交易类型
bzdat TYPE bzdat, "资产价值日
anbtr TYPE anbtr, "金额
budat TYPE budat, "过账日期
kansw_01 TYPE kansw, "区域01 原值
knafa_01 TYPE knafa, "区域01 累计折旧(年前)
nafag_01 TYPE nafag, "区域01 累计折旧(本年)
kaafa_01 TYPE kaafa, "区域01 计划外折旧
* kansw_20 TYPE kansw, "区域20 原值
* knafa_20 TYPE knafa, "区域20 累计折旧(年前)
* nafag_20 TYPE nafag, "区域20 累计折旧(本年)
* kaafa_20 TYPE kaafa, "区域20 计划外折旧
abgja TYPE t093b-abgja,
history, "区分当年数据、历史数据
anln1 TYPE anla-anln1, "主资产号
light. "处理状态
INCLUDE TYPE tt_extd.
TYPES: END OF tt_show .
DATA: gs_key LIKE bapi1022_key , "要创建的关键字字段
gs_generaldata LIKE bapi1022_feglg001 , "通用数据
gs_generaldatax LIKE bapi1022_feglg001x , "通用数据
gs_inventory LIKE bapi1022_feglg011, "库存
gs_inventoryx LIKE bapi1022_feglg011x, "库存
gs_postinginformation LIKE bapi1022_feglg002, "记帐信息
gs_postinginformationx LIKE bapi1022_feglg002x, "记帐信息
gs_timedependentdata LIKE bapi1022_feglg003 , "时间相关的数据
gs_timedependentdatax LIKE bapi1022_feglg003x , "时间相关的数据
lv_asset LIKE bapi1022_1-assetmaino, "主资产号
gt_depreciationareas LIKE TABLE OF bapi1022_dep_areas WITH HEADER LINE, "折旧范围
gt_depreciationareasx LIKE TABLE OF bapi1022_dep_areasx WITH HEADER LINE, "折旧范围
gt_cumulatedvalues LIKE TABLE OF bapi1022_cumval WITH HEADER LINE, "已传输的累计值
gt_postedvalues LIKE TABLE OF bapi1022_postval WITH HEADER LINE, "已过帐的传输值
gt_transactions LIKE TABLE OF bapi1022_trtype WITH HEADER LINE, "年度的转帐过程中历史资产的业务
gt_return LIKE TABLE OF bapiret2 WITH HEADER LINE, "返回参数
gs_return LIKE bapiret2. "返回参数
DATA: gt_show TYPE TABLE OF tt_show WITH HEADER LINE,
ls_msg TYPE esp1_message_wa_type,
lt_msg TYPE esp1_message_tab_type,
gs_layo TYPE lvc_s_layo,
gs_fcat TYPE lvc_s_fcat,
gt_fcat TYPE lvc_t_fcat.
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA: lv_error TYPE c.
"ADD BY HXM 20180115
TYPES: BEGIN OF typ_t093c,
burks TYPE t093c-bukrs,
datum TYPE t093c-datum,
END OF typ_t093c.
DATA:lt_t093c TYPE TABLE OF typ_t093c,
ls_t093c TYPE typ_t093c.
DATA:bzdat TYPE sy-datum.
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-b01 .
PARAMETERS p_file TYPE localfile ."OBLIGATORY .
SELECTION-SCREEN END OF BLOCK b01 .
SELECTION-SCREEN FUNCTION KEY: 1 .
*&---------------------------------------------------------------------*
*& 包含 ZFIDG010_FRM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form SELECT_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--PC_FILE text
*----------------------------------------------------------------------*
FORM select_file CHANGING pc_file.
DATA: lt_filetab TYPE filetable WITH HEADER LINE .
DATA: rc TYPE i,
file_filter TYPE string. "file filter
*定义file filter,注意定义的格式,显示的时候最后一个为默认的显示
*与你定义的DEFAULT_EXTENSION无关
file_filter = 'Excel Files (*.xls)|*.xls|*.xlsx|All Files (*.*)|*.*'.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
* window_title =
default_extension = '*.xls'
* default_filename =
file_filter = file_filter
* with_encoding =
* initial_directory =
* multiselection =
CHANGING
file_table = lt_filetab[]
rc = rc
* user_action =
* file_encoding =
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
IF lt_filetab[] IS NOT INITIAL.
READ TABLE lt_filetab INDEX 1.
pc_file = lt_filetab .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form UPLOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM upload_data .
DATA: lt_data TYPE TABLE OF alsmex_tabline WITH HEADER LINE .
FIELD-SYMBOLS: .
IF p_file IS INITIAL .
MESSAGE '请选择数据文件' TYPE 'S' DISPLAY LIKE 'E' .
STOP .
ENDIF .
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = 5
i_end_col = 60
i_end_row = 20000
TABLES
intern = lt_data
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
LOOP AT lt_data .
AT NEW row .
CLEAR gt_show .
ENDAT .
ASSIGN COMPONENT lt_data-col OF STRUCTURE gt_show TO .
IF sy-subrc EQ 0 .
IF lt_data-col EQ '0008' OR lt_data-col EQ '0031' OR lt_data-col EQ '0033'
OR lt_data-col EQ '0034' OR lt_data-col EQ '0035' OR lt_data-col EQ '0036'
OR lt_data-col EQ '0037' OR lt_data-col EQ '0038' OR lt_data-col EQ '0039'
OR lt_data-col EQ '0040'."数量、金额字段不需要输入','
REPLACE ALL OCCURRENCES OF REGEX ',' IN lt_data-value WITH ''.
ENDIF.
CONDENSE lt_data-value.
"抛出异常
CLEAR: lv_msg.
TRY.
= lt_data-value .
CATCH cx_root INTO go_cx.
lv_msg = go_cx->if_message~get_text( ).
IF lv_msg IS NOT INITIAL .
lv_msg_total = lv_msg_total && lv_msg.
ENDIF .
ENDTRY.
ENDIF .
AT END OF row .
PERFORM conversion_exit_alpha_input USING gt_show-kostl .
PERFORM conversion_exit_alpha_input USING gt_show-kostlv .
PERFORM conversion_exit_alpha_input USING gt_show-anlkl .
PERFORM conversion_exit_alpha_input USING gt_show-caufn .
PERFORM conversion_exit_alpha_input USING gt_show-werks .
PERFORM conversion_exit_alpha_input USING gt_show-invnr .
PERFORM check_data .
IF gt_show-t_msg IS NOT INITIAL .
gt_show-light = '1' .
ENDIF .
APPEND gt_show .
ENDAT .
ENDLOOP .
** 获取过账日期,凭证日期
* IF GT_SHOW[] IS NOT INITIAL.
* CLEAR:LT_T093C ,LS_T093C.
* SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_t093c
* FROM T093C
* FOR ALL ENTRIES IN GT_SHOW
* WHERE BUKRS = GT_SHOW-BUKRS.
*
* READ TABLE LT_T093C INTO LS_T093C INDEX 1.
* ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SHOW_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM show_data .
DEFINE add_fcat.
gs_fcat-fieldname = &1.
gs_fcat-coltext = &2.
gs_fcat-edit = &3.
gs_fcat-checkbox = &4.
gs_fcat-ref_field = &5.
gs_fcat-ref_table = &6.
gs_fcat-cfieldname = &7.
APPEND gs_fcat TO gt_fcat.
CLEAR gs_fcat.
END-OF-DEFINITION.
add_fcat 'LIGHT' '处理状态' '' '' '' '' ''.
add_fcat 'ANLN1' '主资产号' '' '' '' '' ''.
add_fcat 'ANLKL' '资产分类' '' '' '' '' ''.
add_fcat 'BUKRS' '公司代码' '' '' '' '' ''.
add_fcat 'TXT50' '描述1' '' '' '' '' ''.
add_fcat 'TXA50' '描述2' '' '' '' '' ''.
add_fcat 'ANLHTXT' '资产主号文本' '' '' '' '' ''.
add_fcat 'SERNR' '序列号' '' '' '' '' ''.
add_fcat 'MENGE' '数量' '' '' '' '' ''.
add_fcat 'MEINS' '单位' '' '' '' '' ''.
add_fcat 'INVZU' '库存注记' '' '' '' '' ''.
add_fcat 'AKTIV' '资本化日期' '' '' '' '' ''.
add_fcat 'KOSTL' '成本中心' '' '' '' '' ''.
add_fcat 'KOSTLV' '责任成本中心' '' '' '' '' ''.
add_fcat 'CAUFN' '内部订单' '' '' '' '' ''.
add_fcat 'WERKS' '工厂' '' '' '' '' ''.
add_fcat 'STORT' '位置' '' '' '' '' ''.
add_fcat 'RAUMN' '房间' '' '' '' '' ''.
add_fcat 'AFASL_01' '(区域01)折旧码' '' '' '' '' ''.
add_fcat 'NDJAR_01' '(区域01)计划使用(年)' '' '' '' '' ''.
add_fcat 'NDPER_01' '(区域01)计划使用(月)' '' '' '' '' ''.
add_fcat 'AFABG_01' '(区域01)折旧开始日期' '' '' '' '' ''.
add_fcat 'NDABJ_01' '(区域01)已折旧时间(年)' '' '' '' '' ''.
add_fcat 'NDABP_01' '(区域01)已折旧时间(月)' '' '' '' '' ''.
* add_fcat 'AFASL_20' '(区域20)折旧码' '' '' '' '' ''.
* add_fcat 'NDJAR_20' '(区域20)计划使用(年)' '' '' '' '' ''.
* add_fcat 'NDPER_20' '(区域20)计划使用(月)' '' '' '' '' ''.
* add_fcat 'AFABG_20' '(区域20)折旧开始日期' '' '' '' '' ''.
* add_fcat 'NDABJ_20' '(区域20)已折旧时间(年)' '' '' '' '' ''.
* add_fcat 'NDABP_20' '(区域20)已折旧时间(月)' '' '' '' '' ''.
add_fcat 'BWASL' '交易类型' '' '' '' '' ''.
add_fcat 'BZDAT' '资产价值日' '' '' '' '' ''.
add_fcat 'ANBTR' '金额' '' '' '' '' ''.
add_fcat 'BUDAT' '过账日期' '' '' '' '' ''.
add_fcat 'KANSW_01' '(区域01)原值' '' '' '' '' ''.
add_fcat 'KNAFA_01' '(区域01)累计折旧(年前)' '' '' '' '' ''.
add_fcat 'NAFAG_01' '(区域01)累计折旧(本年)' '' '' '' '' ''.
* add_fcat 'KANSW_20' '(区域20)原值' '' '' '' '' ''.
* add_fcat 'KNAFA_20' '(区域20)累计折旧(年前)' '' '' '' '' ''.
* add_fcat 'NAFAG_20' '(区域20)累计折旧(本年)' '' '' '' '' ''.
gs_layo-cwidth_opt = 'X' .
gs_layo-excp_fname = 'LIGHT' .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'PF_STATUS_SET'
i_callback_user_command = 'USER_COMMAND'
is_layout_lvc = gs_layo
it_fieldcat_lvc = gt_fcat
i_default = 'X'
i_save = 'A'
TABLES
t_outtab = gt_show.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form INITIALIZATION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM initialization .
DATA: ls_dyntxt TYPE smp_dyntxt .
ls_dyntxt-icon_id = icon_export.
ls_dyntxt-quickinfo = '模板下载'.
ls_dyntxt-icon_text = '模板下载'.
sscrfields-functxt_01 = ls_dyntxt.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form PF_STATUS_SET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM pf_status_set USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ALV' EXCLUDING rt_extab .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
rs_selfield-refresh = 'X'.
rs_selfield-col_stable = 'X'.
rs_selfield-row_stable = 'X'.
CASE r_ucomm.
WHEN 'CHECK'.
PERFORM acc_document USING 'X' .
WHEN 'POST'.
PERFORM acc_document USING space .
WHEN '&IC1' .
READ TABLE gt_show INDEX rs_selfield-tabindex .
rs_selfield-fieldname = to_upper( rs_selfield-fieldname ).
CASE rs_selfield-fieldname.
WHEN 'LIGHT'.
PERFORM c14z_messages_show_as_popup
TABLES
gt_show-t_msg.
WHEN 'ANLN1' OR 'BUKRS' OR 'ANLKL'.
SET PARAMETER ID 'AN1' FIELD gt_show-anln1.
SET PARAMETER ID 'BUK' FIELD gt_show-bukrs.
CALL TRANSACTION 'AS93' AND SKIP FIRST SCREEN.
WHEN OTHERS.
ENDCASE.
WHEN OTHERS.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ACC_DOCUMENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM acc_document USING pu_check .
DATA:
ls_show TYPE tt_show,
lv_test,
lv_history.
IF pu_check IS NOT INITIAL.
lv_test = 'X'.
ELSE.
lv_test = ''.
ENDIF.
LOOP AT gt_show WHERE anln1 IS INITIAL .
AT NEW id .
CLEAR: gs_key,gs_generaldata,gs_generaldatax,gs_timedependentdata,gs_timedependentdatax,
gs_inventory,gs_inventoryx,gs_postinginformation,gs_postinginformationx,
lv_asset,lv_history.
CLEAR: gt_return,gt_return[],gs_return,
gt_depreciationareas,gt_depreciationareas[],gt_depreciationareasx,gt_depreciationareasx[],
gt_cumulatedvalues,gt_cumulatedvalues[],gt_postedvalues,gt_postedvalues[],
gt_transactions,gt_transactions[].
REFRESH: lt_msg,bdcdata.
ENDAT .
gs_key-companycode = gt_show-bukrs ."公司代码
gs_generaldata-assetclass = gt_show-anlkl."资产分类
gs_generaldata-descript = gt_show-txt50."描述1
gs_generaldata-descript2 = gt_show-txa50."描述2
gs_generaldata-serial_no = gt_show-sernr."序列号
gs_generaldata-invent_no = gt_show-invnr."存货号 add by hxm 20180208
gs_generaldata-quantity = gt_show-menge."数量
gs_generaldata-base_uom = gt_show-meins."单位
gs_generaldata-main_descript = gt_show-anlhtxt."资产主号文本
gs_generaldatax-assetclass = 'X'.
gs_generaldatax-descript = 'X'.
gs_generaldatax-descript2 = 'X'.
gs_generaldatax-serial_no = 'X'.
gs_generaldatax-invent_no = 'X'. "add by hxm 20180208
gs_generaldatax-quantity = 'X'.
gs_generaldatax-base_uom = 'X'.
gs_generaldatax-main_descript = 'X'.
gs_inventory-note = gt_show-invzu."库存注记
gs_inventoryx-note = 'X'.
gs_postinginformation-cap_date = gt_show-aktiv."资本化日期
gs_postinginformationx-cap_date = 'X'.
gs_timedependentdata-costcenter = gt_show-kostl."成本中心
gs_timedependentdata-resp_cctr = gt_show-kostlv."责任成本中心
gs_timedependentdata-intern_ord = gt_show-caufn."内部订单
gs_timedependentdata-plant = gt_show-werks."工厂
gs_timedependentdata-location = gt_show-stort."位置
gs_timedependentdata-room = gt_show-raumn."房间
gs_timedependentdatax-costcenter = 'X'.
gs_timedependentdatax-resp_cctr = 'X'.
gs_timedependentdatax-intern_ord = 'X'.
gs_timedependentdatax-plant = 'X'.
gs_timedependentdatax-location = 'X'.
gs_timedependentdatax-room = 'X'.
""""""""""""""""
""""""""""""""""折旧范围01 20
gt_depreciationareas-area = '01'."实际折旧范围
gt_depreciationareas-dep_key = gt_show-afasl_01."区域01 折旧码
gt_depreciationareas-ulife_yrs = gt_show-ndjar_01."区域01 计划使用(年)
gt_depreciationareas-ulife_prds = gt_show-ndper_01."区域01 计划使用(月)
* gt_depreciationareas-odep_start_date = gt_show-afabg_01."区域01 折旧开始日期
gt_depreciationareas-exp_ulife_yrs = gt_show-ndabj_01."区域01 已折旧时间(年)
gt_depreciationareas-exp_ulife_prds = gt_show-ndabp_01."区域01 已折旧时间(月)
APPEND gt_depreciationareas.
CLEAR: gt_depreciationareas.
gt_depreciationareasx-area = '01'."实际折旧范围
gt_depreciationareasx-dep_key = 'X'.
gt_depreciationareasx-ulife_yrs = 'X'.
gt_depreciationareasx-ulife_prds = 'X'.
* gt_depreciationareasx-odep_start_date = 'X'.
IF gt_show-ndabj_01 IS NOT INITIAL.
gt_depreciationareasx-exp_ulife_yrs = 'X'.
ENDIF.
IF gt_show-ndabp_01 IS NOT INITIAL.
gt_depreciationareasx-exp_ulife_prds = 'X'.
ENDIF.
APPEND gt_depreciationareasx.
CLEAR: gt_depreciationareasx.
gt_depreciationareas-area = '20'."实际折旧范围
gt_depreciationareas-dep_key = gt_show-afasl_01."区域20 折旧码
gt_depreciationareas-ulife_yrs = gt_show-ndjar_01."区域20 计划使用(年)
gt_depreciationareas-ulife_prds = gt_show-ndper_01."区域20 计划使用(月)
* gt_depreciationareas-odep_start_date = gt_show-afabg_20."区域20 折旧开始日期
gt_depreciationareas-exp_ulife_yrs = gt_show-ndabj_01."区域20 已折旧时间(年)
gt_depreciationareas-exp_ulife_prds = gt_show-ndabp_01."区域20 已折旧时间(月)
APPEND gt_depreciationareas.
CLEAR: gt_depreciationareas.
gt_depreciationareasx-area = '20'."实际折旧范围
gt_depreciationareasx-dep_key = 'X'.
gt_depreciationareasx-ulife_yrs = 'X'.
gt_depreciationareasx-ulife_prds = 'X'.
* gt_depreciationareasx-odep_start_date = 'X'.
IF gt_show-ndabj_01 IS NOT INITIAL.
gt_depreciationareasx-exp_ulife_yrs = 'X'.
ENDIF.
IF gt_show-ndabp_01 IS NOT INITIAL.
gt_depreciationareasx-exp_ulife_prds = 'X'.
ENDIF.
APPEND gt_depreciationareasx.
CLEAR: gt_depreciationareasx.
IF gt_show-history EQ 'X'.
lv_history = 'X'.
""""""""""""""""
""""""""""""""""维护资产原值和累计折旧值:ABLDT
SELECT SINGLE abgja INTO @DATA(lv_abgja1) FROM t093b WHERE bukrs EQ @gt_show-bukrs
AND afabe EQ '01'.
SELECT SINGLE abgja INTO @DATA(lv_abgja2) FROM t093b WHERE bukrs EQ @gt_show-bukrs
AND afabe EQ '20'.
ADD 1 TO lv_abgja1.
ADD 1 TO lv_abgja2.
gt_cumulatedvalues-fisc_year = lv_abgja1.
gt_cumulatedvalues-area = '01'."实际折旧范围
gt_cumulatedvalues-acq_value = gt_show-kansw_01."区域01 原值
gt_cumulatedvalues-ord_dep = gt_show-knafa_01."区域01 累计折旧(年前)
gt_cumulatedvalues-unp_dep = gt_show-kaafa_01."区域01 计划外折旧
gt_cumulatedvalues-currency = 'CNY'.
APPEND gt_cumulatedvalues.
CLEAR: gt_cumulatedvalues.
CLEAR: gt_cumulatedvalues.
gt_cumulatedvalues-fisc_year = lv_abgja2.
gt_cumulatedvalues-area = '30'."实际折旧范围
gt_cumulatedvalues-acq_value = gt_show-kansw_01."区域20 原值
gt_cumulatedvalues-ord_dep = gt_show-knafa_01."区域20 累计折旧(年前)
gt_cumulatedvalues-unp_dep = gt_show-kaafa_01."区域20 计划外折旧
gt_cumulatedvalues-currency = 'CNY'.
APPEND gt_cumulatedvalues.
CLEAR: gt_cumulatedvalues.
gt_postedvalues-fisc_year = lv_abgja1.
gt_postedvalues-area = '01'."实际折旧范围
gt_postedvalues-ord_dep = gt_show-nafag_01."区域01 累计折旧(本年)
gt_postedvalues-currency = 'CNY'.
APPEND gt_postedvalues.
CLEAR: gt_postedvalues.
gt_postedvalues-fisc_year = lv_abgja2.
gt_postedvalues-area = '30'."实际折旧范围
gt_postedvalues-ord_dep = gt_show-nafag_01."区域20 累计折旧(本年)
gt_postedvalues-currency = 'CNY'.
APPEND gt_postedvalues.
CLEAR: gt_postedvalues,lv_abgja1,lv_abgja2.
""""""""""""""""
IF gt_show-aktiv+0(4) = 2023.
"""""""""""""""输入18年新增固定资产的获取业务:AB01
gt_transactions-fisc_year = '2023'.
gt_transactions-area = '01'."实际折旧范围
gt_transactions-valuedate = gt_show-bzdat."资产价值日
gt_transactions-assettrtyp = gt_show-bwasl."交易类型
gt_transactions-amount = gt_show-anbtr."金额
gt_transactions-currency = 'CNY'.
gt_transactions-currency_iso = 'CNY'.
gt_transactions-current_no = '00001'.
APPEND gt_transactions.
CLEAR: gt_transactions.
gt_transactions-fisc_year = '2023'.
gt_transactions-area = '20'."实际折旧范围
gt_transactions-valuedate = gt_show-bzdat."资产价值日
gt_transactions-assettrtyp = gt_show-bwasl."交易类型
gt_transactions-amount = gt_show-anbtr."金额
gt_transactions-currency = 'CNY'.
gt_transactions-currency_iso = 'CNY'.
gt_transactions-current_no = '00002'.
APPEND gt_transactions.
CLEAR: gt_transactions.
ENDIF.
ENDIF.
AT END OF id .
* IF LV_HISTORY EQ 'X'."历史数据
CALL FUNCTION 'BAPI_FIXEDASSET_OVRTAKE_CREATE'
EXPORTING
key = gs_key
* REFERENCE =
* CREATESUBNUMBER =
* CREATEGROUPASSET =
testrun = lv_test
generaldata = gs_generaldata
generaldatax = gs_generaldatax
inventory = gs_inventory
inventoryx = gs_inventoryx
postinginformation = gs_postinginformation
postinginformationx = gs_postinginformationx
timedependentdata = gs_timedependentdata
timedependentdatax = gs_timedependentdatax
IMPORTING
* COMPANYCODE =
asset = lv_asset
* SUBNUMBER =
* ASSETCREATED =
TABLES
depreciationareas = gt_depreciationareas[]
depreciationareasx = gt_depreciationareasx[]
* INVESTMENT_SUPPORT =
* EXTENSIONIN =
cumulatedvalues = gt_cumulatedvalues[]
postedvalues = gt_postedvalues[]
transactions = gt_transactions[]
* PROPORTIONALVALUES =
return = gt_return[]
* POSTINGHEADERS =
.
* ELSE."当年数据
*
* CALL FUNCTION 'BAPI_FIXEDASSET_CREATE1'
* EXPORTING
* KEY = GS_KEY
** REFERENCE =
** CREATESUBNUMBER =
** POSTCAP =
** CREATEGROUPASSET =
* TESTRUN = LV_TEST
* GENERALDATA = GS_GENERALDATA
* GENERALDATAX = GS_GENERALDATAX
* INVENTORY = GS_INVENTORY
* INVENTORYX = GS_INVENTORYX
* POSTINGINFORMATION = GS_POSTINGINFORMATION
* POSTINGINFORMATIONX = GS_POSTINGINFORMATIONX
* TIMEDEPENDENTDATA = GS_TIMEDEPENDENTDATA
* TIMEDEPENDENTDATAX = GS_TIMEDEPENDENTDATAX
* IMPORTING
** COMPANYCODE =
* ASSET = LV_ASSET
** SUBNUMBER =
** ASSETCREATED =
* RETURN = GS_RETURN
* TABLES
* DEPRECIATIONAREAS = GT_DEPRECIATIONAREAS[]
* DEPRECIATIONAREASX = GT_DEPRECIATIONAREASX[]
** INVESTMENT_SUPPORT =
** EXTENSIONIN =
* .
*
* APPEND GS_RETURN TO GT_RETURN.
* ENDIF.
REFRESH lt_msg .
CLEAR: lv_error .
LOOP AT gt_return WHERE type NE 'W' .
IF gt_return-type EQ 'E' OR gt_return-type EQ 'A' .
lv_error = 'X' .
ENDIF .
CLEAR ls_msg .
PERFORM convert_to_esp1_msg USING gt_return-id
gt_return-type
gt_return-number
gt_return-message_v1
gt_return-message_v2
gt_return-message_v3
gt_return-message_v4
CHANGING ls_msg .
APPEND ls_msg TO lt_msg .
ENDLOOP .
IF lv_error EQ 'X' .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
DELETE lt_msg WHERE msgty EQ 'S' .
ls_show-light = '1' .
ls_show-t_msg = lt_msg[] .
MODIFY gt_show FROM ls_show TRANSPORTING light t_msg
WHERE id = gt_show-id .
ELSE .
IF pu_check IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ls_show-anln1 = lv_asset.
* PERFORM frm_bdc_abzon USING gt_show-id."资产过账 资产增值去掉
ENDIF.
IF lv_error EQ 'X'.
ls_show-light = '2' .
ELSE.
ls_show-light = '3' .
ENDIF.
ls_show-t_msg = lt_msg[] .
MODIFY gt_show FROM ls_show TRANSPORTING light t_msg anln1
WHERE id = gt_show-id .
ENDIF .
ENDAT .
ENDLOOP .
IF sy-subrc EQ 0.
MESSAGE '请查看处理状态!' TYPE 'S'.
ELSE.
MESSAGE '资产号已创建!' TYPE 'E'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CHECK_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM check_data .
DATA: lv_err TYPE c,
ls_msg TYPE esp1_message_wa_type.
IF lv_msg_total IS NOT INITIAL.
ls_msg-msgid = '00' .
ls_msg-msgty = 'E' .
ls_msg-msgno = '001' .
ls_msg-msgv1 = lv_msg_total .
APPEND ls_msg TO gt_show-t_msg .
ENDIF.
CLEAR: lv_msg_total.
IF gt_show-id IS INITIAL .
ls_msg-msgid = '00' .
ls_msg-msgty = 'E' .
ls_msg-msgno = '001' .
ls_msg-msgv1 = '索引为空' .
APPEND ls_msg TO gt_show-t_msg .
ENDIF .
IF gt_show-bukrs IS INITIAL .
ls_msg-msgid = '00' .
ls_msg-msgty = 'E' .
ls_msg-msgno = '001' .
ls_msg-msgv1 = '公司代码为空' .
APPEND ls_msg TO gt_show-t_msg .
ENDIF .
IF gt_show-anlkl IS INITIAL .
ls_msg-msgid = '00' .
ls_msg-msgty = 'E' .
ls_msg-msgno = '001' .
ls_msg-msgv1 = '资产分类为空' .
APPEND ls_msg TO gt_show-t_msg .
ENDIF .
IF gt_show-txt50 IS INITIAL .
ls_msg-msgid = '00' .
ls_msg-msgty = 'E' .
ls_msg-msgno = '001' .
ls_msg-msgv1 = '描述1为空' .
APPEND ls_msg TO gt_show-t_msg .
ENDIF .
IF gt_show-kostl IS INITIAL .
ls_msg-msgid = '00' .
ls_msg-msgty = 'E' .
ls_msg-msgno = '001' .
ls_msg-msgv1 = '成本中心为空' .
APPEND ls_msg TO gt_show-t_msg .
ENDIF .
IF gt_show-meins IS NOT INITIAL .
gt_show-meins = to_upper( gt_show-meins ).
ENDIF .
IF gt_show-werks IS NOT INITIAL AND gt_show-stort IS NOT INITIAL.
SELECT COUNT(*) FROM t499s
WHERE werks EQ gt_show-werks
AND stand EQ gt_show-stort.
IF sy-subrc NE 0.
ls_msg-msgid = '00' .
ls_msg-msgty = 'E' .
ls_msg-msgno = '001' .
ls_msg-msgv1 = '工厂与位置对应关系不存在' .
APPEND ls_msg TO gt_show-t_msg .
ENDIF.
ENDIF.
IF ( gt_show-kansw_01 IS NOT INITIAL OR gt_show-knafa_01 IS NOT INITIAL OR
gt_show-nafag_01 IS NOT INITIAL OR gt_show-kaafa_01 IS NOT INITIAL ) . "add by hxm 20180126计划外折旧
* gt_show-kansw_20 IS NOT INITIAL OR gt_show-knafa_20 IS NOT INITIAL OR
* gt_show-nafag_20 IS NOT INITIAL OR gt_show-kaafa_20 IS NOT INITIAL ). "add by hxm 20180126计划外折旧
gt_show-history = 'X'.
IF ( gt_show-bwasl IS NOT INITIAL OR gt_show-bzdat IS NOT INITIAL OR
gt_show-anbtr IS NOT INITIAL OR gt_show-budat IS NOT INITIAL ).
ls_msg-msgid = '00' .
ls_msg-msgty = 'E' .
ls_msg-msgno = '001' .
ls_msg-msgv1 = '当年数据栏(交易类型等)与历史数据栏(原值等)不能同时输入'.
APPEND ls_msg TO gt_show-t_msg .
ENDIF.
ENDIF.
***add by xjc 批导大于当前日期的折旧 赋上历史标记
IF gt_show-afabg_01 >= '20231101' .
gt_show-history = 'X'.
ENDIF .
***endadd
IF ( gt_show-kansw_01 IS INITIAL AND gt_show-knafa_01 IS INITIAL AND
gt_show-nafag_01 IS INITIAL AND gt_show-kaafa_01 IS INITIAL ). "add by hxm 20180126计划外折旧
* gt_show-kansw_20 IS INITIAL AND gt_show-knafa_20 IS INITIAL AND
* gt_show-nafag_20 IS INITIAL AND gt_show-kaafa_20 IS INITIAL ). "add by hxm 20180126计划外折旧
IF ( gt_show-bwasl IS INITIAL OR gt_show-bzdat IS INITIAL OR
gt_show-anbtr IS INITIAL OR gt_show-budat IS INITIAL ).
ls_msg-msgid = '00' .
ls_msg-msgty = 'E' .
ls_msg-msgno = '001' .
ls_msg-msgv1 = '当年数据栏(交易类型、资产价值日、金额、过账日期)中的字段不能为空'.
APPEND ls_msg TO gt_show-t_msg .
ENDIF.
ENDIF.
IF ( gt_show-kansw_01 IS INITIAL AND gt_show-knafa_01 IS INITIAL AND
gt_show-nafag_01 IS INITIAL AND gt_show-kaafa_01 IS INITIAL ) "add by hxm 20180126计划外折旧
* gt_show-kansw_20 IS INITIAL AND gt_show-knafa_20 IS INITIAL AND
* gt_show-nafag_20 IS INITIAL AND gt_show-kaafa_20 IS INITIAL ) "add by hxm 20180126计划外折旧
AND ( gt_show-bwasl IS INITIAL AND gt_show-bzdat IS INITIAL AND
gt_show-anbtr IS INITIAL AND gt_show-budat IS INITIAL ).
ls_msg-msgid = '00' .
ls_msg-msgty = 'E' .
ls_msg-msgno = '001' .
ls_msg-msgv1 = '请输入当年数据栏(交易类型等)或历史数据栏(原值等)的数据'.
APPEND ls_msg TO gt_show-t_msg .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CONVERSION_EXIT_ALPHA_INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM conversion_exit_alpha_input CHANGING pc_alpha .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = pc_alpha
IMPORTING
output = pc_alpha.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CONVERT_TO_ESP1_MSG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM convert_to_esp1_msg USING pu_msgid pu_msgty pu_msgno
pu_msgv1 pu_msgv2 pu_msgv3 pu_msgv4
CHANGING pc_msg TYPE esp1_message_wa_type .
CLEAR pc_msg .
pc_msg-msgid = pu_msgid .
pc_msg-msgty = pu_msgty.
pc_msg-msgno = pu_msgno.
pc_msg-msgv1 = pu_msgv1.
pc_msg-msgv2 = pu_msgv2.
pc_msg-msgv3 = pu_msgv3.
pc_msg-msgv4 = pu_msgv4.
ENDFORM. " CONVERT_TO_ESP1_MSG
*&---------------------------------------------------------------------*
*& Form C14Z_MESSAGES_SHOW_AS_POPUP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM c14z_messages_show_as_popup TABLES it_msg TYPE esp1_message_tab_type .
CHECK it_msg[] IS NOT INITIAL .
CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
* EXPORTING
* I_MSGID =
* I_MSGTY =
* I_MSGNO =
* I_MSGV1 =
* I_MSGV2 =
* I_MSGV3 =
* I_MSGV4 =
* I_LINENO =
TABLES
i_message_tab = it_msg.
ENDFORM. " C14Z_MESSAGES_SHOW_AS_POPUP
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM download_template USING pu_filename pu_objid.
*& 下载模版
DATA: ls_objdata LIKE wwwdatatab.
DATA: lv_filename TYPE string,
lv_fullpath TYPE string VALUE 'C:\',
lv_path TYPE string VALUE 'C:\'.
DATA: lv_errtxt TYPE string.
DATA: lv_destination LIKE rlgrap-filename.
DATA: lv_rc LIKE sy-subrc.
DATA: lv_fileup LIKE rlgrap-filename.
lv_filename = pu_filename .
*& 调用保存对话框
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
default_extension = 'xls'
default_file_name = lv_filename
initial_directory = 'C:\'
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 NE 0.
MESSAGE '不能打开EXCEL' TYPE 'E'.
ENDIF.
CHECK lv_fullpath IS NOT INITIAL .
lv_fileup = lv_fullpath.
ls_objdata-relid = 'MI' .
ls_objdata-objid = pu_objid .
lv_destination = lv_fullpath .
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = ls_objdata
destination = lv_destination
IMPORTING
rc = lv_rc.
IF lv_rc NE 0.
CONCATENATE '模板文件:' ls_objdata-objid '下载失败' INTO lv_errtxt.
MESSAGE lv_errtxt TYPE 'E'.
ELSE.
MESSAGE '模版下载成功' TYPE 'S'.
ENDIF.
ENDFORM. " DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*& Form FRM_BDC_ABZON
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_bdc_abzon USING p1.
DATA: lv_amt TYPE char15.
CLEAR:bzdat.
READ TABLE gt_show ASSIGNING FIELD-SYMBOL() WITH KEY id = p1.
IF sy-subrc EQ 0.
IF -anbtr EQ 0.
RETURN.
ENDIF.
IF -history = 'X'.
bzdat = ls_t093c-datum.
ELSE.
bzdat = -bzdat.
ENDIF.
PERFORM bdc_dynpro USING 'SAPLAMDPS2I' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=TAB02'.
PERFORM bdc_field USING 'RAIFP3-XBANL'
'X'.
PERFORM bdc_field USING 'RAIFP2-ANLN1'
lv_asset."资产号
PERFORM bdc_field USING 'RAIFP2-ANLN2'
'0000'.
PERFORM bdc_field USING 'RAIFP1-BLDAT'
-budat."凭证日期
* LS_T093C-DATUM
* SY-DATUM.
PERFORM bdc_field USING 'RAIFP1-BUDAT'
-budat."过账日期
* LS_T093C-DATUM
* SY-DATUM.
PERFORM bdc_field USING 'RAIFP1-BZDAT'
* -bzdat."资产价值日
bzdat.
PERFORM bdc_field USING 'BDC_CURSOR'
'RAIFP2-ANBTR'.
PERFORM bdc_field USING 'RAIFP2-MENGE' "数量
-menge .
PERFORM bdc_field USING 'RAIFP2-MEINS' "单位
-meins .
* PERFORM bdc_field USING 'RAIFP2-ANBTR'
* -anbtr."记帐金额
IF -anbtr LT 0 .
WRITE -anbtr TO lv_amt.
REPLACE '-' WITH space INTO lv_amt.
SHIFT lv_amt LEFT DELETING LEADING space.
lv_amt = '-' && lv_amt.
PERFORM bdc_field USING 'RAIFP2-ANBTR'
lv_amt."记帐金额
ELSE.
PERFORM bdc_field USING 'RAIFP2-ANBTR'
-anbtr."记帐金额
ENDIF.
PERFORM bdc_dynpro USING 'SAPLAMDPS2I' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SAVE'.
PERFORM bdc_field USING 'RAIFP3-XBANL'
'X'.
PERFORM bdc_field USING 'RAIFP2-ANLN1'
lv_asset."资产号
PERFORM bdc_field USING 'RAIFP2-ANLN2'
'0000'.
PERFORM bdc_field USING 'RAIFP2-GKONT'
'9999999999'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RAIFP1-BWASL'.
PERFORM bdc_field USING 'RAIFP1-BWASL'
-bwasl."事务类型
REFRESH: messtab.
CLEAR: lv_error .
CALL TRANSACTION 'ABZON' USING bdcdata
UPDATE 'S'"本地的(L)、同步(S)、异步的(A)
MODE 'E' "显示所有屏幕(A)、显示错误(E)、后台的处理(N)、后台处理,可以调试(P)
MESSAGES INTO messtab .
LOOP AT messtab.
"IF messtab-msgtyp EQ 'E' OR messtab-msgtyp EQ 'A' .
lv_error = 'X' .
"ENDIF .
CLEAR ls_msg .
PERFORM convert_to_esp1_msg USING messtab-msgid
messtab-msgtyp
messtab-msgnr
messtab-msgv1
messtab-msgv2
messtab-msgv3
messtab-msgv4
CHANGING ls_msg .
APPEND ls_msg TO lt_msg .
ENDLOOP.
ENDIF.
ENDFORM.
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM.
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
CONDENSE bdcdata-fval.
APPEND bdcdata.
ENDFORM.
https://download.csdn.net/download/java_zhong1990/88475003