入参 | |
BUKRS | 公司代码 |
ANLN1 | 主资产号 |
ANLN2 | 资产子编号 |
BUDAT | 转资日期 |
ANBTR | 已过账的金额 |
BLDAT | 凭证中的凭证日期 |
BZDAT | 资产价值日 |
出参 | |
BUKRS | 公司代码 |
ANLN1 | 主资产号 |
ANLN2 | 资产子编号 |
BELNR | 会计凭证号码 |
GJAHR | 会计年度 |
ZBFJZ | 按本位币计的金额 |
MSGTS | 消息类型 |
TEXT | 消息文本 |
METHOD assets_retirement.
DATA ls_generalpostingdata TYPE bapifapo_gen_info.
DATA ls_retirementdata TYPE bapifapo_ret.
DATA ls_doc TYPE bapifapo_doc_ref.
DATA ls_return TYPE bapiret2.
DATA ls_furtherpostingdata TYPE bapifapo_add_info.
DATA ls_result TYPE zsfi_assets_retirement_output.
SELECT DISTINCT t001~bukrs,t001~waers FROM t001
INNER JOIN @it_data AS data
ON t001~bukrs = data~bukrs
INTO TABLE @DATA(lt_t001).
SORT lt_t001 BY bukrs.
SELECT DISTINCT anla~bukrs,anla~anln1,anla~anln2,anla~zujhr
FROM anla
INNER JOIN @it_data AS data
ON anla~bukrs = data~bukrs
AND anla~anln1 = data~anln1
AND anla~anln2 = data~anln2
INTO TABLE @DATA(lt_anla).
SORT lt_anla BY bukrs anln1 anln2.
LOOP AT it_data INTO DATA(ls_data).
MOVE-CORRESPONDING ls_data TO ls_result.
READ TABLE lt_t001 INTO DATA(ls_t001) WITH KEY bukrs = ls_data-bukrs BINARY SEARCH.
READ TABLE lt_anla INTO DATA(ls_anla1) WITH KEY bukrs = ls_data-bukrs
anln1 = ls_data-anln1
anln2 = ls_data-anln2 BINARY SEARCH.
DATA(lv_assettrtyp) = COND #( WHEN ls_anla1-zujhr EQ ls_data-budat(4) THEN '250' ELSE '200' ).
ls_generalpostingdata = VALUE #( username = sy-uname doc_type = 'Z3' doc_date = ls_data-bldat
pstng_date = ls_data-budat fis_period = ls_data-budat+4(2) trans_date = ls_data-budat
comp_code = ls_data-bukrs assetmaino = ls_data-anln1 assetsubno = ls_data-anln2
assettrtyp = lv_assettrtyp ).
ls_retirementdata = VALUE #( valuedate = ls_data-bzdat currency = ls_t001-waers amount = ls_data-anbtr
compl_ret = COND #( WHEN ls_data-anbtr IS INITIAL THEN 'X' ELSE '' ) ).
ls_furtherpostingdata = VALUE #( header_txt = |{ ls_data-bukrs }{ ls_data-anln1 }{ ls_data-anln2 }{ '资产报废'(017) }| ).
CALL FUNCTION 'BAPI_ASSET_RETIREMENT_POST'
EXPORTING
generalpostingdata = ls_generalpostingdata
retirementdata = ls_retirementdata
furtherpostingdata = ls_furtherpostingdata
IMPORTING
documentreference = ls_doc
return = ls_return.
IF ls_return-type = 'S'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'.
SELECT SINGLE belnr,gjahr INTO (@ls_result-belnr,@ls_result-gjahr )
FROM bkpf WHERE awkey = @ls_doc-obj_key AND ldgrp EQ '0L'.
SELECT SUM( dmbtr ) INTO @ls_result-zbfjz FROM bseg
WHERE belnr = @ls_result-belnr AND gjahr = @ls_result-gjahr
AND hkont = '1606000000' AND bukrs = @ls_data-bukrs.
ls_result-text = '资产报废成功'(015).
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ls_result-text = |{ '资产报废失败'(016) }:{ ls_return-message }| .
ENDIF.
ls_result-msgts = ls_return-type.
APPEND ls_result TO et_result.
CLEAR: ls_result,ls_generalpostingdata,ls_retirementdata,ls_furtherpostingdata,ls_doc,ls_return,ls_t001,ls_anla1.
ENDLOOP.
ENDMETHOD.