0

我需要一些帮助来解决以下问题。我目前有一个对话框屏幕,其中包含一个用户可以输入数字的字段。这个数字对应于我制作的数据库表中的一个 ID 字段(使用 se/11)。我想在第二个屏幕上显示具有相应 ID 的所有字段的内容(因此只有表格的一行)。用户还应该能够编辑字段中的信息,并且在保存后,这些更改应该在表格本身中可见。归结为我想通过对话框屏幕动态更改返回行的内容。我知道我必须使用表格控件,但除此之外我不知所措(我对 ABAP 很陌生)。

这是桌子

屏幕 1 用户可以输入对应SEQNR于表格中的数字

在屏幕 1 上按 F8 时,我想进入第二个屏幕,其中包含 的人的信息,SEQNR = 1换句话说,应该只出现这一行:

用户应该能够编辑此行中的信息。当他单击“保存”时,应在表格本身中更新已编辑的信息。

到目前为止,我只制作了一个标准的第二个屏幕,其中我在 Screen Painter 中为上面的表格添加了一个表格控件。我将此控件添加到我的 DIALOG_TOP:

PROGRAM TAAK1.

DATA: OK_CODE TYPE sy-ucomm,
      ls_table TYPE TABEL1,
      SEQNR_TEXTFIELD TYPE i,
      TXT_STATUS(25) TYPE c,
      it_table LIKE TABEL1 OCCURS 0 WITH HEADER LINE.

TABLES: TABEL1.

CONTROLS: TABLE_CONTROL TYPE TABLEVIEW USING SCREEN 200.

除了标准的 PBO 和 PAI 模块之外,我没有屏幕 2 的代码。屏幕 1 的代码如下所示。

MODULE USER_COMMAND_0100 INPUT.

  CASE OK_CODE.

WHEN 'CHECKID'.
  SELECT SINGLE * FROM TABEL1 WHERE SEQNR EQ SEQNR_TEXTFIELD.
    IF sy-subrc EQ 0.
      TXT_STATUS = 'ID BESTAAT'.
    ELSE.
      TXT_STATUS = 'ID BESTAAT NIET'.
    ENDIF.
    IF TXT_STATUS = 'ID BESTAAT'.
      SELECT * FROM TABEL1 INTO ls_table WHERE SEQNR EQ SEQNR_TEXTFIELD.
      ENDSELECT.
    ENDIF.

WHEN 'EXEC'.
  CLEAR OK_CODE.
  SET SCREEN 200.
  LEAVE SCREEN.

WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
  LEAVE PROGRAM.



 ENDCASE.

ENDMODULE.

我基本上检查表中是否存在 Seqnr。如果是这样,我将相应的行存储在我在 DIALOG_TOP 中定义的本地结构中。

4

1 回答 1

2

使用 SM30 视图可能更容易且耗时更少。您可以创建自定义事务以维护正确的授权。此外,您可以根据自己的喜好调整屏幕(参见生成的功能组的代码)。

更多信息在这里:

于 2016-12-21T10:45:14.480 回答