DATA: LS_DOCUMENTHEADER TYPE BAPIACHE09,
LS_ACCOUNTGL TYPE BAPIACGL09,
LT_ACCOUNTGL TYPE STANDARD TABLE OF BAPIACGL09,
LS_RETURN TYPE BAPIRET2,
LT_RETURN TYPE STANDARD TABLE OF BAPIRET2,
LS_ACCOUNTRECEIVABLE TYPE BAPIACAR09,
LT_ACCOUNTRECEIVABLE TYPE STANDARD TABLE OF BAPIACAR09,
LS_CURRENCYAMOUNT TYPE BAPIACCR09,
LT_CURRENCYAMOUNT TYPE STANDARD TABLE OF BAPIACCR09,
LS_ACCOUNTPAYABLE TYPE BAPIACAP09,
LT_ACCOUNTPAYABLE TYPE STANDARD TABLE OF BAPIACAP09,
LS_EXTENSION2 TYPE BAPIPAREX,
LT_EXTENSION2 TYPE STANDARD TABLE OF BAPIPAREX.
DATA LV_ITEMNO_ACC TYPE POSNR_ACC .
DATA: LV_MSG TYPE BAPI_MSG,
LV_MESSAGE TYPE BAPI_MSG.
DATA LV_WAERS2 TYPE T001-WAERS. "公司本位币
DATA:T_TAX_INFO LIKE TABLE OF RTAX1U15,
WA_TAX_INFO LIKE RTAX1U15,
LT_ACCOUNTTAX LIKE TABLE OF BAPIACTX09,
LS_ACCOUNTTAX LIKE BAPIACTX09,
I_WRBTR LIKE BSEG-WRBTR.
DATA: LS_ZFI_BADI_001 TYPE ZFI_BADI_001.
DATA: LV_AKONT TYPE KNB1-AKONT,
LV_MWSK1 TYPE VBRP-MWSK1,
LV_WAERK TYPE VBRK-WAERK.
DATA: LT_ZTFI_SALES_TAX TYPE TABLE OF ZTFI_SALES_TAX,
LS_ZTFI_SALES_TAX TYPE ZTFI_SALES_TAX.
FIELD-SYMBOLS: <LS_ALV> TYPE TY_ALV.
LOOP AT GT_ALV ASSIGNING <LS_ALV> WHERE BOX = 'X'.
IF <LS_ALV>-FKART = 'ZF2'.
* 抬头参数
LS_DOCUMENTHEADER-DOC_TYPE = 'RS'. " 凭证类型
LS_DOCUMENTHEADER-COMP_CODE = <LS_ALV>-BUKRS. " 公司代码
LS_DOCUMENTHEADER-DOC_DATE = <LS_ALV>-ZDATE. " 凭证日期
LS_DOCUMENTHEADER-PSTNG_DATE = <LS_ALV>-ZDATE. " 过账日期
LS_DOCUMENTHEADER-REF_DOC_NO = <LS_ALV>-VBELN. " 参照
LS_DOCUMENTHEADER-USERNAME = SY-UNAME.
LS_DOCUMENTHEADER-FISC_YEAR = <LS_ALV>-ZDATE+0(4). "年度
LS_DOCUMENTHEADER-FIS_PERIOD = <LS_ALV>-ZDATE+4(2). " 期间
* 行项目参数
*----------客户参数 记账码01
<LS_ALV>-KUNAG = |{ <LS_ALV>-KUNAG ALPHA = IN }|.
LS_ACCOUNTRECEIVABLE-ITEMNO_ACC = '1'. "行项目号
LS_ACCOUNTRECEIVABLE-CUSTOMER = <LS_ALV>-KUNAG. "客户编码
SELECT SINGLE AKONT INTO LV_AKONT FROM KNB1 WHERE KUNNR = <LS_ALV>-KUNAG.
LS_ACCOUNTRECEIVABLE-GL_ACCOUNT = LV_AKONT. "总账科目
LS_ACCOUNTRECEIVABLE-ITEM_TEXT = <LS_ALV>-ZZVBELN. "行项目摘要 取自VBAP-ZZVBELN
LS_ACCOUNTRECEIVABLE-COMP_CODE = <LS_ALV>-BUKRS. "公司代码
LS_ACCOUNTRECEIVABLE-ALLOC_NMBR = <LS_ALV>-AUBEL. " 分配 销售订单号
SELECT SINGLE MWSK1 INTO LV_MWSK1 FROM VBRP WHERE VBELN = <LS_ALV>-VBELN.
LS_ACCOUNTRECEIVABLE-TAX_CODE = LV_MWSK1. "税码
APPEND LS_ACCOUNTRECEIVABLE TO LT_ACCOUNTRECEIVABLE.
CLEAR LS_ACCOUNTRECEIVABLE.
LS_CURRENCYAMOUNT-ITEMNO_ACC = '1'. "行项目号
SELECT SINGLE WAERK INTO LV_WAERK FROM VBRK WHERE VBELN = <LS_ALV>-VBELN.
LS_CURRENCYAMOUNT-CURRENCY = LV_WAERK. " 货币
LS_CURRENCYAMOUNT-AMT_DOCCUR = <LS_ALV>-MWSBK.
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
LS_EXTENSION2-STRUCTURE = 'ZFI_BADI_001'.
LS_ZFI_BADI_001-POSNR = '1'.
LS_ZFI_BADI_001-BSCHL = '01'. "记账码
LS_EXTENSION2-VALUEPART1 = LS_ZFI_BADI_001.
APPEND LS_EXTENSION2 TO LT_EXTENSION2.
CLEAR LS_EXTENSION2.
*----------总账参数 记账码40
LS_ACCOUNTGL-ITEMNO_ACC = '2'. "行项目号
LS_ACCOUNTGL-GL_ACCOUNT = '2221180300'. "总账科目
LS_ACCOUNTGL-ITEM_TEXT = <LS_ALV>-ZZVBELN."行项目摘要 取自VBAP-ZZVBELN
* SELECT SINGLE MWSK1 INTO LV_MWSK1 FROM VBRP WHERE VBELN = <LS_ALV>-VBELN.
* LS_ACCOUNTGL-TAX_CODE = LV_MWSK1. "税码
APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR LS_ACCOUNTGL.
LS_CURRENCYAMOUNT-ITEMNO_ACC = '2'. "行项目号
SELECT SINGLE WAERK INTO LV_WAERK FROM VBRK WHERE VBELN = <LS_ALV>-VBELN.
LS_CURRENCYAMOUNT-CURRENCY = LV_WAERK. " 货币
LS_CURRENCYAMOUNT-AMT_DOCCUR = <LS_ALV>-MWSBK.
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
LS_EXTENSION2-STRUCTURE = 'ZFI_BADI_001'.
LS_ZFI_BADI_001-POSNR = '2'.
LS_ZFI_BADI_001-BSCHL = '40'. "记账码
LS_ZFI_BADI_001-XNEGP = 'X'. "反记账
LS_EXTENSION2-VALUEPART1 = LS_ZFI_BADI_001.
APPEND LS_EXTENSION2 TO LT_EXTENSION2.
CLEAR LS_EXTENSION2.
*----------客户参数 记账码11
<LS_ALV>-KUNAG = |{ <LS_ALV>-KUNAG ALPHA = IN }|.
LS_ACCOUNTRECEIVABLE-ITEMNO_ACC = '3'. "行项目号
LS_ACCOUNTRECEIVABLE-CUSTOMER = <LS_ALV>-KUNAG. "客户编码
SELECT SINGLE AKONT INTO LV_AKONT FROM KNB1 WHERE KUNNR = <LS_ALV>-KUNAG.
IF LV_AKONT = '1122010000'.
LS_ACCOUNTRECEIVABLE-GL_ACCOUNT = '1122010200'. "总账科目
ELSEIF LV_AKONT = '1122020000'.
LS_ACCOUNTRECEIVABLE-GL_ACCOUNT = '1122020200'. "总账科目
ENDIF.
LS_ACCOUNTRECEIVABLE-ITEM_TEXT = <LS_ALV>-ZZVBELN."行项目摘要 取自VBAP-ZZVBELN
LS_ACCOUNTRECEIVABLE-COMP_CODE = <LS_ALV>-BUKRS. "公司代码
LS_ACCOUNTRECEIVABLE-ALLOC_NMBR = <LS_ALV>-AUBEL. " 分配
SELECT SINGLE MWSK1 INTO LV_MWSK1 FROM VBRP WHERE VBELN = <LS_ALV>-VBELN.
LS_ACCOUNTRECEIVABLE-TAX_CODE = LV_MWSK1. "税码
APPEND LS_ACCOUNTRECEIVABLE TO LT_ACCOUNTRECEIVABLE.
CLEAR LS_ACCOUNTRECEIVABLE.
LS_CURRENCYAMOUNT-ITEMNO_ACC = '3'. "行项目号
SELECT SINGLE WAERK INTO LV_WAERK FROM VBRK WHERE VBELN = <LS_ALV>-VBELN.
LS_CURRENCYAMOUNT-CURRENCY = LV_WAERK. " 货币
LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - <LS_ALV>-MWSBK.
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
LS_EXTENSION2-STRUCTURE = 'ZFI_BADI_001'.
LS_ZFI_BADI_001-POSNR = '3'.
LS_ZFI_BADI_001-BSCHL = '11'. "记账码
LS_ZFI_BADI_001-XNEGP = 'X'. "反记账
LS_EXTENSION2-VALUEPART1 = LS_ZFI_BADI_001.
APPEND LS_EXTENSION2 TO LT_EXTENSION2.
CLEAR LS_EXTENSION2.
*----------总账参数 记账码50
LS_ACCOUNTGL-ITEMNO_ACC = '4'. "行项目号
LS_ACCOUNTGL-GL_ACCOUNT = '2221010202'. "总账科目
LS_ACCOUNTGL-ITEM_TEXT = <LS_ALV>-ZZVBELN."行项目摘要 取自VBAP-ZZVBELN
SELECT SINGLE MWSK1 INTO LV_MWSK1 FROM VBRP WHERE VBELN = <LS_ALV>-VBELN.
LS_ACCOUNTGL-TAX_CODE = LV_MWSK1. "税码
APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR LS_ACCOUNTGL.
LS_CURRENCYAMOUNT-ITEMNO_ACC = '4'. "行项目号
SELECT SINGLE WAERK INTO LV_WAERK FROM VBRK WHERE VBELN = <LS_ALV>-VBELN.
LS_CURRENCYAMOUNT-CURRENCY = LV_WAERK. " 货币
LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - <LS_ALV>-MWSBK.
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
LS_EXTENSION2-STRUCTURE = 'ZFI_BADI_001'.
LS_ZFI_BADI_001-POSNR = '4'.
LS_ZFI_BADI_001-BSCHL = '50'. "记账码
LS_EXTENSION2-VALUEPART1 = LS_ZFI_BADI_001.
APPEND LS_EXTENSION2 TO LT_EXTENSION2.
CLEAR LS_EXTENSION2.
ELSEIF <LS_ALV>-FKART = 'ZF3'.
* 抬头参数
LS_DOCUMENTHEADER-DOC_TYPE = 'RX'. " 凭证类型
LS_DOCUMENTHEADER-COMP_CODE = <LS_ALV>-BUKRS. " 公司代码
LS_DOCUMENTHEADER-DOC_DATE = <LS_ALV>-ZDATE. " 凭证日期
LS_DOCUMENTHEADER-PSTNG_DATE = <LS_ALV>-ZDATE. " 过账日期
LS_DOCUMENTHEADER-REF_DOC_NO = <LS_ALV>-VBELN. " 参照
LS_DOCUMENTHEADER-USERNAME = SY-UNAME.
LS_DOCUMENTHEADER-FISC_YEAR = <LS_ALV>-ZDATE+0(4). "年度
LS_DOCUMENTHEADER-FIS_PERIOD = <LS_ALV>-ZDATE+4(2). " 期间
* 行项目参数
*----------客户参数 记账码01
<LS_ALV>-KUNAG = |{ <LS_ALV>-KUNAG ALPHA = IN }|.
LS_ACCOUNTRECEIVABLE-ITEMNO_ACC = '1'. "行项目号
LS_ACCOUNTRECEIVABLE-CUSTOMER = <LS_ALV>-KUNAG. "客户编码
SELECT SINGLE AKONT INTO LV_AKONT FROM KNB1 WHERE KUNNR = <LS_ALV>-KUNAG.
LS_ACCOUNTRECEIVABLE-GL_ACCOUNT = LV_AKONT. "总账科目
LS_ACCOUNTRECEIVABLE-ITEM_TEXT = <LS_ALV>-ZZVBELN. "行项目摘要 取自VBAP-ZZVBELN
LS_ACCOUNTRECEIVABLE-COMP_CODE = <LS_ALV>-BUKRS. "公司代码
LS_ACCOUNTRECEIVABLE-ALLOC_NMBR = <LS_ALV>-AUBEL. " 分配 销售订单号
SELECT SINGLE MWSK1 INTO LV_MWSK1 FROM VBRP WHERE VBELN = <LS_ALV>-VBELN.
LS_ACCOUNTRECEIVABLE-TAX_CODE = LV_MWSK1. "税码
APPEND LS_ACCOUNTRECEIVABLE TO LT_ACCOUNTRECEIVABLE.
CLEAR LS_ACCOUNTRECEIVABLE.
LS_CURRENCYAMOUNT-ITEMNO_ACC = '1'. "行项目号
SELECT SINGLE WAERK INTO LV_WAERK FROM VBRK WHERE VBELN = <LS_ALV>-VBELN.
LS_CURRENCYAMOUNT-CURRENCY = LV_WAERK. " 货币
LS_CURRENCYAMOUNT-AMT_DOCCUR = <LS_ALV>-MWSBK.
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
LS_EXTENSION2-STRUCTURE = 'ZFI_BADI_001'.
LS_ZFI_BADI_001-POSNR = '1'.
LS_ZFI_BADI_001-BSCHL = '01'. "记账码
LS_EXTENSION2-VALUEPART1 = LS_ZFI_BADI_001.
APPEND LS_EXTENSION2 TO LT_EXTENSION2.
CLEAR LS_EXTENSION2.
*----------总账参数 记账码40
LS_ACCOUNTGL-ITEMNO_ACC = '2'. "行项目号
LS_ACCOUNTGL-GL_ACCOUNT = '1122990000'. "总账科目
LS_ACCOUNTGL-ITEM_TEXT = <LS_ALV>-ZZVBELN."行项目摘要 取自VBAP-ZZVBELN
* SELECT SINGLE MWSK1 INTO LV_MWSK1 FROM VBRP WHERE VBELN = <LS_ALV>-VBELN.
* LS_ACCOUNTGL-TAX_CODE = LV_MWSK1. "税码
APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR LS_ACCOUNTGL.
LS_CURRENCYAMOUNT-ITEMNO_ACC = '2'. "行项目号
SELECT SINGLE WAERK INTO LV_WAERK FROM VBRK WHERE VBELN = <LS_ALV>-VBELN.
LS_CURRENCYAMOUNT-CURRENCY = LV_WAERK. " 货币
LS_CURRENCYAMOUNT-AMT_DOCCUR = <LS_ALV>-NETWR.
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
LS_EXTENSION2-STRUCTURE = 'ZFI_BADI_001'.
LS_ZFI_BADI_001-POSNR = '2'.
LS_ZFI_BADI_001-BSCHL = '40'. "记账码
LS_EXTENSION2-VALUEPART1 = LS_ZFI_BADI_001.
APPEND LS_EXTENSION2 TO LT_EXTENSION2.
CLEAR LS_EXTENSION2.
*----------客户参数 记账码11
<LS_ALV>-KUNAG = |{ <LS_ALV>-KUNAG ALPHA = IN }|.
LS_ACCOUNTRECEIVABLE-ITEMNO_ACC = '3'. "行项目号
LS_ACCOUNTRECEIVABLE-CUSTOMER = <LS_ALV>-KUNAG. "客户编码
SELECT SINGLE AKONT INTO LV_AKONT FROM KNB1 WHERE KUNNR = <LS_ALV>-KUNAG.
IF LV_AKONT = '1122010000'.
LS_ACCOUNTRECEIVABLE-GL_ACCOUNT = '1122010200'. "总账科目
ELSEIF LV_AKONT = '1122020000'.
LS_ACCOUNTRECEIVABLE-GL_ACCOUNT = '1122020200'. "总账科目
ENDIF.
LS_ACCOUNTRECEIVABLE-ITEM_TEXT = <LS_ALV>-ZZVBELN."行项目摘要 取自VBAP-ZZVBELN
LS_ACCOUNTRECEIVABLE-COMP_CODE = <LS_ALV>-BUKRS. "公司代码
LS_ACCOUNTRECEIVABLE-ALLOC_NMBR = <LS_ALV>-AUBEL. " 分配
SELECT SINGLE MWSK1 INTO LV_MWSK1 FROM VBRP WHERE VBELN = <LS_ALV>-VBELN.
LS_ACCOUNTRECEIVABLE-TAX_CODE = LV_MWSK1. "税码
APPEND LS_ACCOUNTRECEIVABLE TO LT_ACCOUNTRECEIVABLE.
CLEAR LS_ACCOUNTRECEIVABLE.
LS_CURRENCYAMOUNT-ITEMNO_ACC = '3'. "行项目号
SELECT SINGLE WAERK INTO LV_WAERK FROM VBRK WHERE VBELN = <LS_ALV>-VBELN.
LS_CURRENCYAMOUNT-CURRENCY = LV_WAERK. " 货币
LS_CURRENCYAMOUNT-AMT_DOCCUR = <LS_ALV>-NETWR.
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
LS_EXTENSION2-STRUCTURE = 'ZFI_BADI_001'.
LS_ZFI_BADI_001-POSNR = '3'.
LS_ZFI_BADI_001-BSCHL = '11'. "记账码
LS_EXTENSION2-VALUEPART1 = LS_ZFI_BADI_001.
APPEND LS_EXTENSION2 TO LT_EXTENSION2.
CLEAR LS_EXTENSION2.
*----------总账参数 记账码50
LS_ACCOUNTGL-ITEMNO_ACC = '4'. "行项目号
LS_ACCOUNTGL-GL_ACCOUNT = '2221010202'. "总账科目
LS_ACCOUNTGL-ITEM_TEXT = <LS_ALV>-ZZVBELN."行项目摘要 取自VBAP-ZZVBELN
SELECT SINGLE MWSK1 INTO LV_MWSK1 FROM VBRP WHERE VBELN = <LS_ALV>-VBELN.
LS_ACCOUNTGL-TAX_CODE = LV_MWSK1. "税码
APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR LS_ACCOUNTGL.
LS_CURRENCYAMOUNT-ITEMNO_ACC = '4'. "行项目号
SELECT SINGLE WAERK INTO LV_WAERK FROM VBRK WHERE VBELN = <LS_ALV>-VBELN.
LS_CURRENCYAMOUNT-CURRENCY = LV_WAERK. " 货币
LS_CURRENCYAMOUNT-AMT_DOCCUR = <LS_ALV>-NETWR.
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
LS_EXTENSION2-STRUCTURE = 'ZFI_BADI_001'.
LS_ZFI_BADI_001-POSNR = '4'.
LS_ZFI_BADI_001-BSCHL = '50'. "记账码
LS_EXTENSION2-VALUEPART1 = LS_ZFI_BADI_001.
APPEND LS_EXTENSION2 TO LT_EXTENSION2.
CLEAR LS_EXTENSION2.
ENDIF.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST' "创建会计凭证
EXPORTING
DOCUMENTHEADER = LS_DOCUMENTHEADER
* CUSTOMERCPD =
* CONTRACTHEADER =
TABLES
ACCOUNTGL = LT_ACCOUNTGL
ACCOUNTRECEIVABLE = LT_ACCOUNTRECEIVABLE
ACCOUNTPAYABLE = LT_ACCOUNTPAYABLE
* ACCOUNTTAX =
CURRENCYAMOUNT = LT_CURRENCYAMOUNT
* CRITERIA =
* VALUEFIELD =
* EXTENSION1 =
RETURN = LT_RETURN
* PAYMENTCARD =
* CONTRACTITEM =
EXTENSION2 = LT_EXTENSION2
* REALESTATE =
* ACCOUNTWT =
.
READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE = 'A' OR TYPE = 'E'.
<LS_ALV>-MSG = <LS_ALV>-MSG && LS_RETURN-MESSAGE.
ENDLOOP.
ELSE.
* 提交凭证过账
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'S'.
<LS_ALV>-MSG = '会计凭证过账成功!会计凭证号:' && LS_RETURN-MESSAGE_V2+0(10) .
<LS_ALV>-ZZTAX = LS_RETURN-MESSAGE_V2+0(10).
ENDIF.
ENDLOOP.
LOOP AT GT_ALV INTO GS_ALV WHERE BOX = 'X' AND ZZTAX IS NOT INITIAL.
MOVE-CORRESPONDING GS_ALV TO LS_ZTFI_SALES_TAX.
APPEND LS_ZTFI_SALES_TAX TO LT_ZTFI_SALES_TAX.
CLEAR LS_ZTFI_SALES_TAX.
ENDLOOP.
IF LT_ZTFI_SALES_TAX IS NOT INITIAL.
MODIFY ZTFI_SALES_TAX FROM TABLE LT_ZTFI_SALES_TAX .
ENDIF.
SAP FICO 会计凭证过账BAPI
最新推荐文章于 2024-07-10 11:23:55 发布