使用BAPI_ACC_DOCUMENT_POST,建立會計憑證,用BADI擴充套件欄位(轉)
業務需求:和銀行做一個介面,要通過銀行流水產生會計憑證,會計憑證的事務碼是F-02,查到了BAPI方法BAPI_ACC_DOCUMENT_POST。昨天測試發現,有一些引數在BAPI_ACC_DOCUMENT_POST的輸入和表引數中根本沒有,如記賬碼Posting Key、原因程式碼Reason Code,那怎麼把這些欄位的值傳進去呢?在SDN查了一下相關問題的解決辦法,發現遇到這個問題的朋友還挺多,總結了一下,解決辦法大體如下:
1、se11建立結構,必須包含行專案號POSNR欄位,和其他需要擴充套件的欄位,如記賬碼Posting Key、原因程式碼Reason Code
2、SE19實現BADI增強ACC_DOCUMENT,這個增強是用來將BAPI_ACC_DOCUMENT_POST參數列EXTENSION2傳入系統表
3、使用BAPI_ACC_DOCUMENT_POST參數列EXTENSION2,將擴充套件欄位傳入
詳細步驟如下:
1、建立結構,se11,很簡單,不再贅述,如下圖:
2、SE19實現BADI增強ACC_DOCUMENT
通過ACC_DOCUMENT help文件知道,方法CHANGE用來完成欄位的擴充套件,還有一個需要注意的是參考業務型別,這個一定要選對,不然執行BAPI的時候不會呼叫這個BADI,我用的是BKPFF,如下圖:
啟用這個BADI實現。
雙擊change方法建立,可以檢視ACC_DOCUMENT 的實現例子CL_EXM_IM_ACC_DOCUMENT(R/3 4.7版本,其他版本可能名稱不一樣),,將這個例項的change方法的程式碼直接copy過來,啟用方法,程式碼如下
***********************************************************************
* Example to move fields from BAPI parameter EXTENSION2 to structure *
* ACCIT (accounting document line items). *
* The dictionary structure (content for EXTENSION2-STRUCTURE) must *
* contain field POSNR, (TYPE POSNR_ACC) to indentify the correct line *
* item of the internal table ACCIT. *
***********************************************************************
DATA: wa_extension TYPE bapiparex,
ext_value(960) TYPE c,
wa_accit TYPE accit,
l_ref TYPE REF TO data.
FIELD-SYMBOLS:
SORT c_extension2 BY structure.
LOOP AT c_extension2 INTO wa_extension.
AT NEW structure.
CREATE DATA l_ref TYPE (wa_extension-structure).
ASSIGN l_ref->* TO
ENDAT.
CONCATENATE wa_extension-valuepart1 wa_extension-valuepart2
wa_extension-valuepart3 wa_extension-valuepart4
INTO ext_value.
MOVE ext_value TO
ASSIGN COMPONENT 'POSNR' OF STRUCTURE
READ TABLE c_accit WITH KEY posnr =
INTO wa_accit.
IF sy-subrc IS INITIAL.
MOVE-CORRESPONDING
MODIFY c_accit FROM wa_accit INDEX sy-tabix.
ENDIF.
ENDLOOP.
3、使用BAPI_ACC_DOCUMENT_POST參數列EXTENSION2,將擴充套件欄位傳入
**********************************************************************
*INTERNAL TABLE DECLARATION
**********************************************************************
*&—-G/L ACCOUNT ITEM
DATA: ACCOUNTGL TYPE STANDARD TABLE OF BAPIACGL09.
*&—CURRENCY ITEMS
DATA: CURRENCY_AMOUNT TYPE STANDARD TABLE OF BAPIACCR09.
*&—-RETURN PARAMETER
DATA: RETURN TYPE STANDARD TABLE OF BAPIRET2 WITH HEADER LINE.
*&—-it_extension2 ITEMS
DATA: IT_EXTENSION2 TYPE STANDARD TABLE OF BAPIPAREX WITH HEADER LINE.
*&—WORKAREA FOR ZEXTEN
DATA: WA_ZEXTEN LIKE ZEXTEN. ”ZEXTEN就是剛才SE11建立的那個結構
**********************************************************************
*賦值
**********************************************************************
*& EXTENSION2 擴充套件欄位增強部分
WA_ZEXTEN-POSNR = '0000000010'. "憑證行專案
WA_ZEXTEN-RSTGR = '171'. "憑證行專案原因程式碼
IT_EXTENSION2-STRUCTURE = 'ZEXTEN'.
IT_EXTENSION2-VALUEPART1 = WA_ZEXTEN.
APPEND IT_EXTENSION2.
*其他參數列的欄位賦值如下例
HEADER-HEADER_TXT = 'TEST HEADER'."憑證抬頭文字
HEADER-USERNAME = SY-UNAME. "使用者名稱
HEADER-COMP_CODE = '1000'."公司程式碼
HEADER-DOC_DATE = '20090618'."憑證中的憑證日期
HEADER-PSTNG_DATE = '20090618'."憑證中的記帳日期
HEADER-DOC_TYPE = 'S1'."憑證型別
* HEADER-BUS_ACT = 'RFBU'."交易業務
WA_ACCOUNTGL-ITEMNO_ACC = '0000000010'. "會計憑證行專案編號
WA_ACCOUNTGL-GL_ACCOUNT = '1002010105'. "總分類帳帳目
* WA_ACCOUNTGL-ITEM_TEXT = .
WA_ACCOUNTGL-BUS_AREA = '8000'. "業務範圍
APPEND WA_ACCOUNTGL TO ACCOUNTGL.
CLEAR WA_ACCOUNTGL.
WA_ACCOUNTGL-ITEMNO_ACC = '0000000020'. "會計憑證行專案編號
WA_ACCOUNTGL-GL_ACCOUNT = '1301040000'. "總分類帳帳目
WA_ACCOUNTGL-BUS_AREA = '8000'. "業務範圍
*WA_ACCOUNTGL-ITEM_TEXT = .
*wa_accountgl-ACCT_TYPE = 'R'.
APPEND WA_ACCOUNTGL TO ACCOUNTGL.
CLEAR WA_ACCOUNTGL.
WA_CURRENCY_AMOUNT-ITEMNO_ACC = '0000000010'. "行專案編號
WA_CURRENCY_AMOUNT-AMT_DOCCUR = '500'. "金額
WA_CURRENCY_AMOUNT-CURRENCY = 'RMB'.
APPEND WA_CURRENCY_AMOUNT TO CURRENCY_AMOUNT.
CLEAR WA_CURRENCY_AMOUNT.
WA_CURRENCY_AMOUNT-ITEMNO_ACC = '0000000020'.
WA_CURRENCY_AMOUNT-AMT_DOCCUR = '-500'.
WA_CURRENCY_AMOUNT-CURRENCY = 'RMB'.
APPEND WA_CURRENCY_AMOUNT TO CURRENCY_AMOUNT.
CLEAR WA_CURRENCY_AMOUNT.
*執行BAPI
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
DOCUMENTHEADER = HEADER
*CUSTOMERCPD =
*CONTRACTHEADER =
*IMPORTING
*OBJ_TYPE =
*OBJ_KEY =
*OBJ_SYS =
TABLES
ACCOUNTGL = ACCOUNTGL
*ACCOUNTRECEIVABLE =
*ACCOUNTPAYABLE =
*ACCOUNTTAX =
CURRENCYAMOUNT = CURRENCY_AMOUNT
*CRITERIA =
*VALUEFIELD =
*EXTENSION1 =
RETURN = RETURN
*PAYMENTCARD =
*CONTRACTITEM =
EXTENSION2 = IT_EXTENSION2
*REALESTATE =
.
IF RETURN-TYPE NA 'EA'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
如果還需要擴充套件其他欄位,在結構ZEXTEN加入,然後在呼叫BAPI前對相應欄位賦值,就行了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16794144/viewspace-759564/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用 SAP CRM Application Enhancement Tool(AET) 建立擴充套件欄位APP套件
- django 2.0 擴充套件使用者欄位 示例Django套件
- 使用擴充套件技術將SAP Fiori應用隱藏動態建立的UI欄位套件UI
- 如何在Marketing Cloud裡建立extension field擴充套件欄位Cloud套件
- [外掛擴充套件]多圖上傳欄位擴充套件MultiImages0.4套件
- 在S/4HANA擴充套件欄位的Available Fields列表裡,看不到自己建立的擴充套件欄位該怎麼辦套件AI
- 使用 Rust 建立 PHP 擴充套件RustPHP套件
- 一步步使用SAP CRM Application Enhancement Tool建立擴充套件欄位APP套件
- 表單驗證使用擴充套件套件
- 不改表結構如何動態擴充套件欄位套件
- SAP S/4HANA擴充套件欄位建立過程的單步除錯套件除錯
- SAP C4C 2102版本如何使用Key User Tool建立擴充套件欄位 - extension field套件
- eayui 驗證擴充套件UI套件
- 位擴充套件和位截斷套件
- Python+django網頁設計入門(19):建立新模型擴充套件自帶使用者表的欄位PythonDjango網頁模型套件
- dcat欄位擴充套件:地圖拖拽設定xy座標套件地圖
- Java SE(12) 擴充套件——進位制轉換Java套件
- 建立本地擴充套件包套件
- SAP S/4HANA系統上所有可以用來建立擴充套件欄位的業務上下文套件
- Laravel 驗證擴充套件包Laravel套件
- jquery easyui 擴充套件驗證jQueryUI套件
- 如何在呼叫Marketing Cloud contact建立API時增加對擴充套件欄位的支援CloudAPI套件
- 怎麼取的擴充套件模型裡表裡的欄位啊套件模型
- 擴充套件、接管MVC都不會,還會用Spring Boot?套件MVCSpring Boot
- 建立VS Code 擴充套件外掛套件
- ?用Chrome擴充套件管理器, 管理你的擴充套件Chrome套件
- etcd管理,證書配置,擴充套件,遷移恢復,帶證書擴充套件節點套件
- 知識庫(2)-使用Windows OpenGL擴充套件機制來訪問OpenGL擴充套件 (轉)Windows套件
- 使用Slice擴充套件伸縮OpenJPA 應用套件
- PDF 擴充套件包使用套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- 構建可擴充套件的應用(一) (轉)套件
- Flutter 應用程式建立一個擴充套件皮膚列表Flutter套件
- 使用Kotlin擴充套件函式擴充套件Spring Data案例Kotlin套件函式Spring
- OpenGL 1.3 最新擴充套件 (轉)套件
- 擴充套件你的STRUTS (轉)套件
- SAP CRM和Cloud for Customer的擴充套件欄位後設資料Cloud套件
- SAP CRM AET Application Reference型別擴充套件欄位的一個例子APP型別套件