如何在表的动态选择中实现并行处理

2020-08-31 10:49发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我有这个要求,我应该能够从选择屏...

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

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


我有这个要求,我应该能够从选择屏幕中动态选择表及其字段,并通过文件拆分来下载数据。但是由于下载需要大量时间,我想在我的系统中实现并行处理 代码。那么如何在下面的代码中实现并行处理?

报告zaa_fdatexta1。

表:dd02l。
DATA:ls_fieldcat类型slis_fieldcat_alv,
lt_fieldcat类型slis_t_fieldcat_alv,
ls_fieldcatlog类型slis_fieldcat_alv,
lt TYPE slis_layout_alv。

DATA:w_dref TYPE REF TO数据。
FIELD-SYMBOLS: TYPE STANDARD TABLE,"动态内部表,用于从数据库读取数据。
TYPE TYPE。

数据:w_dref1对数据的类型引用。
字段符号: TYPE STANDARD TABLE,"该表将从t_itab加载1000条记录。
TYPE ANY。
< br>类型:ty_header的开头,"以在xlsx文件中创建字段头。
fname(100)TYPE c,
ty_header的末尾。

数据:it_header ty_header的类型表,
wa_header TYPE ty_header。

数据:inttab OCCURS 100的开头。"表读取给定表的文件
包含结构dfies。
数据:选中TYPE复选框。 "用于检查选定字段条件的附加字段
数据:inttab的结尾。

数据:wa_tab类似于inttab的行。

类型:BEGIN OF ty_int1,"用于选择字段的结构 在选择屏幕上
字段名TYPE字段名,
ty_int1的结尾。

数据:inttab1 ty_int1的类型表,"以加载给定数据库表的字段名。
wa_tab1类似于LINE OF inttab1。


参数:p_table类型dd02l-tabname强制默认值'MARA'。
参数:count TYPE i默认值'1000'。
参数:p_file类似于rlgrap文件名。 >参数:p_enable作为复选框默认值''用户命令uc1。
gv_rc类型i。
调用方法cl_gui_frontend_services => file_open_dialog
导出
window_title ='选择文件'
更改
file_table = gt_file_table
rc = gv_rc。
如果sy-subrc =0。
读取表g t_file_table INTO gwa_file_table INDEX 1.
p_file = gwa_file_table-filename。
ENDIF。

在选择屏幕输出处。


IF p_enable ='X'。 > CALL FUNCTION'DDIF_FIELDINFO_GET'"以获取表字段信息
导出
标签名= p_table

langu = sy-langu

表格
dfies_tab = inttab
< br> EXCEPTIONS
not_found = 1
internal_error = 2
其他=3。


PERFORM popup_display。

ENDIF。

*& -------------------------------------------------- ------------------- *
*&表格popup_display
*&------------------ -------------------------------------------------- -*
*文本
* --------------------------------------- ------------------------------- *
FORM popup_display。

*用于弹出选择的字段目录
清除ls_fieldcat。
ls_fieldcat-row_pos ='1'。
ls_fieldcat-col_pos ='1'。
ls_fieldcat-fieldname ='CHECK'。
ls_fieldcat-tabname ='INTTAB'。
ls_fieldcat-seltext_m ='SELECT'。< br>附加ls_fieldcat至lt_fieldcat。
清除ls_fieldcat。


ls_fieldcat-row_pos ='1'。
ls_fieldcat-col_pos ='2'。
ls_fieldcat-fieldname ='FIELDNAME'。
ls_fieldcat-tabname ='INTTAB'。
ls_fieldcat-seltext_m ='FIELDNAME'。
ls_fieldcat-outputlen =50。
附加ls_fieldcat到lt_fieldcat。

ls_fieldcat-row_pos ='1'。
ls_fieldcat-col_pos ='3'。
ls_fieldcat-fieldname ='FIELDTEXT'。
ls_fieldcat-tabname ='INTTAB'。
ls_fieldcat-seltext_m ='DESCRIPTION'。
附加ls_fieldcat到lt_fieldcat。
清除ls_fieldcat。

*在POPUP中显示数据以选择字段
调用功能'REUSE_ALV_POPUP_TO_SELECT'
导出
i_zebra ='X'
it_fieldcat = lt_fieldcat
i_tabname ='INTTAB'
i_checkbox_fieldname ='CHECK'

t_outtab = inttab。
清除p_enable。

ENDFORM。 " popup_display

选择开始。

PERFORM选择
PERFORM下载。

*&------------- -------------------------------------------------- ------ *
*&形式SELEC
*&------------------------------- -------------------------------------- *
*文字
*- -------------------------------------------------- ------------------ *
*-> p1文本
* <-p2文本
* --------- -------------------------------------------------- ----------- *
格式选择。

创建数据w_dref类型标准表(p_table)。" 指向数据库表的结构
ASSIGN w_dref-> *至

创建数据w_dref1类型标准表(p_table)。 " 指向数据库表的结构
ASSIGN w_dref1-> * TO


IF sy-subrc EQ0。
数据:lv_temp TYPE字符串。 br> LOOP AT inttab INTO wa_tab WHERE check ='X'。"从inttab到inttab1选择字段名称

并按空格分隔lv_temp wa_tab-fieldname INTO lv_temp。

移动wa_tab-fieldname TO wa_header。
将wa_header附加到it_header。
清除:wa_tab,wa_header。
ENDLOOP。

从(p_table)
选择(lv_temp)
进入表的对应字段。

将inttab1循环到wa_tab1。

ENDLOOP。
ENDIF。


ENDFORM。
*&--------- -------------------------------------------------- ---------- *
*&表格下载
*&--------------------------- ------------------------------------------ *
*文字
* ------------------------------------------------ ---------------------- *
*-> p1文本
* <-p2文本
* ----- -------------------------------------------------- ------------ --- *
FORM下载。
数据:cnt TYPE字符串。 "以在fi_itab
DATA中加载n条记录:d TYPE字符串。"以创建多个excel e.x文件。 export1 export2 ....
数据:文件类型字符串。 "将p_file转换为字符串
file = p_file。
cnt =0。

LOOP AT ASSIGNING 。"包含所有记录的原始表

ASSIGN TO
追加 TO
cnt = cnt + 1.
*
如果cnt eq计数。
d = d + 1.
数据:lv_string1类型的字符串,lv_string2类型的字符串。
*
file = p_file。
在'。'处拆分p_file。 放入lv_string1 lv_string2。
合并lv_string1'_'d'。 lv_string2到文件中。
调用功能'GUI_DOWNLOAD'
导出

文件名=文件
文件类型='DAT'
附加='X'
write_field_separator ='X'< br> TABLES
data_tab =
字段名称= it_header


IF sy-subrc <> 0.

ENDIF。

< br>
cnt =0。
分配循环
删除
ENDLOOP。
ENDIF。

ENDLOOP。
>





ENDFORM。