&引用;无法使用语句endclass“;激活本地类时
我正在尝试在abap中创建一个类及其定义和实现:&引用;无法使用语句endclass“;激活本地类时,class,abap,Class,Abap,我正在尝试在abap中创建一个类及其定义和实现: class ZCL_GUI_ALV_GRID_MERGE definition public final inheriting from CL_GUI_ALV_GRID create public . *"* public components of class ZCL_GUI_ALV_GRID_MERGE *"* do not include other source files here!!! public section.
class ZCL_GUI_ALV_GRID_MERGE definition
public
final
inheriting from CL_GUI_ALV_GRID
create public .
*"* public components of class ZCL_GUI_ALV_GRID_MERGE
*"* do not include other source files here!!!
public section.
methods Z_SET_MERGE_HORIZ
importing
ROW type I
changing
TAB_COL_MERGE type LVC_T_CO01 .
methods Z_SET_MERGE_VERT
importing
ROW type I
changing
TAB_COL_MERGE type LVC_T_CO01 .
methods Z_DISPLAY .
methods Z_SET_CELL_STYLE
importing
ROW type I optional
COL type I optional
STYLE type LVC_STYLE
STYLE2 type LVC_STYLE optional .
methods Z_SET_FIXED_COL_ROW
importing
COL type I
ROW type I .
methods Z_INIT_CELL_STYLES .
endclass.
class ZCL_GUI_ALV_GRID_MERGE implementation.
************************************************** **********************
* Method attributes. *
******************************************************************************** *************************
"Instantiation: Public
************************************************** ************************
method Z_SET_MERGE_HORIZ.
* ROW - Row whose columns are to be merged
* tab_col_merge - Columns to be merged
FIELD-SYMBOLS <fs_cols> TYPE lvc_s_co01.
FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.
DATA outputlen TYPE i.
SORT tab_col_merge.
* The columns to be merged
LOOP AT tab_col_merge ASSIGNING <fs_cols>.
* a few tests
if <fs_cols>-col_id le 0. continue. endif.
if <fs_cols>-outputlen le <fs_cols>-col_id. continue. endif.
outputlen = <fs_cols>-outputlen - <fs_cols>-col_id.
LOOP AT mt_data ASSIGNING <fs_data>
WHERE row_pos = row AND col_pos BETWEEN <fs_cols>-col_id AND <fs_cols>-outputlen.
* Set how far should be merged From column in length
* and that is begun at the 1 column
IF <fs_data>-col_pos = <fs_cols>-col_id.
<fs_data>-mergehoriz = outputlen.
* with all others, which zusammengehangeren
* the value out, since it comes from the 1. Column
* and the mergekennzeichen must also away!
ELSE.
CLEAR <fs_data>-mergehoriz.
CLEAR <fs_data>-value.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDMETHOD.
method Z_SET_MERGE_VERT.
* ROW - Row whose columns are to be merged
* tab_col_merge - Columns to be merged
FIELD-SYMBOLS <fs_cols> TYPE lvc_s_co01.
FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.
DATA outputlen TYPE i.
SORT tab_col_merge.
* The columns to be merged
LOOP AT tab_col_merge ASSIGNING <fs_cols>.
* a few tests
if <fs_cols>-col_id le 0. continue. endif.
if <fs_cols>-outputlen le <fs_cols>-col_id. continue. endif.
outputlen = <fs_cols>-outputlen - <fs_cols>-col_id.
LOOP AT mt_data ASSIGNING <fs_data>
WHERE row_pos = row AND
col_pos between <fs_cols>-col_id AND
<fs_cols>-outputlen.
* Set how far should be merged From column in length
* and that is begun at the 1 column
IF <fs_data>-col_pos = <fs_cols>-col_id.
<fs_data>-mergevert = outputlen.
* with all others, which zusammengehangeren
* the value out, since it comes from the 1. Column
* and the mergekennzeichen must also away!
ELSE.
CLEAR <fs_data>-mergevert.
CLEAR <fs_data>-value.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDMETHOD.
METHOD z_display.
DATA lv_stable TYPE lvc_s_stbl.
DATA lv_soft TYPE c.
**** Prepare refresh
* lv_stable-row = 'X'.
* lv_stable-col = 'X'.
* lv_soft = 'X'.
*
**** Refresh table because Z_SET_CELL_STYLE adds style-values
**** Refresh initializes mt_data
* CALL METHOD refresh_table_display
* EXPORTING
* is_stable = lv_stable
* i_soft_refresh = lv_soft
* EXCEPTIONS
* OTHERS = 1.
* Jetzt noch �bertragen der ge�nderten Daten
CALL METHOD me->set_data_table
CHANGING
data_table = mt_data[].
CALL METHOD set_auto_redraw
EXPORTING
enable = 1.
ENDMETHOD.
METHOD z_set_cell_style.
FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.
IF row IS INITIAL.
IF col IS INITIAL.
* Beides leer -> nichts zu tun.
EXIT.
ELSE.
* Nur Spalte setze komplette Spalte
LOOP AT mt_data ASSIGNING <fs_data>
WHERE col_pos = col.
<fs_data>-style = <fs_data>-style + style.
<fs_data>-style2 = <fs_data>-style2 + style2.
ENDLOOP.
ENDIF.
ELSE.
IF col IS INITIAL.
* Nur Zeile eingegeben -> komplette Zeile setzen
LOOP AT mt_data ASSIGNING <fs_data>
WHERE row_pos = row.
<fs_data>-style = <fs_data>-style + style.
<fs_data>-style2 = <fs_data>-style2 + style2.
ENDLOOP.
ELSE.
READ TABLE mt_data ASSIGNING <fs_data>
WITH KEY row_pos = row
col_pos = col.
IF sy-subrc EQ 0.
<fs_data>-style = <fs_data>-style + style.
<fs_data>-style2 = <fs_data>-style2 + style2.
ELSE.
EXIT.
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD.
method Z_SET_FIXED_COL_ROW.
me->set_fixed_cols( col ).
me->set_fixed_rows( row ).
endmethod.
METHOD z_init_cell_styles.
FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.
* Nur Spalte setze komplette Spalte
LOOP AT mt_data ASSIGNING <fs_data>.
<fs_data>-style = 0.
ENDLOOP.
ENDMETHOD.
endclass.
类ZCL\u GUI\u ALV\u GRID\u合并定义
公众的
最终的
从CL_GUI_ALV_网格继承
创建公共文件。
*“*ZCL_GUI_ALV_GRID_MERGE类的公共组件”
*“*此处不包括其他源文件!!!
公共部分。
方法Z_集_合并_水平
进口
第一类行
改变
表列合并类型LVC\U T\U CO01。
方法Z_集_合并_顶点
进口
第一类行
改变
表列合并类型LVC\U T\U CO01。
方法Z_显示。
方法Z_集_单元_样式
进口
行类型I可选
COL类型I可选
样式类型LVC_样式
STYLE2类型LVC_样式可选。
方法Z_集\固定\列\列
进口
Ⅰ型胶原
第一排。
方法Z_INIT_CELL_样式。
末级。
类ZCL\u GUI\u ALV\u GRID\u MERGE实现。
************************************************** **********************
*方法属性*
******************************************************************************** *************************
“实例化:公共
************************************************** ************************
方法Z_集_合并_水平。
*行-要合并其列的行
*tab\u col\u merge-要合并的列
lvc_s_co01型字段符号。
字段符号类型lvc_s_数据。
数据输出类型i。
排序选项卡\u列\u合并。
*要合并的列
在tab_col_merge赋值处循环。
*一些测试
if-col_id le 0。继续。endif。
if-outputlen le-col_id.continue.endif。
outputlen=-outputlen--col\u id。
mt_数据分配处的循环
其中row_pos=在-col_id和-outputlen之间的row和col_pos。
*设置从列合并的长度
*这是从第1列开始的
IF-col\u pos=-col\u id。
-mergehoriz=输出。
*和所有其他人一起,这就是祖萨门格汉格伦
*值输出,因为它来自1.列
*而肯泽琴也必须离开!
其他的
清除-合并Horiz。
清除-值。
恩迪夫。
结束循环。
结束循环。
ENDMETHOD。
方法Z_集合_合并_垂直。
*行-要合并其列的行
*tab\u col\u merge-要合并的列
lvc_s_co01型字段符号。
字段符号类型lvc_s_数据。
数据输出类型i。
排序选项卡\u列\u合并。
*要合并的列
在tab_col_merge赋值处循环。
*一些测试
if-col_id le 0。继续。endif。
if-outputlen le-col_id.continue.endif。
outputlen=-outputlen--col\u id。
mt_数据分配处的循环
其中row_pos=row和
COLU pos在-COLU id和之间
-输出。
*设置从列合并的长度
*这是从第1列开始的
IF-col\u pos=-col\u id。
-mergevert=outputlen。
*和所有其他人一起,这就是祖萨门格汉格伦
*值输出,因为它来自1.列
*而肯泽琴也必须离开!
其他的
清除-合并。
清除-值。
恩迪夫。
结束循环。
结束循环。
ENDMETHOD。
方法z_显示。
数据LVU稳定型lvc\U s\U stbl。
数据lv_软c型。
****准备刷新
*lv_稳定行='X'。
*lv_稳定列='X'。
*lv_soft='X'。
*
****刷新表格,因为Z_集合_单元格_样式会添加样式值
****刷新初始化mt_数据
*调用方法刷新\u表\u显示
*出口
*_稳定=lv_稳定吗
*i_soft_refresh=lv_soft
*例外情况
*其他=1。
*杰特诺奇�伯特拉根·德尔格�恩德滕达滕
调用方法me->设置数据表
改变
数据表=mt数据[]。
调用方法集\u自动\u重画
出口
启用=1。
ENDMETHOD。
方法z_集合_单元_样式。
字段符号类型lvc_s_数据。
如果行是首字母。
如果col是首字母。
*贝德斯·里尔->尼希茨·祖顿。
出口
其他的
*Nur Spalte setze komplette Spalte
mt_数据分配处的循环
其中col_pos=col。
-style=-style+style。
-style2=-style2+style2。
结束循环。
恩迪夫。
其他的
如果col是首字母。
*Nur Zeile eingegeben->Komplete Zeile setzen
mt_数据分配处的循环
其中row_pos=row。
-style=-style+style。
-style2=-style2+style2。
结束循环。
其他的
读取表mt_数据分配
带键行\u pos=行
col_pos=col。
如果sy subrc等式为0。
-style=-style+style。
-style2=-style2+style2。
其他的
出口
恩迪夫。
恩迪夫。
恩迪夫。
ENDMETHOD。
方法Z设置固定列。
me->设置固定列(列)。
me->设置固定行(行)。
endmethod。
方法z_init_cell_样式。
字段符号类型lvc_s_数据。
*Nur Spalte setze komplette Spalte
在mt_数据分配处循环。
-样式=0。
结束循环。
ENDMETHOD。
末级。
你看,我为另一个实现创建了两次类
我遇到了一个我无法解决的奇怪错误:
不能在当前环境中使用语句“endclass”。
但是,您可以使用类似的语句类
知道为什么会出现错误以及如何修复吗?似乎您只是复制粘贴的全局类源并想激活它。这样做行不通,因为全局类在定义上总是公共的,而本地类则不是 摘录: 定义类和接口的语法对于本地和全局类和接口基本相同。唯一的区别在于添加了PUBLIC,它区分了全局类和接口以及本地声明 如果要将该类用作本地类,请按照Jagger的建议删除
PUBLIC
声明,并将该类放入,以便该池中的所有全局类都可以使用该类
如果您希望所有cla都能访问它