ABAP BAPI_ACC_DOCUMENT_POST生成预制会计凭证

本文详细介绍了如何使用SAP的BAPI_ACC_DOCUMENT_POST来生成会计凭证,包括预制凭证的创建流程,以及在生成过程中需要进行的增强操作。特别强调了在调用BAPI时参数的正确传递,并解决了一个常见问题——预制会计凭证无法转成正式凭证。

生成会计凭证一般使用BAPIBAPI_ACC_DOCUMENT_POST

在使用BAPI生成预制会计凭证时需要做增强,实例化 BAPI出口ACC_DOCUMENT,实现方法CHANGE

READ TABLE C_EXTENSION2 INTO LS_EXTE WITH KEY STRUCTURE = 'ZFIDOCEXT'.
    IF SY-SUBRC = 0.
      ZEXT_DATA = LS_EXTE-VALUEPART1.
      MOVE ZEXT_DATA-STATUS TO C_ACCHD-STATUS_NEW.

 ENDIF.

其中,ZFIDOCEXT为自定义结构,其中包含行号,记账码,原因代码和一个字符标识:

在程序中,调用BAPI_ACC_DOCUMENT_POST前,将结构ZFIDOCEXT型变量赋值,在预制会计凭证时需要将STATUS赋值为2,即将C_ACCHD-STATUS_NEW赋值为2,然后将ZFIDOCEXT传给BAPI的参数EXTENSION2:

IF SY-TCODE = 'ZFI210'.
        LW_ZFIDOCEXT-BSCHL = '40'. "记帐码
ELSEIF SY-TCODE = 'ZFI211'.
        LW_ZFIDOCEXT-BSCHL = '50'. "记帐码

ENDIF.

IF P_PARK = 'X'.                        "是否创建预制凭证,否则凭证直接过账

LW_ZFIDOCEXT-STATUS =  '2'.

ELSE.
    LT_EXTENSION-STRUCTURE =  'ZFIDOCEXT'.    

LT_EXTENSION-VALUEPART1 = LW_ZFIDOCEXT.
    APPEND LT_EXTENSION.
    CLEAR  LT_EXTENSION,LW_ZFIDOCEXT.

ENDIF.

调用BAPI时将LT_EXTENSION传递给参数EXTENSION2:

CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
        EXPORTING
          DOCUMENTHEADER    = GD_DOCUMENTHEADER

        TABLES
*         ACCOUNTGL         = LT_ACCOUNTGL
          ACCOUNTRECEIVABLE = LT_ACCOUNTRECEIVABLE

*    ACCOUNTPAYABLE = LT_ ACCOUNTPAYABLE

          CURRENCYAMOUNT    = LT_CURRENCYAMOUNT

          RETURN            = LT_RETURN

  EXTENSION2  = LT_EXTENSION     .

BAPI中的参数ACCOUNTGL为总帐科目项ACCOUNTRECEIVABLE为客户项目ACCOUNTPAYABLE为供应商项目CURRENCYAMOUNT为货币项目RETURN为返回消息,在使用该BAPI时应注意参数的传递。

 

PS:实际应用过程中出现了生成的预制会计凭证无法转成正式会计凭证的问题,报错信息如下图:

经查,是因为LT_ACCOUNTRECEIVABLE中的BLINE_DATE这个参数未输,为该参数传值即可解决。

### 使用 `BAPI_ACC_DOCUMENT_POST` 进行会计凭证过账 #### 函数模块概述 `BAPI_ACC_DOCUMENT_POST` 是 SAP 提供的一个函数模块,主要用于创建财务会计 (FI) 和管理会计 (CO) 的记账凭证。此功能允许通过编程方式处理复杂的财务交易。 #### 参数结构 为了正确调用 `BAPI_ACC_DOCUMENT_POST` 并实现资产或其他类型的过账操作,需准备一系列输入参数: - **HEADER**:头部数据,包含公司代码 (`COMP_CODE`)、过账日期 (`POSTING_DATE`) 等基本信息。 - **ITEM[]**:项目列表,定义具体的分录条目,包括科目账户、金额方向及数值等细节[^1]。 - **TEXTS[]**:文本描述数组,提供额外的文字说明支持。 - **REFERENCE1, REFERENCE2**:参考字段,可用于存储关联信息或备注。 对于扩展需求,则可通过 `EXTENSIONIN` 参数传递自定义的数据集来补充标准接口未覆盖的内容[^3]。 #### 实现预制凭证的方法 当希望生成的是预制而非正式的过账凭证时,在增强实施过程中可以通过修改特定状态变量的方式达成目的。具体做法是在 SE19 工具中激活相应增强点,并在变更方法内设置目标状态码为 `'2'`,以此指示系统仅构建而不实际提交凭证记录[^4]。 ```abap MOVE '2' TO c_acchd-status_new. ``` 以上代码片段展示了如何调整内部工作区中的状态标志位以影响最终的行为模式。 #### 错误处理机制 每次执行后应检查 RETURN 表格内的反馈信息,确保操作顺利完成并及时响应任何潜在异常情况。RETURN 结构体包含了多种属性如 TYPE(E=Error,W=Warning,S=Success,I=Information),帮助开发者了解事务的具体进展状况以及是否存在阻碍因素[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值