为什么在AT SELECTION SCREEN OUTPUT中未初始化内联声明的itab?

Jag*_*ger 1 sap abap

我有以下代码。

REPORT YYY.

TYPES: BEGIN OF t_test,
    test TYPE c LENGTH 4,
  END OF t_test,
  tth_test TYPE HASHED TABLE OF t_test WITH UNIQUE KEY test.

DATA(g_tab_test) = VALUE tth_test( ( test = 'AAAA' ) ( test = 'BBBB' )
  ( test = 'CCCC' ) ( test = 'DDDD' ) ).

PARAMETERS:
  p_x1 TYPE abap_bool,
  p_x2 TYPE abap_bool,
  p_x3 TYPE abap_bool.

CLASS lcl_main DEFINITION FINAL CREATE PRIVATE.
  PUBLIC SECTION.
    CLASS-METHODS:
      main.
ENDCLASS.

CLASS lcl_main IMPLEMENTATION.
  METHOD main.
  ENDMETHOD.
ENDCLASS.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT screen.
    MODIFY SCREEN.
  ENDLOOP.
  BREAK-POINT. "<-- why is the table g_tab_test not initialsed here yet?

AT SELECTION-SCREEN ON p_x1.
  ASSERT 1 = 1.
Run Code Online (Sandbox Code Playgroud)

尽管有定义,插入点的表AT SELECTION-SCREEN OUTPUT还是空的。为什么会这样,它是否有记录的行为?

Józ*_*zai 7

我相信这是有据可查的行为。

https://help.sap.com/doc/abapdocu_751_index_htm/7.51/zh-CN/abapstart-of-selection.htm

在可执行程序中,以下语句分配给隐式START-OF-SELECTION事件块,如果存在,则由显式START-OF-SELECTION事件块插入:

所有不是声明的并且在第一个显式处理块之前列出的所有语句。

程序中的所有功能性语句(如果不包含任何显式的处理块),

该代码“在空中”,而不是在确切事件下显式显示,这意味着内部表的初始化将仅在隐式的情况下运行START-OF-SELECTION

该代码段必须位于INITIALIZATION(或LOAD-OF-PROGRAM根据实际需要)