• 关于BAPI_ACC_DOCUMENT_POST解读


    BAPI_ACC_DOCUMENT_POST是SAP ERP提供生成会计凭证的标准BAPI,这个BAPI可以用到多种场景生成会计凭证,实际项目中一般情况下更多的是生成应收和应付的会计凭证,分别对应客户和供应商,本例使用该BAPI生成资产价值,对应前台事务为F-90.

    使用F-90,前台做凭证一般是一行是供应商(应付),一行是资产(总帐),因此使用BAPI_ACC_DOCUMENT_POST创建资产价值的时候应该按照这样填充值,需要注意以下参数赋值,对于资产行,由于资产主数据上有科目定位码这个字段,对应是在事务代码AO90中配置了科目,对于资产价值需要使用购置和生产成本这个科目,所以在BAPI中也要使用这个科目;科目类型要给A(如果不给A,BAPI的返回消息中会提示科目1601050000不能直接记帐);业务范围本例给的0001,这个取决于资产主数据是否填写,如果填写F-90做凭证的时候可以直接带过来,BAPI中则可以赋值,没填写就可以不使用;次级资产编号标准定义的是CHAR4,在使用BAPI时一定要给足四位,否则会报错(报资产XX不属于公司代码XX)。根据公司代码,帐目表,科目定位码可以在AO90中找到对应的关于资产的科目配置,如下图所示,1601050000在FS00中是资产类型的统驭科目,


    另外对于资产来说还需要业务类型字段(对应F-90中的字段是事务类型),由于BAPI中的ACCOUNTGL中没有该字段,因此需要手动扩充,建立在EXTENSION2中,并结合BADI使用,建立的扩充结构如下,字段名字参照BSEG。


    生成的凭证:

    关于BAPI_ACC_DOCUMENT_POST,标准给了应收(客户)和应付(供应商)的参数,ACCOUNTRECEIVABLE和ACCOUNTPAYABLE,应收和应付相关的信息应该放在这两个表里,其他总账科目行应该放在ACCOUNTGL,其实对于应收和应付来说,都会对应一个统驭科目,这个统驭科目也是总账科目,只不过是对于应收和应付BAPI单独会在ACCOUNTRECEIVABLE和ACCOUNTPAYABLE处理。

    参考样例代码,供读者参考,
    REPORT zssh_test_create_asset_value.
    *通过BAPI创建资产价值 对应事务为F-90

    DATA:ls_doc_header TYPE bapiache09,
    lt_accountgl TYPE TABLE OF bapiacgl09,
    ls_accountgl TYPE bapiacgl09,
    lt_accountpayable TYPE TABLE OF bapiacap09,
    ls_accountpayable TYPE bapiacap09,
    lt_currencyamount TYPE TABLE OF bapiaccr09,
    ls_currencyamount TYPE bapiaccr09,
    lt_extension2 TYPE TABLE OF bapiparex,
    ls_extension2 TYPE bapiparex,
    lt_return TYPE TABLE OF bapiret2,
    ls_return TYPE bapiret2,
    ls_asset_value TYPE zssh_test_asset_value_str.

    ls_doc_header-comp_code = 'ZSSH'.
    ls_doc_header-fisc_year = 2020.
    ls_doc_header-fis_period = 11.
    ls_doc_header-doc_type = 'KR'.

    ls_doc_header-pstng_date = '20201116'.
    ls_doc_header-doc_date = '20201116'. " 凭证中的凭证日期
    ls_doc_header-header_txt = 'BAPI_ACC_DOCUMENT_POST创建资产价值'. " 凭证抬头文本
    ls_doc_header-username = sy-uname. " 用户名
    ls_doc_header-ref_doc_no = 'BAPI_ACC_DOCUMENT_POST'.

    *应付科目行
    ls_accountpayable-itemno_acc = 1. "会计凭证行项目 1
    ls_accountpayable-comp_code = 'ZSSH'. "公司代码
    ls_accountpayable-profit_ctr = 'LZSSH00001'. "利润中心
    ls_accountpayable-item_text = 'BAPI_ACC_DOCUMENT_POST创建资产价值'. "行项目文本
    ls_accountpayable-gl_account = '2202010000'. "总账科目
    ls_accountpayable-vendor_no = '0401000015'. "客户代码
    ls_accountpayable-pmnttrms = 'ZZ99'.
    ls_accountpayable-bline_date = '20201116'. "付款基准日期
    APPEND ls_accountpayable TO lt_accountpayable.
    ls_currencyamount-itemno_acc = 1. "会计凭证行项目编号
    ls_currencyamount-amt_doccur = 120 * '-1'.
    ls_currencyamount-curr_type = '00'.
    ls_currencyamount-currency = 'RMB' .
    APPEND ls_currencyamount TO lt_currencyamount.

    *资产科目行
    ls_accountgl-itemno_acc = 2. " 会计凭证行项目 2
    ls_accountgl-comp_code = 'ZSSH'. " 公司代码
    ls_accountgl-item_text = 'BAPI_ACC_DOCUMENT_POST创建资产价值'. " 行项目文本
    ls_accountgl-gl_account = '1601050000'. " 总分类帐帐目
    ls_accountgl-asset_no = '180207000015'.
    ls_accountgl-sub_number = '0000'.
    *ls_accountgl-cs_trans_t = '100'."事务类型
    *ls_accountgl-acct_key = '100'.
    ls_accountgl-acct_type = 'A'. "资产
    ls_accountgl-bus_area = '0001'. "业务部门 业务类别
    APPEND ls_accountgl TO lt_accountgl.
    ls_currencyamount-itemno_acc = 2. "会计凭证行项目编号
    ls_currencyamount-amt_doccur = 120.
    ls_currencyamount-curr_type = '00'.
    ls_currencyamount-currency = 'RMB' .
    APPEND ls_currencyamount TO lt_currencyamount.
    ls_asset_value-posnr = 2.
    ls_asset_value-anbwa = '100'.
    ls_extension2-structure = 'ZSSH_TEST_ASSET_VALUE_STR'.
    ls_extension2+30(960) = ls_asset_value.
    APPEND ls_extension2 TO lt_extension2.

    CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
    EXPORTING
    documentheader = ls_doc_header

    • CUSTOMERCPD =
    • CONTRACTHEADER =
    • IMPORTING
    • OBJ_TYPE =
    • OBJ_KEY =
    • OBJ_SYS =
      TABLES
      accountgl = lt_accountgl
    • ACCOUNTRECEIVABLE =
      accountpayable = lt_accountpayable
    • ACCOUNTTAX =
      currencyamount = lt_currencyamount
    • CRITERIA =
    • VALUEFIELD =
    • EXTENSION1 =
      return = lt_return
    • PAYMENTCARD =
    • CONTRACTITEM =
      extension2 = lt_extension2
    • REALESTATE =
    • ACCOUNTWT =
      .

    LOOP AT lt_return INTO ls_return WHERE type CA 'AE'.
    WRITE:/ ls_return-id,ls_return-number,ls_return-message.
    CLEAR ls_return.
    ENDLOOP.
    IF sy-subrc NE 0.
    LOOP AT lt_return INTO ls_return WHERE type EQ 'S'.
    WRITE:/ ls_return-id,ls_return-number,ls_return-message.
    CLEAR ls_return.
    ENDLOOP.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
    wait = 'X'.
    ENDIF.

    BADI:ACC_DOCUMENT
    METHOD if_ex_acc_document~change.

    DATA:ls_asset_value TYPE zssh_test_asset_value_str,
    ls_extension2 TYPE bapiparex,
    ls_accit TYPE accit.

    CHECK sy-uname EQ 'SHISH'.
    LOOP AT c_extension2 INTO ls_extension2.
    ls_asset_value = ls_extension2+30(960).

    CLEAR ls_accit.
    READ TABLE c_accit INTO ls_accit WITH KEY posnr = ls_asset_value-posnr.
    IF sy-subrc EQ 0.
      MOVE-CORRESPONDING ls_asset_value TO ls_accit.
      MODIFY c_accit FROM ls_accit INDEX sy-tabix. "lv_tabix.
    ENDIF.
    

    ENDLOOP.

    ENDMETHOD.

  • 相关阅读:
    零基础读懂视频播放器控制原理: ffplay 播放器源代码分析
    JPEG压缩原理与DCT离散余弦变换——有实际的数据演示
    图像压缩编码和解码原理——阐述了DCT变换的实质
    C++与C语言容易忽视的几个差异
    VLC目录结构介绍
    轻量便携流媒体播放器框架设计-2
    轻量便携流媒体播放器框架设计-1
    rtmp和rtsp的区别和适用范围
    vlc源码分析(六) 调用OpenMAX硬解码H.265
    vlc源码分析(五) 流媒体的音视频同步
  • 原文地址:https://www.cnblogs.com/shuhaibeyond/p/14161633.html
Copyright © 2020-2023  润新知