面试问题整理1-ALV,数据处理,优化

一,报表alv:alv grid  ooalv  alv list

A,事件:

  • load-of-program
  • initializtion  
  • at selection-screenoutput
  • at selection-screen  
  • start-of-selection  
  • end-of-selection  
  • top-of-page  
  • end-of-page  
  • at line-selection  
  • at user-command

B,单元格可编辑:

整体可编辑gs_layoutedit ‘X’.

某列可编辑gt_fieldcatedit ‘X’.

单元格可编辑:只能使用REUSE_ALV_GRID_DISPLAY_LVC,并且还作以下一些设置:

cellstab TYPE lvc_t_styl,在输出内表中加上这一类型的列

先将所有单元格设置为可编辑状态

gt_fieldcatedit ‘X’.

DATAgt_cellstab TYPE lvc_t_styl WITH HEADER LINE.

  “再将原本可编辑的单元格切换到不可编辑样式。注:这里只是样式的切换,不能仅仅使用cl_gui_alv_grid=>mc_style_enabled来将单元格设置为可编辑状态,单元格真正是否可编辑是由fieldcat-editlayout-edit来决定的,而仅设置为cl_gui_alv_grid=>mc_style_enabled是不可编辑的

gt_cellstabstyle = cl_gui_alv_grid=>mc_style_disabled.

   APPEND gt_cellstab.

gt_datacellstab gt_cellstab[].

gs_layoutstylefname ‘CELLSTAB’.数据内表中哪列为可编辑信息内表

 

C,单元格数据修改后立即自动刷新

 

单元格中的数据被修改后,将ALV单元格中的数据立即刷新到ABAP对应的内表中:

DATAG_GRID TYPE REF TO CL_GUI_ALV_GRID.

FORM USER_COMMAND USING UCOMM  LIKE SYUCOMM
                        RS_SELFIELD TYPE SLIS_SELFIELD.     “#EC CALLED
  DATAL_LINE  TYPE I,
        L_INDEX TYPE I.
  DATAL_VALID  TYPE CHAR01.
* 刷新ALV报表
  CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
    IMPORTING
      E_GRID G_GRID.
  CALL METHOD G_GRID->CHECK_CHANGED_DATA.
  CASE UCOMM.
    WHEN ‘CHANGE’.

*更改销售订单

      PERFORM CHANGE_SO_DATA .
    WHEN OTHERS.
  ENDCASE.
  RS_SELFIELDREFRESH    ‘X’.
  RS_SELFIELDCOL_STABLE ‘X’.
  RS_SELFIELDROW_STABLE ‘X’.
ENDFORM.                    “user_command

数据有效性验证事件:data_changed

种方式:

²按回车触发: i_event_id = cl_gui_alv_grid=>mc_event_enter

²单元格失去焦点: i_event_id = cl_gui_alv_grid=>mc_event_modifies

必须设置一种方式,要不然数据变化事件不会被触发事件

 

字段可编辑遇到的问题:

ALV 可编辑状态修改数字字段,保存后会自动减少1000倍

加一句,GT_FIELDCAT_0100-DECIMALS = 3. 就可以了

选择屏幕做搜索帮助

两种方式

1,SE11自建搜索帮助,然后选择屏幕字段参考

2,内表,函数F4IF_INT_TABLE_VALUE_REQUEST

 

二,程序优化:
              A,for all entries:注意1,in后面时候为空一定要判断,2,保证内表取出的数据有主键,排序去重,3,in后面内 
              表数据不能太大,4,这个语句虽然方便但是占内存,
              B,建正确的索引
              C,尽量减少数据库的访问,能一次取就一次取,尽量减少数据库的访问次数
              D,loop里尽量不要写select ,loop套loop的话要减少外层的循环次数,
              E,对于大表mseg,mkpf,lips等表尽量少用innerjoin,根据条件尽量少选更少的数据在内表处理。
              F,批量保存的是可以采用异步保存可以大大提高效率

给TA打赏
共{{data.count}}人
人已打赏
开发知识点

内表删除重复项

2022-11-21 16:28:02

测试下载

2021-11-24 15:12:36

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索