我们如何在bapi中上传多个订单项。

2020-08-31 03:37发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我有一个bapi =====> ...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我有一个bapi =====>

KKPI_BDC_COSTING_CREATE

我为此写了一个代码。

SPAN {font-family:" Courier New"; 字体大小:10pt; 颜色:#000000; 背景:#FFFFFF; } .L0S31 {font-style:italic; 颜色:#808080; } .L0S32 {color:#3399FF; } .L0S33 {color:#4DA619; } .L0S52 {color:#0000FF; } .L0S55 {color:#800080; } .L0S70 {color:#808080; }

TYPES:开始输入ty_file,
line(1000)TYPE c,
v_fin1 TYPE MATNR,
ty_file的结尾。



DATA:it_file TYPE STANDARD ty_file初始大小表1,
wa_file类型ty_file,
it_fin TYPE标准表ty_fin初始大小表1,
wa_fin类型ty_fin。

数据:it_return bapiret2初始类型的标准表 1,
wa_return TYPE bapiret2。

DATA:input_data TYPE kkpi_transfer_data_line,
table_control_line TYPE rk70l。

SELECT SCREEN BEGGIN OF BLOCK B1 WITH FRAME TITLE text-001。 >参数p_path类型本地文件。
b1块的选择屏幕结束。

在p_path的值请求上的选择屏幕上。
调用功能'F4_FILENAME'
导出
程序名 = syst-cprog
dynpro_number = syst-dynnr
* FIELD_NAME =''
导入
file_name = p_path。

在选择屏幕上。
如果p_path初始。
消息text-002类型'E'。
ELSE。
IF p_path CP'* .TXT'或
p_path CP'* .txt'。
ELSE。
消息文本003类型'E'。
ENDIF。
ENDIF。

开始选择。

数据:p_file1类型字符串。
p_file1 = p_path。

调用功能'GUI_UPLOAD'
导出
文件名= p_file1
表格
data_tab = it_file
例外情况
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
spacer_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc <> 0.
*在此处实施适当的错误处理
ENDIF。

END-OF-SELECTION。
数据:t_input_data类型kkpi_transfer_data。

数据:v_klvar类型ck_klvar ,
v_matnr类型matnr,
v_werks类型werks_d,
v_losgr(100)类型c,
v_tvers类型ck_tvers,
v_kadat类型ck_abdat,
v_bidat TYPE ck_bidat,
v_posnr TYPE ck_posnr,
v_typps TYPE typps,
v_herk2 TYPE herk2,
v_herk3 TYPE herk3,
v_menge(100)TYPE c,
v_meeht TYPE meins,
> v_lwertb(100)类型c,
v_ltext类型kltxt,
v_lpreis(100)类型c,
v_lpeinh(100)类型c,
v_kstar类型kstar,
v_elemt类型ck_element,< br> v_lpreifx(100)TYPE c,
v_lwertfx(100)TYPE c,
v_fin1 TYPE matr。

在it_file中将其放入wa_file。
清除:v_klvar,v_matnr,v_werks,v_losgr ,v_tvers,v_kadat,v_bidat,v_posnr,v_typps,v_herk2,v_herk3,v_menge,v_meeht,
v_lwertb,v_ltext,v_lpreis,v_lpeinh,v_kstar,v_elemt,v_lwerifx> 分割wa_file-line AT';' INTO v_klvar v_matnr v_werks v_losgr v_tvers v_kadat v_bidat v_posnr v_typps v_herk2 v_herk3 v_menge v_meeht
v_lwertb v_ltext v_lpreis v_l_n_n_r_n_r_n_r_n_r_n_n_data_f_l-n_v_k_vstar_f_l-n_t_n_data_l input_data-werks = v_werks。
input_data-losgr = v_losgr。
input_data-tvers = v_tvers。
input_data-kadat = v_kadat。
input_data-bidat = v_bidat。
table_control_line-posnr = v_posnr
table_control_line-typps = v_typps。
table_control_line-herk2 = v_herk2。
table_control_line-herk3 = v_herk3。
table_control_line-menge = v_menge。
table_control_line-meeht = v_meeht。 -lwertb = v_lwertb。
table_control_line-ltext = v_ltext。
table_control_line-lpreis = v_lpreis。
table_control_line-lpeinh = v_lpeinh。
table_control_line-lpreifx = v_lpreifx。
table_control_line-lwertfx = v_lwertfx。
附录t able_control_line到输入数据位置。
APPEND输入数据到t_input_data。
ENDIF。
ENDIF。
通话功能'KKPI_BDC_COSTING_CREATE'
导出
客户端= sy-mandt
用户= sy -uname
模式='A'
更新='A'
it_transfer_data = t_input_data
例外情况
call_transaction_error = 1
no_transfer_data = 2
错误的模式参数= 3
其他 =4。
IF sy-subrc <> 0.
*在此处实施适当的错误处理
ENDIF。
ENDLOOP。

当我为一个带有一个订单项的标头上传成功时,但问题是,当我上传一个带有多个订单项的标头时,其生成错误,例如材料已退出。

我的文件数据是

Z001; 1600640014; 3504; 1; 1; 20190704; 99990331; 1; M; 1300630004; 1020; 10; KG; 570;精制棕榈油精; 57000.00; 1; 4100202; 10; 0; 0。
Z001; 1600640014; 3504; 1; 1; 20190704; 99990331; 2; M; 5002120114; 1020; 1; NOS; 71.5; 15KG锡罐900G; 71.5; 1; 4700103; 40; 0; 0。

所以,我在代码中更改了上传多个订单项的内容。

plz建议。