Автор Тема: Рассчет налога CALCULATE_TAX_FROM_NET_AMOUNT и CALCULATE_TAX_FROM_GROSSAMOUNT  (Прочитано 6779 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 762
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Для рассчета налога от суммы, если известен код налога можно и даже нужно использовать специальные функции, а не делить чего-то там, на что-то там и потом удивляться почему SAP посчитал чуток по другому:
CALCULATE_TAX_FROM_NET_AMOUNT - Если извесна база налога и надо определить налог на эту базу
CALCULATE_TAX_FROM_GROSSAMOUNT - Если извесна общая сумма и надо определить базу, на которую этот налог был накручен.

У меня эти две функции завернуты в подпрограммки для быстрого вызова:

1. Есть сумма нетто, надо определить сумму с налогом (самма сумма налога меня не интересует в этом случае).
Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*&      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. Есть общая сумма и код налога, надо определить сумму нетто на которую был накручен налог (сама сумма налога опять же меня не интересует).
Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*&      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: А то некоторые как наделять да на суммируют себе чего-то, а потом сиди разбирайся почему суммы не сходятся  ???