凡尘clsoho™的博客

E-mail & MSN: clsoho@hotmail.com
QQ1超级群: <101817641已满> QQ2群:<110722895已满>
QQ3超级群:<23765855>QQ4超级群:<85338969>

最近在ABAP时,多次用到了table control,当然,也多次遇到了问题,在这里就总结一下,做一下回顾。
问题1.table control 的初始化
在可编辑的table control中,需要对TC的行进行初始化,有两种方法(具我所知~_~)可以完成TC初始化,一种是

在屏幕逻辑流的TC行处理MODULE中进行行初始化。
  LOOP AT   itab
       INTO wa
       WITH CONTROL zwx_9001
       CURSOR zwx_9001-current_line.
    MODULE zwx_9001_get_lines.
MODULE zwx_9001_get_lines OUTPUT.
  g_zwx_9001_lines = sy-loopc.
*在这里用APPEND完成TC的初始化
  APPEND wa TO itab.
ENDMODULE.        
但是在使用这种方法的时候也遇到了问题,就是初始化的过程中会将TC中的值重复显示。也就是每进入屏幕一次

就会多一屏相同的内容到TC后面的行中。原来认为是工作区没有清空,但是清空后仍然有这种问题,我也正在测

试,这种方法应该也是可行的。
另一种方法就是在屏幕PBO开始的时候附加初始行。
PROCESS BEFORE OUTPUT.
*&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'ZWX_9001'
  MODULE zwx_9001_initial. *这里即是对TC进行初始化的MODULE
  MODULE zwx_9001_change_tc_attr.
MODULE zwx_9001_initial OUTPUT.
  DO 10 TIMES. *添加的初始行数,这个可以根据自己的需要进行更改。
    APPEND INITIAL LINE TO itab.
  ENDDO.
ENDMODULE.
这种方法可能是使用比较广泛并且不容易出问题的。我也会继续学习其它的初始
化TC的方法,以后会继续增加。

在此特别感谢yue_shuai@msn.cn
问题2.table control 的输入输出控制
在ABAP的时候,遇到了需要将TC的某些行的某些字段控制了不可输入或者不可输出
的格式,难到了我。后来在群中经过高手指点,算是有了点眉目。
实现之前需要先介绍一下TC。
其实对于一个table control 而言,每一行都是一个屏幕。如果要控制某些字段,也就是控制
这个屏幕上的某些字段,这样实现起来就方便多了。
在屏幕逻辑流的TC行处理MODULE中添加屏幕MODIFY就可以了。
  LOOP AT   itab
       INTO wa
       WITH CONTROL zwx_9001
       CURSOR zwx_9001-current_line.
    MODULE zwx_9001_get_lines.
MODULE zwx_9002_get_lines OUTPUT.
  g_zwx_9002_lines = sy-loopc .
*下面即为控制代码
当然,如果你不想所有行的某个字段都不能输出或输入,只需要在这里加一个判断就行了
zwx_9002-current_line保存着当前处理的行索引,也可以理解为当前的屏幕,

判断当前处理的是哪一行(也即哪个屏幕),然后再进行控制。
    LOOP AT SCREEN.
      IF screen-name = 'NAME'.*这里的NAME就是你想要禁止输入或者禁止输出的字段
        screen-input = ''.
        screen-output = ''.
      ENDIF.
      MODIFY SCREEN .
    ENDLOOP.
ENDMODULE.   

再进行TC的时候会发现,自己想控制的字段已经被控制了

希望对大家有所帮助!
在此特别感谢QQ群:4204920中的ken哥。

posted on 2010-03-08 12:01  凡尘clsoho  阅读(1845)  评论(0编辑  收藏  举报