*&---------------------------------------------------------------------*
*& Form frm_call_bapi
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- <FS_DATA>
*&---------------------------------------------------------------------*
FORM frm_call_bapi CHANGING cs_data TYPE ty_data.
DATA: ls_bapi_te_anlu TYPE bapi_te_anlu.
DATA: lv_companycode TYPE bapi1022_1-comp_code,
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,
lt_extensionin TYPE TABLE OF bapiparex WITH HEADER LINE,
ls_assetcreated TYPE bapi1022_reference,
lt_depreciationareas TYPE TABLE OF bapi1022_dep_areas WITH HEADER LINE,
lt_depreciationareasx TYPE TABLE OF bapi1022_dep_areasx WITH HEADER LINE,
lt_cumulatedvalues TYPE TABLE OF bapi1022_cumval WITH HEADER LINE,
lt_postedvalues TYPE TABLE OF bapi1022_postval WITH HEADER LINE,
lt_transactions TYPE TABLE OF bapi1022_trtype WITH HEADER LINE,
lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2,
lv_fisc_year TYPE bapi1022_cumval-fisc_year,
lv_type TYPE char1,
l_afblpe TYPE t093u-afblpe,
l_datum TYPE t093c-datum.
CLEAR: ls_key, ls_generaldata, ls_generaldatax, ls_timedependentdata, ls_timedependentdatax,
ls_allocations, ls_allocationsx, lt_extensionin, lt_depreciationareas,
lt_depreciationareasx, ls_assetcreated, ls_return, lv_fisc_year,lv_type.
REFRESH: lt_extensionin[], lt_depreciationareas[], lt_depreciationareasx[],
lt_cumulatedvalues[], lt_postedvalues[], lt_transactions[], lt_return[].
SELECT SINGLE * INTO @DATA(ls_t093c)
FROM t093c
WHERE bukrs = @cs_data-bukrs.
l_afblpe = ls_t093c-datum+4(2)."月度
lv_fisc_year = ls_t093c-lgjahr.
DATA(lv_out_anlkl) = |{ cs_data-anlkl ALPHA = OUT }|.
IF cs_data-anln1 IS NOT INITIAL.
ls_key-companycode = cs_data-bukrs.
ls_key-asset = cs_data-anln1.
ls_key-subnumber = cs_data-anln2.
ENDIF.
ls_key-companycode = cs_data-bukrs.
ls_generaldata-assetclass = cs_data-anlkl.
ls_generaldata-descript = cs_data-txt50.
ls_generaldata-main_descript = cs_data-anlhtxt.
ls_generaldata-invent_no = cs_data-invnr.
ls_generaldata-quantity = cs_data-menge.
ls_generaldata-base_uom = cs_data-meins.
ls_generaldatax-assetclass = 'X'.
ls_generaldatax-descript = 'X'.
ls_generaldatax-main_descript = 'X'.
ls_generaldatax-invent_no = 'X'.
ls_generaldatax-quantity = 'X'.
ls_generaldatax-base_uom = 'X'.
ls_postinginformation-cap_date = cs_data-aktiv.
ls_postinginformationx-cap_date = 'X'.
ls_timedependentdata-costcenter = cs_data-zkostl.
ls_timedependentdata-resp_cctr = cs_data-zkostlv.
ls_timedependentdata-room = cs_data-raumn.
ls_timedependentdata-plant = cs_data-werks.
ls_timedependentdatax-costcenter = 'X'.
ls_timedependentdatax-resp_cctr = 'X'.
ls_timedependentdatax-room = 'X'.
ls_timedependentdatax-plant = 'X'.
ls_timedependentdatax-bus_area = 'X'.
ls_allocations-evalgroup1 = cs_data-ord41.
ls_allocationsx-evalgroup1 = 'X'.
CLEAR lt_depreciationareas.
lt_depreciationareas-area = '01'.
lt_depreciationareas-dep_key = cs_data-afasl01.
lt_depreciationareas-ulife_yrs = cs_data-ndjar01.
lt_depreciationareas-ulife_prds = cs_data-ndper01.
lt_depreciationareas-odep_start_date = cs_data-afabg01.
lt_depreciationareas-scrapvalue = cs_data-schrw01."资产残值
APPEND lt_depreciationareas.
CLEAR lt_depreciationareasx.
lt_depreciationareasx-area = '01'.
lt_depreciationareasx-dep_key = 'X'.
lt_depreciationareasx-ulife_yrs = 'X'.
lt_depreciationareasx-ulife_prds = 'X'.
lt_depreciationareasx-odep_start_date = 'X'.
lt_depreciationareasx-scrapvalue = 'X'.
APPEND lt_depreciationareasx.
IF ls_t093c-afapl = 'CNTD' AND ( lv_out_anlkl+0(1) = 1 OR lv_out_anlkl+0(1) = 3 OR lv_out_anlkl+0(1) = 4 ).
CLEAR lt_depreciationareas.
lt_depreciationareas-area = '20'.
lt_depreciationareas-dep_key = cs_data-afasl20.
lt_depreciationareas-ulife_yrs = cs_data-ndjar20.
lt_depreciationareas-ulife_prds = cs_data-ndper20.
lt_depreciationareas-odep_start_date = cs_data-afabg20.
APPEND lt_depreciationareas.
CLEAR lt_depreciationareasx.
lt_depreciationareasx-area = '20'.
lt_depreciationareasx-dep_key = 'X'.
lt_depreciationareasx-ulife_yrs = 'X'.
lt_depreciationareasx-ulife_prds = 'X'.
lt_depreciationareasx-odep_start_date = 'X'.
APPEND lt_depreciationareasx.
ENDIF.
IF cs_data-zzclx = '2' "当年
OR cs_data-zzclx = '3' . "在建工程
CLEAR lt_transactions.
lt_transactions-fisc_year = lv_fisc_year.
lt_transactions-area = '01'.
IF cs_data-zzclx = '2' . "当年
lt_transactions-valuedate = ls_t093c-datum.
ELSE.
lt_transactions-valuedate = '20220101'.
ENDIF.
CASE cs_data-zzclx.
WHEN '2'.
lt_transactions-assettrtyp = '100'."<FS_DATA>-bwasl.
WHEN '3'."在建工程默认900
IF cs_data-aktiv >= '20220101'.
lt_transactions-assettrtyp = '100'.
ELSE.
lt_transactions-assettrtyp = '900'.
ENDIF.
WHEN OTHERS.
ENDCASE.
lt_transactions-amount = cs_data-kansw01."<FS_DATA>-anbtr.
lt_transactions-current_no = '00001'.
APPEND lt_transactions.
"购置值不为空 那么写入折旧
* IF cs_data-kansw01 IS NOT INITIAL.
CLEAR lt_postedvalues.
lt_postedvalues-fisc_year = lv_fisc_year.
lt_postedvalues-area = '01'.
lt_postedvalues-ord_dep = cs_data-znafag01n .
lt_postedvalues-rev_repl = cs_data-kaufw01.
APPEND lt_postedvalues.
* ENDIF.
* ENDIF.
IF ls_t093c-afapl = 'CNTD' AND ( lv_out_anlkl+0(1) = 1 OR lv_out_anlkl+0(1) = 3 OR lv_out_anlkl+0(1) = 4 ).
CLEAR lt_transactions.
lt_transactions-fisc_year = lv_fisc_year.
lt_transactions-area = '20'.
IF cs_data-zzclx = '2' . "当年
lt_transactions-valuedate = ls_t093c-datum.
ELSE.
lt_transactions-valuedate = '20220101'.
ENDIF.
CASE cs_data-zzclx.
WHEN '2'.
lt_transactions-assettrtyp = '100'."<FS_DATA>-bwasl.
WHEN '3'."在建工程默认900
IF cs_data-aktiv >= '20220101'.
lt_transactions-assettrtyp = '100'.
ELSE.
lt_transactions-assettrtyp = '900'.
ENDIF.
WHEN OTHERS.
ENDCASE.
lt_transactions-amount = cs_data-kansw20."<FS_DATA>-anbtr.
lt_transactions-current_no = '00001'.
APPEND lt_transactions.
"购置值不为空 那么写入折旧
* IF cs_data-kansw20 IS NOT INITIAL.
CLEAR lt_postedvalues.
lt_postedvalues-fisc_year = lv_fisc_year.
lt_postedvalues-area = '20'.
lt_postedvalues-ord_dep = cs_data-nafag20.
* IF lt_postedvalues-ord_dep IS NOT INITIAL.
APPEND lt_postedvalues.
* ENDIF.
* ENDIF.
ENDIF.
ELSE.
CLEAR lt_cumulatedvalues.
lt_cumulatedvalues-fisc_year = lv_fisc_year.
lt_cumulatedvalues-area = '01'.
lt_cumulatedvalues-acq_value = cs_data-kansw01.
lt_cumulatedvalues-ord_dep = cs_data-zkanfa01.
lt_cumulatedvalues-rev_repl = cs_data-kaufw01.
APPEND lt_cumulatedvalues.
"如果购置值不为空 那么写入折旧
* IF cs_data-kansw01 IS NOT INITIAL.
CLEAR lt_postedvalues.
lt_postedvalues-fisc_year = lv_fisc_year.
lt_postedvalues-area = '01'.
lt_postedvalues-ord_dep = cs_data-znafag01n.
APPEND lt_postedvalues.
* ENDIF.
IF ls_t093c-afapl = 'CNTD' AND ( lv_out_anlkl+0(1) = 1 OR lv_out_anlkl+0(1) = 3 OR lv_out_anlkl+0(1) = 4 ).
CLEAR lt_cumulatedvalues.
lt_cumulatedvalues-fisc_year = lv_fisc_year.
lt_cumulatedvalues-area = '20'.
lt_cumulatedvalues-acq_value = cs_data-kansw20.
lt_cumulatedvalues-ord_dep = cs_data-kanfa20.
APPEND lt_cumulatedvalues.
"购置值为空 那么写入折旧
* IF cs_data-kansw20 IS NOT INITIAL.
* CLEAR lt_postedvalues.
* lt_postedvalues-fisc_year = lv_fisc_year.
* lt_postedvalues-area = '20'.
* lt_postedvalues-ord_dep = cs_data-nafag20.
* APPEND lt_postedvalues.
* ENDIF.
ENDIF.
ENDIF.
*&& 唯一标识 占用此字段
ls_origin-type_name = |{ cs_data-data_source }{ cs_data-anln1 }|.
ls_origin-vendor_no = cs_data-lifnr .
ls_origin-manufacturer = cs_data-herst.
ls_originx-type_name = 'X'.
ls_originx-vendor_no = 'X'.
ls_originx-manufacturer = 'X'.
CALL FUNCTION 'BAPI_FIXEDASSET_OVRTAKE_CREATE'
EXPORTING
key = ls_key
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
* testrun = p_moni
IMPORTING
assetcreated = ls_assetcreated
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 = 'E' OR type = 'A'
OR type = 'X'.
IF ls_return-id = 'AC' AND ls_return-number = '526'.
ls_return-message = '使用状态填写错误!'.
ENDIF.
CONCATENATE cs_data-message ls_return-message INTO cs_data-message.
ENDLOOP.
IF sy-subrc <> 0.
IF cs_data-anln1 IS INITIAL.
cs_data-anln1 = ls_assetcreated-asset.
cs_data-anln2 = ls_assetcreated-subnumber.
ENDIF.
cs_data-message = |资产卡片{ ls_assetcreated-asset }创建成功!|.
cs_data-type = 'S'.
cs_data-anln1_n = ls_assetcreated-asset.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CONCATENATE '资产卡片创建失败:' ls_return-message INTO cs_data-message.
cs_data-type = 'E'.
ENDIF.
ENDFORM.
matinal:SAP 期初资产导入BAPI
最新推荐文章于 2024-06-09 16:06:06 发布