ABAP FICO F-37/F-47创建预收/预付款

13 篇文章 9 订阅

FICO 所有的创建会计凭证的bapi都是: BAPI_ACC_DOCUMENT_POST

F-37/F-47创建的预收/预付款,只有一行

一般来说都是借贷项平衡。所以直接去函数里面填数据,会报错

查阅资料后得知,如果创建的凭证只有一行的,那么需要打上特定的标识,

函数的入参中 sp_gl_ind  和 bus_act 我分别填写的是F 和 'RFST'

并且增强:BADI_ACC_DOCUMENT

代码如下,供大家参考

  DATA:
    ls_documentheader    LIKE bapiache09,
    lt_accountgl         LIKE TABLE OF bapiacgl09,
    ls_accountgl         LIKE bapiacgl09,
    lt_currencyamount    LIKE TABLE OF bapiaccr09,
    ls_currencyamount    LIKE bapiaccr09,
    lt_return            LIKE TABLE OF bapiret2,
    ls_return            TYPE bapiret2,
    lt_accountpayable    LIKE TABLE OF bapiacap09,
    ls_accountpayable    LIKE bapiacap09,
    lt_accountreceivable LIKE TABLE OF bapiacar09,
    ls_accountreceivable LIKE  bapiacar09,
    lt_extension         LIKE TABLE OF bapiparex,
    ls_extension         LIKE bapiparex.
  DATA: lv_num           TYPE posnr_acc.
  DATA: ls_exten         TYPE zsfi_acc_document_ex1.
  DATA: ls_celtab        TYPE lvc_s_styl.
  LOOP AT gt_data INTO gs_data WHERE box IS NOT INITIAL.
    CLEAR:lt_return,gs_data-message.
    "凭证抬头
    CLEAR ls_documentheader.
    ls_documentheader-username   = sy-uname.            "用户名
    ls_documentheader-bus_act   = 'RFST'.               "必填,且必定为此值,不填报错
    ls_documentheader-comp_code  = gs_data-bukrs.       "公司代码
    ls_documentheader-doc_date   = sy-datum.            "凭证日期   收款日期
    ls_documentheader-pstng_date = sy-datum.            "过账日期   收款日期
    ls_documentheader-doc_type   = 'DZ'.                "凭证类型
    ls_documentheader-header_txt = gs_data-bktxt.       "抬头文本


    CLEAR: ls_accountreceivable,lt_accountreceivable.
    lv_num = lv_num + 1.
    ls_accountreceivable-itemno_acc  = lv_num.            "会计凭证行项目编号
    ls_accountreceivable-customer    = gs_data-kunnr.     "临时客户
    ls_accountreceivable-item_text   = gs_data-bktxt.     "行项目文本
    ls_accountreceivable-sales_ord   = gs_data-vbeln.
    ls_accountreceivable-s_ord_item  = gs_data-posnr.
    ls_accountreceivable-comp_code   = gs_data-bukrs.
    ls_accountreceivable-bline_date  = gs_data-zdate.
    ls_accountreceivable-sp_gl_ind   = 'F'.
    ls_accountreceivable-tax_code    = 'X0'.


    ls_accountreceivable-gl_account = '2205010000'.
    APPEND ls_accountreceivable TO lt_accountreceivable.

    "金额
    CLEAR: ls_currencyamount,lt_currencyamount.
    ls_currencyamount-itemno_acc   = lv_num.
    ls_currencyamount-currency     = gs_data-waers.
    ls_currencyamount-amt_doccur   = gs_data-zwrbtr.
    APPEND ls_currencyamount TO lt_currencyamount.

    CLEAR: ls_exten,ls_extension,lt_extension.
    ls_exten-posnr                = lv_num.                           "凭证行项目
    ls_exten-bschl                = '09'.                             "凭证行项目过账码
    ls_exten-zumsk                = 'A'.                              "
    ls_exten-umskz                = 'F'.                              "
    ls_extension-structure       = 'ZSFI_ACC_DOCUMENT_EX1'.
    ls_extension-valuepart1      = ls_exten.
    APPEND ls_extension TO lt_extension.

    "应收

    CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
      EXPORTING
        documentheader    = ls_documentheader
      TABLES
        accountgl         = lt_accountgl
        accountreceivable = lt_accountreceivable
        currencyamount    = lt_currencyamount
        return            = lt_return
        extension2        = lt_extension.

    LOOP AT  lt_return INTO ls_return WHERE type = 'E'.
      CONCATENATE gs_data-message ls_return-message  INTO gs_data-message.
    ENDLOOP.

增强中的代码如下:

  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>.

    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.
*此处为创建单行项目的会计凭证的特殊逻辑。为了不影响标准的会计凭证创建,
*需要根据传入的增强结构判断,并将BSTAT设置为'S',这样就不会校验借贷平衡了
      IF wa_extension-structure = 'ZSFI_ACC_DOCUMENT_EX1'.
        wa_accit-bstat = 'S'.
      ENDIF.
      MODIFY c_accit FROM wa_accit INDEX sy-tabix.
    ENDIF.

  ENDLOOP.

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值