Текущее время: Пт, авг 08 2025, 06:29

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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