当前位置: 首页 > news >正文

批量创建BOM的RFC接口

接到一个需求,是要弄一个批量创建BOM的接口,当然我不会写,是由之前自开发的程序改的。

关键函数:
CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'

具体用法是这样的:

然后我是创建了两个结构,因为程序是通过excel还有屏幕导入数据,所以我把这两个地方的变量放一起创建了个结构,另一个结构则是和程序一样存放最后显示的数据

其他的代码就是照着程序copy了,我也不懂hh

然后遇到了这么个错误

说是格式对不上

进去查看函数的参数发现Materal的参数类型是这个

然后我的lv_matnr定义的类型是这个

把他修改一下就好了

代码:

INCLUDE zpub_alv_func.
INCLUDE <icon>.
FUNCTION ZRFC_PP_015.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  TABLES
*"      IT_EXCEL STRUCTURE  ZST_BOM
*"      ITAB STRUCTURE  ZPPT001
*"----------------------------------------------------------------------


TABLES: sscrfields,rlgrap .
DATA:   functxt TYPE smp_dyntxt.

TABLES : mara,marc,mast,stko,stpo.

DATA: wa_itab    LIKE itab.
DATA: itab_err   LIKE itab OCCURS 0 WITH HEADER LINE.
DATA: itab_up    LIKE itab OCCURS 0 WITH HEADER LINE.
DATA: itab1      LIKE itab OCCURS 0 WITH HEADER LINE.
DATA: itab_temp  LIKE itab OCCURS 0 WITH HEADER LINE.

DATA: i_stko  LIKE stko_api01   .
"DATA: i_stko  LIKE stko_api01 OCCURS 0 WITH HEADER  LINE.
DATA: t_stpo  LIKE stpo_api03 OCCURS 0 WITH HEADER LINE .
DATA: it_stpo LIKE stpo_api02 OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it_longtext OCCURS 0,
      matnr TYPE  mast-matnr, "物料号
      werks TYPE  mast-werks, "工厂
      stlan TYPE  mast-stlan, "BOM 用途
      stlnr TYPE  mast-stlnr, "物料单
      stlal TYPE  mast-stlal, "可选的 BOM
      posnr TYPE  num4,"BOM item
      idnrk TYPE  stpox-idnrk,"BOM 组件 物料

      item_text1 LIKE  stpo_api03-item_text1, "
      item_text2 LIKE  stpo_api03-item_text2, "
      item_longtext1(1000) TYPE c,                          "行1长文本


      END OF it_longtext.

DATA: it_longtext1 LIKE it_longtext OCCURS 0 WITH HEADER LINE.

DATA: exceltab LIKE zalsmex_tabline OCCURS 0 WITH HEADER LINE.

DATA: lv_i TYPE i.

*&---------------------------------------------------------------------*
*&      Form  fill_check
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

 DATA: lv_fldname(40) TYPE c.
  DATA: lv_len TYPE i.   "物料描述长度
  DATA: lv_matnr LIKE csap_mbom-matnr."父物料号
  DATA: lv_compmatnr LIKE mara-matnr."父物料号
  DATA: lv_meins LIKE mara-meins .
  DATA: lv_alpgr LIKE stpo-alpgr.  "替代组号
  DATA: lv_posnr TYPE i.

  CLEAR: lv_fldname,lv_matnr,lv_compmatnr,lv_meins,lv_alpgr.
  lv_len = 0.

  lv_i = 0.
  lv_posnr = 0.   "计算组件项目号之用


  LOOP AT it_excel.

    lv_i = lv_i + 1.

***** 上传的数量带逗号, 处理
    CLEAR: lv_fldname.
    lv_fldname = it_excel-bmeng.
    REPLACE ',' WITH ' '  INTO lv_fldname.
    REPLACE ',' WITH ' '  INTO lv_fldname.
    CONDENSE lv_fldname NO-GAPS.
    it_excel-bmeng = lv_fldname.

    CLEAR: lv_fldname.
    lv_fldname = it_excel-menge.
    REPLACE ',' WITH ' '  INTO lv_fldname.
    REPLACE ',' WITH ' '  INTO lv_fldname.
    CONDENSE lv_fldname NO-GAPS.
    it_excel-menge = lv_fldname.

    itab_up-zitem = lv_i.
