Необходимо сделать проводки между основными счетами с указанием кода налога по одной из позиций. Необходимо поставить галочку расчет базы налога для этой позиции.
использую
CALCULATE_TAX_FROM_NET_AMOUNT для расчета налогов и
BAPI_ACC_DOCUMENT_POST для проводки.
Code:
FORM CREATE_FB01 .
DATA: LT_DOCUMENTHEADER TYPE BAPIACHE09
, LT_ACCOUNTPAYABLE TYPE TABLE OF BAPIACAP09
, LT_ACCOUNTRECEIVABLE TYPE TABLE OF BAPIACAR09
, LT_ACCOUNTGL TYPE TABLE OF BAPIACGL09
, LT_ACCOUNTTAX TYPE TABLE OF BAPIACTX09
, LT_CURRENCYAMOUNT TYPE TABLE OF BAPIACCR09
, LT_RETURN TYPE TABLE OF BAPIRET2
, LS_RETURN TYPE BAPIRET2
, LS_BKPF TYPE BKPF
, LT_BSEG TYPE TABLE OF BSEG
, LS_BSEG TYPE BSEG
, LS_ACCOUNTPAYABLE TYPE BAPIACAP09
, LS_ACCOUNTRECEIVABLE TYPE BAPIACAR09
, LS_ACCOUNTGL TYPE BAPIACGL09
, LS_ACCOUNTTAX TYPE BAPIACTX09
, LS_CURRENCYAMOUNT TYPE BAPIACCR09
, LV_HKONT1 TYPE HKONT
, LV_HKONT2 TYPE HKONT
, LV_ANSWER TYPE C
.
DATA: LV_OBJ_TYPE TYPE BAPIACHE09-OBJ_TYPE,
LV_OBJ_KEY TYPE BAPIACHE09-OBJ_KEY,
LV_OBJ_SYS TYPE BAPIACHE09-OBJ_SYS,
LV_LAST_DAY TYPE D,
LV_MONTH(2) TYPE N,
LV_TEXT TYPE TEXT255,
LV_DMBTR TYPE DMBTR
.
DATA: L_STR(100).
data: lt_mwdat TYPE TABLE OF rtax1u15,
ls_mwdat TYPE rtax1u15.
data: l_mwskz type mwskz,
lf_wrbtr TYPE wrbtr.
l_mwskz = 'YY'.
lf_wrbtr = 100.
CALL FUNCTION 'CALCULATE_TAX_FROM_NET_AMOUNT'
EXPORTING
I_BUKRS = <FS_ALV>-BUKRS
I_MWSKZ = l_mwskz
I_WAERS = 'RUB'
I_WRBTR = lf_wrbtr
TABLES
T_MWDAT = lt_mwdat.
IF SY-SUBRC <> 0.
ENDIF.
data: l_pos like sy-tabix.
LOOP AT Lt_mwdat INTO LS_mwdat.
CLEAR :LS_ACCOUNTTAX .
ADD 1 TO l_pos.
CLEAR : LS_CURRENCYAMOUNT.
LS_CURRENCYAMOUNT-itemno_acc = l_pos.
LS_CURRENCYAMOUNT-curr_type = '00'.
LS_CURRENCYAMOUNT-currency = 'RUB'.
LS_CURRENCYAMOUNT-amt_base = ls_mwdat-kawrt.
LS_CURRENCYAMOUNT-amt_doccur = ls_mwdat-wmwst.
INSERT LS_CURRENCYAMOUNT INTO TABLE LT_CURRENCYAMOUNT.
ADD 1 TO l_pos.
CLEAR : LS_CURRENCYAMOUNT.
LS_CURRENCYAMOUNT-itemno_acc = l_pos.
LS_CURRENCYAMOUNT-curr_type = '00'.
LS_CURRENCYAMOUNT-currency = 'RUB'.
LS_CURRENCYAMOUNT-amt_base = - ABS( ls_mwdat-kawrt ).
LS_CURRENCYAMOUNT-amt_doccur = - ABS( ls_mwdat-wmwst ).
INSERT LS_CURRENCYAMOUNT INTO TABLE LT_CURRENCYAMOUNT.
LS_ACCOUNTTAX-itemno_acc = l_pos.
LS_ACCOUNTTAX-gl_account = ls_mwdat-hkont.
LS_ACCOUNTTAX-tax_code = l_mwskz.
LS_ACCOUNTTAX-acct_key = ls_mwdat-ktosl.
LS_ACCOUNTTAX-tax_rate = ls_mwdat-msatz.
INSERT LS_ACCOUNTTAX INTO TABLE LT_ACCOUNTTAX.
ENDLOOP.
LT_DOCUMENTHEADER-COMP_CODE = <FS_ALV>-BUKRS.
LT_DOCUMENTHEADER-PSTNG_DATE = p_BlDAT.
LT_DOCUMENTHEADER-DOC_DATE = p_BUDAT.
LT_DOCUMENTHEADER-USERNAME = SY-UNAME.
LT_DOCUMENTHEADER-DOC_TYPE = 'NN'.
LT_DOCUMENTHEADER-FISC_YEAR = p_BlDAT(4).
LT_DOCUMENTHEADER-FIS_PERIOD = p_BlDAT+4(2).
CLEAR LS_ACCOUNTGL.
LS_ACCOUNTGL-ITEMNO_ACC = 1.
LS_ACCOUNTGL-PSTNG_DATE = p_BlDAT.
LS_ACCOUNTGL-BUS_AREA = '0100'.
LS_ACCOUNTGL-GL_ACCOUNT = '6811010100'.
APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR LS_ACCOUNTGL.
LS_ACCOUNTGL-ITEMNO_ACC = 2.
LS_ACCOUNTGL-TAX_CODE = l_mwskz.
LS_ACCOUNTGL-BUS_AREA = '0102'.
LS_ACCOUNTGL-PSTNG_DATE = p_BlDAT.
LS_ACCOUNTGL-GL_ACCOUNT = '6811000990'.
APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
DOCUMENTHEADER = LT_DOCUMENTHEADER
TABLES
ACCOUNTGL = LT_ACCOUNTGL
CURRENCYAMOUNT = LT_CURRENCYAMOUNT
ACCOUNTTAX = LT_ACCOUNTTAX
RETURN = LT_RETURN.
ENDFORM.
при вызове этой функции возвращается ошибка:
RW-интерфейс: множественная позиция документа