Текущее время: Чт, авг 07 2025, 23:11

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Проблема с типами при создании CL_SALV_TABLE
СообщениеДобавлено: Ср, авг 05 2015, 08:14 
Начинающий
Начинающий

Зарегистрирован:
Пн, июн 15 2015, 09:18
Сообщения: 17
День добрый всем.

Помогите, пожалуйста, разобраться с одной проблемой с CL_SALV_TABLE. Суть моей задачи: есть необходимость выводить в гриде внутренние таблички со схожей структурой и практически идентичным набором функций. Соответственно, я хочу всю логику, связанную с показом таблички и обработкой кое-каких событий засунуть в свой класс, чтобы код не дублировать. В самом классе я просто планирую держать ссылки на показываемую табличку и грид, ее отображающий.

В коде сие выглядит примерно следующим образом:
Code:
CLASS lcl_my_class DEFINITION.
  PUBLIC SECTION.
    METHODS: constructor IMPORTING im_data TYPE STANDARD TABLE,
             show_grid.

  PRIVATE SECTION.
    DATA: mr_data TYPE REF TO data.
ENDCLASS.

CLASS lcl_my_class IMPLEMENTATION.
  METHOD constructor.
        GET REFERENCE OF im_data INTO me->mr_data.
  ENDMETHOD.

  METHOD show_grid.
    DATA: lo_grid TYPE REF TO cl_salv_table.
    FIELD-SYMBOLS: <lt_data> TYPE TABLE.

    ASSIGN me->mr_data->* TO <lt_data>.

    cl_salv_table=>factory(
      IMPORTING r_salv_table = lo_grid
      CHANGING t_table = <lt_data> ).

    lo_grid->display( ).
  ENDMETHOD.
ENDCLASS.


Использование:
Code:
DATA: lo_cls TYPE REF TO lcl_my_class,
       lt_table TYPE STANDARD TABLE OF ... .

CREATE OBJECT lo_cls EXPORTING im_data = lt_table.
lo_cls->show_grid( ).


Проблема в том, что при вызове метода FACTORY я получаю эксепшн CX_SY_DYN_CALL_ILLEGAL_TYPE: дескать, тип таблички (T_TABLE) рожей не вышел. Под отладкой проверял: и ссылка, и символ ведут к нормальной таблице с данными, внешне прикопаться не к чему. Конечно, можно перенести параметр IM_DATA из конструктора в метод SHOW_GRID и там его скармливать FACTORY (проверял, так работает), но по ряду причин это не слишком удобно. Опять же, хочется понять, что не так в текущей реализации. Сталкивался кто с подобным?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема с типами при создании CL_SALV_TABLE
СообщениеДобавлено: Ср, авг 05 2015, 08:49 
Специалист
Специалист

Зарегистрирован:
Ср, дек 22 2010, 19:49
Сообщения: 114
Дд.
У Вас таблица lt_table[] в класс передается как IMPORTING-параметр (без возможности изменения), и в дампе получаем ошибку Overwritten protected field.
Можно добавить метод SET_DATA
Code:
METHODS: set_data changing ct_data TYPE STANDARD TABLE.
...
method set_data.
  GET REFERENCE OF ct_data[] INTO me->mr_data.
endmethod.

Вызов класса тогда будет выглядеть так:
Code:
  CREATE OBJECT lo_cls.
  lo_cls->set_data( changing ct_data = lt_table[] ).
  lo_cls->show_grid( ).

_________________
Человек готов работать 24 часа в сутки, лишь бы ничего не делать.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с типами при создании CL_SALV_TABLE
СообщениеДобавлено: Ср, авг 05 2015, 08:58 
Начинающий
Начинающий

Зарегистрирован:
Пн, июн 15 2015, 09:18
Сообщения: 17
Вот же я олень, совсем об этом не подумал. Казалось, что если все будет через ссылочки, то рантайм не заметит. Спасибо.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB