ABAP DEMO BAPI_ACC_GL_POSTING_POST FBV1预制会计凭证

PERFORM frm_acc_gl_document.
*&---------------------------------------------------------------------*
*& Form frm_cancel_document
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_acc_gl_document .

  DATA: ls_header    TYPE bapiache08,
        lv_objtype   TYPE bapiache02-obj_type,
        lv_objkey    TYPE bapiache02-obj_key,
        lv_objsys    TYPE bapiache02-obj_sys,
        lt_accountgl TYPE TABLE OF bapiacgl08,
        lt_amount    TYPE TABLE OF bapiaccr08,
        lt_return    TYPE TABLE OF bapiret2,
        ls_exten_val TYPE zfis_exten,
        lt_exten     TYPE TABLE OF bapiextc,
        ls_exten     TYPE bapiextc.

  " 抬头
  CLEAR: ls_header, lv_objtype, lv_objkey, lv_objsys.
  REFRESH: lt_accountgl, lt_amount, lt_exten, lt_return.
  ls_header-username   = 'UNAME' .                       " 用户
  ls_header-doc_date   = 'BLDAT'.                        " 凭证日期
  ls_header-pstng_date = 'BUDAT'.                        " 过账日期
  ls_header-doc_type   = 'BLART'.                        " 凭证类型
  ls_header-fisc_year  = 'GJAHR'.                        " 年度
  ls_header-fis_period = 'MONAT'.                        " 期间
  ls_header-comp_code  = 'BUKRS'.                        " 公司代码
  ls_header-ref_doc_no = 'XBLNR' .                       " 参考凭证
  ls_header-header_txt = 'BKTXT'.                        " 抬头文本

  " 总账科目
  APPEND VALUE #(
    itemno_acc = 'POSNR_ACC'             " 行项目
    gl_account = 'HKONT'                 " 科目
    item_text  = 'SGTXT'                 " 行项目文本
    profit_ctr = 'PRCTR'                 " 利润中心
    costcenter = 'KOSTL'                 " 成本中心
    ref_key_1  = 'XREF1'                 " 参考1
    ) TO lt_accountgl.


  " 00  凭证货币
  " 10  公司代码货币
  " 20  成本控制范围的记帐货币
  " 30  集团公司记帐货币
  " 不确认一定有金额的情况, 先判断金额, 再对金额赋值

  " 凭证金额
  APPEND VALUE #(
   itemno_acc   = 'POSNR_ACC'             " 行项目
   amt_doccur   = 'WRBTR'                 " 凭证金额
   currency     = 'WAERS'                 " 凭证货币
   curr_type    = '00'
     ) TO lt_amount.
  " 本币金额
  APPEND VALUE #(
  itemno_acc   = 'POSNR_ACC'              " 行项目
  amt_doccur   = 'DMBTR'                  " 本币金额
  currency     = 'WAERS'                  " 本币货币
  curr_type    = '10'
    ) TO lt_amount.

  " 扩展结构可以参考BAPI_ACC_DOCUMENT_POST传结构+值来传递, 也可以直接传值. 具体参考扩展增强里的代码怎么写的
  " DEMO选择参考BAPI_ACC_DOCUMENT_POST传输结构+值来进行扩展赋值
  ls_exten_val = VALUE #(
         posnr = 'POSNR_ACC'
         bschl = 'BSCHL'
         rstgr = 'RSTGR'
         umskz = 'UMSKZ'
         ).
  ls_exten-field1 = 'ZFIS_EXTEN'.
  CALL METHOD cl_abap_container_utilities=>fill_container_c
    EXPORTING
      im_value               = ls_exten_val
    IMPORTING
      ex_container           = ls_exten+240
    EXCEPTIONS
      illegal_parameter_type = 1
      OTHERS                 = 2.
  APPEND ls_exten TO lt_exten.
  CLEAR ls_exten.

  CALL FUNCTION 'BAPI_ACC_GL_POSTING_POST'
    EXPORTING
      documentheader = ls_header
    IMPORTING
      obj_type       = lv_objtype
      obj_key        = lv_objkey
      obj_sys        = lv_objsys
    TABLES
      accountgl      = lt_accountgl
      currencyamount = lt_amount
      return         = lt_return
      extension1     = lt_exten.

  LOOP AT lt_return INTO DATA(ls_return) WHERE type CA 'EAX'.
    CONCATENATE lv_zmsg ls_return-message INTO DATA(lv_zmsg) SEPARATED BY '/'.
  ENDLOOP.

  IF lv_zmsg IS NOT INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ELSE.

    IF lv_key IS NOT INITIAL.
      " lv_key+0(10) BELNR
      " lv_key+10(4) BUKRS
      " lv_key+14(4) GJAHR
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = abap_true.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ENDIF.

  ENDIF.

ENDFORM.
*--------------------------------------------------------------------*
* 增强
* SMOD: ACBAPI01   函数: EXIT_SAPLACC4_001
*--------------------------------------------------------------------*
*T_ACCHD    LIKE  ACCHD
*T_ACCIT    LIKE  ACCIT
*EXTENSION  LIKE  BAPIEXTC
*RETURN     LIKE  BAPIRET2
*T_ACCWT    LIKE  ACCIT_WT
*T_ACCTX    LIKE  ACCBSET
*T_ACCFI    LIKE  ACCFI

  DATA: wa_extension   TYPE bapiextc,
        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 extension BY field1.

  LOOP AT c_extension2 INTO wa_extension.
    AT NEW field1.
      CREATE DATA l_ref TYPE (wa_extension-field1).
      ASSIGN l_ref->* TO <l_struc>.
    ENDAT.
    
   ext_value = wa_extension+240.
**    CONCATENATE wa_extension-field2 
**                wa_extension-field3
**                wa_extension-field4 INTO ext_value.
    
    <l_struc> = ext_value .

    ASSIGN COMPONENT 'POSNR' OF STRUCTURE <l_struc> TO <l_field>.
    IF sy-subrc = 0 AND <l_field> IS NOT INITIAL. " 行项目赋值
      READ TABLE t_accit WITH KEY posnr = <l_field> INTO wa_accit.
      IF sy-subrc IS INITIAL.
        MOVE-CORRESPONDING <l_struc> TO wa_accit.
        MODIFY t_accit FROM wa_accit INDEX sy-tabix.
      ENDIF.
    ELSE.  " 抬头赋值"
      MOVE-CORRESPONDING <l_struc> TO t_acchd.
    ENDIF.
  ENDLOOP.
  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值