Текущее время: Вс, июл 20 2025, 12:53

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Динамическая внутр. таблица.
СообщениеДобавлено: Вт, июн 07 2011, 00:53 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 19 2008, 21:02
Сообщения: 202
Откуда: Moscow, Russia.
Пол: Мужской
Добрый день.

Суть задачи:
Собственно проблема такая, что надо создать ALV список у которого часть полей определены в заранее, а часть будут динамически определяться.
Честно говоря примера динам. ALV не нашел, но решил что если создать внутренную табл. с динамически добавл. полями, то можно будет эти поля добавлять и в ALV.

Что делаю:

* Создаём структуру для будущ. динам. табл.
DO l_str TIMES.
CLEAR wa_field.
l_col_name = sy-index.
CONCATENATE 'FIELD' l_col_name+2(1) INTO l_col_name.
wa_field-fieldname = l_col_name.
wa_field-datatype = 'I'.
wa_field-intlen = 13.
APPEND wa_field TO lt_fields.
ENDDO.

* Генерируем структуру.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_fields
IMPORTING
ep_table = lt_table.

ASSIGN lt_table->* TO <fs_table>.
CREATE DATA lt_row LIKE LINE OF <fs_table>.

* Структура для создания внутренней табл.
ASSIGN lt_row->* TO <fs_row>.

А потом пытаюсь к основной таблице довить свою сгенерированную структуру, но как то не получается:

TYPES:
BEGIN OF lw_alv_mod,
INCLUDE TYPE tw_alv_tab,
INCLUDE TYPE <fs_row>, <-------
END OF lw_alv_mod.

Вопрос:
1. Возможно ли, добавить сгенериров. структ. для создания общей структуры с основной табл?
2. Есть ли другие способы динамически сформировать список ALV? Киньте ссылку или код, плиз.

З.Ы. по созданию Динам. таб. (но не динам ALV) тем на форуме много. И везде описывается возможность получить
таблицу в виде Фиелд-символ. Но её потом не объявить для структуры другой таблицы.

Вроде понятно изложил мысль..
В заранее спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая внутр. таблица.
СообщениеДобавлено: Вт, июн 07 2011, 07:34 
Специалист
Специалист

Зарегистрирован:
Чт, дек 16 2010, 15:23
Сообщения: 133
Откуда: Набережные Челны
Пол: Мужской
Думаю, для вашей задачи лучше использовать RTTI.
Создавайте нужную динамическую структуру, а потом уже на ее основе динамическую таблицу.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая внутр. таблица.
СообщениеДобавлено: Вт, июн 07 2011, 08:32 
Начинающий
Начинающий

Зарегистрирован:
Чт, июн 02 2011, 12:12
Сообщения: 4
Можно сделать просто. Статически задать максимальное необходимое количество полей в структуре и дать пользователю возможность выбирать поля которые будут отображаться в АЛВ.
Пользователь ведь не будет одновременно смотреть тысячу колонок. В Экселе к примеру ограничение на 256 колонок.
Я описывал в инклюде (так удобнее) структуру АЛВ таблицы в которую были включены 200 полей C(30) и 200 полей типа F(8) для динамических полей. Больше не пробовал так как хватило, а лишние поля в АЛВ скрываю, АЛВ работает быстро. Поле даты отображал как текст, сортировка работать в таком случае не будет.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая внутр. таблица.
СообщениеДобавлено: Вт, июн 07 2011, 09:10 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 19 2008, 21:02
Сообщения: 202
Откуда: Moscow, Russia.
Пол: Мужской
broker.chelny написал:
Думаю, для вашей задачи лучше использовать RTTI.
Создавайте нужную динамическую структуру, а потом уже на ее основе динамическую таблицу.


Как? И что такое RTTI?
Нечто похожее я и пытался сделать (код описан в теме), но без результатно.

zorch написал(а):
Можно сделать просто. Статически задать максимальное необходимое количество полей в структуре и дать пользователю возможность выбирать поля которые будут отображаться в АЛВ.
Пользователь ведь не будет одновременно смотреть тысячу колонок. В Экселе к примеру ограничение на 256 колонок.
Я описывал в инклюде (так удобнее) структуру АЛВ таблицы в которую были включены 200 полей C(30) и 200 полей типа F(8) для динамических полей. Больше не пробовал так как хватило, а лишние поля в АЛВ скрываю, АЛВ работает быстро. Поле даты отображал как текст, сортировка работать в таком случае не будет.


