2020-08-23 14:08发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,我的表格控件有问题
我已经做了一个表格控件,其中所有记录都以禁用模式显示。
我想要的是我选择的哪一行,当我按Edit时,只启用该行。
我该如何做到这一点。 请发送编码。
积分将得到奖励。
问候。
主持人备注:
请使用有意义的主题行
编辑:Durairaj Athavan Raja,2008年6月4日上午10:40
嗨,
当前屏幕的所有字段及其属性存储在系统表SCREEN中。
LOOP AT SCREEN语句将该信息放置在系统表的标题行中。
如果要更改属性,必须使用MODIFY SCREEN放回更改的标题行。 但是,只能在屏幕的PBO模块中执行此操作。
如果将此语句用于步进循环处理,则信息(以及所有更改)仅适用于当前的步进循环行。 在步骤循环处理之外,步骤循环字段的信息适用于整列。
您还可以使用此循环语句在表控件的循环处理中修改字段。 与步进循环不同,在循环之前进行的修改不起作用,因为系统从表视图的列表中获取列的初始值。
例如。
环绕屏幕。
如果不是I_USSEED是初始的并且
I_USSEED-PROCESSED_FLAG ='X'。
如果是屏幕名称EQ'I_USSEED-CHANGE'。
SCREEN-INPUT = 1。
修改屏幕。
ELSE。
SCREEN-INPUT = 0。
ENDIF。
当单击"更改"选项时,&
记录在Frgt触发器表中不存在
用list_flag替换trig_check的检查
,然后从2个If语句更改为嵌套的If/Else。
如果I_USSEED-CHANGE_CHECK EQ为'X'。 " AND
如果i_usseed-list_flag ='S'。 简短
将屏幕名称检查替换为组检查
如果screen-group2 ='001'。
其他。
endif。
*-单击更改选项时,&
*-Frgt触发器表中存在记录
*将对屏幕名称的检查替换为对组的检查
如果screen-group3 ='001'。
endif。 "正在检查list_flag 04/23/07
ENDIF。 "轻点change_check
ELSE。 " chse usseed not init
已处理标记= X
ENDIF。 " chse usseed not init and processing_flag = X
ENDLOOP。
请尝试以下代码。
TYPES:开始于t_0001,
盒TYPE c,
pernr TYPE pa0001-pernr,
endda TYPE pa0001-endda,
begda TYPE pa0001-begda,
t_0001结束,
t_0001的tt_0001类型标准表。
数据:it_0001类型tt_0001。
DATA:ok_code类型sy-ucomm,
save_ok TYPE sy-ucomm,
第TYPE I行,
g_tabctrl_lines类型i。
数据:wa_0001类型t_0001。
DATA:p_mark(3)类型c值" BOX"。
控件:使用屏幕100的Tabctrl类型表格视图。
MODULE get_init_data输出。
如果it_0001 []是初始的。
SELECT pernr
endda
begda
来自pa0001
进入表it_0001的对应字段
最多10行
在哪里结束GE sydatum
和begda LE sy-datum。
ENDMODULE。 " get_init_data输出
MODULE status_0100 OUTPUT。
设置PF-STATUS'ZSTAT0100'。
设置标题栏" ZTITEL"。
描述表it_0001行。
tabctrl-lines =行。
ENDMODULE。 " STATUS_0100输出
MODULE modiy_pbo_screen输出。
环视屏幕。
如果screen-group1 ='MOD'。
屏幕输入= 0。
如果save_ok ='CHG'。
如果wa_0001-box不初始化
AND screen-group2 ='CHG'。
屏幕输入= 1。
ENDMODULE。 " modiy_pbo_screen输出
模组tc_lines输出。
g_tabctrl_lines = sy-loopc。
ENDMODULE。 " tc_lines输出
模块退出输入。
save_ok = ok_code。
清除ok_code。
CASE save_ok。
当"返回"时。
离开计划。
退出时。
"取消"。
结束。
ENDMODULE。 "退出输入
MODULE Modify_tc_table INPUT。
从wa_0001索引tabctrl-current_line修改it_0001。
ENDMODULE。 " Modify_tc_table INPUT
MODULE user_command_0100输入。
使用'TABCTRL'来执行user_ok_tc
'IT_0001'
p_mark
更改ok_code。
ENDMODULE。 " user_command_0100输入
FORM user_ok_tc使用p_tc_name TYPE dynfnam
p_table_name
p_mark_name
更改p_ok类型sy-ucomm。
save_ok = p_ok。
当" CHG"时。
清除p_ok。
ENDFORM。
* ------屏幕的流逻辑。
输出前的过程。
模块get_init_data。
模块状态_0100。
使用控制tabctrl游标将其循环到it_0001到wa_0001
tabctrl-current_line。
模块modiy_pbo_screen。
模块tc_lines。
输入后处理。
在EXIT-COMMAND中退出模块。
在it_0001处循环播放。
模块Modify_tc_table。
MODULE user_command_0100。
您可以使用语句LOOP AT spfli_tab并将其与控制flight_tab一起转换为spfli。
示例:
在输出之前进行处理。模块化prepare_tab。将spfli_tab放到带有控制flight_tab的spfli中。
模块disable_row。 "您可以在屏幕上的语句循环和screen-input = 0的情况下,在模块disable_row中编写逻辑。
ENDLOOP。输入后处理。在spfli_tab上循环。 MODULE Modify_tab。 ENDLOOP。
文档:
https://帮助。 sap.com/doc/abapdocu_750_index_htm/7.50/zh-CN/dynploop.htm#!ABAP_VARIANT_1@1@
最多设置5个标签!
嗨,
当前屏幕的所有字段及其属性存储在系统表SCREEN中。
LOOP AT SCREEN语句将该信息放置在系统表的标题行中。
如果要更改属性,必须使用MODIFY SCREEN放回更改的标题行。 但是,只能在屏幕的PBO模块中执行此操作。
如果将此语句用于步进循环处理,则信息(以及所有更改)仅适用于当前的步进循环行。 在步骤循环处理之外,步骤循环字段的信息适用于整列。
您还可以使用此循环语句在表控件的循环处理中修改字段。 与步进循环不同,在循环之前进行的修改不起作用,因为系统从表视图的列表中获取列的初始值。
例如。
环绕屏幕。
如果不是I_USSEED是初始的并且
I_USSEED-PROCESSED_FLAG ='X'。
如果是屏幕名称EQ'I_USSEED-CHANGE'。
SCREEN-INPUT = 1。
修改屏幕。
ELSE。
SCREEN-INPUT = 0。
修改屏幕。
ENDIF。
当单击"更改"选项时,&
记录在Frgt触发器表中不存在
用list_flag替换trig_check的检查
,然后从2个If语句更改为嵌套的If/Else。
如果I_USSEED-CHANGE_CHECK EQ为'X'。 " AND
如果i_usseed-list_flag ='S'。 简短
将屏幕名称检查替换为组检查
如果screen-group2 ='001'。
SCREEN-INPUT = 1。
其他。
SCREEN-INPUT = 0。
endif。
修改屏幕。
*-单击更改选项时,&
*-Frgt触发器表中存在记录
其他。
*将对屏幕名称的检查替换为对组的检查
如果screen-group3 ='001'。
SCREEN-INPUT = 1。
其他。
SCREEN-INPUT = 0。
endif。
修改屏幕。
endif。 "正在检查list_flag 04/23/07
ENDIF。 "轻点change_check
ELSE。 " chse usseed not init
已处理标记= X
SCREEN-INPUT = 0。
修改屏幕。
ENDIF。 " chse usseed not init and processing_flag = X
ENDLOOP。
嗨,
请尝试以下代码。
TYPES:开始于t_0001,
盒TYPE c,
pernr TYPE pa0001-pernr,
endda TYPE pa0001-endda,
begda TYPE pa0001-begda,
t_0001结束,
t_0001的tt_0001类型标准表。
数据:it_0001类型tt_0001。
DATA:ok_code类型sy-ucomm,
save_ok TYPE sy-ucomm,
第TYPE I行,
g_tabctrl_lines类型i。
数据:wa_0001类型t_0001。
DATA:p_mark(3)类型c值" BOX"。
控件:使用屏幕100的Tabctrl类型表格视图。
MODULE get_init_data输出。
如果it_0001 []是初始的。
SELECT pernr
endda
begda
来自pa0001
进入表it_0001的对应字段
最多10行
在哪里结束GE sydatum
和begda LE sy-datum。
ENDIF。
ENDMODULE。 " get_init_data输出
MODULE status_0100 OUTPUT。
设置PF-STATUS'ZSTAT0100'。
设置标题栏" ZTITEL"。
描述表it_0001行。
tabctrl-lines =行。
ENDMODULE。 " STATUS_0100输出
MODULE modiy_pbo_screen输出。
环视屏幕。
如果screen-group1 ='MOD'。
屏幕输入= 0。
修改屏幕。
ENDIF。
如果save_ok ='CHG'。
如果wa_0001-box不初始化
AND screen-group2 ='CHG'。
屏幕输入= 1。
修改屏幕。
ENDIF。
ENDIF。
ENDLOOP。
ENDMODULE。 " modiy_pbo_screen输出
模组tc_lines输出。
g_tabctrl_lines = sy-loopc。
ENDMODULE。 " tc_lines输出
模块退出输入。
save_ok = ok_code。
清除ok_code。
CASE save_ok。
当"返回"时。
离开计划。
退出时。
离开计划。
"取消"。
离开计划。
结束。
ENDMODULE。 "退出输入
MODULE Modify_tc_table INPUT。
从wa_0001索引tabctrl-current_line修改it_0001。
ENDMODULE。 " Modify_tc_table INPUT
MODULE user_command_0100输入。
使用'TABCTRL'来执行user_ok_tc
'IT_0001'
p_mark
更改ok_code。
ENDMODULE。 " user_command_0100输入
FORM user_ok_tc使用p_tc_name TYPE dynfnam
p_table_name
p_mark_name
更改p_ok类型sy-ucomm。
save_ok = p_ok。
CASE save_ok。
当" CHG"时。
清除p_ok。
结束。
ENDFORM。
* ------屏幕的流逻辑。
输出前的过程。
模块get_init_data。
模块状态_0100。
使用控制tabctrl游标将其循环到it_0001到wa_0001
tabctrl-current_line。
模块modiy_pbo_screen。
模块tc_lines。
ENDLOOP。
输入后处理。
在EXIT-COMMAND中退出模块。
在it_0001处循环播放。
模块Modify_tc_table。
ENDLOOP。
MODULE user_command_0100。
您可以使用语句LOOP AT spfli_tab并将其与控制flight_tab一起转换为spfli。
示例:
在输出之前进行处理。
模块化prepare_tab。
将spfli_tab放到带有控制flight_tab的spfli中。
模块disable_row。 "您可以在屏幕上的语句循环和screen-input = 0的情况下,在模块disable_row中编写逻辑。
ENDLOOP。
输入后处理。
在spfli_tab上循环。
MODULE Modify_tab。
ENDLOOP。
文档:
https://帮助。 sap.com/doc/abapdocu_750_index_htm/7.50/zh-CN/dynploop.htm#!ABAP_VARIANT_1@1@
一周热门 更多>