程序接口完成清账功能,可顺序调用以下三个函数:
- POSTING_INTERFACE_START
- POSTING_INTERFACE_CLEARING
- POSTING_INTERFACE_END
注意:这三个函数在内部也是调用 BDC,但对于开发者来说,只需要给定参数,简化了编码的工作。
REPORT z_post_clearing.
DEFINE populate_ftpost.
clear ls_ftpost.
ls_ftpost-stype = &1.
ls_ftpost-count = &2.
ls_ftpost-fnam = &3.
ls_ftpost-fval = &4.
append ls_ftpost to lt_ftpost.
END-OF-DEFINITION.
START-OF-SELECTION.
PERFORM frm_post_clearing.
FORM frm_post_clearing.
" ftclear 是清账的数据的表参数
DATA:
lt_ftclear TYPE STANDARD TABLE OF ftclear,
ls_ftclear LIKE LINE OF lt_ftclear.
" ftpost 是过账的抬头和行项目的表参数
DATA:
lt_ftpost TYPE STANDARD TABLE OF ftpost,
ls_ftpost LIKE LINE OF lt_ftpost.
DATA:
lt_blntab LIKE TABLE OF blntab WITH HEADER LINE,
lt_fttax LIKE TABLE OF fttax WITH HEADER LINE.
" populate ftclear table parameter
CLEAR ls_ftclear.
ls_ftclear-agkoa = 'K'. " k for vendor
ls_ftclear-agbuk = 'Z900'.
ls_ftclear-selfd = 'BELNR'.
ls_ftclear-xnops = 'X'.
ls_ftclear-selvon = '1900000001'.
APPEND ls_ftclear TO lt_ftclear.
" populate ftpost table paramter
" 分为header和line item,line item按行填充
" 首先填写header (K)
populate_ftpost 'K' 1 'BKPF-BUKRS' 'Z900'. " company code
populate_ftpost 'K' 1 'BKPF-BLART' 'KA'. " document type
populate_ftpost 'K' 1 'BKPF-BLDAT' sy-datum. " posting date
populate_ftpost 'K' 1 'BKPF-BUDAT' sy-datum.
populate_ftpost 'K' 1 'BKPF-WAERS' 'CNY'. " currency
populate_ftpost 'K' 1 'BKPF-BKTXT' 'Clearing 1900000001'. " header text
" 按行填写行项目的字段 (P)
populate_ftpost 'P' 1 'RF05A-NEWBS' '50'. " posting key
populate_ftpost 'P' 1 'BSEG-HKONT' '10010100'. " G/L account
populate_ftpost 'P' 1 'BSEG-SGTXT' 'Clearing vendor invoice'.
populate_ftpost 'P' 1 'BSEG-WRBTR' '1700'. " amount
CALL FUNCTION 'POSTING_INTERFACE_START'
EXPORTING
i_client = sy-mandt
i_function = 'C'
i_mode = 'N'
i_keep = 'X'
i_update = 'S'
i_user = sy-uname.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'POSTING_INTERFACE_CLEARING'
EXPORTING
i_auglv = 'AUSGZAHL'
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
TABLES
t_blntab = lt_blntab
t_ftclear = lt_ftclear
t_ftpost = lt_ftpost
t_fttax = lt_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.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
" keep track of document number
READ TABLE lt_blntab INDEX 1.
IF lt_blntab IS INATIL.
DATA ls_messg TYPE message.
CALL FUNCTION 'WRITE_MESSAGE'
EXPORTING
msgid = sy-msgid
msgno = sy-msgno
msgty = sy-msgty
msgv1 = sy-msgv1
msgv2 = sy-msgv2
msgv3 = sy-msgv3
msgv4 = sy-msgv4
msgv5 = ' '
IMPORTING
messg = ls_messg.
ENDIF.
CALL FUNCTION 'POSTING_INTERFACE_END'
EXCEPTIONS
session_not_processable = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
WRITE: lt_blntab-bukrs, lt_blntab-belnr, lt_blntab-gjahr, ' was posted successfully'.
ENDFORM.
POSTING_INTERFACE_START
函数
参数 i_mode
参数,这个参数的含义与 BDC 模式的含义相同:
- N 后台处理,没有界面和错误
- E 提示错误,建议程在发布之前通过 E 模式调试错误,运行的时候可以跳转到前台调试,方便看出错误的原因
- A 显示前台每一步操作,也可用于调试
POSTING_INTERFACE_CLEARING
函数
参数 auglv
表示清账过程,数据来自 T041A
表
FTCLEAR
表参数是要要被清账的数据
FTPOST
表参数表示要过账的数据,包括 document header 和 line items。ftpost-stype
为 K 表示 document header, P 表示 行项目
blntab
表参数用于记录生成的会计凭证号码信息
POSTING_INTERFACE_END
如果 clearing 函数成功,调用函数 POSTING_INTERFACE_END