使用容器时发生转储,有人可以帮助我解决问题吗?

2020-09-16 01:56发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) REPORT ZTEST...

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

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


 REPORT ZTEST103。
 桌子EKKO。

 *表声明
 类型:开始于TY_EKKO,
          EBELN TYPE EBELN,
          AEDAT TYPE ERDAT,
          LIFNR型ELIFN,
          SPRAS TYPE SPRAS,
        TY_EKKO结尾。

 *内部表声明
 数据:TY_EKKO的LT_EKKO类型表,
        LS_EKKO类型TY_EKKO。

 * cl_salv声明
 数据:ALV类型引用到CL_SALV_TABLE,
        消息类型参考CX_SALV_MSG。

 *容器声明
 数据:G_CUSTOM_CONTAINER类型参考CL_GUI_CUSTOM_CONTAINER,
        G_TOP_CONTAINER TYPE REF CL_GUI_CONTAINER,
        G_BOTTOM_CONTAINER类型参考CL_GUI_CONTAINER。

 *设置pf状态声明
 引用到CL_SALV_FUNCTIONS_LIST的数据LO_FUNCTIONS类型。

 *选择声明
 引用到CL_SALV_SELECTIONS的数据LR_SELECTIONS类型。

 引用到CL_SALV_COLUMNS_TABLE的数据LR_COLUMNS类型。

 数据:LT_ROWS类型SALV_T_ROW,
        LS_ROWS类型INT4。

 执行FETCH_DATA。
 使用'G_TOP_CONTAINER'LT_EKKO进行初始化。
 执行选择。
 进行DISPLAY_ALV。
 进行DISPLAY_SELECTION。

 *呼叫画面100。

 表格FETCH_DATA。
   SELECT EBELN AEDAT LIFNR SPRAS
      从EKKO
      进入表LT_EKKO
      最多10行。
 ENDFORM。  " FETCH_DATA

 使用CON_NAME T_TAB初始化表格。
   创建对象G_CUSTOM_CONTAINER
     出口
       CONTAINER_NAME = CON_NAME。

   尝试。
     CL_SALV_TABLE => FACTORY(
       出口
         R_CONTAINER = G_CUSTOM_CONTAINER" <---------------
         LIST_DISPLAY ='X'
       输入
         R_SALV_TABLE = ALV
       改变
         T_TABLE = T_TAB)。
     LO_FUNCTIONS = ALV-> GET_FUNCTIONS()。
     LO_FUNCTIONS-> SET_ALL(ABAP_TRUE)。
   将CX_SALV_MSG捕获到消息中。
       错误处理
   ENDTRY。
 ENDFORM。 初始化

 表格选择。
   "列选择
   LR_SELECTIONS = ALV-> GET_SELECTIONS()。  " <---------------------------
   LR_SELECTIONS-> SET_SELECTION_MODE(IF_SALV_C_SELECTION_MODE => ROW_COLUMN)。

   LR_COLUMNS = ALV-> GET_COLUMNS()。
   LR_COLUMNS-> SET_OPTIMIZE(ABAP_TRUE)。
 ENDFORM。  "选择

 表格DISPLAY_ALV。
   呼叫方法ALV->显示。
 ENDFORM。  " DISPLAY_ALV

 表格DISPLAY_SELECTION。
   LT_ROWS = LR_SELECTIONS-> GET_SELECTED_ROWS()。
 *显示选定的行。

   将LT_ROWS循环到LS_ROWS。
     将LT_EKKO表读入LS_EKKO索引LS_ROWS。
     写:/LS_EKKO-EBELN,
              LS_EKKO-AEDAT,
              LS_EKKO-LIFNR,
              LS_EKKO-SPRAS。
    结局。
 ENDFORM。  " DISPLAY_SELECTION
 

这就是我想要做的。

1。 检索用户选择的行。

2。 在同一屏幕上有多个lv。

3。 问题:单独运行,但是当我结合使用时会遇到运行时错误。

4。 我已暂时删除第二个lv。 我计划在上述两件事协同工作后添加它。(而且我还在开发中)

转储:

发生异常,下面将对其进行详细说明。 分配给类'CX_SY_REF_IS_INITIAL'的异​​常未在过程" SELECTION""(FORM)"中捕获,也没有通过RAISING子句传播。 由于过程的调用者无法预期会发生异常,因此当前程序将终止。 发生异常的原因是:您试图使用'NULL'对象引用(指向'nothing')访问组件(变量:" ALV")。 对象引用必须指向对象(类的实例),然后才能用于访问组件。 永远不会设置引用,或者使用CLEAR语句将其设置为" NULL"。

4条回答
骆驼绵羊
2020-09-16 02:11 .采纳回答

好吧,错误是您没有创建ALV对象。

您所指的容器在逻辑流程中不存在,因为我猜它在屏幕100中。

您应该移动表格

使用" G_TOP_CONTAINER" LT_EKKO进行初始化。

 执行选择。

  进行DISPLAY_ALV。

 PERFORM DISPLAY_SELECTION。
在屏幕的PBO中

并调用它(您已对其进行注释)。
问题是:为什么在SALV中使用自定义容器? SALV生来就是避免这种事情的发生,并建立了快速简便的ALV网格。
此外,您应该遵循 Matthew Billingham 的 建议。

一周热门 更多>