BAPI创建会计凭证和冲销凭证

90 篇文章 0 订阅
5 篇文章 0 订阅

BAPI创建会计凭证和冲销凭证

在使用冲销会计凭证的BAPI,即BAPI_ACC_DOCUMENT_REV_POST时,遇到下面的问题:
在这里插入图片描述

组件 利润中心冲销不可能

在这里插入图片描述

原因

由于一个变量为空导致不可以冲销

最后追查到一个底表,有一个select语句,查询TKA00PCA表,有个字段是空,在程序里面有对这个字段进行判断,如果是空,则无法冲销,所以不能使用BAPI对其进行冲销了!
在这里插入图片描述

在这里插入图片描述
之后,换了一个工厂的数据,发现可以成功冲销,说明是配置的问题,不是代码的问题,而且由于FICO模块不是很懂,就没有去配置,是直接换了一个工厂进行测试,测试通过。

代码附上

创建会计凭证代码

*&---------------------------------------------------------------------*
*& Report Z_BAPI_ACC_DOCUMENT_LHY
*&---------------------------------------------------------------------*
*& Type:Report
*& Creator:LiuHongyu
*& Create On:2024.2.2
*& Description:创建会计凭证的BAPIBAPI_ACC_DOCUMENT_POST
*&---------------------------------------------------------------------*
REPORT z_bapi_acc_document_lhy.

  DATA documentheader    TYPE bapiache09.
*DATA CUSTOMERCPD       TYPE BAPIACPA09.
*DATA CONTRACTHEADER    TYPE BAPIACCAHD.
*DATA OBJ_TYPE          TYPE BAPIACHE09-OBJ_TYPE.
*DATA OBJ_KEY           TYPE BAPIACHE09-OBJ_KEY.
*DATA OBJ_SYS           TYPE BAPIACHE09-OBJ_SYS.
  DATA accountgl         TYPE STANDARD TABLE OF bapiacgl09 WITH HEADER LINE.
*DATA ACCOUNTRECEIVABLE TYPE STANDARD TABLE OF BAPIACAR09.
*DATA ACCOUNTPAYABLE    TYPE STANDARD TABLE OF BAPIACAP09.
*DATA ACCOUNTTAX        TYPE STANDARD TABLE OF BAPIACTX09.
  DATA currencyamount    TYPE STANDARD TABLE OF bapiaccr09 WITH HEADER LINE.
*DATA CRITERIA          TYPE STANDARD TABLE OF BAPIACKEC9.
*DATA VALUEFIELD        TYPE STANDARD TABLE OF BAPIACKEV9.
*DATA EXTENSION1        TYPE STANDARD TABLE OF BAPIACEXTC.
  DATA return            TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE.
*DATA PAYMENTCARD       TYPE STANDARD TABLE OF BAPIACPC09.
*DATA CONTRACTITEM      TYPE STANDARD TABLE OF BAPIACCAIT.
  DATA extension2        TYPE STANDARD TABLE OF bapiparex WITH HEADER LINE.
