从老司机那了解到创建财务凭证就只有两个函数,
用的最多就是 BAPI_ACC_DOCUMENT_POST.(可创建供应商,客户付款,总账凭证)
另外,今天发现下另外一个: BAPI*GL*POST(只用于创建总账凭证)
418-419 要完成F110 预付款功能的开发,得抓紧时间了。
sap 标准例子 SE38:ACC_BAPI_TEST_DOCUMENT
使用实例:
FUNCTION zrfc_document_post. *"---------------------------------------------------------------------- *"*"Local interface: *" EXPORTING *" REFERENCE(EP_DOCNO) TYPE BELNR_D *" TABLES *" T_DOCUMENT STRUCTURE ZDOCUMENT *" IT_RETURN STRUCTURE BAPIRET2 *"---------------------------------------------------------------------- DATA:wa_documentheader TYPEbapiache09, "待传凭证抬头 工作区 wa_accountgl TYPEbapiacgl09, "总帐科目项 工作区 it_accountgl TYPE STANDARD TABLE OF bapiacgl09, "总帐科目项内表 wa_accountreceivable TYPEbapiacar09, "客户项目 工作区 it_accountreceivable TYPE STANDARD TABLE OFbapiacar09, "客户项目 内表 wa_accountpayable TYPEbapiacap09, "供应商项目 工作区 it_accountpayable TYPE STANDARD TABLE OF bapiacap09, "供应商项目内表 wa_currencyamount TYPEbapiaccr09, "货币项目 工作区 it_currencyamount TYPE STANDARD TABLE OF bapiaccr09, "货币项目 内表 wa_extension2 TYPEbapiparex, "参考结构 工作区 it_extension2 TYPE STANDARD TABLE OFbapiparex, "参考结构 内表 wa_return TYPEbapiret2, "返回参数 工作区 ** it_return TYPE STANDARD TABLE OFbapiret2, "返回参数 内表 wa_zbkpf_send TYPEzbkpf_send, "已导凭证 工作区 it_zbkpf_send TYPE STANDARD TABLE OF zbkpf_send. "已导凭证 内表 DATA: w_document TYPEzdocument, "凭证头 工作区 lw_documentTYPEzdocument. "临时 凭证头 工作区 DATA: cns_dr_r TYPE char2 VALUE'DR', "凭证借方标识 cns_cr_rTYPE char2 VALUE'CR', "凭证贷方标识 cns_x TYPEchar1 VALUE'X', "确认标识 cns_rfbuTYPE char4 VALUE 'RFBU', "业务事务 cns_sa TYPE char2 VALUE'SA', "总分类账凭证 cns_kr TYPE char2 VALUE'KR', "供应商发票 cns_40 TYPE char2 VALUE'40', "总账-借 cns_50 TYPE char2 VALUE'50', "总账-贷 cns_01 TYPE char2 VALUE'01', "应收-借 cns_11 TYPE char2 VALUE'11', "应收-贷 cns_21 TYPE char2 VALUE'21', "应付-借 cns_31 TYPE char2 VALUE'31'. "应付-贷 DATA: l_return_tabcount TYPE i. CHECK t_document IS NOT INITIAL. SORT t_document BY belnr ASCENDING. LOOP AT t_document INTO w_document. lw_document = w_document. *------------------------转换表头------------------------------------ AT NEWbelnr. wa_documentheader-bus_act =cns_rfbu. "业务事务 wa_documentheader-username =sy-uname. "系统当前用户 wa_documentheader-comp_code =lw_document-bukrs. "公司代码 wa_documentheader-doc_date =lw_document-bldat. "凭证中的凭证日期 wa_documentheader-pstng_date = lw_document-budat. "凭证中的记帐日期 wa_documentheader-fisc_year =lw_document-gjahr. "会计年度 wa_documentheader-fis_period = lw_document-monat. "会计期间 wa_documentheader-doc_type =lw_document-blart. "凭证类型 wa_documentheader-ref_doc_no = lw_document-xblnr. "参考凭证号 wa_documentheader-header_txt = lw_document-bktxt. "凭证抬头文本 ENDAT. CASElw_document-blart. *------------------------总账科目------------------------------------ WHEN cns_sa. *------------------------总帐科目项---------------------------------- wa_accountgl-itemno_acc =lw_document-buzei. "会计凭证中的行项目数 wa_accountgl-gl_account =lw_document-hkont. "总分类帐帐目 wa_accountgl-comp_code =lw_document-bukrs. "公司代码 wa_accountgl-costcenter =lw_document-kostl. "成本中心 wa_accountgl-profit_ctr =lw_document-prctr. "利润中心 APPEND wa_accountgl TO it_accountgl. CLEAR wa_accountgl. *------------------------供应商发票OR供应商贷项凭证---------------- WHEN cns_kr OR cns_kg. * 统驭科目 IF lw_document-mitkz = cns_x. *------------------------供应商项目---------------------------------- wa_accountpayable-itemno_acc =lw_document-buzei. "会计凭证中的行项目数 wa_accountpayable-vendor_no =lw_document-lifnr. "供应商 APPEND wa_accountpayable TO it_accountpayable. CLEAR wa_accountpayable. * 非统驭科目 ELSE. *------------------------总帐科目项---------------------------------- wa_accountgl-itemno_acc =lw_document-buzei. "会计凭证中的行项目数 wa_accountgl-gl_account =lw_document-hkont. "总分类帐帐目 wa_accountgl-comp_code =lw_document-bukrs. "公司代码 wa_accountgl-costcenter =lw_document-kostl. "成本中心 wa_accountgl-profit_ctr =lw_document-prctr. "利润中心 APPEND wa_accountgl TO it_accountgl. CLEAR wa_accountgl. ENDIF. ENDCASE. *------------------------增强字段----------------------------------- IFlw_document-brnch IS NOT INITIAL. wa_extension2-structure ='BRNCH'. "分支号 wa_extension2-valuepart1 =lw_document-buzei. "行项目数 wa_extension2-valuepart2 =lw_document-brnch. "分支号值 APPEND wa_extension2 TO it_extension2. CLEAR wa_extension2. ENDIF. IFlw_document-umskz IS INITIAL. “特别总/分类帐指示符 CASE lw_document-blart. WHEN cns_sa. IF lw_document-shkzg =cns_dr_r. "借贷方记账码 wa_extension2-structure = 'BSCHL'. wa_extension2-valuepart1 = lw_document-buzei. wa_extension2-valuepart2 = cns_40. ELSEIF lw_document-shkzg = cns_cr_r. wa_extension2-structure = 'BSCHL'. wa_extension2-valuepart1 = lw_document-buzei. wa_extension2-valuepart2 = cns_50. ENDIF. ENDCASE. APPEND wa_extension2 TO it_extension2. CLEAR wa_extension2. ELSE. wa_extension2-structure ='UMSKZ'. "特别总/分类帐指示符 wa_extension2-valuepart1 =lw_document-buzei. "行项目数 wa_extension2-valuepart2 =lw_document-umskz. "特别总/分类帐值 APPEND wa_extension2 TO it_extension2. CLEAR wa_extension2. CASE lw_document-blart. WHEN cns_kr OR cns_kg. IF lw_document-shkzg = cns_dr_r. wa_extension2-structure = 'BSCHL'. wa_extension2-valuepart1 = lw_document-buzei. wa_extension2-valuepart2 = cns_29. ELSEIF lw_document-shkzg = cns_cr_r. wa_extension2-structure = 'BSCHL'. wa_extension2-valuepart1 = lw_document-buzei. wa_extension2-valuepart2 = cns_39. ENDIF. WHEN cns_dr OR cns_dg. IF lw_document-shkzg = cns_dr_r. wa_extension2-structure = 'BSCHL'. wa_extension2-valuepart1 = lw_document-buzei. wa_extension2-valuepart2 = cns_09. ELSEIF lw_document-shkzg = cns_cr_r. wa_extension2-structure = 'BSCHL'. wa_extension2-valuepart1 = lw_document-buzei. wa_extension2-valuepart2 = cns_19. ENDIF. ENDCASE. APPEND wa_extension2 TO it_extension2. CLEAR wa_extension2. ENDIF. IFlw_document-sgtxt IS NOT INITIAL. wa_extension2-structure ='SGTXT'. "项目文本 wa_extension2-valuepart1 =lw_document-buzei. "行项目数 wa_extension2-valuepart2 =lw_document-sgtxt. "项目文本值 APPEND wa_extension2 TO it_extension2. CLEAR wa_extension2. ENDIF. AT END OFbelnr. CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST' EXPORTING documentheader =wa_documentheader "录入凭证头 TABLES accountgl =it_accountgl "总帐科目项 accountreceivable = it_accountreceivable "客户项目 accountpayable =it_accountpayable "供应商项目 currencyamount =it_currencyamount "货币项目 extension2 =it_extension2 "扩展字段 return =it_return. "返回值 DESCRIBE TABLE it_return LINES l_return_tabcount. IF l_return_tabcount =1. "凭证导入成功 CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. * 记录已导入的凭证号 READ TABLE it_return INTO wa_return INDEX 1. IF sy-subrc EQ 0. ep_docno = wa_return-message_v2+0(10). wa_return-type = 'S'. wa_return-message = text-001. APPEND wa_return TO it_return. ELSE. wa_return-type = 'E'. wa_return-message = text-002. APPEND wa_return TO it_return. ENDIF. ELSE. "凭证导入失败 ENDIF. CLEAR: l_return_tabcount, wa_zbkpf_send, wa_documentheader, it_accountgl, it_accountpayable, it_currencyamount, it_extension2, it_return. ENDAT. CLEAR:w_document,lw_document. ENDLOOP. ENDIF. ENDFUNCTION.