点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨窥视,
我已经开发了此Z报告。 我面临的问题是,它在25-100种材料上都能正常工作,但是一旦我扩大范围,该报告就需要花费大量时间来处理,并且在大型环境下运行时,我会超时并出现错误 范围。 请帮助我修复代码。 我在这里附上我的代码。
FORM set_data。
选择matnr,werks,lgort,charg,vfdat,hsdat到表@DATA(it_data)中
从matdoc那里matnr输入@so_matnr和werks输入@so_werks和lgort IN @ so_lgort。
在it_data处将其放入数据(ls_data)。
从makt处将单个maktx输入到ls_output-maktx中,将其EQ放在ls_data-matnr中。 。
从mara到ls_output-mtart中选择单个mtart,在mnr EQ ls_data-matnr中选择
从mch1到ls_output-qndat中选择单个qndat。 "添加下一个检查日期
从mchb到ls_output-clabs中选择单个实验室,在其中EQ ls_data-werks和werks EQ ls_data-werks和lgort EQ ls_data-lgort和charg EQ ls_data-charg。
_ss -matnr左删除引导数为'0'。
ls_output-matnr = ls_data-matnr。
ls_output-werks = ls_data-werks。
ls_output-lgort = ls_data-lgort。
ls_output-charg = ls_data-charg。
ls_output-hsdat = ls_data-hsdat。
ls_output-vfdat = ls_data-vfdat。
APPEND ls_output到它_输出 ..
通过matnr charg werks lgort对IT_SORT进行排序。
从it_output中删除相邻的重复文件。
*
ENDLOOP。
ENDFORM。< br>
*&------------------------------------------- -------------------------- *
*&表单build_layout
*&----------- -------------------------------------------------- -------- *
*设置ALV显示的布局
* ---------------------------- ------------------------------------------ *
表格显示_ alv。
*/..为alv
PERFORM get_fieldcatalog设置字段目录。
调用功能'REUSE_ALV_GRID_DISPLAY'
导出
i_callback_program = sy-repid
i_callback_top_of_page ='TOP-OF-PAGE'
is_layout = gs_layout
it_fieldcat = gt_fcat
i_save ='A'
表格
t_outtab = it_output
例外情况
program_error = 1
其他=2。
ENDFORM。
**&------------------- -------------------------------------------------- *
**&表格GET_FIELDCATALOG
**&----------------------------------- ---------------------------------- *
**从字典结构创建字段目录
* * ------------------------------------------------- --------------------- *
**-> p_struc_name结构名称
**-> p_rtname参考表名称
** -> p_repid程序名称
** <-> c_fcat字段目录
** ---------------------------- ------------------------------------------ *
FORM get_fieldcatalog。< br>
清除:gs_fcat。
刷新:gt_fca t。
gs_fcat-col_pos =1。
gs_fcat-fieldname ='MATNR'。
gs_fcat-tabname ='IT_OUTPUT'。
gs_fcat-seltext_m ='材料编号'。
APPEND将gs_fcat转到gt_fcat。
清除gs_fcat。
gs_fcat-col_pos =2。
gs_fcat-fieldname ='MAKTX'。
gs_fcat-tabname ='IT_OUTPUT'。 -seltext_m ='材料说明'。
gs_fcat-outputlen ='12'。
追加gs_fcat至gt_fcat。
清除gs_fcat。
gs_fcat-col_pos = 3.
gs_fcat- 字段名称='MTART'。
gs_fcat-tabname ='IT_OUTPUT'。
gs_fcat-seltext_m ='材料类型'。
gs_fcat-outputlen ='12'。
将gs_fcat附加到gt_fcat。
>清除gs_fcat。
gs_fcat-col_pos = 4.
gs_fcat-fieldname ='CHARG'。
gs_fcat-tabname ='IT_OUTPUT'。
gs_fcat-seltext_m ='批次'。 br> gs_fcat-outputlen ='12'。
追加gs_fcat至gt_fcat。
清除gs_fcat。
gs_fcat-col_pos =5。
gs_fcat-fieldname ='WERKS'。
gs_fcat-tabname ='IT_OUTPUT'。
gs_fcat-seltext_m ='Plant'。
gs_fcat-outputlen ='12'
APPEND将gs_fcat添加到gt_fcat。
清除gs_fcat。
gs_fcat-col_pos =6。
gs_fcat-fieldname ='LGORT'。
gs_fcat-tabname ='IT_OUTPUT'。< br> gs_fcat-seltext_m ='存储位置'。
gs_fcat-outputlen ='12'。
将gs_fcat添加到gt_fcat。
清除gs_fcat。
gs_fcat-col_pos = 7 。
gs_fcat-fieldname ='HSDAT'。
gs_fcat-tabname ='IT_OUTPUT'。
gs_fcat-seltext_m ='制造日期'。
gs_fcat-outputlen ='12'。
APPEND gs_fcat TO gt_fcat。
清除gs_fcat。
gs_fcat-col_pos =8。
gs_fcat-fieldname ='VFDAT'。
gs_fcat-tabname ='IT_OUTPUT'。
gs_fcat-seltext_m ='到期日期'。
gs_fcat-outputlen ='12'。
追加gs_fcat至gt_fcat。
清除gs_fcat。
gs_fcat-col_pos =9。
gs_fcat-fieldname = 'QNDAT'。
gs_fcat-tabname ='IT_OUTPUT'。
gs_fcat-seltext_m ='下次检验日期'。
gs_fcat-outputlen ='12'。
将gs_fcat附加到gt_fcat。
清除gs_fcat。
gs_fcat-col_pos =10。
gs_fcat-fieldname ='CLAB S'。
gs_fcat-tabname ='IT_OUTPUT'。
gs_fcat-seltext_m ='批次数量'。
gs_fcat-outputlen ='12'。
追加gs_fcat至gt_fcat。
清除gs_fcat 。
ENDFORM。
*&--------------------------------- ------------------------------------ *
*&FORM build_HEADER
*&- -------------------------------------------------- ------------------ *
* alv
*的构建标头* ------------------- -------------------------------------------------- -*
FORM页面顶部。
*&------------------------------ --------------------------------------- *
*&常量声明
*&------------------------------------------------ --------------------- *
常量:lc_s类型c值'S',
lc_h类型c值'H'。
< br> *&---------------------------------------------- ----------------------- *
*&本地数据声明
*&------------- -------------------------------------------------- ------ *
DATA:lt_header类型slis_t_listheader,
ls_header类型slis_listheader,
l v_to(2)类型c,
lv_count类型i。
* ----------------------- ---------
*标题
* -------------------------------- -
ls_header-typ ='H'。
ls_header-info ='批处理信息报告'。
将ls_header附加到lt_header。
清除ls_header。
* ---- ----------------------------
*/..追加记录编号
* ------ ----------------------------
描述表it_output行lv_count。
* lv_count =行(it_output)。
*
ls_header-typ = lc_s。
ls_header-key ='记录数:'。
ls_header-info = lv_count。
附录ls_header TO lt_header 。
CLEAR ls_header。
调用功能'REUSE_ALV_COMMENTARY_WRITE'
导出
it_list_commentary = lt_header。
CLEAR lt_header。
ENDFORM。
此致
Hamza
你好 Kawish Nadeem
始终避免在循环中执行SELECT SINGLE。 替换以下代码:
与此:
如果在SELECT语句之前定义LT_MAKTX,LT_MTART,LT_QNDAT和LT_CLABS内部表并将它们定义为已排序/已哈希,则可以使性能更好。
亲切的问候,
Mateusz
您应该首先学习如何使用SAT定位有问题的语句。
Hello Kawish,
请务必遵循有关如何加快SELECT语句速度的建议(如Frederic和Sandra所述,SAT是一个不错的起点),但是当它要显示大量记录时,我经历过REUSE_ALV_GRID_DISPLAY会变慢。
看看哪个部分在消耗更多时间,提取数据或显示数据?
Kawish Nadeem ,
请使用CODE Option发布代码
我记得在团队建设中有一场比赛。 我们需要优化将纸牌游戏放在桌子上的方式。
最后,领导者问我:"您确定已经优化了真正需要花费的时间吗?"
在优化中总是如此,首先分析了需要花费的时间,然后 什么可以优化。 而不是花时间进行不必要的重构。
亲爱的 Mateusz Adamus ,
问题出在这一行。 现在工作正常。 非常感谢您的帮助!
一周热门 更多>