首页 > 其他分享 >ABAP中生产会计凭证的BAPI函数的使用方法

ABAP中生产会计凭证的BAPI函数的使用方法

时间:2024-07-10 11:28:02浏览次数:8  
标签:BAPI code obj 会计凭证 ABAP ls SAP

在ABAP中,用于生产会计凭证的BAPI(Business Application Programming Interface)主要有两个:BAPI_ACC_GL_POSTING_POSTBAPI_ACC_DOCUMENT_POST。这些BAPI允许外部系统或ABAP程序向SAP系统发送请求,以创建或修改会计凭证。

一、BAPI介绍

  1. BAPI_ACC_GL_POSTING_POST

    • 主要用于处理总账凭证的过账。
    • 它允许外部系统或程序直接向SAP的总账模块发送过账请求,而无需通过传统的用户界面(GUI)。
  2. BAPI_ACC_DOCUMENT_POST

    • 提供更广泛的会计凭证处理能力,可能包括不仅限于总账凭证的其他类型凭证。
    • 它允许更复杂的会计凭证过账操作,具体取决于SAP系统的配置和版本。

二、如何使用这些BAPI

使用这些BAPI通常涉及以下步骤:

  1. 准备数据

    • 确定需要过账的会计凭证的所有相关数据,如凭证日期、过账日期、凭证类型、公司代码、货币、科目、金额等。
    • 这些数据需要按照BAPI要求的格式和参数进行准备。
  2. 调用BAPI

    • 使用ABAP的CALL FUNCTION语句调用相应的BAPI。
    • 将准备好的数据作为BAPI的输入参数传递。
    • 调用BAPI时,还需要处理可能的异常和错误返回。
  3. 处理返回信息

    • BAPI执行后,会返回一个或多个包含结果信息的表(如BAPIRET2)。
    • 需要检查这些返回信息以确定BAPI是否成功执行,以及是否有任何错误或警告消息。
  4. 提交事务

    • 如果BAPI成功执行且没有错误,通常需要提交事务以保存更改。
    • 这可以通过调用BAPI_TRANSACTION_COMMIT函数模块来实现。
  5. 错误处理

    • 如果在调用BAPI或处理返回信息时遇到错误,需要采取适当的错误处理措施。
    • 这可能包括回滚事务、记录错误日志或通知用户。

三、示例代码(以BAPI_ACC_DOCUMENT_POST为例)

当然,以下是一个具体的代码示例,展示了如何使用BAPI_ACC_DOCUMENT_POST来创建一个SAP会计凭证。请注意,这个例子是简化的,并且您需要根据您的SAP系统环境和业务需求来调整它。

REPORT zcreate_accounting_document.

DATA: lt_return TYPE STANDARD TABLE OF bapiret2,
      ls_header TYPE bapiacchd,
      lt_code TYPE STANDARD TABLE OF bapiaccit,
      ls_code TYPE bapiaccit,
      lv_obj_type TYPE bapi_obj_type VALUE 'AC_DOCUMENT',
      lv_obj_key TYPE bapi_obj_key_int,
      lv_obj_sys TYPE bapi_obj_sys VALUE 'SAP'.

" 设置凭证头信息
ls_header-username = sy-uname.
ls_header-doc_date = sy-datum.
ls_header-pstng_date = sy-datum.
ls_header-ref_doc_no = '123456'. " 参考文档编号,根据需要设置
ls_header-company_code = '1000'. " 公司代码,根据实际设置
ls_header-currency = 'EUR'. " 货币代码,根据实际设置
ls_header-doc_type = 'SA'. " 凭证类型,根据实际设置

" 设置行项目
CLEAR ls_code.
ls_code-itemno_acc = '000001'. " 行项目编号
ls_code-gl_account = '10010000'. " 总账科目
ls_code-item_text = '测试文本'. " 行项目文本
ls_code-tax_code = ' '. " 税务代码,根据实际设置
ls_code-amount = 1000. " 金额
APPEND ls_code TO lt_code.

" 调用BAPI创建会计凭证
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
  EXPORTING
    documentheader = ls_header
  IMPORTING
    obj_type       = lv_obj_type
    obj_key        = lv_obj_key
    obj_sys        = lv_obj_sys
  TABLES
    return         = lt_return
    accountgl      = lt_code.

IF sy-subrc = 0.
  " 检查是否有错误返回
  READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
  IF sy-subrc = 0.
    " 如果有错误,输出错误信息
    LOOP AT lt_return INTO ls_return WHERE type = 'E'.
      WRITE: / '错误:', ls_return-message.
    ENDLOOP.
  ELSE.
    " 如果没有错误,提交事务
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    IF sy-subrc = 0.
      WRITE: / '会计凭证已成功创建'.
    ELSE.
      WRITE: / '提交事务失败'.
    ENDIF.
  ENDIF.
ELSE.
  WRITE: / '调用BAPI失败'.
ENDIF.