*DATA REALESTATE        TYPE STANDARD TABLE OF BAPIACRE09.
*DATA ACCOUNTWT         TYPE STANDARD TABLE OF BAPIACWT09.
  DATA lv_datum TYPE d.
  DATA ls_zsacc_document TYPE zsacc_document.
  lv_datum = sy-datum.
  documentheader-comp_code = 1000.  "公司代码
  documentheader-doc_date = lv_datum. "凭证中的凭证日期
  documentheader-pstng_date = lv_datum. "凭证的过账日期
  documentheader-doc_type = 'SA'. "凭证日期
  documentheader-username = sy-uname. "用户
  documentheader-header_txt = '产线报销费用凭证测试-lhy'.
  IF accountgl-costcenter IS INITIAL.
      "accountgl-costcenter = lt_data-kostl.
      "accountgl-costcenter = |{ '17101301' ALPHA = IN }|. "成本中心,这个要有
  ENDIF.
  accountgl-itemno_acc = '1'. "会计凭证行项目编号
  accountgl-material = |{ '5913'  ALPHA = IN }|."物料号
  accountgl-plant = '1000'. "工厂
  "accountgl-orderid = |{ '1001754'  ALPHA = IN }|. "订单号
  accountgl-gl_account = |{ '1001010000'  ALPHA = IN }|. "借方总账科目
  "accountgl-gl_account = |{ '11001010'  ALPHA = IN }|. "总账科目11001010,用这个试试
  accountgl-value_date = sy-datum. "起息日,一定要有
  APPEND accountgl.
  CLEAR: accountgl.

  accountgl-itemno_acc = '2'. "会计凭证行项目编号
   accountgl-material = |{ '5913'  ALPHA = IN }|."物料号
  accountgl-plant = '1000'. "工厂
  "accountgl-orderid = |{ '1001754'  ALPHA = IN }|. "订单号
  accountgl-gl_account = |{ '1001010001'  ALPHA = IN }|. "贷方科目
  "accountgl-costcenter = |{ '17101301' ALPHA = IN }|. "成本中心,这个要有
  "accountgl-gl_account = '10010000' . "总账科目
  accountgl-value_date = sy-datum."起息日,一定要有
  APPEND accountgl.
  CLEAR: accountgl.

  currencyamount-itemno_acc = '1'.
  currencyamount-curr_type = '00'."评估视图
  currencyamount-currency = 'CNY'. "申请币别
  currencyamount-amt_doccur = 9999.  "金额
  APPEND currencyamount.
  CLEAR:currencyamount.

  currencyamount-itemno_acc = '2'.
  currencyamount-curr_type = '00'."评估视图
  currencyamount-currency = 'CNY'. "申请币别
  currencyamount-amt_doccur = -9999.  "金额
  APPEND currencyamount.
  CLEAR:currencyamount.
"--------------借贷方过账码增强相关的信息------------------------------
  CLEAR ls_zsacc_document.
  ls_zsacc_document-posnr = 1. "凭证行项目
  ls_zsacc_document-bschl = '40'."记账码
  CLEAR extension2.
  APPEND extension2.

  CLEAR ls_zsacc_document.
  ls_zsacc_document-posnr = 2. "贷方行项目
  ls_zsacc_document-bschl = '50'. "记账码

  CLEAR extension2.
  extension2-structure = 'ZSACC_DOCUMENT'.
  extension2-valuepart1 = ls_zsacc_document.
  APPEND extension2.

  CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
    EXPORTING
      documentheader          = documentheader
*     CUSTOMERCPD             = CUSTOMERCPD
*     CONTRACTHEADER          = CONTRACTHEADER
*   IMPORTING
*     OBJ_TYPE                = OBJ_TYPE
*     OBJ_KEY                 = OBJ_KEY
*     OBJ_SYS                 = OBJ_SYS
    TABLES
       accountgl               = accountgl
*     ACCOUNTRECEIVABLE       = ACCOUNTRECEIVABLE
*     ACCOUNTPAYABLE          = ACCOUNTPAYABLE
*     ACCOUNTTAX              = ACCOUNTTAX
      currencyamount          = currencyamount
*     CRITERIA                = CRITERIA
*     VALUEFIELD              = VALUEFIELD
*     EXTENSION1              = EXTENSION1
      return                  = return
*     PAYMENTCARD             = PAYMENTCARD
*     CONTRACTITEM            = CONTRACTITEM
     extension2              = extension2
*     REALESTATE              = REALESTATE
*     ACCOUNTWT               = ACCOUNTWT
            .
    IF line_exists( return[ type = 'E'] ). "如果有E的错误行
      cl_demo_output=>write( '错误消息:' ).
      cl_demo_output=>write( return ).
      cl_demo_output=>display(  ).
    ELSE.
      "DATA wait   TYPE bapita-wait.
      DATA return_transaction TYPE bapiret2.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
       EXPORTING
         wait          =  'X'
       IMPORTING
         return        = return_transaction
                .
      cl_demo_output=>display( return ).
    ENDIF.

冲销会计凭证代码

