ABAP创建销售订单BAPI示例

1.BAPI种类

  1. BAPI_SALESORDER_CREATEFROMDAT2
  2. BAPI_CUSTOMERRETURN_CREATE
  3. SD_SALESDOCUMENT_CREATE

2.BAPI区别

  • BAPI_SALESORDER_CREATEFROMDAT2 业务对象限制为BUS2032
  • BAPI_CUSTOMERRETURN_CREATE 业务对象限制为BUS2102
  • SD_SALESDOCUMENT_CREATE 未限制业务对象类型
    • BUS2030 客户询价单
    • BUS2031 客户报价
    • BUS2032 销售订单
    • BUS2034 合同
    • BUS2094 贷项订单
    • BUS2096 借项订单
    • BUS2102 退货订单
    • BUS2103 后续免费送货订单
  • BAPI_SALESORDER_CREATEFROMDAT2和BAPI_CUSTOMERRETURN_CREATE都在内部调用SD_SALESDOCUMENT_CREATE
  • 对于不同订单类型(Z001,Z002…),配置了的SD凭证类型;可在TVAK表中VBTYP字段查看
    1
    2
  • 业务对象和SD凭证类型有绑定关系;比如Z008 Z009凭证,SD凭证类型为H(退货)所以需要使用业务对象类型BUS2102的BAPI;或者使用SD_SALESDOCUMENT_CREATE并设置参数BUSINESS_OBJECT = ‘BUS2102’

3.创建抬头行项目输入结构

3

4

4.创建接口函数,并配置传入传出参数

5
6
7

5.代码

  • 此方法save_text切割的字符串结尾为空格时;会造成空格丢失,需要自行写逻辑处理
  • 处理逻辑:缩短切割长度(例如:120);然后判断前一行是否末尾为空格,如果空则将空格写入本行开头
    FUNCTION ZSD_IF0012.
    *"----------------------------------------------------------------------
    *"*"本地接口:
    *"  IMPORTING
    *"     VALUE(I_HEAD) TYPE  ZSDS_CRM_IF007
    *"  EXPORTING
    *"     VALUE(RESULTCODE) TYPE  CHAR1
    *"     VALUE(RESULTMSG) TYPE  BAPI_MSG
    *"     VALUE(O_VBELN) TYPE  VBELN
    *"  TABLES
    *"      T_ITEM STRUCTURE  ZSDS_CRM_IF008
    *"----------------------------------------------------------------------
    
      DATA:
            WA_ORDER_HEADER_IN      LIKE BAPISDHD1,                 "抬头
            WA_ORDER_HEADER_INX     LIKE BAPISDHD1X,                "抬头控制
            WA_LOGIC_SWITCH         LIKE BAPISDLS,                  "内部控制参数
            GV_SALESDOCUMENT_EX     LIKE BAPIVBELN-VBELN,           "返回SO凭证号
            WA_ORDER_ITEMS_IN       LIKE BAPISDITM,                 "行项目
            ORDER_ITEMS_IN          LIKE  TABLE OF  BAPISDITM,      "行项目
            WA_ORDER_ITEMS_INX      LIKE BAPISDITMX,                "行项目控制
            ORDER_ITEMS_INX         LIKE  TABLE OF  BAPISDITMX,     "行项目控制
            WA_ORDER_PARTNERS       LIKE BAPIPARNR,                 "业务伙伴
            ORDER_PARTNERS          LIKE  TABLE OF  BAPIPARNR,      "业务伙伴
            WA_ORDER_SCHEDULES_IN   LIKE BAPISCHDL,                 "计划行
            ORDER_SCHEDULES_IN      LIKE  TABLE OF  BAPISCHDL,      "计划行
            WA_ORDER_SCHEDULES_INX  LIKE BAPISCHDLX,                "计划行控制
            ORDER_SCHEDULES_INX     LIKE  TABLE OF  BAPISCHDLX,     "计划行控制
            WA_ORDER_CONDITIONS_IN  LIKE BAPICOND,                  "定价条件
            ORDER_CONDITIONS_IN     LIKE  TABLE OF  BAPICOND,       "定价条件
            WA_ORDER_CONDITIONS_INX LIKE BAPICONDX,                 "定价条件控制
            ORDER_CONDITIONS_INX    LIKE  TABLE OF  BAPICONDX,      "定价条件控制
            WA_ORDER_TEXT           LIKE BAPISDTEXT,                "文本
            ORDER_TEXT              LIKE  TABLE OF  BAPISDTEXT,     "文本
            WA_EXTENSIONIN          TYPE BAPIPAREX,
            ORDER_EXTENSIONIN       TYPE TABLE OF BAPIPAREX,
            WA_RETURN               LIKE BAPIRET2,                  "BAPI返回
            RETURN                  LIKE  TABLE OF  BAPIRET2.       "BAPI返回
    
      DATA: WA_BAPE_VBAP  TYPE BAPE_VBAP,
            WA_BAPE_VBAPX TYPE BAPE_VBAPX,
            WA_BAPE_VBAK  TYPE BAPE_VBAK,
            WA_BAPE_VBAKX TYPE BAPE_VBAKX.
    
      DATA: WA_ITEM TYPE ZSDS_CRM_IF008,
            GS_LOGS TYPE ZALL_LOGS.                       "日志
    
      DATA: GT_DATA TYPE TABLE OF ZSDT_CRM_IF012,         "业务数据
            WA_DATA TYPE ZSDT_CRM_IF012.
    
      DATA: GV_STRING TYPE STRING,
            GT_STRING TYPE TABLE OF CHAR_132,
            WA_STRING TYPE  CHAR_132,
            GV_LENGTH TYPE I.
    
      SELECT *
      FROM ZMPPZB AS A
      FOR ALL ENTRIES IN @T_ITEM
      WHERE ZMPXX = @T_ITEM-ZMPXX
      INTO TABLE @DATA(GT_ZMPPZB).
    
    *    获取日志表流水号
      CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'
      EXPORTING
        OBJECT           = 'ZLOG001'
      EXCEPTIONS
        FOREIGN_LOCK     = 1
        OBJECT_NOT_FOUND = 2
        SYSTEM_FAILURE   = 3
        OTHERS           = 4.
      IF SY-SUBRC EQ 0.
    * Implement suitable error handling here
        CALL FUNCTION 'NUMBER_GET_NEXT'
        EXPORTING
          NR_RANGE_NR             = '01'
          OBJECT                  = 'ZLOG001'
        IMPORTING
          NUMBER                  = GS_LOGS-SEQNR
    *       QUANTITY                =
    *       RETURNCODE              =
        EXCEPTIONS
          INTERVAL_NOT_FOUND      = 1
          NUMBER_RANGE_NOT_INTERN = 2
          OBJECT_NOT_FOUND        = 3
          QUANTITY_IS_0           = 4
          QUANTITY_IS_NOT_1       = 5
          INTERVAL_OVERFLOW       = 6
          BUFFER_OVERFLOW         = 7
          OTHERS                  = 8.
        IF SY-SUBRC <> 0.
    * Implement suitable error handling here
        ENDIF.
        CALL FUNCTION 'NUMBER_RANGE_DEQUEUE'
        EXPORTING
          OBJECT           = 'ZLOG001'
        EXCEPTIONS
          OBJECT_NOT_FOUND = 1
          OTHERS           = 2.
        IF SY-SUBRC <> 0.
    * Implement suitable error handling here
        ENDIF.
      ELSE.
        RAISE NUM_RANGE_ERROR .
      ENDIF.
    
      IF I_HEAD-SESSION_ID IS INITIAL.
        RESULTCODE = 
  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值