清账函数POSTING_INTERFACE_CLEARING的应用

FB05 标准清账函数调用的不是bapi而是一个函数,函数中封装其实就是BDC录屏。
POSTING_INTERFACE_START
POSTING_INTERFACE_CLEARING
POSTING_INTERFACE_END
PS:K 代抬头 P 代表ITEM 如果传参ITEM 必须要传:公司代码 、 记账码 、科目。
  问题:创建批导程序根据合同号(参照码3)来抓取未清客户进行清账,根据每一个参考码3来创建清账凭证,但是批量创建的时候,清账凭证创建成功,但是参照码3一直沿用模板中第一个,正确的应该一个参考码3 对应一张凭证,那么开始对问题进行追踪排查。
清账函数POSTING_INTERFACE_CLEARING的应用_第1张图片
  分析:首先排除了函数传参的数据,并没有参照3字段的传入,并且各个内表该清空的都清空了。经过认真分析之后,应该有内存记忆, 然后在程序中写一个free memory 结果成功了,并没有沿用第一个参考码3,那么问题来了,free memroy 是清空所有abap memory变量内存,会有什么影响呢?

解决方法:后来开始对free memory 与 free memory id 进行比较,规避使用free memory的风险,写了一个demon并且也查了些资料,使用free memory 只是清空当前会话中所有的memory 并不会影响其他用户以及以外会话的memory的赋值。但是为确保安全还是进一步需要独有的id,实在找不到只能全清内存,如有坑只能拍拍屁股滚蛋吧,也无能为力了。

然后开始跟踪源码找memory id 进一步应该寻找独有id,根据id来清空memory, 后来发现有abap memroy 本以为是在标准中,最终找了半天没有找到,打算放弃使用free Memory的时候 突然灵机一动找找财务增强中是不是存在 结果令人兴奋确实存在 替代增强中发现这个Memory ID。找到ID 问题解决。
转载 SAP Memory & ABAP Memoryhttps://blog.csdn.net/louisking111/article/details/51328548
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 = &1. " K for vender,D for custmor, S for GL
IT_FTCLEAR-AGKON = &4. "company code
IT_FTCLEAR-AGBUK = &2. "company code
" IT_FTCLEAR-SELFD = ‘BELNR’.
IT_FTCLEAR-SELFD = ‘XREF3’. “代表根据什么来做清账”
IT_FTCLEAR-AGUMS = ‘78’.
IT_FTCLEAR-XNOPS = ‘X’.
IT_FTCLEAR-SELVON = &3.
APPEND IT_FTCLEAR.
END-OF-DEFINITION.
LOOP AT ITAB WHERE SEL = ‘X’.
REFRESH: IT_BLNTAB,IT_FTCLEAR,IT_FTPOST,IT_FTTAX.
CLEAR: IT_BLNTAB,IT_FTCLEAR,IT_FTPOST,IT_FTTAX.
FREE MEMORY ID ‘FLG’.
FREE MEMORY ID ‘Z_RFOPS’.

    POPULATE_FTPOST:   'K' 1 'BKPF-BUKRS' itab-BUKRS, "Company code
                       'K' 1 'BKPF-BLART' 'QZ',  "凭证类型
                       'K' 1 'BKPF-BLDAT' SY-DATUM,  "凭证中的凭证日期
                       'K' 1 'BKPF-BUDAT' SY-DATUM,  "凭证中的过帐日期
                       'K' 1 'BKPF-WAERS' 'CNY'.  "货币码 

" POPULATE_FTPOST:
" ‘P’ 1 ‘RF05A-NEWBS’ LS_RESULT-BSCHL, "记帐代码
" ‘P’ 1 ‘RF05A-AGKON’ LS_RESULT-SAKNR. "
" ‘P’ 1 ‘RF05A-NEWUM’ LS_RESULT-UMSKZ, "特别总/分类帐指示符
" ‘P’ 1 ‘RF05A-NEWKO’ LS_RESULT-SAKNR. "总帐科目编号
" ‘P’ 1 ‘BSEG-SGTXT’ LS_RESULT-SGTXT, "项目文本
" ‘P’ 1 ‘COBL-PRCTR’ LS_RESULT-PRCTR,
" ‘P’ 1 ‘BSEG-ZUONR’ LS_RESULT-ZUONR, "分配编号
" ‘P’ 1 ‘BSEG-WRBTR’ C_WRBTR, "
" ‘P’ 1 ‘BSEG-ZFBDT’ ‘20151220’ . "
"
CA LL FUNCTION ‘POSTING_INTERFACE_START’
EXPORTING
I_FUNCTION = ‘C’
I_KEEP = ‘X’
I_MODE = ‘N’ "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.
 ***按照参考代码3 清账
POPULATE_FTCLEAR ‘D’ itab-BUKRS itab-XREF3 itab-KUNNR.

CALL FUNCTION ‘POSTING_INTERFACE_CLEARING’
EXPORTING
" I_AUGLV = ‘UMBUCHNG’ " 转账并清账
I_AUGLV = ‘EINGZAHL’ "收款 "Add by wanghf 2019/05/15
I_TCODE = ‘FB05’
I_SGFUNCT = ‘C’
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 = E_SUBRC
TABLES
T_BLNTAB = IT_BLNTAB
T_FTCLEAR = IT_FTCLEAR
T_FTPOST = IT_FTPOST
T_FTTAX = IT_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.

你可能感兴趣的:(ABAP,FB05,清账,abap,memory)