创建销售订单BAPI BAPI_SALESORDER_CREATEFROMDAT2

2023-11-02 22:12

本文主要是介绍创建销售订单BAPI BAPI_SALESORDER_CREATEFROMDAT2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TYPES: BEGIN OF TY_DATA,
         ZLINE  TYPE NUMC4,
         AUART  TYPE VBAK-AUART,       "订单类型
         VKORG  TYPE VBAK-VKORG,       "销售组织
         VTWEG  TYPE VBAK-VTWEG,       "分销渠道
         SPART  TYPE VBAK-SPART,       "产品组
         VKBUR  TYPE VBAK-VKBUR,       "销售办事处
         VKGRP  TYPE VBAK-VKGRP,       "销售组
         KUNNR  TYPE VBAK-KUNNR,       "售达方
         KUNWE  TYPE VBAK-KUNNR,       "送达方
         BSTNK  TYPE VBAK-BSTNK,       "客户参考
         ZYWY   TYPE VBAK-ZYWY,        "业务员

         PRSDT  TYPE VBKD-PRSDT,       "定价日期
         ZTERM  TYPE VBKD-ZTERM,       "付款条件

         CMTD   TYPE VBAP-CMTD_DELIV_DATE, "交货日期
         MATNR  TYPE VBAP-MATNR,       "物料编码
         KWMENG TYPE VBAP-KWMENG,      "数量
         PSTYV  TYPE VBAP-PSTYV,       "项目类别
         NETWR  TYPE VBAP-NETWR,       "价格
         KPEIN  TYPE VBAP-KPEIN,       "价格单位
         WERKS  TYPE VBAP-WERKS,       "工厂
         WAERK  TYPE VBAP-WAERK,       "货币
         KSCHA  TYPE KSCHA,            "条件类型

         MEINS  TYPE MARA-MEINS,       "计量单位
         STATUS TYPE ICON_D,           "返回状态
         MSG    TYPE MSGTXT_LONG,      "报错信息
         VBELN  TYPE VBELN,            "生成的销售订单
         LGORT  TYPE LIPS-LGORT,       "库存地点
       END OF TY_DATA,
       BEGIN OF TY_MSG,
         VBELN  TYPE VBELN,
         ZLINE  TYPE NUMC4,
         LGORT  TYPE LIPS-LGORT,
         STATUS TYPE ICON_D,
         MSG    TYPE MSGTXT_LONG,
         CMTD   TYPE VBAP-CMTD_DELIV_DATE, "交货日期
       END OF TY_MSG.
DATA: GT_DATA  TYPE TABLE OF TY_DATA.
DATA: GS_DATA TYPE TY_DATA.
DATA: LT_RETURN   TYPE TABLE OF BAPIRET2 WITH HEADER LINE,
      LT_PARTNERS TYPE TABLE OF BAPIPARNR WITH HEADER LINE,
      LT_ITEMS    TYPE TABLE OF BAPISDITM WITH HEADER LINE,
      LT_ITEMSX   TYPE TABLE OF BAPISDITMX WITH HEADER LINE,
      LT_SCHDL    TYPE TABLE OF BAPISCHDL WITH HEADER LINE,
      LT_SCHDLX   TYPE TABLE OF BAPISCHDLX WITH HEADER LINE,
      LT_COND     TYPE TABLE OF BAPICOND WITH HEADER LINE,
      LT_CONDX    TYPE TABLE OF BAPICONDX WITH HEADER LINE.

DATA: LS_HEADER  TYPE BAPISDHD1,   "销售订单抬头
      LS_HEADERX TYPE BAPISDHD1X.

DATA: BAPE_VBAK  TYPE BAPE_VBAK,
      BAPE_VBAKX TYPE BAPE_VBAKX.

DATA: LT_EXTENSIONIN TYPE TABLE OF BAPIPAREX,
      LS_EXTENSIONIN TYPE BAPIPAREX.

FIELD-SYMBOLS: <FS_DATA>  TYPE TY_DATA.
DATA LT_VBAP TYPE TABLE OF VBAP WITH HEADER LINE.
DATA: L_VBELN TYPE VBELN_VL,
      L_VBNUM TYPE VBNUM,
      L_RFLAG TYPE C,
      L_STR   TYPE STRING.
DATA BAPIRET2 TYPE TABLE OF BAPIRET2 WITH HEADER LINE.
DATA LV_VBELN TYPE BAPIVBELN-VBELN.
DATA LV_POSNR TYPE POSNR.
DATA LV_FLAG TYPE ABAP_BOOL.


DATA LV_MSG TYPE STRING.
DATA LT_MSG TYPE TABLE OF TY_MSG.
DATA GS_MSG TYPE TY_MSG.

