首页 > 其他分享 >ABAP中创建销售订单的BAPI函数的使用方法

ABAP中创建销售订单的BAPI函数的使用方法

时间:2024-07-10 11:27:08浏览次数:16  
标签:BAPI header lt 订单 ABAP ls order

在ABAP中,用于创建销售订单的BAPI是BAPI_SALESORDER_CREATEFROMDAT2。这个BAPI允许你根据提供的数据创建一个新的销售订单。

要使用BAPI_SALESORDER_CREATEFROMDAT2 BAPI创建销售订单,你需要按照以下步骤操作:

  1. 准备输入数据

    • 订单头信息(BAPIVBRK结构)。
    • 订单行项目(BAPIVBRP表)。
    • 订单伙伴信息(BAPIVBPA表,可选)。
    • 其他扩展信息(可选)。
  2. 调用BAPI

    • 使用CALL FUNCTION语句调用BAPI_SALESORDER_CREATEFROMDAT2
    • 将准备好的输入数据传递给BAPI的相应参数。
  3. 处理输出和返回

    • BAPI将返回订单头信息(BAPIVBRK结构)、订单编号(BAPIVBELN-VBELN类型)以及其他可能的输出参数。
    • BAPI还可能返回错误或警告信息(BAPIRET2表)。
  4. 提交事务

    • 如果没有错误,你可以调用BAPI_TRANSACTION_COMMIT来提交事务。

以下是一个简化的代码示例,展示了如何使用BAPI_SALESORDER_CREATEFROMDAT2 BAPI创建销售订单:

在ABAP中,用于创建销售订单的BAPI是BAPI_SALESORDER_CREATEFROMDAT2。这个BAPI允许你基于提供的数据创建一个新的销售订单。

代码示例,展示了如何使用这个BAPI来创建一个销售订单。

REPORT zcreate_sales_order.

DATA: lt_return TYPE STANDARD TABLE OF bapiret2,
      ls_order_header_in TYPE bapivbrk,
      ls_order_header_out TYPE bapivbrk,
      lt_order_items_in TYPE STANDARD TABLE OF bapivbrp,
      ls_order_item_in TYPE bapivbrp,
      lt_order_partners TYPE STANDARD TABLE OF bapivbpa,
      ls_order_partner TYPE bapivbpa,
      lv_salesdoc TYPE bapivbeln-vbeln,
      lv_order_header_ex TYPE bapidocth,
      lt_order_items_ex TYPE STANDARD TABLE OF bapidoctp,
      lv_order_type TYPE bapivbeln-vbtyp_v.

" 设置销售订单头信息
ls_order_header_in-doc_type = 'OR'. " 订单类型
ls_order_header_in-sales_org = '1000'. " 销售组织
ls_order_header_in-distr_chan = '10'. " 分销渠道
ls_order_header_in-division = '00'. " 产品组
ls_order_header_in-purch_no_c = '123456'. " 客户购买订单编号
ls_order_header_in-sold_to_party = '0000000001'. " 售出方
ls_order_header_in-bill_to_party = '0000000001'. " 收款方
ls_order_header_in-payer = '0000000001'. " 付款方

" 设置销售订单行项目
CLEAR ls_order_item_in.
ls_order_item_in-material = '000000000000000001'. " 物料编号
ls_order_item_in-material_long = 'Test Material'. " 物料描述
ls_order_item_in-target_qty = 10. " 目标数量
ls_order_item_in-sales_unit = 'PC'. " 销售单位
ls_order_item_in-plant = '1000'. " 工厂
ls_order_item_in-stor_loc = '0001'. " 存储地点
APPEND ls_order_item_in TO lt_order_items_in.

" 设置销售订单伙伴信息
CLEAR ls_order_partner.
ls_order_partner-partn_role = 'AG'. " 伙伴角色:代理商
ls_order_partner-partn_numb = '0000000001'. " 伙伴编号
APPEND ls_order_partner TO lt_order_partners.

" 调用BAPI创建销售订单
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
  EXPORTING
    order_header_in  = ls_order_header_in
  IMPORTING
    order_header_out = ls_order_header_out
    salesdoc         = lv_salesdoc
  TABLES
    return           = lt_return
    order_items_in   = lt_order_items_in
    order_partners   = lt_order_partners
    order_header_ext = lv_order_header_ex
    order_items_ext  = lt_order_items_ex.

IF sy-subrc = 0.
  " 检查是否有错误返回
  READ TABLE lt_return INTO DATA(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: / '销售订单已成功创建,订单编号:', lv_salesdoc.
    ELSE.
      WRITE: / '提交事务失败'.
    ENDIF.
  ENDIF.
ELSE.
  WRITE: / '调用BAPI失败'.
ENDIF.

在这个例子中,我们首先设置了销售订单的头信息,包括订单类型、销售组织、分销渠道、产品组、客户购买订单编号、售出方、收款方和付款方。然后,我们设置了一个销售订单行项目,包括物料编号、物料描述、目标数量、销售单位、工厂和存储地点。接着,我们设置了销售订单的伙伴信息,包括伙伴角色和伙伴编号。最后,我们调用BAPI_SALESORDER_CREATEFROMDAT2函数来创建销售订单,并检查是否有任何错误返回。如果没有错误,我们提交事务并输出一条成功消息,包括销售订单的编号。如果有错误,我们输出错误信息。

标签:BAPI,header,lt,订单,ABAP,ls,order
From: https://blog.csdn.net/popo1987mm/article/details/140319266

相关文章

  • Core WebAPI 中 Program.cs和Startup.cs认识 (高频考点)
    1.Program.cs认识publicclassProgram{publicstaticvoidMain(string[]args){//Build方法构建出一个web应用程序,然后去运行CreateWebHostBuilder(args)//调用下面的方法,返回一个IWebHostBuilder对象.Build()//用......
  • 生产订单执行明细表二开增加字段
    业务背景业务需求方案设计详细设计和实现  一、业务背景标准产品目前的逻辑是入库数量/计划数量=达成率,需要加入计划完成时间和数据/实际完成时间和数量=达成率。 二、业务需求过滤匡提供输入时间段,作为入库单的时间限制,算出入库数,实际达成率=入库数/计划数*100%。......
  • 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第一个程序,这次我们有针对性对于报表的开发进行学习一、编写之间的准备在编写程序的时候,......