表格控制(Table Control)和步循环注意事项
1. 在layout设计器中放置的I/O field可以是来自dbtab,也可以是来自itab,其实是个screen可以识别的
2. screen 上放置的I/O field和其它控件如Table Control一定要和主程序中声明的名称一致,如果放置之前没有定义的field,将会出现runtime error或者根本无法激活.
3. 无论是触发滚动条还是向下按钮,都会触发PBO/PAI逻辑流.
4. 在屏幕表格中循环和在内表与屏幕表格中同时循环的区别
只在屏幕表格中循环,会以屏幕表格为主,在显示的时候需要使所要显示的内表适应屏幕,如果屏幕表格的行数比内表的行数多的话仍然会显示一些空行 如
// 逻辑流
LOOP WITH CONTROL CTRL1.
MODULE DISPLAY_CTRL1_101 .
ENDLOOP.
// 程序
READ TABLE IMAKT INDEX CTRL1-CURRENT_LINE.
IF SY-SUBRC = 0.
MAKT-SPRAS = IMAKT-SPRAS.
MAKT-MAKTX = IMAKT-MAKTX.
CTRL1-FLAG = IMAKT-CKBOX.
ENDIF.
在内表与屏幕表格中同时循环可以使屏幕表格和内表同时循环.不必严格控制内表要读取那一行(个人效率较前者要高,因为不用再次搜索和判断),而且,不会显示多于的空白行.
// 逻辑流
LOOP AT IMAKT WITH CONTROL CTRL1 CURSOR CTRL1-TOP_LINE.
MODULE DISPLAY_CTRL1_101 .
ENDLOOP.
// 程序
MAKT-SPRAS = IMAKT-SPRAS.
MAKT-MAKTX = IMAKT-MAKTX.
CTRL1-FLAG = IMAKT-CKBOX.
5. 在屏幕表格中放入内表 ( 工作区 ). 是屏幕表格和程序内表关联 .
l 所要放入的itab一定要使有表头的(其实屏幕要的是wa)
l 注意选择的时候要写入内表名称,选择后面的按钮
l 操作的时候直接modify那个内表系统就能自动识别user的更新.只是循环的时候要注意指针的运动,尽量使屏幕和内表一起循环.
l 由于屏幕表格和程序内表关联,所以在PAI中LOOP AT 的时候仍然可以使用屏幕表格的各种参数eg. index ctrl1-current_line
// 逻辑流(PAI)
LOOP AT IMAKT.
MODULE SET_LINE_COUNT_0901.
ENDLOOP.
// 程序
module SET_LINE_COUNT_0901 input
MODIFY IMAKT index ctrl1-current_line.