*&---------------------------------------------------------------------*
*& Report Z_BAPI_ACC_CANCEL_LHY
*&---------------------------------------------------------------------*
*& Type:Report
*& Creator:LiuHongyu
*& Create On:2024.2.2
*& Description:冲销会计凭证的BAPIBAPI_ACC_DOCUMENT_REV_POST
*&---------------------------------------------------------------------*
REPORT z_bapi_acc_cancel_lhy.

  DATA reversal TYPE bapiacrev.
  DATA bus_act  TYPE bapiache09-bus_act.
*    DATA OBJ_TYPE TYPE BAPIACREV-OBJ_TYPE.
  DATA obj_key  TYPE bapiacrev-obj_key.
*    DATA OBJ_SYS  TYPE BAPIACREV-OBJ_SYS.
  DATA lt_return   TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE.
  DATA i_return   TYPE bapiret2.
  DATA ls_bkpf TYPE bkpf.
  DATA l_belnr TYPE bkpf-belnr.
  DATA : l_message TYPE string.

  "l_gjahr = |{ '100000217' ALPHA = IN }|.
  l_belnr = |{ '100000022'  ALPHA = IN }|.
  SELECT SINGLE * FROM bkpf INTO ls_bkpf WHERE bukrs = '1000'
    AND belnr = l_belnr
    AND gjahr = '2024'
    AND xreversal = ''.
  IF sy-subrc <> 0.
    MESSAGE '表:BKPF(会计核算凭证标题)没有数据或该凭证已冲销!请核查数据!' TYPE 'E'.
  ENDIF.
  "bapi参数赋值
  reversal-obj_type = ls_bkpf-awtyp.    "参考过程:BKPFF
  reversal-obj_key_r = ls_bkpf-awkey.   "取消: 对象码
  "reversal-obj_key = ls_bkpf-awkey.     "对象键值
  "reversal-pstng_date = ls_bkpf-budat.      "凭证中的过账日期
  "reversal-fis_period = ls_bkpf-monat.  "会计期间
  reversal-comp_code = ls_bkpf-bukrs.   "公司代码:1710
  "reversal-reason_rev = '02'.           "原因代码
*  reversal-ac_doc_no = ls_bkpf-belnr. "会计凭证号码
*   取得系统 LOGICAL SYSTEM
  CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
      IMPORTING
        own_logical_system = reversal-obj_sys.
  "调用bapi函数,冲销会计凭证
  CALL FUNCTION 'BAPI_ACC_DOCUMENT_REV_POST'
    EXPORTING
      reversal       = reversal
      bus_act        = ls_bkpf-glvor
   IMPORTING
*     OBJ_TYPE       = OBJ_TYPE
     obj_key        = obj_key
*     OBJ_SYS        = OBJ_SYS
    TABLES
      return         = lt_return
            .
*  IF sy-subrc NE 0. "如果sy-subrc 不等于0
*    cl_demo_output=>display( lt_return ).
*  ENDIF.
*  IF sy-subrc EQ 0. "如果sy-subrc 等于0
*    cl_demo_output=>display( lt_return ).
*  ENDIF.
  READ TABLE lt_return WITH KEY type = 'E'.
    IF sy-subrc NE 0.
*     提交凭证过账
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait   = 'X'
        IMPORTING
          return = i_return.
      IF i_return IS INITIAL.
        l_message = |会计凭证冲销成功!会计凭证号:{ obj_key(10) }|.
        MESSAGE l_message TYPE 'E'.
        COMMIT WORK AND WAIT.
        "<fs_alv>-icon = '@08@'.
      ELSE.
        "<fs_alv>-icon = '@0A@'.
        l_message = '过账失败,请用事务代码ST22查看详细信息'.
      ENDIF.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      "<fs_alv>-icon = '@0A@'.
      LOOP AT lt_return WHERE type = 'A' OR type = 'E'.
        l_message = l_message && lt_return-message.
      ENDLOOP.
      MESSAGE l_message TYPE 'E'.
    ENDIF.
  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值