在这个例子中,我们首先设置了凭证的头信息,包括用户名、凭证日期、过账日期、参考文档编号、公司代码、货币和凭证类型。然后,我们设置了一个行项目,包括行项目编号、总账科目、行项目文本、税务代码和金额。最后,我们调用BAPI_ACC_DOCUMENT_POST函数来创建会计凭证,并检查是否有任何错误返回。如果没有错误,我们提交事务并输出一条成功消息。如果有错误,我们输出错误信息。

四、注意事项

  • 在使用BAPI之前,请确保您已经充分理解了SAP系统的相关配置和业务逻辑。
  • BAPI的参数和返回信息可能会因SAP系统的不同版本和配置而有所不同。
  • 在生产环境中使用BAPI之前,请务必在测试环境中进行充分的测试。

以上信息基于公开可用的资料和SAP系统的通用特性。具体实现细节可能需要参考SAP系统的官方文档和您的具体业务需求。

标签:BAPI,code,obj,会计凭证,ABAP,ls,SAP
From: https://blog.csdn.net/popo1987mm/article/details/140319161

相关文章

  • ABAP中创建销售订单的BAPI函数的使用方法
    在ABAP中,用于创建销售订单的BAPI是BAPI_SALESORDER_CREATEFROMDAT2。这个BAPI允许你根据提供的数据创建一个新的销售订单。要使用BAPI_SALESORDER_CREATEFROMDAT2BAPI创建销售订单,你需要按照以下步骤操作:准备输入数据:订单头信息(BAPIVBRK结构)。订单行项目(BAPIVBRP表)。订......
  • Core WebAPI 中 Program.cs和Startup.cs认识 (高频考点)
    1.Program.cs认识publicclassProgram{publicstaticvoidMain(string[]args){//Build方法构建出一个web应用程序,然后去运行CreateWebHostBuilder(args)//调用下面的方法,返回一个IWebHostBuilder对象.Build()//用......
  • Asp.NET Core WebAPI 设置环境变量值ASPNETCORE_ENVIRONMENT
    默认情况下发布后的环境变量是Production方式一:在文件夹PublishProfiles下的FolderProfile.pubxml文件增加配置<Project><PropertyGroup><EnvironmentName>Development</EnvironmentName></PropertyGroup></Project>表示发布后通过builder.Environment.Env......
  • ABAP小技巧+PARAMETERS选择屏幕单选为空查不到数据
    今天在使用报表查数据时,发现只输入物料号(多选框)查不出数据,要将公司代码(单选框)一起输入才能查出数据。选择屏幕设计界面如下:后台表数据如下:情况一:(查不出数据)DEBUG界面显示,内表GT_ZTFM0004为空,P_BUKRS(工厂代码字段)没有值情况二:(能查到值)DEBUG界面如下:其实这个情况就......
  • .NET CORE WEBAPI 后端获取来源IP
    之前看别的地方说获取IP用ip=HttpContext.Current.Request.UserHostAddress;在ASP.NETCore2.0及更高版本中不起作用。您必须从ConfigureServices方法中的Startup.cs类中注入  HttpContextAccessor实例。 实际上换成ip=HttpContext.Connection.RemoteIpAddress.ToStr......
  • netdot webapi发布centos stream 9 被dos攻击
    前言-刚刚发布一个demo一直被一个叼毛攻击,不停的扫描端口,弄得接口一访问就是503错误99元买了一个2核2g的服务器,1元钱买了一个服务器,有个人一直扫描我的端口安装一个 nginxdnfinstallnginx安装完成后启动nginx服务#启动systemctlstartnginx#设置开机自启动sys......
  • webapi发布centos stream 8设置自动运行
    发布文件放到home下然后依次输入第一步:创建服务文件 首先,需要创建一个systemd服务文件。我们一般将这种服务文件放在/etc/systemd/system/目录下,并且给它一个.service后缀。例如,你可以创建一个名为wecharwebapi.service的文件。sudovi/etc/systemd/system/wecharwebapi......
  • net6 WebAPI大文件上传
    最近由于客户需要上传大文件,所以研究了一下文件上传的问题net6上传文件分为两种情况:buffering和streaming(缓存和流)Buffering:我们平时采用的通过IFormFile上传文件的方式就是Buffering,此方式会将文件全部缓存起来。这种方式简单,但对内存和硬盘空间造成负担。关于缓存,这里有个误......
  • SAP ABAP编程日记二报表的开发
    简介:本人是一个刚入行的学生,暂时担任ABAP开发工作。因为我之前没有接触过ABAP编程,对此比较陌生,所以此博客用于自己的学习记录,也希望给观看此博客的人提供一些帮助。上次我们创建了ABAP第一个程序,这次我们有针对性对于报表的开发进行学习一、编写之间的准备在编写程序的时候,......
  • CentOS Stream 8 发布.net 8 webapi
    参考资料https://learn.microsoft.com/zh-cn/dotnet/core/install/linux-rhel#where-is-centos-linux 微软好像不持支.net7所以把demo换成.net8sudodnfinstalldotnet-sdk-8.0 然后就开始报错,大致意思就是无法解析,找不到地址资源进入yum的repos目录cd/etc/yum.rep......