0

次の問題について助けが必要です。現在、ユーザーが数字を入力できるフィールドを含むダイアログ画面が 1 つあります。この番号は、(se/11 を使用して) 私が作成したデータベース テーブルの ID フィールドに対応しています。すべてのフィールドの内容 (テーブルの 1 行のみ) を対応する ID と共に 2 番目の画面に表示したいと考えています。ユーザーはフィールド内の情報も編集できる必要があり、保存後、それらの変更はテーブル自体に表示される必要があります。結局のところ、返された行の内容をダイアログ画面で動的に変更したいということです。テーブル コントロールを使用する必要があることはわかっていますが、それ以外は途方に暮れています (ABAP の初心者です)。

これがテーブルです

SEQNRユーザーが表に対応する番号を入力できる画面 1

画面 1 で F8 を押すと、次の画面に移動して、 を持つ人の情報が表示されSEQNR = 1ます。つまり、次の行だけが表示されます。

ユーザーは、この行の情報を編集できる必要があります。「保存」をクリックすると、編集された情報がテーブル自体で更新されます。

これまでのところ、スクリーン ペインタで上記のテーブルにテーブル コントロールを追加した、標準の 2 番目の画面のみを作成しました。このコントロールを 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 に答える