*    itab_up-datfr = p_datfr.   "BOM有效起始日期 20160101.
    itab_up-datfr = it_excel-datfr.   "BOM有效起始日期

    itab_up-matnr      = it_excel-matnr.  "父项物料号
    itab_up-werks      = it_excel-werks.  "工厂
    itab_up-base_quan  = it_excel-bmeng.  "基本数量

    itab_up-component  = it_excel-idnrk.  "子项组件物料号
    itab_up-comp_qty   = it_excel-menge.  "组件数量
    itab_up-comp_unit  = it_excel-meins.  "组件物料单位
    itab_up-comp_scrap = it_excel-ausch.  "报废率%
    itab_up-spproctype = it_excel-itsob.  "特殊采购类
    itab_up-item_no    = it_excel-posnr.  "组件项目号
    itab_up-ai_group   = it_excel-alpgr.  "替代组
    itab_up-ai_prio    = it_excel-alprf.  "替代优先级
    itab_up-ai_strateg = it_excel-alpst.  "替代策略
    itab_up-usage_prob = it_excel-ewahr.  "替代使用百分比%
    itab_up-item_text1 = it_excel-potx1.                    "1长文本(位置)
    itab_up-item_text2 = it_excel-potx2.                    "1长文本(位置)

    itab_up-item_longtext1 = it_excel-potx1.                "行1长文本
    itab_up-item_longtext2 = it_excel-potx2.                "行2长文本

    "itab_up-REL_COST  = 'X'. "成本核算标识


    IF itab_up-base_quan  EQ space OR itab_up-base_quan  = 0.  "抬头基本数量
      itab_up-base_quan  = '1000'.
    ENDIF.

*****自动给组件项目号赋值
    IF lv_matnr = itab_up-matnr.

      IF ( lv_alpgr = itab_up-ai_group AND lv_alpgr EQ space )  "替代组号
          OR ( lv_alpgr NE itab_up-ai_group ).
        lv_posnr = lv_posnr + 10.
      ENDIF.

      itab_up-item_no = lv_posnr.
      lv_alpgr = itab_up-ai_group.  "替代组号

    ELSE.
      lv_posnr = 10.
      lv_matnr = itab_up-matnr.  "组件物料号
      lv_alpgr = itab_up-ai_group.  "替代组号
      itab_up-item_no = lv_posnr.

    ENDIF.

***** 组件项目号前补0.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = itab_up-item_no
      IMPORTING
        output = itab_up-item_no.

******* 替代组号前补0.
**    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
**      EXPORTING
**        input  = itab_up-ai_group
**      IMPORTING
**        output = itab_up-ai_group.

***** check data
    SELECT SINGLE matnr INTO lv_matnr
        FROM mast
         WHERE matnr = itab_up-matnr
           AND werks = itab_up-werks
           AND stlan = IT_EXCEL-stlan "BOM用途
           AND stlal = IT_EXCEL-stlal. "可选BOM.
    IF sy-subrc = 0 .
      itab_up-mesid = 'E' .
      "itab_up-msg_err = '此父料BOM已存在!' .
      itab_up-zmk_exist = 'X'.   "代表 '此父料BOM已存在!' . V1.1.
      itab_up-icon    = icon_red_light.

      APPEND itab_up.
      CLEAR: itab_up.
      CONTINUE.
    ELSE.
      DATA: zstlan LIKE mast-stlan,
            zstlal LIKE mast-stlal.
      CLEAR:  zstlan, zstlal.

      SELECT SINGLE matnr stlan stlal INTO (lv_matnr, zstlan, zstlal)
       FROM mast
        WHERE matnr = itab_up-matnr
          AND werks = itab_up-werks.
      IF sy-subrc = 0.
        CONCATENATE zstlan '/' zstlal INTO itab_up-zmk_eoth.   "存在其他可选BOM。
        itab_up-icon    = icon_yellow_light.
        itab_up-zmk_exist = 'X'.   "代表 '此父料BOM已存在!' ,因为BAPI锁定不能上传多个可选BOM的。
      ENDIF.

    ENDIF .


    SELECT SINGLE mara~matnr INTO lv_fldname
        FROM mara JOIN marc ON marc~matnr = mara~matnr
         WHERE mara~matnr = itab_up-matnr
              AND marc~werks = itab_up-werks.
    IF sy-subrc NE 0 .
      itab_up-mesid = 'E' .
      itab_up-msg_err = '父物料号不存在!' .
      itab_up-icon    = icon_red_light.
    ENDIF .

