BAPI - BAPI_ACC_DOCUMENT_POST 创建会计凭证,表增强 扩展字段
使用BAPI创建会计凭证需要注意的一点是,行项目最多不能超过1000行
FUNCTION zyktrfm_acc_document_post.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(IS_HEADER) TYPE ZYKSTR0013
*" REFERENCE(IV_COMMIT) TYPE C DEFAULT 'X'
*" EXPORTING
*" REFERENCE(EV_BELNR) TYPE BELNR_D
*" REFERENCE(EV_GJAHR) TYPE GJAHR
*" TABLES
*" IT_ITEM STRUCTURE ZYKSTR0014 OPTIONAL
*" ET_RET STRUCTURE BAPIRET2 OPTIONAL
*"----------------------------------------------------------------------
*凭证抬头DATA: ls_doc_head TYPE bapiache09.
*总账明细DATA: ls_gl TYPE bapiacgl09,lt_gl TYPE TABLE OF bapiacgl09 WITH HEADER LINE.
*金额明细DATA: ls_amt TYPE bapiaccr09,lt_amt TYPE TABLE OF bapiaccr09 WITH HEADER LINE.
*客户DATA: ls_cus TYPE bapiacar09,lt_cus TYPE TABLE OF bapiacar09 WITH HEADER LINE.
*供应商DATA: ls_ven TYPE bapiacap09,lt_ven TYPE TABLE OF bapiacap09 WITH HEADER LINE.
*增强字段DATA: lt_ext TYPE TABLE OF bapiparex WITH HEADER LINE,ls_ext TYPE zykstr0008,ls_new TYPE zykstr0008.
*返回参数DATA: ls_ret TYPE bapiret2,lt_ret TYPE TABLE OF bapiret2 WITH HEADER LINE.
*生成的会计凭证号码DATA: lv_buzei TYPE buzei,lv_obj_type LIKE bapiache09-obj_type,lv_obj_key LIKE bapiache09-obj_key,lv_obj_sys LIKE bapiache09-obj_sys."凭证抬头ls_doc_head-comp_code = is_header-bukrs. "公司代码ls_doc_head-doc_date = sy-datum. "凭证日期ls_doc_head-pstng_date = is_header-budat. "过账日期ls_doc_head-fisc_year = is_header-budat+0(4). "年度ls_doc_head-fis_period = is_header-budat+4(2). "期间IF is_header-blart IS INITIAL.ls_doc_head-doc_type = 'SA'. "凭证类型ELSE.ls_doc_head-doc_type = is_header-blart.ENDIF.ls_doc_head-header_txt = is_header-bktxt."凭证抬头文本* IF is_header-usnam IS NOT INITIAL. "用户名
* ls_doc_head-username = is_header-usnam.
* ELSE.ls_doc_head-username = sy-uname.
* ENDIF.CLEAR lv_buzei.LOOP AT it_item INTO DATA(wa_item).lv_buzei = lv_buzei + 1.CASE wa_item-koart.WHEN 'S'."总账项目ls_gl-itemno_acc = lv_buzei. "凭证行项目ls_gl-gl_account = wa_item-hkont. "总账科目ls_gl-profit_ctr = wa_item-prctr. "利润中心ls_gl-item_text = wa_item-sgtxt. "项目文本ls_gl-quantity = wa_item-menge. "数量
* ls_gl-funds_ctr = wa_item-fistl. "资金中心
* ls_gl-cmmt_item = wa_item-fipos. "承诺项目ls_gl-trade_id = wa_item-vbund. "贸易伙伴的公司标识ls_gl-tax_code = wa_item-mwskz. "销售/购买税代码
* ls_gl-asset_no = wa_item-anln1. "主资产号IF wa_item-kunnr IS NOT INITIAL.ls_gl-customer = wa_item-kunnr.ENDIF.IF wa_item-lifnr IS NOT INITIAL.ls_gl-vendor_no = wa_item-lifnr.ENDIF.APPEND ls_gl TO lt_gl.CLEAR ls_gl.WHEN 'D'."客户ls_cus-itemno_acc = lv_buzei.ls_cus-customer = wa_item-kunnr.ls_cus-gl_account = wa_item-hkont.ls_cus-profit_ctr = wa_item-prctr.ls_cus-bline_date = wa_item-zfbdt."到期日期计算的起算日期APPEND ls_cus TO lt_cus.WHEN 'K'."供应商ls_ven-itemno_acc = lv_buzei.ls_ven-vendor_no = wa_item-lifnr.ls_ven-gl_account = wa_item-hkont.ls_ven-profit_ctr = wa_item-prctr.ls_ven-alloc_nmbr = sy-datum.
* ls_ven-bline_date = sy-datum.APPEND ls_ven TO lt_ven.ENDCASE.IF wa_item-shkzg = 'H'.wa_item-tsl = - abs( wa_item-tsl ).wa_item-hsl = - abs( wa_item-tsl ).ELSE.wa_item-tsl = abs( wa_item-tsl ).wa_item-hsl = abs( wa_item-tsl ).ENDIF."货币项目ls_amt-curr_type = '00'. "凭证货币 交易货币ls_amt-itemno_acc = lv_buzei. "凭证行项目ls_amt-currency = wa_item-rtcur. "交易货币码ls_amt-amt_doccur = wa_item-tsl. "凭证金额IF is_header-kursf IS NOT INITIAL. "汇率ls_amt-exch_rate = is_header-kursf.ENDIF.APPEND ls_amt TO lt_amt.CLEAR ls_amt.ls_amt-curr_type = '10'. "公司代码货币 本位币ls_amt-itemno_acc = lv_buzei. "凭证行项目IF wa_item-hsl = 0.ls_amt-currency = 'CNY'.ls_amt-amt_doccur = wa_item-tsl.ELSE.ls_amt-currency = wa_item-rtcur. "交易货币码ls_amt-amt_doccur = wa_item-hsl. "本位币金额ENDIF.APPEND ls_amt TO lt_amt.CLEAR ls_amt."CodingBlock字段lt_ext-structure = 'ZYKSTR0008'.CLEAR ls_ext.ls_ext-posnr = lv_buzei. "凭证行项目IF wa_item-shkzg = 'S' AND wa_item-bschl IS INITIAL.ls_ext-bschl = '40'.ELSEIF wa_item-shkzg = 'H' AND wa_item-bschl IS INITIAL.ls_ext-bschl = '50'.ELSE.ls_ext-bschl = wa_item-bschl. "记账码ENDIF.ls_ext-numpg = is_header-numpg. "发票的页数ls_ext-rstgr = wa_item-rstgr. "付款原因代码 现金流量ls_ext-zzfzhslb = wa_item-zzfzhslb. "辅助核算类别ls_ext-zzfzhsnr = wa_item-zzfzhsnr. "辅助核算内容IF wa_item-lifnr IS NOT INITIAL.ls_ext-zzlifnr = wa_item-lifnr.ELSE.ls_ext-zzlifnr = wa_item-zzlifnr.ENDIF.IF wa_item-kunnr IS NOT INITIAL.ls_ext-zzkunnr = wa_item-kunnr.ELSE.ls_ext-zzkunnr = wa_item-zzkunnr.ENDIF.ls_ext-zzsklx = wa_item-zzsklx.ls_ext-zzhtbh = wa_item-zzhtbh.ls_ext-zzdyfz1 = wa_item-zzdyfz1.ls_ext-zzdyfz2 = wa_item-zzdyfz2.ls_ext-zzdyfz3 = wa_item-zzdyfz3.ls_ext-zzdyfz4 = wa_item-zzdyfz4.ls_ext-zzdyfz5 = wa_item-zzdyfz5.ls_ext-zzhkjsd = wa_item-zzhkjsd.ls_ext-zzjhnyfjsd = wa_item-zzjhnyfjsd.ls_ext-zzjhwyfjsd = wa_item-zzjhwyfjsd.ls_ext-zzsfwqcj = wa_item-zzsfwqcj.ls_ext-zzzpjh = wa_item-zzzpjh.ls_ext-zzkhyh = wa_item-zzkhyh.ls_ext-zzhzbl = wa_item-zzhzbl.ls_ext-zzfzcch = wa_item-zzfzcch.ls_ext-zzswlx = wa_item-zzswlx.ls_ext-zzgrkh = wa_item-zzgrkh.CALL METHOD cl_abap_container_utilities=>fill_container_cEXPORTINGim_value = ls_extIMPORTINGex_container = lt_ext+30(960)EXCEPTIONSillegal_parameter_type = 1OTHERS = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.* lt_ext-valuepart1 = ls_ext.APPEND lt_ext. CLEAR lt_ext.ENDLOOP.CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'EXPORTINGdocumentheader = ls_doc_headTABLESaccountgl = lt_glaccountreceivable = lt_cusaccountpayable = lt_vencurrencyamount = lt_amtreturn = lt_retextension2 = lt_ext.IF NOT line_exists( lt_ret[ type = 'E' ] ).CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'EXPORTINGdocumentheader = ls_doc_head
* CUSTOMERCPD =
* CONTRACTHEADER =IMPORTINGobj_type = lv_obj_typeobj_key = lv_obj_keyobj_sys = lv_obj_sysTABLESaccountgl = lt_glcurrencyamount = lt_amtreturn = et_retextension2 = lt_ext.IF lv_obj_key IS NOT INITIAL.ev_belnr = lv_obj_key+0(10).ev_gjahr = lv_obj_key+14(4).ls_ret-type = 'S'.ls_ret-message = '凭证创建成功'.ls_ret-message_v1 = ev_belnr.ls_ret-message_v2 = ev_gjahr.APPEND ls_ret TO et_ret.IF iv_commit = 'X'.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'.ENDIF.ELSE.et_ret[] = CORRESPONDING #( et_ret[] ).CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.ENDIF.ELSE.et_ret[] = CORRESPONDING #( lt_ret[] ).ENDIF.ENDFUNCTION.
SE19实现BADI增强ACC_DOCUMENT,这个增强是用来将BAPI_ACC_DOCUMENT_POST参数表EXTENSION2传入系统表,重写实施IF_EX_ACC_DOCUMENT~CHANGE
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>.CALL METHOD cl_abap_container_utilities=>read_container_cEXPORTINGim_container = wa_extension+30(960)IMPORTINGex_value = <l_struc>EXCEPTIONSillegal_parameter_type = 1OTHERS = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.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.**凭证预制标志READ TABLE c_extension2 INTO wa_extension WITH KEY valuepart1 = 'BAPI-PARK' .IF sy-subrc = 0 .c_acchd-status_new = 2 .ENDIF .
BAPI - BAPI_ACC_DOCUMENT_POST 创建会计凭证,表增强 扩展字段相关推荐
- access vba表字段_【Access】创建数据表并新增字段
时 间:2016-08-02 13:29:20 作 者:摘 要:用代码创建数据表并新增字段 正 文: 在DAO中,可以通过CreateTableDef方法在数据库中创建新的数据表,其具体的语法格式如下 ...
- MySQL创建数据表TIMESTAMP类型字段问题
今天在导入数据时出现了这个错误: Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIM ...
- 解决phoenix中创建的表名及字段默认是大写的问题
- 使用SAP CRM Application Enhancement Tool创建表格类型的扩展字段
(1) Create a wrapper UI component which will hold the new table via the customizing below: Click but ...
- Mysql使用Key/Value方式存储动态扩展字段、对象与HashMap的相互转化
1.背景 在项目刚刚进入开发阶段设计表时,后期表的字段很可能会增加,可以设计出预留字段来应对.但是假如你的数据数据非常庞大且,那么执行修改表语句时会长时间锁表.而且假如一张表支持许多个客户,每个客户的 ...
- ABAP:BAPI_ACC_DOCUMENT_POST扩展字段
1.se11创建结构,必须包含行项目号POSNR字段,和其他需要扩展的字段,如记账码Posting Key.原因代码 Reason Code等: 2.SE19实现BADI增强ACC_DOCU ...
- 如何在调用Marketing Cloud contact创建API时增加对扩展字段的支持
需求:扩展字段"微信ID"是我创建出来的extension field,我想用Marketing Cloud提供的contact creation API,在创建contact时也 ...
- 详解MySQL information_schema数据库常用的表信息以及各表对应的字段信息;以及如何登录mysql和创建视图
详解information_schema数据库 登录mysql 查询information_schema信息 information_schema常用数据表 TABLES 查询tables table ...
- sql在已创建的表上添加约束
有时候我们需要在创建好的sql表上对一些列添加约束,可以这么做: 在一个已创建的表的 "Age" 字段中添加 NOT NULL 约束如下所示: ALTER TABLE Person ...
最新文章
- 免费学习编程的10个好工具
- tensorflow分布式训练之同步更新和异步更新
- python打包不能在其他电脑打开、找不到指定模块,pyinstaller打包移植到别的电脑报错OSError: [WinError 126] 找不到指定的模块。...
- 这是我用Microsoft Word 2010 直接发布的测试用博客
- Vue 给第三方组件加入自定义参数
- vim 配置_一步步配置VIM(3)-与latex结合
- 新浪微博自动发送微博 功能已实现(net)
- mac 2k显示器字体发虚_亲身实践:Mac mini 搭配戴尔显示器体验
- 差异表达基因变化倍数_差异基因表达分析,如何寻找差异表达的基因?
- Home Barbering Grows In Recession, With Hairy Results
- 云上PDF怎么删除页眉页脚_用了这么久的Word,居然不知道怎样去除页眉页脚?...
- 图像基础—— 特征提取之颜色特征提取
- Android远程登录Telnet配置
- docker logs日志清除
- 华为ensp模拟器占用CPU高问题处理
- C语言中 以追加只写方式打开文本文件,C语言文件操作
- 1349. 最大公约数
- 2D转3D技术的优势
- Oracle VM VirtualBox上配置新的Ubuntu20.04
- 跟我学aspectj之四 ----- pointcut基础语法