清账的事务码很多,FB05,F.13,F-30等,每一个事务功能都有一些差异,但从研究代码后发现这些清账程序其实调用的功能都是相同的,并且还没找到清账对应的的BAPI,但功能上来说,其实都是基于FB05来做的,也就是说其它的清账功能,其实都可以通过FB05功能来实现,并且FB05其实调用的也是又是组BDC函数,所以我们在需要做清账功能的程序时也可以同样调用这组BDC函数,
以下为一个供应商清账的例子,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
FUNCTION Z_FI_FB05. *"---------------------------------------------------------------------- *"*"Local interface: *" IMPORTING *" VALUE(I_MODE) LIKE RFPDO-ALLGAZMD DEFAULT 'N' *" VALUE(I_AUGLV) LIKE T041A-AUGLV *" EXPORTING *" VALUE(E_MSGID) LIKE SY-MSGID *" VALUE(E_MSGNO) LIKE SY-MSGNO *" VALUE(E_MSGTY) LIKE SY-MSGTY *" VALUE(E_MSGV1) LIKE SY-MSGV1 *" VALUE(E_MSGV2) LIKE SY-MSGV2 *" VALUE(E_MSGV3) LIKE SY-MSGV3 *" VALUE(E_MSGV4) LIKE SY-MSGV4 *" VALUE(E_SUBRC) LIKE SY-SUBRC *" TABLES *" T_BLNTAB STRUCTURE BLNTAB *" T_FTCLEAR STRUCTURE FTCLEAR *" T_FTPOST STRUCTURE FTPOST *" T_FTTAX STRUCTURE FTTAX *"---------------------------------------------------------------------- CALL FUNCTION 'POSTING_INTERFACE_START' EXPORTING i_function = 'C' i_keep = 'X' i_mode = I_MODE "A for step by step,N default,for background EXCEPTIONS client_incorrect = 1 function_invalid = 2 group_name_missing = 3 mode_invalid = 4 update_invalid = 5 OTHERS = 6. CALL FUNCTION 'POSTING_INTERFACE_CLEARING' EXPORTING i_auglv = I_AUGLV i_tcode = 'FB05' i_sgfunct = 'C' IMPORTING e_msgid = e_msgid e_msgno = e_msgno e_msgty = e_msgty e_msgv1 = e_msgv1 e_msgv2 = e_msgv2 e_msgv3 = e_msgv3 e_msgv4 = e_msgv4 e_subrc = e_subrc TABLES t_blntab = t_blntab "成功有值. t_ftclear = t_ftclear t_ftpost = t_ftpost t_fttax = t_fttax EXCEPTIONS clearing_procedure_invalid = 1 clearing_procedure_missing = 2 table_t041a_empty = 3 transaction_code_invalid = 4 amount_format_error = 5 too_many_line_items = 6 company_code_invalid = 7 screen_not_found = 8 no_authorization = 9 OTHERS = 10. CALL FUNCTION 'POSTING_INTERFACE_END' EXCEPTIONS session_not_processable = 1 OTHERS = 2. ENDFUNCTION. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
FORM PRO_FB01_200_P CHANGING P_BELNR TYPE BELNR_D P_GJAHR TYPE GJAHR P_SUCC TYPE FLAG. DATA: IT_BLNTAB TYPE TABLE OF BLNTAB WITH HEADER LINE, IT_FTCLEAR TYPE TABLE OF FTCLEAR WITH HEADER LINE, IT_FTPOST TYPE TABLE OF FTPOST WITH HEADER LINE, IT_FTTAX TYPE TABLE OF FTTAX WITH HEADER LINE. DATA: I_MODE LIKE RFPDO-ALLGAZMD, I_AUGLV LIKE T041A-AUGLV, LW_NEWBS TYPE NEWBS. "记账码。 DATA: L_BKTXT TYPE BKPF-BKTXT,"抬头文本 L_BSTXT TYPE BSEG-SGTXT,"明细文本 L_ZFKJE TYPE CHAR16, "金额 L_ZPPN TYPE ZPPN VALUE SPACE. "付款单号 DATA: LS_BELNR TYPE LINE OF FM_T_BELNR, L_BELNR(14)."凭证+年度 DATA:L_OBJ_KEY TYPE AWKEY. DATA: L_ZUONR TYPE DZUONR. DATA: LC_TITLE1(50), LC_TITLE2(50). DEFINE POPULATE_FTPOST. IT_FTPOST-STYPE = &1. IT_FTPOST-COUNT = &2. IT_FTPOST-FNAM = &3. IT_FTPOST-FVAL = &4. APPEND IT_FTPOST. END-OF-DEFINITION. DEFINE POPULATE_FTCLEAR. ** 如果输入的是供应商 IT_FTCLEAR-AGKOA = 'K'. " K for vender,D for custmor, S for GL IT_FTCLEAR-AGBUK = &1."'1000'. "company code IT_FTCLEAR-AGUMS = &4. "特殊总账,处理未清项。 IT_FTCLEAR-SELFD = 'BELNR'. IT_FTCLEAR-XNOPS = 'X'. IT_FTCLEAR-AGKON = &2. IT_FTCLEAR-SELVON = &3. * it_ftclear-selbis = &2. APPEND IT_FTCLEAR. END-OF-DEFINITION. IC_OBJKEY = <WA>-ZDJBH. PERFORM GET_TITLE CHANGING LC_TITLE1 LC_TITLE2. READ TABLE IT_ZTFI_681 INTO IS_ZTFI_681 WITH KEY BUKRS = <WA>-BUKRS ZPPTN = <WA>-ZPPTN BINARY SEARCH . I_MODE = 'N'. I_AUGLV = 'AUSGZAHL'. "付款 L_ZFKJE = <WA>-ZFKJE. CONDENSE L_ZFKJE. "去空格。 L_BKTXT = LC_TITLE1. L_BSTXT = LC_TITLE2. CONDENSE: L_BKTXT,L_BSTXT. DATA: L_DOCU_TYPE LIKE BKPF-BLART ."凭证类型 * IF <WA>-ZPPTN = 'FB'. * L_DOCU_TYPE = 'ZP'." C_DOCU_TYPE2."KA * ELSE. * L_DOCU_TYPE = 'KZ'."KZ * * ENDIF. L_DOCU_TYPE = IS_ZTFI_681-BLART. L_ZUONR = <WA>-ZDJBH. ** 全额网银 *********************************************** LW_NEWBS = '50'. POPULATE_FTPOST: 'K' 1 'BKPF-BUKRS' <WA>-BUKRS, "Company code 'K' 1 'BKPF-BLART' L_DOCU_TYPE, "KZ. 'K' 1 'BKPF-BLDAT' SY-DATUM, 'K' 1 'BKPF-BUDAT' SY-DATUM, 'K' 1 'BKPF-WAERS' 'CNY', 'K' 1 'BKPF-BKTXT' L_BKTXT, 'P' 1 'RF05A-NEWBS' LW_NEWBS, 'P' 1 'BSEG-HKONT' <WA>-HKONT,"科目 'P' 1 'BSEG-WRBTR' L_ZFKJE, "金额 'P' 1 'COBL-PRCTR' <WA>-SEGMENT, "利润中心 'P' 1 'BSEG-ZUONR' L_ZUONR,"分配批次(银行流水) 'P' 1 'BSEG-SGTXT' L_BSTXT, "明细文本 'P' 1 'BSEG-RSTGR' IS_ZTFI_681-RSTGR. "现金流(原因) * 'P' 1 'BSEG-XREF3' 'XXXX' "参考3 "add liwc for sjl 20171028 "'P' 1 'COBL-SEGMENT' <WA>-PPRCT ."段 "concatenate doc number + fiscal year + line number * populate_ftclear '10000002' '5100000321'. LOOP AT <WA>-LT_BELNR INTO LS_BELNR . " 供应商 凭证编号 特殊总账标识 CONCATENATE LS_BELNR-BELNR LS_BELNR-GJAHR INTO L_BELNR. POPULATE_FTCLEAR: <WA>-BUKRS <WA>-LIFNR L_BELNR IS_ZTFI_681-UMSKS. ENDLOOP. CALL FUNCTION 'Z_FI_FB05' EXPORTING I_MODE = I_MODE I_AUGLV = I_AUGLV IMPORTING E_MSGID = SY-MSGID E_MSGNO = SY-MSGNO E_MSGTY = SY-MSGTY E_MSGV1 = SY-MSGV1 E_MSGV2 = SY-MSGV2 E_MSGV3 = SY-MSGV3 E_MSGV4 = SY-MSGV4 * E_SUBRC = TABLES T_BLNTAB = IT_BLNTAB T_FTCLEAR = IT_FTCLEAR T_FTPOST = IT_FTPOST T_FTTAX = IT_FTTAX . IF SY-SUBRC = 0 AND IT_BLNTAB IS NOT INITIAL. * CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' * EXPORTING * WAIT = 'X'. P_SUCC = 'X'. P_BELNR = IT_BLNTAB-BELNR."会计凭证。 P_GJAHR = SY-DATUM(4) . ELSE. "ROLLBACK WORK. P_SUCC = ''. CALL FUNCTION 'ZFM_CREATE_LOG' EXPORTING I_OBJKEY = IC_OBJKEY I_MSGTY = 'E' I_MSGID = 'ZDX_001' I_MSGNO = '100' I_MSGV1 = '全额支付凭证创建失败' TABLES LT_LOG = IT_LOG. CALL FUNCTION 'ZFM_CREATE_LOG' EXPORTING I_OBJKEY = IC_OBJKEY I_MSGTY = SY-MSGTY I_MSGID = SY-MSGID I_MSGNO = SY-MSGNO I_MSGV1 = SY-MSGV1 I_MSGV2 = SY-MSGV2 I_MSGV3 = SY-MSGV3 I_MSGV4 = SY-MSGV4 TABLES LT_LOG = IT_LOG. ENDIF. ENDFORM. " PRO_FB01_200_P |
例子中清账选择好的供应商会计凭证行,并生成一个新的’0010020123′,”科目行金额,其中IT_FTCLEAR-AGKOA = ‘D’,指定是供应商行清账,其它的K for vender,D for custmor, S for GL。
可以使用FB05,手动操作一下就知道具体的代码意思了。
