固定资产获取折旧和期末余额

该段代码展示了在SAPABAP环境中进行数据操作的过程,包括从表t001中选择数据,调用函数创建日期,执行复杂的联接查询以获取特定条件的数据,删除无效数据,以及对查询结果进行排序和循环处理,以计算和验证资产的期末余额。

gwa_head01-ebukrs = p_bukrs1.

SELECT SINGLE butxt

INTO gwa_head01-ebutxt

FROM t001

WHERE bukrs = gwa_head01-ebukrs.

CALL FUNCTION 'FIMA_DATE_CREATE'

EXPORTING

i_date = p_date "sy-datum

* I_FLG_END_OF_MONTH = ' '

* I_YEARS = 0

* I_MONTHS = 0

* I_DAYS = 0

* I_CALENDAR_DAYS = 0

i_set_last_day_of_month = 'X'

IMPORTING

e_date = gwa_head01-mvdat.

* E_FLG_END_OF_MONTH =

* E_DAYS_OF_I_DATE =

.

*list

SELECT DISTINCT a~bukrs AS ebukrs

a~anln1 AS eanln1

a~anln2 AS eanln2

a~txt50 AS etxt50

a~anlkl AS eanlkl

a~sernr AS esernr

a~invnr AS einvnr

z~kostl AS ekostl

z~kostlv AS ekostlv

z~raumn AS eraumn

z~kfzkz AS ekfzkz

a~lifnr AS elifnr

b~afabe AS eafabe

b~afasl AS eafasl

b~ndjar AS endjar

b~ndper AS endper

a~aktiv AS eaktiv

a~menge AS emenge

a~meins AS emeins

a~ord41 AS eord41

a~ord42 AS eord42

a~ord43 AS eord43

a~gdlgrp AS egdlgrp

a~deakt AS deakt

a~typbz AS etypbz

INTO CORRESPONDING FIELDS OF TABLE gt_reslt01

FROM anla AS a

INNER JOIN anlb AS b ON b~bukrs = a~bukrs

AND b~anln1 = a~anln1

AND b~anln2 = a~anln2

INNER JOIN anlz AS z ON z~bukrs = a~bukrs

AND z~anln1 = a~anln1

AND z~anln2 = a~anln2

WHERE a~bukrs = p_bukrs1

AND a~anln1 IN s_anln11

AND a~anlkl IN s_anlkl1

AND z~kostl IN s_kostl1

AND z~bdatu >= sy-datum

AND z~adatu <= sy-datum

AND a~aktiv <= lv_datum and b~afabe = '01'.

*删除数据

DELETE gt_reslt01 WHERE deakt IS NOT INITIAL OR eaktiv IS INITIAL.

SORT gt_reslt01 BY eanln1 eanln2.

IF gt_reslt01[] IS NOT INITIAL.

SELECT *

INTO CORRESPONDING FIELDS OF TABLE lt_01202

FROM zfit_01202 AS b

INNER JOIN zfit_01201 AS a ON a~numbr = b~numbr

FOR ALL ENTRIES IN gt_reslt01

WHERE b~eanln1 = gt_reslt01-eanln1

AND b~eanln2 = gt_reslt01-eanln2

AND a~ebukrs = gt_reslt01-ebukrs.

ENDIF.

LOOP AT gt_reslt01 INTO gwa_reslt01.

IF gwa_reslt01-emenge = 0.

READ TABLE lt_01202 INTO lwa_01202 WITH KEY eanln1 = gwa_reslt01-eanln1 eanln2 = gwa_reslt01-eanln2.

IF sy-subrc = 0.

DELETE gt_reslt01.

ENDIF.

ELSE.

CLEAR: lv_menge.

LOOP AT lt_01202 INTO lwa_01202 WHERE eanln1 = gwa_reslt01-eanln1 AND eanln2 = gwa_reslt01-eanln2.

IF lwa_01202-status = '1' OR lwa_01202-status IS INITIAL.

lv_menge = lv_menge + lwa_01202-tmenge.

ELSE.

"lv_menge = lv_menge + lwa_01202-imenge.

ENDIF.

ENDLOOP.

IF lv_menge >= gwa_reslt01-emenge.

DELETE gt_reslt01.

ENDIF.

ENDIF.

ENDLOOP.

*

SORT gt_reslt01 BY ebukrs eanln1 eanln2.

IF lines( gt_reslt01[] ) > 0.

* SELECT *

* INTO TABLE lt_anlc

* FROM anlc

* FOR ALL ENTRIES IN gt_reslt01

* WHERE bukrs = gt_reslt01-ebukrs

* AND anln1 = gt_reslt01-eanln1

* AND anln2 = gt_reslt01-eanln2

* AND gjahr = sy-datum+0(4).

* "AND afabe = '01'.

* SELECT *

* INTO CORRESPONDING FIELDS OF TABLE lt_anea

* FROM anek AS k INNER JOIN anea AS a

* ON a~bukrs = k~bukrs

* AND a~anln1 = k~anln1

* AND a~anln2 = k~anln2

* AND a~lnran = k~lnran

* AND a~lnran = k~lnran

* AND a~gjahr = k~gjahr

* AND a~afabe = '01'

* FOR ALL ENTRIES IN gt_reslt01

* WHERE k~bukrs = gt_reslt01-ebukrs

* AND k~anln1 = gt_reslt01-eanln1

* AND k~anln2 = gt_reslt01-eanln2

* AND k~budat IN r_budat

* AND k~budat <= sy-datum.

* SELECT *

* INTO TABLE lt_anep

