生成内部订单BAPI

事务码KO01
BAPI_INTERNALORDER_CREATE
但是这个BAPI的参数很少,需要增强extensionin参数。

1.增强BAPI结构BAPI_TE_AUFK
这里写图片描述
2.传入参数,直接上代码

*-BAPI
  DATA:l_subrc TYPE sy-subrc,
       l_aufnr TYPE bapi2075_2-order.
  DATA:ls_imaster_data TYPE bapi2075_7,
       ls_emasterdata  TYPE bapi2075_2,
       ls_testrun      TYPE testrun.
  DATA:it_return      TYPE TABLE OF bapiret2,
       ls_return      TYPE bapiret2,
       lt_extensionin TYPE TABLE OF bapiparex,
       ls_extensionin TYPE bapiparex.
*-局部
  DATA:lv_ext_ord_no TYPE aufex,
       lv_msg        TYPE char255.
  DATA:ls_fidm016_ds TYPE zlesfidm016_ds,
       li_fidm016_ds TYPE TABLE OF zlesfidm016_ds.
  DATA:lv_ivpro_length TYPE dd03l-leng. "长度
  FIELD-SYMBOLS:<lfs_out> TYPE ty_out.

*-为了程序速度(先抽取ivpro长度)
  PERFORM frm_ivpro_length CHANGING lv_ivpro_length.

*-取选中行数
  LOOP AT  gt_out ASSIGNING <lfs_out> WHERE sel  = 'X'
                                        AND aufnr = ''.

    CLEAR:lv_ext_ord_no,lv_msg,ls_fidm016_ds.
    CLEAR:ls_imaster_data,ls_emasterdata,l_aufnr.
    CLEAR:ls_return,it_return,ls_extensionin,lt_extensionin.

*---默认字段
    ls_imaster_data-co_area    = 'CGA'.        "控制范围
    ls_imaster_data-order_type = 'Z003'.       "订单类型
    ls_imaster_data-comp_code  = 'B116'.       "公司代码
    ls_imaster_data-requ_comp_code = 'B116'.   "成本代码申请

*---传入字段
    CONCATENATE <lfs_out>-asqbh <lfs_out>-pledge_name
           INTO ls_imaster_data-order_name SEPARATED BY '_'.    "描述
    CONDENSE ls_imaster_data-order_name.

    lv_ext_ord_no = <lfs_out>-asqbh.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = lv_ext_ord_no
      IMPORTING
        output = lv_ext_ord_no.
    ls_imaster_data-ext_ord_no = lv_ext_ord_no.        "外部订单号
*  ls_imaster_data-COMP_CODE  = ts_head-aufnr.   "对象类

*--增强字段赋值
    PERFORM frm_extensionin_ivpro USING <lfs_out>-ivpro lv_ivpro_length
                                  CHANGING lt_extensionin.

    CALL FUNCTION 'BAPI_INTERNALORDER_CREATE'
      EXPORTING
        i_master_data = ls_imaster_data
      IMPORTING
        e_master_data = ls_emasterdata
        orderid       = l_aufnr
      TABLES
        return        = it_return
        extensionin   = lt_extensionin.

    READ TABLE it_return INTO ls_return
                         WITH KEY type = 'S' id = 'KO' number = '107'.
    IF sy-subrc = 0.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

    ENDIF.

*&---------------------------------------------------------------------*
*&      Form  FRM_IVPRO_LENGTH
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_ivpro_length  CHANGING pc_ivpro_length TYPE dd03l-leng.

  DATA:l_position LIKE dd03l-position.    "表格中区域的位置
  DATA:lt_length TYPE TABLE OF ty_length,
       ls_length TYPE ty_length.

*-找出在结构BAPI_TE_AUFK中字段IVPRO的位置
  SELECT SINGLE position INTO l_position
    FROM dd03l
    WHERE tabname EQ 'BAPI_TE_AUFK'
    AND fieldname EQ 'IVPRO'
    AND as4local EQ 'A'.
  IF sy-subrc EQ 0.

    "计算在结构BAPI_TE_AUFK中字段ZZTYPE(订单细分类型)前面的字段长度总和
    SELECT fieldname leng
      INTO CORRESPONDING FIELDS OF TABLE lt_length
      FROM dd03l
      WHERE tabname EQ 'BAPI_TE_AUFK'
       AND position LT l_position.
    LOOP AT lt_length INTO ls_length.
      pc_ivpro_length = pc_ivpro_length + ls_length-leng.
    ENDLOOP.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_EXTENSIONIN_IVPRO
*&---------------------------------------------------------------------*
*       增强字段(投资概况-IVPRO*----------------------------------------------------------------------*
FORM frm_extensionin_ivpro  USING pu_ivpro TYPE im_profil
                                  pu_ivpro_length TYPE dd03l-leng
                            CHANGING pc_extensionin TYPE ty_t_extensionin.


  DATA:lv_ivpro TYPE im_profil.       "投资尺度参数文件
  DATA:ls_extensionin TYPE bapiparex.

  lv_ivpro = pu_ivpro.
  "分配字段值到ivpro字段中
  IF pu_ivpro_length <= 240.

    ls_extensionin-valuepart1+pu_ivpro_length(6) = lv_ivpro.

  ELSEIF pu_ivpro_length > 240 AND pu_ivpro_length <= 480.

    pu_ivpro_length = pu_ivpro_length - 240 - 1.
    ls_extensionin-valuepart2+pu_ivpro_length(6) = lv_ivpro.

  ELSEIF pu_ivpro_length > 480 AND pu_ivpro_length <= 720.

    pu_ivpro_length = pu_ivpro_length - 480 - 1.
    ls_extensionin-valuepart3+pu_ivpro_length(6) = lv_ivpro.

  ELSEIF pu_ivpro_length > 720 AND pu_ivpro_length <= 960.

    pu_ivpro_length = pu_ivpro_length - 720 - 1.
    ls_extensionin-valuepart4+pu_ivpro_length(6) = lv_ivpro.

  ENDIF.
  ls_extensionin-structure = 'BAPI_TE_AUFK'.
  APPEND ls_extensionin TO pc_extensionin.
  CLEAR:ls_extensionin.

ENDFORM.
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值