表控件-编辑行

2020-08-23 14:08发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,我的表格控件有问题

我已经做了一个表格控件,其中所有记录都以禁用模式显示。

我想要的是我选择的哪一行,当我按Edit时,只启用该行。

我该如何做到这一点。 请发送编码。

积分将得到奖励。

问候。

主持人备注:

请使用有意义的主题行

编辑:Durairaj Athavan Raja,2008年6月4日上午10:40

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,我的表格控件有问题

我已经做了一个表格控件,其中所有记录都以禁用模式显示。

我想要的是我选择的哪一行,当我按Edit时,只启用该行。

我该如何做到这一点。 请发送编码。

积分将得到奖励。

问候。

主持人备注:

请使用有意义的主题行

编辑:Durairaj Athavan Raja,2008年6月4日上午10:40

付费偷看设置
发送
3条回答
xfwsx85
1楼 · 2020-08-23 14:54.采纳回答

嗨,

当前屏幕的所有字段及其属性存储在系统表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。

huskylover
2楼-- · 2020-08-23 14:43

嗨,

请尝试以下代码。

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。

CJones
3楼-- · 2020-08-23 15:00

您可以使用语句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@

一周热门 更多>