Для рассчета налога от суммы, если известен код налога можно и даже нужно использовать специальные функции, а не делить чего-то там, на что-то там и потом удивляться почему SAP посчитал чуток по другому:
CALCULATE_TAX_FROM_NET_AMOUNT - Если извесна база налога и надо определить налог на эту базу
CALCULATE_TAX_FROM_GROSSAMOUNT - Если извесна общая сумма и надо определить базу, на которую этот налог был накручен.
У меня эти две функции завернуты в подпрограммки для быстрого вызова:
1. Есть сумма нетто, надо определить сумму с налогом (самма сумма налога меня не интересует в этом случае).
*&---------------------------------------------------------------------*
*& Form calc_with_tax_code
*&---------------------------------------------------------------------*
* Сумма + налог по коду налога
*----------------------------------------------------------------------*
* --> P_BUKRS - БЕ
* --> P_MWSKZ - Код налога
* --> P_WAERS - Код валюты
* --> P_NETWR - Сумма нетто
* <-- P_BRTWR - Сумма нетто + Сумма налога
*----------------------------------------------------------------------*
FORM calc_with_tax_code USING p_bukrs
p_mwskz
p_waers
p_netwr
CHANGING p_brtwr.
DATA: l_wrbtr LIKE bseg-wrbtr,
t_mwdat LIKE rtax1u15 OCCURS 10 WITH HEADER LINE.
l_wrbtr = p_netwr.
CALL FUNCTION 'CALCULATE_TAX_FROM_NET_AMOUNT'
EXPORTING
i_bukrs = p_bukrs
i_mwskz = p_mwskz
i_waers = p_waers
i_wrbtr = l_wrbtr
TABLES
t_mwdat = t_mwdat
EXCEPTIONS
bukrs_not_found = 1
country_not_found = 2
mwskz_not_defined = 3
mwskz_not_valid = 4
ktosl_not_found = 5
kalsm_not_found = 6
parameter_error = 7
knumh_not_found = 8
kschl_not_found = 9
unknown_error = 10
account_not_found = 11
txjcd_not_valid = 12
OTHERS = 13.
READ TABLE t_mwdat INDEX 1.
IF sy-subrc = 0.
p_brtwr = p_netwr + t_mwdat-wmwst.
ELSE.
p_brtwr = p_netwr.
ENDIF.
ENDFORM. " calc_with_tax_code
2. Есть общая сумма и код налога, надо определить сумму нетто на которую был накручен налог (сама сумма налога опять же меня не интересует).
*&---------------------------------------------------------------------*
*& Form calc_without_tax_code
*&---------------------------------------------------------------------*
* Сумма + налог по коду налога
*----------------------------------------------------------------------*
* --> P_BUKRS - БЕ
* --> P_MWSKZ - Код налога
* --> P_WAERS - Код валюты
* --> P_BRTWR - Сумма нетто + Сумма налога
* <-- P_NETWR - Сумма нетто
*----------------------------------------------------------------------*
FORM calc_without_tax_code USING p_bukrs
p_mwskz
p_waers
p_brtwr
CHANGING p_netwr.
DATA: l_wrbtr LIKE bseg-wrbtr,
t_mwdat LIKE rtax1u15 OCCURS 10 WITH HEADER LINE.
l_wrbtr = p_brtwr.
CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'
EXPORTING
i_bukrs = p_bukrs
i_mwskz = p_mwskz
i_waers = p_waers
i_wrbtr = l_wrbtr
TABLES
t_mwdat = t_mwdat
EXCEPTIONS
bukrs_not_found = 1
country_not_found = 2
mwskz_not_defined = 3
mwskz_not_valid = 4
account_not_found = 5
different_discount_base = 6
different_tax_base = 7
txjcd_not_valid = 8
not_found = 9
ktosl_not_found = 10
kalsm_not_found = 11
parameter_error = 12
knumh_not_found = 13
kschl_not_found = 14
unknown_error = 15
OTHERS = 16.
READ TABLE t_mwdat INDEX 1.
IF sy-subrc = 0.
p_netwr = p_brtwr - t_mwdat-wmwst.
ELSE.
p_netwr = p_brtwr.
ENDIF.
ENDFORM. " calc_without_tax_code
PS: А то некоторые как наделять да на суммируют себе чего-то, а потом сиди разбирайся почему суммы не сходятся
