最近需要做一個清帳程序,SAP沒有清帳的BAPI,但是提供了清帳的一組函數:
POSTING_INTERFACE_START;
POSTING_INTERFACE_CLEARING;
POSTING_INTERFACE_END ;
這邊着重說明一下函數POSTING_INTERFACE_CLEARING的傳值
栗子:
發票校驗產生的應收憑證需要轉成預收,然后清掉應付。
A憑證 借:費用
貸:應付暫估
B憑證 借:應付暫估
借:應繳增值稅
貸:應付
C憑證 借: 預收
貸:費用
A和B 可以清掉應付暫估
C憑證的產生可以直接同時把應付清掉
這邊主要說明C憑證的產生。
FB05是清帳事物代碼:
T_FTPOST的值是產生清帳 並生成預收憑證C的 抬頭字段和項目字段值:
輸入的值如同
FB05的
T_FTCLEAR的值是需要清的憑證,展開如下,是要清掉會計憑證9511007857,如果需要清多個憑證需要填多個
相當於FB05的
點擊FB05模擬
SE37里面執行 POSTING_INTERFACE_CLEARING 可以debug看到FB05的界面
注意:給T_FTPOST傳值的時候金額需要去前面的空格,千萬不要對每一個字段都去空格,不然會帶不到FB05的行項目上,這幾天由於對每個字段都去空格,測了老半天的錯誤才查出來,折騰死。
如果生成的清帳憑證是一個沒有行項目的憑證:
參數:T_FTCLEAR: 傳入的是所要清帳的內容比如清供應商的應付行項目
參數:T_FTPOST 是要生成的SH清帳憑證的抬頭
參數:I_AUGLV : UMBUCHNG
I_TCODE: FB05
I_SGFUNCT:C 這邊不知道除了傳C還可以傳什么
這邊貼一段代碼:清帳產生沒有行項目的憑證:
1 FORM frm_create_sh USING p_haeder TYPE zfis011 2 pt_list TYPE zfit009 3 CHANGING pt_return TYPE zfit010. 4 5 DATA: lt_list TYPE zfit009, 6 ls_list TYPE zfis009, 7 wa_list TYPE zfis009, 8 lt_return TYPE zfit010, 9 ls_return TYPE zfis010, 10 lv_itemno TYPE posnr_acc. 11 12 DATA lv_message TYPE bapiret2-message. 13 DATA: lv_msgid LIKE sy-msgid, 14 lv_msgno LIKE sy-msgno, 15 lv_msgty LIKE sy-msgty, 16 lv_msgv1 LIKE sy-msgv1, 17 lv_msgv2 LIKE sy-msgv2, 18 lv_msgv3 LIKE sy-msgv3, 19 lv_msgv4 LIKE sy-msgv4, 20 lv_subrc LIKE sy-subrc. 21 22 DATA: lt_blntab LIKE TABLE OF blntab WITH HEADER LINE, 23 lt_ftclear LIKE TABLE OF ftclear WITH HEADER LINE, 24 lt_ftpost LIKE TABLE OF ftpost WITH HEADER LINE, 25 lt_fttax LIKE TABLE OF fttax WITH HEADER LINE. 26 27 28 lt_list = pt_list. 29 lt_return = pt_return. 30 SORT lt_return BY group blart. 31 DELETE lt_list WHERE flag = ' '. 32 REFRESH:lt_ftclear,lt_ftpost. 33 LOOP AT lt_list INTO ls_list. 34 35 *--需要清帳的憑證和供應商 36 READ TABLE lt_return INTO ls_return WITH KEY group = ls_list-group 37 blart = 'KR' BINARY SEARCH. 38 IF sy-subrc = 0. 39 CLEAR lt_ftclear. 40 lt_ftclear-agkoa = 'K'. 41 lt_ftclear-agkon = ls_list-kunnr. 42 lt_ftclear-agbuk = p_haeder-bukrs. 43 lt_ftclear-xnops = 'X'. 44 lt_ftclear-selfd = 'BELNR'. 45 lt_ftclear-selvon = ls_return-belnr. 46 APPEND lt_ftclear. 47 ENDIF. 48 49 READ TABLE lt_return INTO ls_return WITH KEY group = ls_list-group 50 blart = 'DY' BINARY SEARCH. 51 IF sy-subrc = 0. 52 CLEAR lt_ftclear. 53 lt_ftclear-agkoa = 'K'. 54 lt_ftclear-agkon = ls_list-kunnr. 55 lt_ftclear-agbuk = p_haeder-bukrs. 56 lt_ftclear-xnops = 'X'. 57 lt_ftclear-selfd = 'BELNR'. 58 lt_ftclear-selvon = ls_return-belnr. 59 APPEND lt_ftclear. 60 ENDIF. 61 62 *--清帳憑證抬頭 63 CLEAR lt_ftpost. 64 lt_ftpost-stype = 'K'. 65 lt_ftpost-fnam = 'BKPF-BLDAT'. 66 lt_ftpost-fval = sy-datum. 67 APPEND lt_ftpost. 68 69 CLEAR lt_ftpost. 70 lt_ftpost-stype = 'K'. 71 lt_ftpost-fnam = 'BKPF-BLART'. 72 lt_ftpost-fval = 'SH'. 73 APPEND lt_ftpost. 74 75 CLEAR lt_ftpost. 76 lt_ftpost-stype = 'K'. 77 lt_ftpost-fnam = 'BKPF-BUKRS'. 78 lt_ftpost-fval = p_haeder-bukrs. 79 APPEND lt_ftpost. 80 81 CLEAR lt_ftpost. 82 lt_ftpost-stype = 'K'. 83 lt_ftpost-fnam = 'BKPF-BUDAT'. 84 lt_ftpost-fval = sy-datum. 85 APPEND lt_ftpost. 86 87 CLEAR lt_ftpost. 88 lt_ftpost-stype = 'K'. 89 lt_ftpost-fnam = 'BKPF-WAERS'. 90 lt_ftpost-fval = 'RMB'. 91 APPEND lt_ftpost. 92 ENDLOOP. 93 94 *--開始清帳 95 CALL FUNCTION 'POSTING_INTERFACE_START' 96 EXPORTING 97 i_client = sy-mandt 98 i_function = 'C' 99 i_mode = 'N' "不顯示調用屏幕 100 i_update = 'S' "同步 101 i_user = sy-uname. 102 103 104 CLEAR:lv_msgid,lv_msgno,lv_msgty,lv_msgv1, 105 lv_msgv2,lv_msgv3,lv_msgv4,lv_subrc,lv_message. 106 CALL FUNCTION 'POSTING_INTERFACE_CLEARING' 107 EXPORTING 108 i_auglv = 'UMBUCHNG' 109 i_tcode = 'FB05' 110 i_sgfunct = 'C' 111 IMPORTING 112 e_msgid = lv_msgid 113 e_msgno = lv_msgno 114 e_msgty = lv_msgty 115 e_msgv1 = lv_msgv1 116 e_msgv2 = lv_msgv2 117 e_msgv3 = lv_msgv3 118 e_msgv4 = lv_msgv4 119 e_subrc = lv_subrc 120 TABLES 121 t_blntab = lt_blntab 122 t_ftclear = lt_ftclear 123 t_ftpost = lt_ftpost 124 t_fttax = lt_fttax. 125 CLEAR lv_message. 126 MESSAGE ID lv_msgid 127 TYPE lv_msgty 128 NUMBER lv_msgno 129 WITH lv_msgv1 lv_msgv2 lv_msgv3 lv_msgv4 130 INTO lv_message. 131 CLEAR ls_return. 132 133 *---記錄清帳產生的憑證號 134 READ TABLE lt_blntab INDEX 1. 135 ls_return-blart = 'SH'. 136 ls_return-bukrs = lt_blntab-bukrs. 137 ls_return-belnr = lt_blntab-belnr. 138 ls_return-gjahr = lt_blntab-gjahr. 139 IF lv_subrc = 0. 140 ls_return-flag = 'S'. 141 ELSE. 142 ls_return-flag = 'E'. 143 ENDIF. 144 ls_return-message = lv_message. 145 APPEND ls_return TO pt_return. 146 CALL FUNCTION 'POSTING_INTERFACE_END' 147 EXCEPTIONS 148 session_not_processable = 1 149 OTHERS = 2. 150 151 152 ENDFORM. " FRM_CREATE_SH