zl程序教程

您现在的位置是:首页 >  其他

当前栏目

[FI] F-65 生成预制凭证 、FBV0 过账 bapi、删除预制凭证 、取消过账详解编程语言

编程语言 详解 删除 生成 取消 Fi BAPI 凭证
2023-06-13 09:11:51 时间

** Check the Document
 CALL FUNCTION  BAPI_ACC_DOCUMENT_CHECK

**Create the Document

    CALL FUNCTION  BAPI_ACC_DOCUMENT_POST

  在使用这个BAPI的时候需要注意原因代码等字段需要通过扩展去传输,这里就需要去使用SE19增强

  参考实施是 ACC_DOCUMENT,我这里定义了一个 ZACC_DOCUMENT在他的CHANGE方法里面我们需要去写入如下代码:

 DATA:ls_exte TYPE bapiparex. 

 "用于生成预制凭证bapi设定 

 DATA: wa_extension TYPE bapiparex, 

 ext_value(960) TYPE c, 

 wa_accit TYPE accit, 

 l_ref TYPE REF TO data. 

 FIELD-SYMBOLS: l_struc TYPE any, 

 l_field TYPE any. 

 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 l_struc . 

 ENDAT. 

 CONCATENATE wa_extension-valuepart1 wa_extension-valuepart2 

 wa_extension-valuepart3 wa_extension-valuepart4 

 INTO ext_value. 

 MOVE ext_value TO l_struc . 

 ASSIGN COMPONENT POSNR OF STRUCTURE l_struc TO l_field . 

 READ TABLE c_accit WITH KEY posnr = l_field 

 INTO wa_accit. 

 IF sy-subrc IS INITIAL. 

 MOVE-CORRESPONDING l_struc TO wa_accit. 

 MODIFY c_accit FROM wa_accit INDEX sy-tabix. 

 ENDIF. 

 ENDLOOP. 

"如下计算税额字段也需要在扩展里面去定义才能传输 

 LOOP AT c_extension2 INTO wa_extension WHERE structure = ZSEXTEN. 

 IF wa_extension-valuepart2 = XMWST. 

 LOOP AT c_accit INTO wa_accit . 

 wa_accit-xmwst = X. 

 MODIFY c_accit FROM wa_accit INDEX sy-tabix TRANSPORTING xmwst. 

 ENDLOOP. 

 ENDIF. 

 ENDLOOP. 

”需要注意SET status为2才能生成预制凭证 

 READ TABLE c_extension2 INTO ls_exte WITH KEY structure = ZSEXTEN. 

 IF sy-subrc = 0. 

 MOVE 2 TO c_acchd-status_new. 

 DELETE c_extension2 INDEX sy-tabix. 

 ENDIF.

  遇到问题2是header_txt文本传输不进去,解决方法如下

  使用SE24:IF_EX_AC_DOCUMENT,去调整他的方法 CHANGE_INITIAL ,CHANGE_AFTER_CHECK

  在上面两个方法里面添加如下代码:

*----------------------------------------------------------------------------------------------------- 

*about field "HEADER_TXT" in structure "BAPIACHE09" not transferred to field "BKTXT" in table "BKPF" 

*Add by Torrance 20200330 

*--------------------------------------------------------------------------------------------------- 

 DATA: wa_header TYPE acchd. 

 IF sy-xprog NE SAPMSSY1. 

*--- SAPLBPFC is for Posting with BAPI: BAPI_ACC_DOCUMENT_POST 

*--- SAPCNVE is for Posting(Tax) with BAPI: BAPI_ACC_DOCUMENT_POST 

*--- SAPMSSY1 is for Test(Check) with BAPI: BAPI_ACC_DOCUMENT_CHECK 

 CLEAR wa_header. 

 wa_header = im_document-header. 

 ex_document-header-bktxt = wa_header-bktxt. 

 CLEAR wa_header. 

 ENDIF.

2、FBV0过账

*check document data

CALL FUNCTION  ZPRELIMINARY_POSTING_CHECK_ALL

*post document data

CALL FUNCTION  ZPRELIMINARY_POSTING_POST_ALL

原本应该使用PRELIMINARY_POSTING_CHECK_ALL和PRELIMINARY_POSTING_POST_ALL,但是这两个方法在显示界面的时候会去display log,如果在循环里面展现给用户的结果就不友好,所以我复制了这两个标准的function,然后在里面做变更,当我的程序call的时候就不display log

3、删除预制凭证

这里使用了录制BDC的方式

 PERFORM bdc_dynpro USING SAPMF05V 

 0100. 

 PERFORM bdc_field USING BDC_OKCODE 

 /00. 

 PERFORM bdc_field USING BDC_CURSOR 

 RF05V-GJAHR. 

 PERFORM bdc_field USING RF05V-BUKRS 

 SR00. 

 PERFORM bdc_field USING RF05V-BELNR 

 p_belnr. 

 PERFORM bdc_field USING RF05V-GJAHR 

 p_gjahr. 

 PERFORM bdc_dynpro USING SAPLF040 

 0700. 

 PERFORM bdc_field USING BDC_CURSOR 

 BKPF-XBLNR. 

 PERFORM bdc_field USING BDC_OKCODE 

 BL. 

 PERFORM bdc_dynpro USING SAPLSPO1 

 0200. 

 PERFORM bdc_field USING BDC_CURSOR 

 SPOP-OPTION1. "Button YES 

 PERFORM bdc_field USING BDC_OKCODE 

 YES. 

 PERFORM bdc_field USING BDC_OKCODE 

 ENTER. 

 CALL TRANSACTION FBV0 USING bdcdata 

 MODE mode 

 UPDATE S. 


19617.html

cjava