LOOP AT GT_DATA ASSIGNING <FS_DATA>.
  CLEAR GS_DATA.
  MOVE <FS_DATA> TO GS_DATA.
  LV_POSNR = LV_POSNR + 10.

  LT_ITEMS = VALUE #( ITM_NUMBER  = LV_POSNR
                      MATERIAL    = GS_DATA-MATNR
                      PO_ITM_NO   = '000010'
                      TARGET_QTY  = GS_DATA-KWMENG
                      PLANT       = GS_DATA-WERKS
                      ITEM_CATEG  = GS_DATA-PSTYV
                       STORE_LOC   = GS_DATA-LGORT ).
  APPEND LT_ITEMS.

  LT_ITEMSX = VALUE #( ITM_NUMBER  = LV_POSNR
                       MATERIAL    = 'X'
                       PO_ITM_NO   = 'X'
                       TARGET_QTY  = 'X'
                       PLANT       = 'X'
                       ITEM_CATEG  = 'X' ).
  APPEND LT_ITEMSX.

  LT_SCHDL = VALUE #( ITM_NUMBER = LV_POSNR
                      SCHED_LINE = '0001'
                      REQ_QTY    = GS_DATA-KWMENG
                      REQ_DATE   = GS_DATA-CMTD
                      DATE_TYPE  = '1' ).
  APPEND LT_SCHDL.

  LT_SCHDLX = VALUE #(  ITM_NUMBER = LV_POSNR
                        SCHED_LINE = '0001'
                        REQ_QTY    = 'X'
                        REQ_DATE   = 'X'
                        DATE_TYPE  = 'X' ).
  APPEND LT_SCHDLX.

  LT_COND = VALUE #(  ITM_NUMBER = LV_POSNR
                      COND_ST_NO = '010'
                      COND_COUNT = '01'
                      COND_TYPE  = GS_DATA-KSCHA
                      COND_VALUE = GS_DATA-NETWR
                      COND_P_UNT = GS_DATA-KPEIN
                      CURRENCY   = GS_DATA-WAERK ).
  APPEND LT_COND.

  LT_CONDX = VALUE #( ITM_NUMBER = LV_POSNR
                      COND_ST_NO = '010'
                      COND_COUNT = '01'
                      UPDATEFLAG = 'I'
                      COND_VALUE = 'X'
                      COND_P_UNT = 'X'
                      CURRENCY   = 'X' ).
  LT_CONDX-COND_TYPE  = LT_CONDX-COND_TYPE .
  APPEND LT_CONDX.

  AT END OF ZLINE.
    "根据不同的序列号生成销售订单
    CLEAR GS_MSG.
    LS_HEADER = VALUE #(  DOC_TYPE   = GS_DATA-AUART    "销售订单类型
                          SALES_ORG  = GS_DATA-VKORG    "销售组织
                          DISTR_CHAN = GS_DATA-VTWEG    "分销渠道
                          DIVISION   = GS_DATA-SPART    "产品组
                          SALES_OFF  = GS_DATA-VKBUR    "销售办事处
                          SALES_GRP  = GS_DATA-VKGRP    "销售组
                          PURCH_NO_C = GS_DATA-BSTNK    "客户参考
                          PRICE_DATE = GS_DATA-PRSDT    "定价日期
                          PMNTTRMS   = GS_DATA-ZTERM ).  "付款条件

    LS_HEADERX = VALUE #( DOC_TYPE   = 'X'
                          SALES_ORG  = 'X'
                          DISTR_CHAN = 'X'
                          DIVISION   = 'X'
                          SALES_OFF  = 'X'
                          SALES_GRP  = 'X'
                          PURCH_NO_C = 'X'
                          PRICE_DATE = 'X'
                          PMNTTRMS   = 'X' ).

    LT_PARTNERS[] = VALUE #( ( PARTN_ROLE = 'AG' PARTN_NUMB = GS_DATA-KUNNR )
                             ( PARTN_ROLE = 'RE' PARTN_NUMB = GS_DATA-KUNWE ) ).

    BAPE_VBAK = VALUE #( ZYWY = GS_DATA-ZYWY ).
    LS_EXTENSIONIN = VALUE #( STRUCTURE = 'BAPE_VBAK' ).

    CALL METHOD CL_ABAP_CONTAINER_UTILITIES=>FILL_CONTAINER_C
      EXPORTING
        IM_VALUE               = BAPE_VBAK
      IMPORTING
        EX_CONTAINER           = LS_EXTENSIONIN-VALUEPART1
      EXCEPTIONS
        ILLEGAL_PARAMETER_TYPE = 1
        OTHERS                 = 2.
    APPEND LS_EXTENSIONIN TO LT_EXTENSIONIN.


    BAPE_VBAKX = VALUE #( ZYWY = 'X' ).
    LS_EXTENSIONIN = VALUE #( STRUCTURE = 'BAPE_VBAKX' ).

    CALL METHOD CL_ABAP_CONTAINER_UTILITIES=>FILL_CONTAINER_C
      EXPORTING
        IM_VALUE               = BAPE_VBAKX
      IMPORTING
        EX_CONTAINER           = LS_EXTENSIONIN-VALUEPART1
      EXCEPTIONS
        ILLEGAL_PARAMETER_TYPE = 1
        OTHERS                 = 2.
    APPEND LS_EXTENSIONIN TO LT_EXTENSIONIN.

    CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
      EXPORTING
        ORDER_HEADER_IN      = LS_HEADER
        ORDER_HEADER_INX     = LS_HEADERX
      IMPORTING
        SALESDOCUMENT        = LV_VBELN
      TABLES
        RETURN               = LT_RETURN
        ORDER_ITEMS_IN       = LT_ITEMS
        ORDER_ITEMS_INX      = LT_ITEMSX
        ORDER_PARTNERS       = LT_PARTNERS
        ORDER_SCHEDULES_IN   = LT_SCHDL
        ORDER_SCHEDULES_INX  = LT_SCHDLX
        ORDER_CONDITIONS_IN  = LT_COND
        ORDER_CONDITIONS_INX = LT_CONDX
        EXTENSIONIN          = LT_EXTENSIONIN.

    LOOP AT LT_RETURN WHERE TYPE CA 'EAXI'.
      LV_FLAG = 'X'.
    ENDLOOP.

    IF LV_FLAG IS INITIAL.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT = 'X'.
      "创建成功后获取成功消息
      LOOP AT LT_RETURN WHERE TYPE EQ 'S' AND ID EQ 'V1' AND NUMBER EQ '311'.
        CALL FUNCTION 'MESSAGE_TEXT_BUILD'
          EXPORTING
            MSGID               = LT_RETURN-ID
            MSGNR               = LT_RETURN-NUMBER
            MSGV1               = LT_RETURN-MESSAGE_V1
            MSGV2               = LT_RETURN-MESSAGE_V2
            MSGV3               = LT_RETURN-MESSAGE_V3
            MSGV4               = LT_RETURN-MESSAGE_V4
          IMPORTING
            MESSAGE_TEXT_OUTPUT = LV_MSG.
        CONCATENATE LV_MSG GS_MSG-MSG INTO GS_MSG-MSG.
      ENDLOOP.

      GS_MSG-STATUS = '@5B@'.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      "回滚后获取报错原因
      LOOP AT LT_RETURN WHERE TYPE CA 'EAXI'.
        CALL FUNCTION 'MESSAGE_TEXT_BUILD'
          EXPORTING
            MSGID               = LT_RETURN-ID
            MSGNR               = LT_RETURN-NUMBER
            MSGV1               = LT_RETURN-MESSAGE_V1
            MSGV2               = LT_RETURN-MESSAGE_V2
            MSGV3               = LT_RETURN-MESSAGE_V3
            MSGV4               = LT_RETURN-MESSAGE_V4
          IMPORTING
            MESSAGE_TEXT_OUTPUT = LV_MSG.
        CONCATENATE LV_MSG GS_MSG-MSG INTO GS_MSG-MSG.
      ENDLOOP.
      GS_MSG-STATUS = '@5C@'.
    ENDIF.
    "会写销售订单号
    GS_MSG-VBELN = LV_VBELN.
    GS_MSG-ZLINE = GS_DATA-ZLINE.
    GS_MSG-LGORT = GS_DATA-LGORT.
    GS_MSG-CMTD  = GS_DATA-CMTD.
    APPEND  GS_MSG TO LT_MSG.
    CLEAR: LV_POSNR,LV_FLAG,LV_VBELN,LV_MSG,LS_HEADER,LS_HEADERX,LT_ITEMS[],LT_ITEMSX[],
           LT_PARTNERS[],LT_SCHDL[],LT_SCHDLX[],LT_COND[],LT_CONDX[],LT_EXTENSIONIN[],
           GS_MSG.
  ENDAT.
ENDLOOP.

 

这篇关于创建销售订单BAPI BAPI_SALESORDER_CREATEFROMDAT2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/333651

相关文章

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

Macos创建python虚拟环境的详细步骤教学

《Macos创建python虚拟环境的详细步骤教学》在macOS上创建Python虚拟环境主要通过Python内置的venv模块实现,也可使用第三方工具如virtualenv,下面小编来和大家简单聊聊... 目录一、使用 python 内置 venv 模块(推荐)二、使用 virtualenv(兼容旧版 P

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

Java 如何创建和使用ExecutorService

《Java如何创建和使用ExecutorService》ExecutorService是Java中用来管理和执行多线程任务的一种高级工具,可以有效地管理线程的生命周期和任务的执行过程,特别是在需要处... 目录一、什么是ExecutorService?二、ExecutorService的核心功能三、如何创建

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc