2

假设我有一个带有两个参数的选择屏幕块。我想根据用户在第一个中输入的内容动态填充第二个参数,例如通过查询表来查找参数 1 中关键字段的预期值。

例如,假设我有一个程序对订单号 ( p_aufnr) 和 WBS 元素 ( p_wbs) 的组合执行某些操作。我可以从 AUFK 表上的 PSPEL 字段中确定其中一个,而不是要求用户提供两者。但是,我仍然想在用户输入订单号后向用户显示此字段,以便他可以验证 WBS 元素是否正确。

我已经设法通过使用AT SELECTION SCREEN ON p_aufnr事件为p_wbs. 当用户按下回车时处理此事件。但是,我只能让它工作一次。因此,如果用户输入一个订单号,从检索到的 WBS 元素中意识到他犯了一个错误并对其进行了更改,则第二个参数永远不会更改。即使AT SELECTION SCREEN在调试器中处理了事件,参数也不会更新。

我不应该在我的场景中使用这个事件吗?如果是这样,我将如何实现这种动态选择屏幕?

忘记添加代码示例。以下报告说明了我的问题:在输入一个值p_netw并按 Enter 后,p_wbs 将填充值 1。但是,如果您再次按 enter,AT SELECTION-SCREEN ON例程将被处理,但 p_wbs 的值不会更新,lv_count而是。

DATA: lv_count    TYPE i.

SELECTION-SCREEN BEGIN OF BLOCK main.
PARAMETERS: p_netw    TYPE aufnr OBLIGATORY MODIF ID auf.
PARAMETERS: p_wbs     TYPE i MODIF ID psp.
SELECTION-SCREEN END OF BLOCK   main.

AT SELECTION-SCREEN ON p_netw.
  ADD 1 TO lv_count.
  p_wbs = lv_count.

START-OF-SELECTION.
  PERFORM main.


FORM main.
  WRITE: 'The value reached ', lv_count.
ENDFORM.
4

2 回答 2

4

显然,如果您更新字段特定块中的字段,则数据不会写回屏幕。如果将字段更新从全局事件AT SELECTION-SCREEN ON p_netw移至全局AT SELECTION-SCREEN事件,它会起作用。不过,不要问我为什么 - 这似乎是一个未记录的系统行为的案例......

DATA: lv_count    TYPE i.

SELECTION-SCREEN BEGIN OF BLOCK main.
PARAMETERS: p_netw    TYPE aufnr OBLIGATORY MODIF ID auf.
PARAMETERS: p_wbs     TYPE i MODIF ID psp.
SELECTION-SCREEN END OF BLOCK   main.

AT SELECTION-SCREEN ON p_netw.
  ADD 1 TO lv_count.

AT SELECTION-SCREEN.
  p_wbs = lv_count.
于 2014-04-09T10:23:53.897 回答
0

您需要在屏幕上使用 PAI(输入后处理)模块,然后获取新的 p_aufnr 并找到适当的 p_wbs - 可能与您在选择屏幕事件时完全一样。然后您将 CALL SCREEN ### <-- 您的屏幕编号以在屏幕上显示数据。没有任何代码可以解决这一切,我可以提供帮助。

于 2014-04-09T04:38:54.280 回答