вторник, 19 октября 2010 г.

Расчет остаточной стоимости ОС

интерфейс расчета
IM_BUKRS Importing Type ANLA-BUKRS Балансовая единица
IM_ANLN1 Importing Type ANLA-ANLN1 Основной номер основного средства
IM_ANLN2 Importing Type ANLA-ANLN2 Субномер основного средства
IM_AFABE Importing Type ANEP-AFABE Реальная область оценки
IM_DATE Importing Type DATUM Дата
EX_PERV_ST Exporting Type DATA Первоначальная стоимость
EX_NAKOP_AMORT Exporting Type DATA Накопленная амортизация
EX_TYP_AMORT Exporting Type DATA Накопленная типовая амортизация
EX_SPEC_AMORT Exporting Type DATA Накопленная особая амортизация
EX_PEREOC_PST Exporting Type DATA Переоценка ПСт
EX_PEREOC_AMORT Exporting Type DATA Переоценка Амортизации
EX_PST_BEZ_PEREOC Exporting Type DATA ПСт без учета переоценки


выбор данных
SELECT * FROM anlc
INTO TABLE gt_anlc
FOR ALL ENTRIES IN fa_list_afabe
WHERE bukrs = fa_list_afabe-bukrs
AND anln1 = fa_list_afabe-anln1
AND anln2 = fa_list_afabe-anln2
AND gjahr = gv_enddate(4)
AND afabe = fa_list_afabe-afabe_.

v_peraf+1(2) = gv_enddate+4(2).

SELECT * FROM anlp
INTO TABLE gt_anlp
FOR ALL ENTRIES IN fa_list_afabe
WHERE bukrs = fa_list_afabe-bukrs
AND gjahr = gv_enddate(4)
AND afaber = fa_list_afabe-afabe_
AND anln1 = fa_list_afabe-anln1
AND anln2 = fa_list_afabe-anln2
AND peraf <= v_peraf. SELECT * FROM anep INTO TABLE gt_anep FOR ALL ENTRIES IN fa_list_afabe WHERE bukrs = fa_list_afabe-bukrs AND anln1 = fa_list_afabe-anln1 AND anln2 = fa_list_afabe-anln2 AND afabe = fa_list_afabe-afabe_ AND bzdat BETWEEN gv_begdate AND gv_enddate. IF NOT gt_anep IS INITIAL. SELECT * FROM anea INTO TABLE gt_anea FOR ALL ENTRIES IN gt_anep WHERE bukrs = gt_anep-bukrs AND anln1 = gt_anep-anln1 AND anln2 = gt_anep-anln2 AND gjahr = gt_anep-gjahr AND afabe = gt_anep-afabe AND lnran = gt_anep-lnran. ENDIF. расчет METHOD get_amounts_on_date. FIELD-SYMBOLS TYPE anep.
FIELD-SYMBOLS TYPE anea.
FIELD-SYMBOLS TYPE anlp.
FIELD-SYMBOLS TYPE LINE OF tt_amount_on_date.

DATA ls_amounts TYPE LINE OF tt_amount_on_date.
DATA lv_anlc_gjahr TYPE gjahr.
DATA lv_peraf TYPE anlp-peraf.
DATA ls_anlc TYPE anlc.
DATA lv_prev_gjahr TYPE gjahr.
DATA lv_perv_st TYPE anep-anbtr.
DATA lv_nakop_amort TYPE anep-anbtr.
DATA lv_typ_amort TYPE anep-anbtr.
DATA lv_spec_amort TYPE anep-anbtr.
DATA lv_pereoc_pst TYPE anep-anbtr.
DATA lv_pereoc_amort TYPE anep-anbtr.
DATA lv_bwagrp TYPE tabw-bwagrp.
DATA lv_bwatyp TYPE tabwg-bwatyp.
DATA lv_gitcol TYPE tabwg-gitcol.

CLEAR: ex_perv_st, lv_perv_st.
CLEAR: ex_nakop_amort, lv_nakop_amort.
CLEAR: ex_typ_amort, lv_typ_amort.
CLEAR: ex_spec_amort, lv_spec_amort.
CLEAR: ex_pereoc_pst, lv_pereoc_pst.
CLEAR: ex_pereoc_amort, lv_pereoc_amort.
CLEAR: ex_pst_bez_pereoc.

READ TABLE gt_amounts WITH TABLE KEY bukrs = im_bukrs
anln1 = im_anln1
anln2 = im_anln2
date = im_date
afabe = im_afabe ASSIGNING .
IF sy-subrc = 0.
ex_perv_st = -perv_st.
ex_nakop_amort = -amort.
ex_typ_amort = -amort_typ.
ex_spec_amort = -amort_spec.
ex_pereoc_pst = -pereoc_pst.
ex_pereoc_amort = -pereoc_amort.
ex_pst_bez_pereoc = -pst_bez_pereoc.
EXIT.
ENDIF.
**********************************************************************
lv_prev_gjahr = gv_enddate(4) - 1.

