&引用;无法使用语句endclass“;激活本地类时

&引用;无法使用语句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.

我正在尝试在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.

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都能访问它