*********** SELECT MARA .
**** 组件物料 和单位
    CLEAR: mara .
    CLEAR: lv_meins .
    SELECT SINGLE mara~matnr INTO lv_fldname FROM mara JOIN marc ON marc~matnr = mara~matnr
        WHERE mara~matnr = itab_up-component
          AND marc~werks = itab_up-werks..

    IF sy-subrc NE 0 .
      itab_up-mesid = 'E' .
      CONCATENATE itab_up-msg_err '/子项组件物料号不存在!' INTO itab_up-msg_err.
      ""itab_up-msg_err = '子料不存在!' .
      itab_up-icon    = icon_red_light.
    ELSE.

   ENDIF.

********* 特殊采购类
    SELECT SINGLE sobsl INTO itab_up-spproctype
        FROM marc
          WHERE matnr = itab_up-component
             AND werks = itab_up-werks.

***** '组件数量不能为空'
    IF itab_up-comp_qty EQ space." OR itab_up-comp_qty = 0.
      itab_up-mesid = 'E' .
      CONCATENATE itab_up-msg_err  '组件数量不能为空' INTO itab_up-msg_err.
      itab_up-icon    = icon_red_light.
    ENDIF.

*begin by ZengTao 2008-08-30  判断组件用量comp_qty的小数位数最大不超过3位小数
    DATA: lv_xs TYPE p DECIMALS 10.
    lv_xs = FRAC( itab_up-comp_qty * 1000 ).
    IF lv_xs <> 0.
      itab_up-mesid = 'E' .
      CONCATENATE itab_up-msg_err  '组件用量的小数位数超过3位小数!' INTO itab_up-msg_err.
      itab_up-icon    = icon_red_light.
    ENDIF.


********** "--->加入判断成本标志 ***********************
    CLEAR:lv_fldname.
    SELECT SINGLE ncost INTO lv_fldname
          FROM marc
             WHERE matnr = itab_up-component
                 AND werks = itab_up-werks.
    IF sy-subrc = 0.   "取物料主数据中无成本核算 值是否为空。
      IF lv_fldname EQ space.
        itab_up-rel_cost = 'X' .
      ELSE.
        itab_up-rel_cost = ''.
      ENDIF.
    ELSE.
      itab_up-rel_cost = 'X' .
    ENDIF.




    APPEND itab_up.
    CLEAR: itab_up.

  ENDLOOP.




***********************
  REFRESH: itab_err.
  CLEAR:   itab_err.

  itab_err[] = itab_up[].
  DELETE itab_err WHERE msg_err EQ space.

******* BEGIN IF有错误信息时
  IF itab_err[] IS NOT INITIAL.

    itab[] = itab_up[].
    DELETE itab WHERE matnr EQ space.
    MESSAGE  '上传文件有误,可查看显示列表中的<错误信息>一列' TYPE 'I'.


  ELSE. "数据

    LOOP AT itab_up.
      MOVE-CORRESPONDING itab_up TO itab.


      APPEND itab.
      CLEAR: itab.

    ENDLOOP.

  ENDIF.

 DATA: lv_mat_i        TYPE i,
        lv_mat_itxt(10) TYPE c.


  REFRESH: itab_temp.
  CLEAR: itab_temp.

  itab_temp[] = itab_up[].

  lv_mat_i = 0.

  LOOP AT itab_up INTO wa_itab.

    lv_mat_i = 0.
    CLEAR: lv_mat_itxt.

    LOOP AT itab_temp WHERE matnr = wa_itab-matnr AND component = wa_itab-component.
      lv_mat_i = lv_mat_i + 1.

    ENDLOOP.

    IF lv_mat_i > 1.
      lv_mat_itxt = lv_mat_i.
      CONDENSE lv_mat_itxt NO-GAPS.

      wa_itab-mesid = 'I' .
      CONCATENATE wa_itab-zmsg_same  '同一父料的组件料号存在相同个数为:'  lv_mat_itxt   INTO wa_itab-zmsg_same.

      IF wa_itab-icon NE icon_red_light.
        wa_itab-icon    = icon_yellow_light.
      ENDIF.

      MODIFY itab_up FROM wa_itab.

    ENDIF.


  ENDLOOP.

  DATA:
          lv_werks      LIKE  csap_mbom-werks,"PLANT
          lv_base_quan(17)  TYPE c,  "base_quan
          lv_date        LIKE  csap_mbom-datuv ,"matnr_QUAN
          lv_bom_usage   LIKE  csap_mbom-stlan," VALUE '1'."BOM_USAGE
          lv_alternative LIKE csap_mbom-stlal.  "可选BOM

  DATA: lv_fl_warning LIKE capiflag-flwarning  .
  DATA: o_stko LIKE stko_api02  .
  DATA: lv_datfm LIKE usr01-datfm .

  REFRESH: itab_err.
  CLEAR:   itab_err.

  REFRESH: it_longtext.
  CLEAR:   it_longtext.

  CLEAR:  lv_date .
  CLEAR:  lv_datfm .

  ""lv_date = p_datfr.    "BOM有效起始日期  '20160101' .
  WRITE IT_EXCEL-datfr TO lv_date.


  DELETE: itab WHERE matnr = space .

  LOOP AT itab INTO wa_itab WHERE zmk_exist EQ space AND msg_err EQ space.  "V1.1. WHERE zmk_exist EQ space