IF im_date+4(4) = '1231' AND im_date(4) = lv_prev_gjahr.
lv_anlc_gjahr = im_date(4) + 1.
ELSE.
lv_anlc_gjahr = im_date(4).
ENDIF.
lv_peraf+1(2) = im_date+4(2).

READ TABLE gt_anlc WITH TABLE KEY bukrs = im_bukrs
anln1 = im_anln1
anln2 = im_anln2
afabe = im_afabe
gjahr = lv_anlc_gjahr INTO ls_anlc.

IF im_date+4(4) = '1231' AND im_date(4) = lv_prev_gjahr.
lv_perv_st = ls_anlc-kansw + ls_anlc-kaufw.
lv_nakop_amort = ls_anlc-knafa + ls_anlc-kaafa + ls_anlc-kaufn + ls_anlc-ksafa.
lv_typ_amort = ls_anlc-knafa + ls_anlc-kaafa + ls_anlc-kaufn.
lv_spec_amort = ls_anlc-ksafa.
lv_pereoc_pst = ls_anlc-kaufw.
lv_pereoc_amort = ls_anlc-kaufn.
ELSE.
lv_perv_st = ls_anlc-kansw + ls_anlc-kaufw.
lv_nakop_amort = ls_anlc-knafa + ls_anlc-kaafa + ls_anlc-kaufn + ls_anlc-ksafa.
lv_typ_amort = ls_anlc-knafa + ls_anlc-kaafa + ls_anlc-kaufn.
lv_spec_amort = ls_anlc-ksafa.
lv_pereoc_pst = ls_anlc-kaufw.
lv_pereoc_amort = ls_anlc-kaufn.
LOOP AT gt_anlp ASSIGNING WHERE bukrs = im_bukrs
AND gjahr = lv_anlc_gjahr
AND afaber = im_afabe
AND anln1 = im_anln1
AND anln2 = im_anln2
AND peraf <= lv_peraf. lv_nakop_amort = lv_nakop_amort + -nafaz + -aafaz + -safaz.
lv_typ_amort = lv_typ_amort + -nafaz + -aafaz.
lv_spec_amort = lv_spec_amort + -safaz.
ENDLOOP.
LOOP AT gt_anep ASSIGNING
WHERE bukrs = im_bukrs
AND anln1 = im_anln1
AND anln2 = im_anln2
AND afabe = im_afabe
AND bzdat <= im_date. zatmcl_fiaa_utilities=>get_bwasl_data( EXPORTING im_bwasl = -bwasl
IMPORTING ex_bwagrp = lv_bwagrp
ex_bwatyp = lv_bwatyp
ex_gitcol = lv_gitcol ).
CHECK lv_gitcol NE '7'.
IF lv_bwagrp(1) NE '6'.
ADD -anbtr TO lv_perv_st.
ENDIF.
IF lv_bwagrp(1) = '8' OR lv_bwatyp = '6'.
ADD -anbtr TO lv_pereoc_pst.
ENDIF.

READ TABLE gt_anea ASSIGNING
WITH KEY bukrs = -bukrs
anln1 = -anln1
anln2 = -anln2
gjahr = -gjahr
lnran = -lnran
afabe = -afabe.
IF sy-subrc = 0.
lv_nakop_amort = lv_nakop_amort + -nafav + -safav +
-nafal + -aafal +
-aufnv + -aafav +
-safal + -aufnl.
lv_typ_amort = lv_typ_amort + -nafav + -nafal +
-aafal + -aufnv +
-aafav.
lv_spec_amort = lv_spec_amort + -safav + -safal.
lv_perv_st = lv_perv_st + -aufwv + -aufwl.
IF lv_bwagrp(1) = '8' OR lv_bwatyp = '6'.
lv_pereoc_pst = lv_pereoc_pst + -aufwv + -aufwl.
lv_pereoc_amort = lv_pereoc_amort + -aufnv + -aufnl.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.

ls_amounts-bukrs = im_bukrs.
ls_amounts-anln1 = im_anln1.
ls_amounts-anln2 = im_anln2.
ls_amounts-afabe = im_afabe.
ls_amounts-date = im_date.
ls_amounts-perv_st = lv_perv_st.
ls_amounts-amort = lv_nakop_amort.
ls_amounts-amort_typ = lv_typ_amort.
ls_amounts-amort_spec = lv_spec_amort.
ls_amounts-pereoc_pst = lv_pereoc_pst.
ls_amounts-pereoc_amort = lv_pereoc_amort.
ls_amounts-pst_bez_pereoc = lv_perv_st - lv_pereoc_pst.

INSERT ls_amounts INTO TABLE gt_amounts.

ex_perv_st = ls_amounts-perv_st.
ex_nakop_amort = ls_amounts-amort.
ex_typ_amort = ls_amounts-amort_typ.
ex_spec_amort = ls_amounts-amort_spec.
ex_pereoc_pst = ls_amounts-pereoc_pst.
ex_pereoc_amort = ls_amounts-pereoc_amort.
ex_pst_bez_pereoc = ls_amounts-pst_bez_pereoc.

Комментариев нет: