使用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 创建会计凭证,表增强 扩展字段相关推荐

  1. access vba表字段_【Access】创建数据表并新增字段

    时 间:2016-08-02 13:29:20 作 者:摘 要:用代码创建数据表并新增字段 正 文: 在DAO中,可以通过CreateTableDef方法在数据库中创建新的数据表,其具体的语法格式如下 ...

  2. MySQL创建数据表TIMESTAMP类型字段问题

    今天在导入数据时出现了这个错误: Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIM ...

  3. 解决phoenix中创建的表名及字段默认是大写的问题

  4. 使用SAP CRM Application Enhancement Tool创建表格类型的扩展字段

    (1) Create a wrapper UI component which will hold the new table via the customizing below: Click but ...

  5. Mysql使用Key/Value方式存储动态扩展字段、对象与HashMap的相互转化

    1.背景 在项目刚刚进入开发阶段设计表时,后期表的字段很可能会增加,可以设计出预留字段来应对.但是假如你的数据数据非常庞大且,那么执行修改表语句时会长时间锁表.而且假如一张表支持许多个客户,每个客户的 ...

  6. ABAP:BAPI_ACC_DOCUMENT_POST扩展字段

    1.se11创建结构,必须包含行项目号POSNR字段,和其他需要扩展的字段,如记账码Posting Key.原因代码      Reason Code等: 2.SE19实现BADI增强ACC_DOCU ...

  7. 如何在调用Marketing Cloud contact创建API时增加对扩展字段的支持

    需求:扩展字段"微信ID"是我创建出来的extension field,我想用Marketing Cloud提供的contact creation API,在创建contact时也 ...

  8. 详解MySQL information_schema数据库常用的表信息以及各表对应的字段信息;以及如何登录mysql和创建视图

    详解information_schema数据库 登录mysql 查询information_schema信息 information_schema常用数据表 TABLES 查询tables table ...

  9. sql在已创建的表上添加约束

    有时候我们需要在创建好的sql表上对一些列添加约束,可以这么做: 在一个已创建的表的 "Age" 字段中添加 NOT NULL 约束如下所示: ALTER TABLE Person ...

最新文章

  1. 免费学习编程的10个好工具
  2. tensorflow分布式训练之同步更新和异步更新
  3. python打包不能在其他电脑打开、找不到指定模块,pyinstaller打包移植到别的电脑报错OSError: [WinError 126] 找不到指定的模块。...
  4. 这是我用Microsoft Word 2010 直接发布的测试用博客
  5. Vue 给第三方组件加入自定义参数
  6. vim 配置_一步步配置VIM(3)-与latex结合
  7. 新浪微博自动发送微博 功能已实现(net)
  8. mac 2k显示器字体发虚_亲身实践:Mac mini 搭配戴尔显示器体验
  9. 差异表达基因变化倍数_差异基因表达分析,如何寻找差异表达的基因?
  10. Home Barbering Grows In Recession, With Hairy Results
  11. 云上PDF怎么删除页眉页脚_用了这么久的Word,居然不知道怎样去除页眉页脚?...
  12. 图像基础—— 特征提取之颜色特征提取
  13. Android远程登录Telnet配置
  14. docker logs日志清除
  15. 华为ensp模拟器占用CPU高问题处理
  16. C语言中 以追加只写方式打开文本文件,C语言文件操作
  17. 1349. 最大公约数
  18. 2D转3D技术的优势
  19. Oracle VM VirtualBox上配置新的Ubuntu20.04
  20. 跟我学aspectj之四 ----- pointcut基础语法

热门文章

  1. animate.css配合WOW.js
  2. 芒果iOS开发之利用U盘给Mac重新安装系统
  3. 对标剑桥、斯坦福!西湖大学城来了!
  4. 人脸检测Cascade
  5. 关于属性描述符PropertyDescriptor
  6. Elasticsearch 自定义分词同义词环节的这个细节不大好理解......
  7. 前端页面的搜索功能的实现
  8. Unity Shader LOD使用
  9. Linux下如何用命令查看内存占用情况!(建议收藏)
  10. 条件概率/全概率/贝叶斯公式