***---> header
    lv_matnr = wa_itab-matnr .

****    lv_werks = wa_itab-werks .
    lv_werks     = IT_EXCEL-werks.     "BOM工厂默认值为选择屏幕上的工厂

    lv_base_quan = wa_itab-base_quan.

    "i_stko-bom_status = p_stlal.  "'01'.
    i_stko-base_quan = wa_itab-base_quan .

    PERFORM tra_unit USING 'T006A' CHANGING lv_meins itab-comp_unit.
    "wa_itab-comp_unit = 'K'.
***---> item
    t_stpo-item_categ = 'L' .

    t_stpo-component  = wa_itab-component .
    t_stpo-comp_qty   = wa_itab-comp_qty  .
    t_stpo-comp_unit  = wa_itab-comp_unit .
    t_stpo-comp_scrap = wa_itab-comp_scrap .
    """t_stpo-spproctype = wa_itab-spproctype .  "特殊采购类 "DELETE 因为有时以下CALL FUNCTION 会不成功,去掉后就成功了
    t_stpo-item_no    = wa_itab-item_no .
    t_stpo-ai_group   = wa_itab-ai_group .
    t_stpo-ai_prio    = wa_itab-ai_prio .
    t_stpo-ai_strateg = wa_itab-ai_strateg .
    t_stpo-usage_prob   = wa_itab-usage_prob .

****    "t_stpo-item_text1   = wa_itab-item_text1 .  "长文本1
    t_stpo-item_text2   = wa_itab-item_text2 .       "文本2

    t_stpo-rel_cost     = wa_itab-rel_cost .   "成本核算标识

******************* BOM 长文本维护
    lv_len = 0.
    lv_len = STRLEN( wa_itab-item_longtext1 ).

    IF lv_len > 40.


      it_longtext-matnr = wa_itab-matnr.
      it_longtext-werks = wa_itab-werks.
      it_longtext-stlan = IT_EXCEL-stlan.  "'1'.  "BOM用途
      it_longtext-posnr = wa_itab-item_no.  "行项目号
      it_longtext-idnrk = wa_itab-component.

      it_longtext-item_text1      = wa_itab-item_text1 .
      it_longtext-item_longtext1  = wa_itab-item_longtext1.

******* DELETE 长文本前40位显示在行1,其他显示在第三行开始的长文本中
**      " t_stpo-item_text1  = wa_itab-item_longtext1(40).      "前40位
**      "lv_len = lv_len - 40.
**      "it_longtext-item_longtext1    = wa_itab-item_longtext1+40(lv_len).  "长文本


      APPEND it_longtext.
      CLEAR: it_longtext.

    ELSE.
      t_stpo-item_text1   = wa_itab-item_text1 .            "长文本1
    ENDIF.


***** "----增加前导0
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = t_stpo-item_no
      IMPORTING
        output = t_stpo-item_no.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = t_stpo-ai_group
      IMPORTING
        output = t_stpo-ai_group.  "替代组

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = t_stpo-ai_prio
      IMPORTING
        output = t_stpo-ai_prio. "替组优先级


    APPEND t_stpo.
    CLEAR: t_stpo .

*************************************************
    AT END OF matnr .

      IF lv_base_quan EQ space.
        lv_base_quan = '1000'.
      ENDIF.

**      "i_stko-bom_status = p_stlal.  "'01'. "可选BOM.
**      i_stko-base_quan = lv_base_quan .
**      "APPEND i_stko.

****      append i_stko . clear i_stko .


      lv_bom_usage   = IT_EXCEL-stlan.  "'1'.  "BOM用途
      lv_alternative = IT_EXCEL-stlal.  "'01'. "可选BOM.

      CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'
        EXPORTING
          material      = lv_matnr
          plant         = lv_werks
          bom_usage     = lv_bom_usage                      "= 1 "BOM用途
          alternative   = lv_alternative  "'01'. "可选BOM
          valid_from    = lv_date
          i_stko        = i_stko
          fl_bom_create = 'X'           "会提示组件物料不存在的错误信息了
***          alternative   = ' '
*          FL_NEW_ITEM   = 'X'

        IMPORTING
          fl_warning    = lv_fl_warning
          o_stko        = o_stko
        TABLES
          t_stpo        = t_stpo
        EXCEPTIONS
          error         = 1
          OTHERS        = 2.

      IF sy-subrc <> 0." AND sy-msgty NE 'W'. "AND sy-msgty ne 'W and sy-msgid = 29  and sy-msgno = 486.
        itab_err-mesid = 'E' .
        itab_err-matnr = lv_matnr .
        itab_err-werks = lv_werks .
        itab_err-icon  = icon_red_light.
        CONCATENATE  'BOM 创建失败!' sy-msgid sy-msgno sy-msgv1 sy-msgv2 INTO itab_err-msg_err.
        APPEND itab_err .
        CLEAR: itab_err .

        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ELSE.

        ""lv_fl_warning = 'X'.

*****     "----修改BOM项目中的[成本核算标志]
        "PERFORM bom_edit USING lv_matnr  lv_werks lv_date lv_bom_usage CHANGING lv_fl_warning.
*        PERFORM clear_table .

      ENDIF.

      IF lv_fl_warning = 'X' .
        itab_err-mesid = 'S' .
        itab_err-matnr = lv_matnr .
        itab_err-werks = lv_werks .
        itab_err-icon  = icon_green_light.
        itab_err-msg_err  = 'BOM创建成功!' .
        APPEND itab_err .
        CLEAR: itab_err .
      ENDIF .

    ENDAT.
  ENDLOOP.

*********************************************

*  PERFORM import_long_text.  "维护超过40 字符的文本,维护为长之本

  LOOP AT itab INTO wa_itab WHERE zmk_exist EQ space.  "V1.1. WHERE zmk_exist EQ space.

    CLEAR: itab_err.
    READ TABLE itab_err WITH KEY matnr = wa_itab-matnr
                                 werks = wa_itab-werks
                                 mesid = 'S' .
    IF sy-subrc = 0.
      wa_itab-icon  = icon_green_light.  "绿灯-保存成功
      wa_itab-msg_err = 'BOM创建成功!'.
    ELSE.
      wa_itab-icon  = icon_red_light.    "红灯-保存失败
      wa_itab-msg_err = 'BOM创建失败!'.
    ENDIF.

****** 长文本维护错误信息
    LOOP AT itab_err WHERE matnr = wa_itab-matnr AND werks = wa_itab-werks AND item_no = wa_itab-item_no AND component = wa_itab-component AND msg_err_text NE space.
      wa_itab-msg_err_text = itab_err-msg_err_text.
      wa_itab-icon = icon_red_light.    "红灯-长文本保存失败
    ENDLOOP.


    MODIFY itab FROM wa_itab.
    CLEAR: wa_itab.

  ENDLOOP.

   REFRESH: t_stpo .
  CLEAR:   t_stpo .
  CLEAR:   i_stko .

*&---------------------------------------------------------------------*
*&      Form  import_long_text
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
  DATA: txt_key TYPE thead-tdname,
          tdline(1000)   TYPE c,
          zlang      TYPE  sy-langu,
          valid_from LIKE csap_mbom-datuv.

  DATA: wa_stpo TYPE stpo.


  " DATA:lt_stpo2   TYPE ty_tab_stpo2  WITH HEADER LINE.


  CHECK it_longtext[] IS NOT INITIAL.

  REFRESH: it_longtext1.
  CLEAR: it_longtext1.


  it_longtext1[] = it_longtext[].
  SORT it_longtext1 BY matnr werks.
  DELETE ADJACENT DUPLICATES FROM it_longtext1 COMPARING matnr werks.   "删除重复数据


***********************************************
  LOOP AT it_longtext1.

    CLEAR: mast.
    SELECT SINGLE * FROM mast
          WHERE matnr = it_longtext1-matnr
               AND werks = it_longtext1-werks
               AND stlan = it_longtext1-stlan.  "BOM用途

    IF  sy-subrc = 0.  "if select mast

      LOOP AT it_longtext WHERE matnr = it_longtext1-matnr AND werks = it_longtext1-werks AND stlan = it_longtext1-stlan.

        SELECT SINGLE * FROM stpo WHERE stlnr = mast-stlnr
                                      AND idnrk = it_longtext-idnrk
                                      AND posnr = it_longtext-posnr.
        "and guidx = gt_bm01-item_guid.
        IF sy-subrc = 0.  "if selete stpo.
          CLEAR: tdline.

          CONCATENATE sy-mandt stpo-stlty stpo-stlnr stpo-stlkn stpo-stpoz INTO txt_key.
          lv_len = STRLEN( it_longtext-item_longtext1 ).
          tdline = it_longtext-item_longtext1.  "长文本
          lv_len = STRLEN( tdline ).
*          PERFORM set_text USING txt_key tdline.

          IF sy-subrc EQ 0.
            IF STRLEN( it_longtext-item_longtext1 ) > 0.
              zlang = sy-langu.
            ELSE.
              zlang = ''.
            ENDIF.

            UPDATE stpo SET ltxsp = zlang WHERE  stlty = stpo-stlty AND
                                                  stlnr = stpo-stlnr AND
                                                  stlkn = stpo-stlkn AND
                                                  stpoz = stpo-stpoz.
          ELSE.
            itab_err-mesid = 'E' .
            itab_err-matnr = it_longtext-matnr .
            itab_err-werks = it_longtext-werks .
            itab_err-item_no = it_longtext-posnr.
            itab_err-component = it_longtext-idnrk.

            itab_err-icon  = icon_red_light.
            itab_err-msg_err_text =  '长文本维护不成功'.
            APPEND itab_err .
            CLEAR: itab_err .
          ENDIF.

        ENDIF."endif selete stpo.

      ENDLOOP.

    ELSE.  "esleif select mast.
      LOOP AT it_longtext WHERE matnr = it_longtext1-matnr AND werks = it_longtext1-werks AND stlan = it_longtext1-stlan.

        itab_err-mesid = 'E' .
        itab_err-matnr = it_longtext-matnr .
        itab_err-werks = it_longtext-werks .
        itab_err-item_no = it_longtext-posnr.
        itab_err-component = it_longtext-idnrk.

        itab_err-icon  = icon_red_light.
        itab_err-msg_err_text =  '长文本维护不成功'.
        APPEND itab_err .
        CLEAR: itab_err .
      ENDLOOP.

    ENDIF.   "endif select mast




  ENDLOOP.


ENDFUNCTION.

FORM tra_unit  USING pname CHANGING p_meins pmeins .

  SELECT SINGLE mseh3 INTO p_meins FROM (pname)
              WHERE spras = sy-langu
                AND mseh3 = pmeins.

  IF  sy-subrc NE 0.
    SELECT SINGLE mseh3 INTO p_meins FROM (pname)
              WHERE spras = sy-langu
                AND msehi = pmeins.
  ENDIF.

  CHECK sy-subrc = 0.
  pmeins = p_meins.



ENDFORM.                    "tra_unit

FORM tra_unit_2  USING pname CHANGING p_meins pmeins .

  SELECT SINGLE mseh3 INTO p_meins FROM (pname)
              WHERE spras = sy-langu
                AND mseh3 = pmeins.

  IF  sy-subrc NE 0.
    SELECT SINGLE mseh3 INTO p_meins FROM (pname)
              WHERE spras = sy-langu
                AND msehi = pmeins.
  ENDIF.

  CHECK sy-subrc = 0.
  pmeins = p_meins.


ENDFORM.                                                    "tra_unit_2


FORM set_text USING tdname TYPE thead-tdname tdline.  "维护超过40 字符的文本,维护为长之本

  DATA: gs_header TYPE thead .
  DATA: lw_ltxt  TYPE tline .
  DATA:l_mess TYPE string,
       l_len TYPE i,
       l_str TYPE char40.

  DATA: BEGIN OF gt_ltxts OCCURS 10.     "Zeilen Langtext
          INCLUDE STRUCTURE tline.
  DATA: END OF gt_ltxts.



  CLEAR gt_ltxts[].
  CLEAR lw_ltxt.

  l_len = STRLEN( tdline ).

  IF STRLEN( tdline ) > 40.   "长文本全部数据,全部维护在长文本中,并且由第三行开始维护。
    gt_ltxts-tdformat = '*' .
    APPEND gt_ltxts.
    APPEND gt_ltxts.
  ENDIF.


  "l_len =  STRLEN( tdline ) / 40.
  DO.
    lw_ltxt-tdformat = '*' .
    l_str = tdline.
    lw_ltxt-tdline = l_str.

    IF lw_ltxt-tdline = ''.
      EXIT.
    ELSE.
      APPEND lw_ltxt TO gt_ltxts .
    ENDIF.
    SHIFT tdline BY 40 PLACES.

  ENDDO.
*  lw_ltxt-tdformat = '*' .
*  APPEND lw_ltxt TO gt_ltxts .

  CLEAR gs_header .
  gs_header-tdobject  = 'BOM' .
  gs_header-tdid      = 'MPO'.
  gs_header-tdspras   = sy-langu.
  gs_header-tdname    = tdname.
  CONDENSE gs_header-tdname.
  gs_header-tdform    = 'SYSTEM'.
  gs_header-mandt    = sy-mandt.
  gs_header-tdlinesize    = 45.
  gs_header-tdtxtlines    = 12.

  CALL FUNCTION 'SAVE_TEXT'
    EXPORTING
      client                 = sy-mandt
      header                 = gs_header
*     IMPORTING
*      newheader              = gs_header
*      insert                 = 'U'
      savemode_direct        = 'X'
*    OWNER_SPECIFIED        = ' '
*    LOCAL_CAT              = ' '
* IMPORTING
*    FUNCTION               =
*    NEWHEADER              =
    TABLES
      lines                  = gt_ltxts
 EXCEPTIONS
    id                     = 1
    language               = 2
    name                   = 3
    object                 = 4
    OTHERS                 = 5
  .



ENDFORM.                    "set_text

测试的话我是cs02删掉了一个BOM再创建来测试的

然后运行接口后,BOM就这么水灵灵地创建了

相关文章:

  • 常见的设计模式和应用场景(一)
  • 文本转语音-音画适时推送rtsp并播放
  • 静态路由实验
  • Spring Boot/Spring Cloud 整合 ELK(Elasticsearch、Logstash、Kibana)详细避坑指南
  • 【CSS3】元婴篇
  • [数据结构]并查集
  • 【 <一> 炼丹初探:JavaWeb 的起源与基础】之 JavaWeb 项目的部署:从开发环境到生产环境
  • 智能焊机监测系统:打造工业安全的数字化盾牌
  • Git合并工具在开发中的使用指南
  • 常用中文开源embedding模型应用
  • printk相关说明
  • 谷歌AI最新发布的可微分逻辑元胞自动机(DiffLogic CA)
  • ubuntu-学习笔记-nginx+php
  • MATLAB表格Table与时间序列Timetable的高效操作方法
  • MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)
  • L1-088 静静的推荐
  • QT中委托QStyledItemDelegate的使用
  • 6-langchang多模态输入和自定义输出
  • Apache POI详解
  • 保安员考试:巧用记忆术,攻克理论知识堡垒
  • 抗战回望18︱《广西学生军》:“广西的政治基础是青年”
  • 我驻旧金山总领事馆:黄石公园车祸中受伤同胞伤情稳定
  • 伊朗公布新型弹道导弹,“萨德”系统无法拦截
  • 当Z世代与传统戏曲在春日校园相遇
  • 申活观察|精致精准精细,城市“双面镜”照见怎样的海派活力
  • 国家能源局:鼓励各地探索深远海、沙戈荒等可再生能源制氢场景