自动计算税率:CALCULATE_TAX_FROM_GROSSAMOUNT
创建会计凭证:BAPI_ACC_DOCUMENT_POST
示例代码如下:
DATA: LS_HEADER TYPE BAPIACHE09.
DATA: LV_KEY TYPE BAPIACHE09-OBJ_KEY.
DATA: LT_ACCOUNTGL TYPE STANDARD TABLE OF BAPIACGL09.
DATA: LS_ACCOUNTGL TYPE BAPIACGL09.
DATA: LT_RECEIVABLE TYPE STANDARD TABLE OF BAPIACAR09.
DATA: LS_RECEIVABLE TYPE BAPIACAR09.
DATA: LT_CURRENCY TYPE STANDARD TABLE OF BAPIACCR09.
DATA: LS_CURRENCY TYPE BAPIACCR09.
DATA: LT_EXTENSION TYPE STANDARD TABLE OF BAPIPAREX.
DATA: LS_EXTENSION TYPE BAPIPAREX.
DATA: LS_ACCOUNTTAX TYPE BAPIACTX09.
DATA: LT_ACCOUNTTAX TYPE STANDARD TABLE OF BAPIACTX09.
DATA: LT_RETURN TYPE STANDARD TABLE OF BAPIRET2.
DATA: LS_RETURN TYPE BAPIRET2.
DATA: LS_EXTEN TYPE ZACCIT.
DATA: LV_NUM TYPE POSNR_ACC.
DATA: LV_WRBTR TYPE WRBTR.
DATA: LV_TAX TYPE WRBTR.
DATA: LV_MESSAGE TYPE STRING.
*head
LS_HEADER-DOC_TYPE = LS_SELECT-BLART.
LS_HEADER-USERNAME = SY-UNAME.
LS_HEADER-REF_DOC_NO = LS_SELECT-XBLNR.
LS_HEADER-COMP_CODE = LS_SELECT-BUKRS.
LS_HEADER-DOC_DATE = SY-DATUM.
LS_HEADER-PSTNG_DATE = SY-DATUM.
LS_HEADER-FISC_YEAR = SY-DATUM+0(4). "会会计年度
LS_HEADER-FIS_PERIOD = SY-DATUM+4(2). "会计期间
*应收
LV_NUM = LV_NUM + 1.
LV_WRBTR = LV_WRBTR + GS_INVOICE-WRBTR.
CLEAR:LS_RECEIVABLE.
LS_RECEIVABLE-ITEMNO_ACC = LV_NUM.
IF GS_INVOICE-HKONT IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = GS_INVOICE-HKONT
IMPORTING
OUTPUT = LS_RECEIVABLE-GL_ACCOUNT.
ENDIF.
IF GS_INVOICE-PRCTR IS NOT INITIAL .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = GS_INVOICE-PRCTR
IMPORTING
OUTPUT = LS_RECEIVABLE-PROFIT_CTR.
ENDIF.
LS_RECEIVABLE-TAX_CODE = GS_INVOICE-MWSKZ.
APPEND LS_RECEIVABLE TO LT_RECEIVABLE.
CLEAR:LS_CURRENCY.
LS_CURRENCY-ITEMNO_ACC = LV_NUM.
LS_CURRENCY-CURRENCY = GS_INVOICE-WAERS.
LS_CURRENCY-AMT_DOCCUR = - GS_INVOICE-WRBTR.
APPEND LS_CURRENCY TO LT_CURRENCY.
CLEAR:LS_EXTENSION,LS_EXTEN.
LS_EXTEN-POSNR = LV_NUM. "凭证行项目
LS_EXTEN-BSCHL = GS_INVOICE-BSCHL. "凭证行项目过账码
LS_EXTENSION-STRUCTURE = 'ZACCIT'.
LS_EXTENSION-VALUEPART1 = LS_EXTEN.
APPEND LS_EXTENSION TO LT_EXTENSION.
*税
IF GS_INVOICE-MWSKZ IS NOT INITIAL .
CLEAR:LT_TAX_INFO.
CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'
EXPORTING
I_BUKRS = GS_INVOICE-BUKRS
I_MWSKZ = GS_INVOICE-MWSKZ
I_WAERS = GS_INVOICE-WAERS
I_WRBTR = GS_INVOICE-WRBTR
TABLES
T_MWDAT = LT_TAX_INFO.
IF LT_TAX_INFO IS NOT INITIAL .
LOOP AT LT_TAX_INFO INTO LS_TAX_INFO.
CLEAR:LV_TAX.
CLEAR:LS_ACCOUNTTAX.
LV_NUM = LV_NUM + 1.
LS_ACCOUNTTAX-ITEMNO_ACC = LV_NUM.
LS_ACCOUNTTAX-TAX_CODE = GS_INVOICE-MWSKZ.
LS_ACCOUNTTAX-ACCT_KEY = LS_TAX_INFO-KTOSL.
LS_ACCOUNTTAX-COND_KEY = LS_TAX_INFO-KSCHL.
LS_ACCOUNTTAX-TAXJURCODE = LS_TAX_INFO-TXJCD.
LS_ACCOUNTTAX-TAXJURCODE_DEEP = LS_TAX_INFO-TXJCD_DEEP.
LS_ACCOUNTTAX-TAXJURCODE_LEVEL = LS_TAX_INFO-TXJLV.
APPEND LS_ACCOUNTTAX TO LT_ACCOUNTTAX.
CLEAR:LS_CURRENCY.
LS_CURRENCY-ITEMNO_ACC = LV_NUM.
LS_CURRENCY-CURRENCY = GS_INVOICE-WAERS.
LV_TAX = GS_INVOICE-WRBTR * ( LS_TAX_INFO-MSATZ / 100 ) .
LS_CURRENCY-AMT_DOCCUR = - LV_TAX.
LS_CURRENCY-AMT_BASE = LS_TAX_INFO-KAWRT.
APPEND LS_CURRENCY TO LT_CURRENCY.
LV_WRBTR = LV_WRBTR + LV_TAX.
ENDLOOP.
ENDIF.
ENDIF.
*合计
*all
LV_NUM = LV_NUM + 1.
CLEAR: LS_ACCOUNTGL.
LS_ACCOUNTGL-ITEMNO_ACC = LV_NUM.
IF LS_SELECT-KUNNR IS NOT INITIAL .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LS_SELECT-KUNNR
IMPORTING
OUTPUT = LS_ACCOUNTGL-CUSTOMER.
ENDIF.
LS_ACCOUNTGL-GL_ACCOUNT = '0000012000'.
APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR:LS_CURRENCY.
LS_CURRENCY-ITEMNO_ACC = LV_NUM.
LS_CURRENCY-CURRENCY = LS_SELECT-WAERS.
LS_CURRENCY-AMT_DOCCUR = LV_WRBTR.
APPEND LS_CURRENCY TO LT_CURRENCY.
CLEAR:LS_EXTENSION,LS_EXTEN.
LS_EXTEN-POSNR = LV_NUM. "凭证行项目
LS_EXTEN-BSCHL = '01'. "凭证行项目过账码
LS_EXTENSION-STRUCTURE = 'ZACCIT'.
LS_EXTENSION-VALUEPART1 = LS_EXTEN.
APPEND LS_EXTENSION TO LT_EXTENSION.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
DOCUMENTHEADER = LS_HEADER
* CUSTOMERCPD =
* CONTRACTHEADER =
IMPORTING
OBJ_KEY = LV_KEY
TABLES
ACCOUNTGL = LT_ACCOUNTGL
ACCOUNTRECEIVABLE = LT_RECEIVABLE
* ACCOUNTPAYABLE = LT_PAY
ACCOUNTTAX = LT_ACCOUNTTAX
CURRENCYAMOUNT = LT_CURRENCY
* CRITERIA =
* VALUEFIELD =
* EXTENSION1 =
RETURN = LT_RETURN
EXTENSION2 = LT_EXTENSION.
READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC = 0.
LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE = 'E'.
CONCATENATE LV_MESSAGE LS_RETURN-MESSAGE INTO LV_MESSAGE." 错误消息
ENDLOOP.
ENDIF.