Это понятно, что можно так сделать. Я этот метод держу на крайний случай. Если больше никак не получиться, то придется именно выше описанным способом делать.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая внутр. таблица.
СообщениеДобавлено: Вт, июн 07 2011, 09:11 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
Объединить таблицы после того как они уже созданы не получится. Вы ведь можете добавить статические поля в каталог lt_fields, через cl_alv_table_create=>create_dynamic_table создать таблицу со всеми полями, которые хотите видеть


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая внутр. таблица.
СообщениеДобавлено: Вт, июн 07 2011, 09:16 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Если статичная часть описана в виде структуры, можно получить для нее field-catalog с помощью ФМ LVC_FIELDCATALOG_MERGE.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая внутр. таблица.
СообщениеДобавлено: Вт, июн 07 2011, 10:46 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 19 2008, 21:02
Сообщения: 202
Откуда: Moscow, Russia.
Пол: Мужской
zsap написал:
Объединить таблицы после того как они уже созданы не получится. Вы ведь можете добавить статические поля в каталог lt_fields, через cl_alv_table_create=>create_dynamic_table создать таблицу со всеми полями, которые хотите видеть


Нуу не совсем так.. Идея была такая:

TYPES:
BEGIN OF lw_alv_mod,
INCLUDE TYPE tw_alv_tab, <-----Струк. основ. таб.
INCLUDE TYPE <fs_row>, <----- Струк. динам. таб.
END OF lw_alv_mod.

Т.е. я заполнил основн. таб., потом программа решает что надо добавить поля динамически. Для этого я создаю вторую табл., которая будет построена из структуры первой основной и структуры 2-ой динамической.
Потом просто перекладываю данные из основной таб в новую созданную и заполняю свои динамические поля.
Вот как то так я хотел это сделать...

Объявление Фиелдкаталога - это уже третье. Думаю с этим проблем не будет. До пишу какой нит макрос и он мне будет так же динамически прописывать поля для каталога. (при том что тип поля добавляем. динамически будет всегда один.)
Мне сейчас важно создать таблицу часть которой будет объявлена динамически.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая внутр. таблица.
СообщениеДобавлено: Вт, июн 07 2011, 10:49 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 19 2008, 21:02
Сообщения: 202
Откуда: Moscow, Russia.
Пол: Мужской
k_aleksei написал:
zsap написал:
Объединить таблицы после того как они уже созданы не получится. Вы ведь можете добавить статические поля в каталог lt_fields, через cl_alv_table_create=>create_dynamic_table создать таблицу со всеми полями, которые хотите видеть


Нуу не совсем так.. Идея была такая:

TYPES:
BEGIN OF lw_alv_mod,
INCLUDE TYPE tw_alv_tab, <-----Струк. основ. таб.
INCLUDE TYPE <fs_row>, <----- Струк. динам. таб.
END OF lw_alv_mod.

Т.е. я заполнил основн. таб., потом программа решает что надо добавить поля динамически. Для этого я создаю вторую табл., которая будет построена из структуры первой основной и структуры 2-ой динамической.
Потом просто перекладываю данные из основной таб в новую созданную и заполняю свои динамические поля.
Вот как то так я хотел это сделать...

Объявление Фиелдкаталога - это уже третье. Думаю с этим проблем не будет. До пишу какой нит макрос и он мне будет так же динамически прописывать поля для каталога. (при том что тип поля добавляем. динамически будет всегда один.)
Мне сейчас важно создать таблицу часть которой будет объявлена динамически.



Блин. Кажеться я вас срезу не до понял. Ведь можно при создани динам. таб. фиелд каталог создать: Основ_таб + дополнитель поля и сгенерить её. ДАлее переложить данные из перовй таб. в сгенерированну... Наверное про это Вы писали..Да? Надо будет попробовать


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая внутр. таблица.
СообщениеДобавлено: Вт, июн 07 2011, 12:32 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
k_aleksei написал:
Блин. Кажеться я вас срезу не до понял. Ведь можно при создани динам. таб. фиелд каталог создать: Основ_таб + дополнитель поля и сгенерить её. ДАлее переложить данные из перовй таб. в сгенерированну... Наверное про это Вы писали..Да? Надо будет попробовать

