点击此处---> 群内免费提供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"。
好吧,错误是您没有创建ALV对象。
您所指的容器在逻辑流程中不存在,因为我猜它在屏幕100中。
您应该移动表格
在屏幕的PBO中并调用它(您已对其进行注释)。
问题是:为什么在SALV中使用自定义容器? SALV生来就是避免这种事情的发生,并建立了快速简便的ALV网格。
此外,您应该遵循 Matthew Billingham 的 建议。
将来,请使用编辑器中标题为"代码"的按钮将代码放入代码块中。 它使您的代码更易于阅读。 这次我为您做了。
还请注意您的代码存在以下问题。
1。 TABLES语句已过时
2。 FORM/PERFORM语句已过时
3。 您已经声明了全局变量,但在其前缀中使用了L。 L表示局部。 尽管您仅在表单中使用它们,但它们仍可全局使用。 局部变量应在模块化单元内定义。 (在这种情况下,是过时的FORM)。 如果您遵循DSAG或SAP准则,则无论如何都不会使用输入前缀。
此评论不是为了解决您的问题,而是为了改善您的编程。
感谢您为我指明了正确的方向。 我一定会根据您的建议进行工作。
感谢您的投入。 我会按照您的建议。
一周热门 更多>