批量创建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就这么水灵灵地创建了