Да, именно это я и имел в виду. По другому вроде никак. Если у вас версия системы > 4.6, статические поля можно заполнить в обычной структуре, затем переложить их в динамическую используя move-corresponding


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая внутр. таблица.
СообщениеДобавлено: Вт, июн 07 2011, 14:22 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 19 2008, 21:02
Сообщения: 202
Откуда: Moscow, Russia.
Пол: Мужской
zsap написал:
k_aleksei написал:
Блин. Кажеться я вас срезу не до понял. Ведь можно при создани динам. таб. фиелд каталог создать: Основ_таб + дополнитель поля и сгенерить её. ДАлее переложить данные из перовй таб. в сгенерированну... Наверное про это Вы писали..Да? Надо будет попробовать

Да, именно это я и имел в виду. По другому вроде никак. Если у вас версия системы > 4.6, статические поля можно заполнить в обычной структуре, затем переложить их в динамическую используя move-corresponding


Спасибо. Надо попробовать.
А вывод самого динам. ALV может кто нить подкинуть. Мне говорили что существует, но я не нашел.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая внутр. таблица.
СообщениеДобавлено: Вт, июн 07 2011, 14:45 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
k_aleksei написал:
Спасибо. Надо попробовать.
А вывод самого динам. ALV может кто нить подкинуть. Мне говорили что существует, но я не нашел.

Какой вывод самого динам. ALV? Вся проблема создать динамически внутреннюю таблицу(есть разные способы), что Вы и пытаетесь сделать и все http://sapboard.ru/forum/viewtopic.php?p=30643#p30643. Далее в
Code:
    CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY(или ФМ АЛВ)
      EXPORTING
...
      CHANGING
        IT_OUTTAB            = <tab>
...

Юзайте поиск, много раз обсуждали
тут


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая внутр. таблица.
СообщениеДобавлено: Вт, июн 14 2011, 21:09 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пт, окт 13 2006, 16:44
Сообщения: 55
Пол: Мужской
Чтобы создать ALV по динамической таблице понадобится динамическая таблица, объявленная как ref to data и ссылка на нее.
Code:
* Заполняется fieldcat описания структуры таблицы. Тут для примера по имени структуры из DDIC, но можно как угодно, хоть хардкодом.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = NAME_TAB
I_CLIENT_NEVER_DISPLAY = 'X'
CHANGING
ct_fieldcat = LVC_T_FCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3
.

* Создается динамическая таблица
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = LVC_T_FCAT
IMPORTING
EP_TABLE = ref_out_tab
EXCEPTIONS
GENERATE_SUBPOOL_DIR_FULL = 1
others = 2
.

assign ref_out_tab->* to <OUT_TAB>.
CALL FUNCTION 'LVC_TRANSFER_TO_SLIS'
EXPORTING
it_fieldcat_lvc = LVC_T_FCAT
IMPORTING
ET_FIELDCAT_ALV = gt_fieldcat
TABLES
IT_DATA = <OUT_TAB>
EXCEPTIONS
IT_DATA_MISSING = 1
IT_FIELDCAT_LVC_MISSING = 2
OTHERS = 3
.

* Выводится ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = gs_layout
it_fieldcat = gt_fieldcat
TABLES
t_outtab = <OUT_TAB>.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая внутр. таблица.
СообщениеДобавлено: Ср, июн 15 2011, 08:14 
Специалист
Специалист

Зарегистрирован:
Чт, дек 16 2010, 15:23
Сообщения: 133
Откуда: Набережные Челны
Пол: Мужской
Code:
DATA:  r_wa_data   TYPE REF TO cl_abap_structdescr,
       r_it_data   TYPE REF TO cl_abap_tabledescr,
       r_it_comp   TYPE cl_abap_structdescr=>component_table,
       r_component TYPE cl_abap_structdescr=>component,
       c_ref_table_mseg   TYPE REF TO data.

r_component-name = 'WERKS'.
r_component-type ?= cl_abap_datadescr=>describe_by_name( 'WERKS_D' ).
APPEND r_component TO r_it_comp.
r_wa_data = cl_abap_structdescr=>create( r_it_comp ).
r_it_data = cl_abap_tabledescr=>create( p_line_type  = r_wa_data ).
CREATE DATA c_ref_table_mseg   TYPE HANDLE r_it_data.


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

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


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

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


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

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