* FROM anep

* FOR ALL ENTRIES IN gt_reslt01

* WHERE bukrs = gt_reslt01-ebukrs

* AND anln1 = gt_reslt01-eanln1

* AND anln2 = gt_reslt01-eanln2

* AND gjahr = sy-datum+0(4)

* AND bzdat <= lv_datum.

ENDIF.

****----取资产期末余额

PERFORM frm_get_ezljzj TABLES lt_data USING lv_datum.

*

LOOP AT gt_reslt01 INTO gwa_reslt01.

lv_tabix = sy-tabix.

**资产原值、累计折旧

* LOOP AT lt_anlc INTO lwa_anlc WHERE bukrs = gwa_reslt01-ebukrs

* AND anln1 = gwa_reslt01-eanln1

* AND anln2 = gwa_reslt01-eanln2.

*

* gwa_reslt01-ekansw = gwa_reslt01-ekansw + lwa_anlc-kansw." + lwa_anlc-answl.

*

* IF lwa_anlc-afabe = '01'.

* gwa_reslt01-ezljzj = gwa_reslt01-ezljzj

* + lwa_anlc-knafa

* + lwa_anlc-ksafa

* + lwa_anlc-kaafa.

*

* gwa_reslt01-ezljzj = gwa_reslt01-ezljzj

* + lwa_anlc-nafag

* + lwa_anlc-safag

* + lwa_anlc-aafag.

* ENDIF.

* ENDLOOP.

*

* LOOP AT lt_anep INTO lwa_anep WHERE bukrs = gwa_reslt01-ebukrs

* AND anln1 = gwa_reslt01-eanln1

* AND anln2 = gwa_reslt01-eanln2..

* gwa_reslt01-ekansw = gwa_reslt01-ekansw + lwa_anep-anbtr.

* ENDLOOP.

*

* LOOP AT lt_anea INTO lwa_anea WHERE bukrs = gwa_reslt01-ebukrs

* AND anln1 = gwa_reslt01-eanln1

* AND anln2 = gwa_reslt01-eanln2.

*

* gwa_reslt01-ezljzj = gwa_reslt01-ezljzj

* + lwa_anea-nafav

* + lwa_anea-safav

* + lwa_anea-aafav.

*

* gwa_reslt01-ezljzj = gwa_reslt01-ezljzj

* + lwa_anea-nafal

* + lwa_anea-safal

* + lwa_anea-aafal.

* ENDLOOP.

*

**资产净值

* "gwa_reslt01-ezzcjz = gwa_reslt01-ekansw - gwa_reslt01-ezljzj.

* gwa_reslt01-ezzcjz = gwa_reslt01-ekansw + gwa_reslt01-ezljzj.

*****----取资产原值、折旧、净值2016-07-15

READ TABLE lt_data WITH KEY bukrs = gwa_reslt01-ebukrs

anln1 = gwa_reslt01-eanln1 BINARY SEARCH.

IF sy-subrc = 0.

gwa_reslt01-ekansw = lt_data-btr1 + lt_data-btr7.

gwa_reslt01-ezzcjz = lt_data-btr17.

gwa_reslt01-ezljzj = gwa_reslt01-ekansw - gwa_reslt01-ezzcjz.

ENDIF.

MODIFY gt_reslt01 FROM gwa_reslt01 INDEX lv_tabix.

ENDLOOP.

期末余额

FORM frm_get_ezljzj TABLES pt_data STRUCTURE fiaa_salvtab_rahafa USING pl_datum.

DATA:berdatum TYPE sy-datum,

bereich1 TYPE rbada-afabe1,

srtvr TYPE rbada-srtvr,

xeinzel TYPE rbada-xeinzl,

xuntnr TYPE rbada-xuntnr,

p_grid TYPE xgrid.

DATA:ls_data TYPE REF TO data.

RANGES:r_bukrs FOR t001-bukrs,

so_anlkl FOR anlav-anlkl.

FIELD-SYMBOLS: <lt_data> TYPE table,

<fs_field> TYPE any,

<l_data> TYPE data.

r_bukrs-sign = 'I'.

r_bukrs-option = 'EQ'.

r_bukrs-low = p_bukrs1.

APPEND r_bukrs.

berdatum = pl_datum.

"折旧范围 01

bereich1 = '01'.

srtvr = '0001'.

xeinzel = ''.

xuntnr = 'X'.

p_grid = 'X'.

cl_salv_bs_runtime_info=>set(

display = abap_false

metadata = abap_false

data = abap_true ).

SUBMIT rahafa_alv01

WITH p_grid = p_grid "按报表分类汇总

WITH xuntnr = xuntnr "

WITH xeinzel = xeinzel

WITH srtvr = srtvr "

WITH bereich1 = bereich1 "

WITH bukrs IN r_bukrs

WITH so_anlkl IN s_anlkl1 "资产分类

WITH anlage IN s_anln11 " 资产号

WITH berdatum = berdatum

AND RETURN .

TRY.

cl_salv_bs_runtime_info=>get_data_ref(

IMPORTING r_data = ls_data ).

ASSIGN ls_data->* TO <lt_data>.

CATCH cx_salv_bs_sc_runtime_info.

ENDTRY.

cl_salv_bs_runtime_info=>clear_all( ).

LOOP AT <lt_data> ASSIGNING <l_data>.

CLEAR pt_data.

MOVE-CORRESPONDING <l_data> TO pt_data.

APPEND pt_data.

ENDLOOP.

SORT pt_data BY bukrs anln1.

ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值