Текущее время: Ср, июл 30 2025, 22:54

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Как изменить структуру динамической таблицы?
СообщениеДобавлено: Вт, фев 01 2011, 17:44 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
Может кто-нибудь подсказать, как изменить структуру динамической таблицы?
Имеется набор данных, изменяемый в программе, который складывается в динамическую таблицу(созданную через класс cl_alv_table_create) и показывается через ALV.

Но иногда требуется изменять формат динамической таблицы, т.е. добавлять или удалять в ней поля.

Но почему-то не получается :)

При попытке очистить и повторно создать табличку программа падает в дамп, мотивируюя тем, что произошел вызов(сабмит) без указания программы.
Отладчик показал, что при повторной генерации в глубинах кода происходит вызов generate subroutine pool, но так как пул с таким именем уже присутствует, то выдается ошибка и очищается переменная, которая и хранит имя программы.

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как изменить структуру динамической таблицы?
СообщениеДобавлено: Вт, фев 01 2011, 17:49 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Используйте RTTI.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как изменить структуру динамической таблицы?
СообщениеДобавлено: Вт, фев 01 2011, 18:50 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
PK написал:
Но иногда требуется изменять формат динамической таблицы, т.е. добавлять или удалять в ней поля.

Если речь идет о показе на экране определенных полей, то поможет метод CL_GUI_ALV_GRID ->SET_FRONTEND_FIELDCATALOG.
Состав полей во внутренней таблице лучше не менять.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как изменить структуру динамической таблицы?
СообщениеДобавлено: Ср, фев 02 2011, 10:23 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
Пономарев Артем написал:
Используйте RTTI.

Спасибо, почитаю.

Удав написал(а):
Если речь идет о показе на экране определенных полей, то поможет метод CL_GUI_ALV_GRID ->SET_FRONTEND_FIELDCATALOG.
Состав полей во внутренней таблице лучше не менять.

Ну если бы структура полей была фиксирована, то да. А у меня вся проблема в том, что в таблице они могут добавлятся/удалятся.
Как вариант можно создать полей десять, на ближащие лет пять этого хватит, и скрывать/показывать их через филдкаталог, но это коряво и не по мушкетерски.

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как изменить структуру динамической таблицы?
СообщениеДобавлено: Ср, фев 02 2011, 10:54 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

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

Посмотреть бы этот момент пересоздания таблицы и обновления АЛВ, а так же дамп.

PK написал:
Как вариант можно создать полей десять, на ближащие лет пять этого хватит, и скрывать/показывать их через филдкаталог, но это коряво и не по мушкетерски.

Встречал такое в стандарте не один раз...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как изменить структуру динамической таблицы?
СообщениеДобавлено: Ср, фев 02 2011, 11:32 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
Besa написал:
PK написал:
При попытке очистить и повторно создать табличку программа падает в дамп, мотивируюя тем, что произошел вызов(сабмит) без указания программы.

Посмотреть бы этот момент пересоздания таблицы и обновления АЛВ, а так же дамп.

Там все просто.
Стандартных инструментов(класс=>метода или ФМ-а) для удаления динамической таблицы созданной с помощью cl_alv_table_create=>CREATE_DYNAMIC_TABLE я не нашел, поэтому просто её чищу.

До обновления ALV не доходит, т.к. сначала надо создать таблицу :)

Дамп происходит в LSKBHF06 в строке 558 кажется.
Цитата:
00546 catch system-exceptions generate_subpool_dir_full = 9.
00547 generate subroutine pool lt_source name l_name
00548 message l_message line l_line word l_word.
00549 endcatch.
00550 case sy-subrc.
00551 when 0.
00552 when 9.
00553 raise generate_subpool_dir_full.
00554 when others.
00555 message x000(0k) with l_message l_line l_word.
00556 endcase.
00557
00558 if r_oo_class is initial.
00559 perform (l_form) in program (l_name).
> else.
00561 perform (l_form) in program (l_name) using r_oo_class.
00562 endif.
00563 endform. " fb_table_create_string


Причина дампа - очистка поля l_name после выполнения generate в 547 строке.
Он сообщает, что такой "имя" subroutine pool уже есть, поэтому сгенерировать его низя и чистит l_name.

Как ликвидировать данный пул я не знаю.
Если бы был метод типа cl_alv_table_create=>DESTROY_NAFIG_DYNAMIC_TABLE, то думаю проблема бы решилась.

_________________
I have a dream


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

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
PK написал:
Ну если бы структура полей была фиксирована, то да. А у меня вся проблема в том, что в таблице они могут добавлятся/удалятся.

Что за логика программы такая? Показывать вторичное окно с разными разрезами информации? :?

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как изменить структуру динамической таблицы?
СообщениеДобавлено: Ср, фев 02 2011, 12:39 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
Удав написал(а):
PK написал:
Ну если бы структура полей была фиксирована, то да. А у меня вся проблема в том, что в таблице они могут добавлятся/удалятся.

Что за логика программы такая? Показывать вторичное окно с разными разрезами информации? :?


Два экрана.
Первый просто ALV отчет с основным объемом данных, с него возможен переход на второй экран с ограниченным набором данных, где они представлены более детализировано в другом ракурсе и пользователь может их изменять/дополнять/удалять.
После возвращения содержимое первого экрана так же должны измениться.

Причем динамически на первом экране создаются только итоги по годам, т.е. неизвестно заранее сколько их. Хотя только что подумал и можно завязаться на сроках действия этих СПП, т.е. создавать не фактически заполненные, а весь возможный диапазон, который потом уже скрывать в зависимости от наличия/отсутствия данных
Ещё и третий будет... :)

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как изменить структуру динамической таблицы?
СообщениеДобавлено: Ср, фев 02 2011, 13:14 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
PK написал:
возможен переход на второй экран с ограниченным набором данных, где они представлены более детализировано в другом ракурсе и пользователь может их изменять/дополнять/удалять.

Ну обычно в этом случае бывает как раз фиксированный набор полей.
Или лучше всего просто вызывать стандартные транзакции изменения документов - там все нужные поля уже есть ;)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как изменить структуру динамической таблицы?
СообщениеДобавлено: Ср, фев 02 2011, 13:21 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
Удав написал(а):
PK написал:
возможен переход на второй экран с ограниченным набором данных, где они представлены более детализировано в другом ракурсе и пользователь может их изменять/дополнять/удалять.

Ну обычно в этом случае бывает как раз фиксированный набор полей.
Или лучше всего просто вызывать стандартные транзакции изменения документов - там все нужные поля уже есть ;)

Так мне вообще не нравиться, что из-за каких-то итогов приходится делать динамическую таблицу, а прописать в структурку поля gjahr2008, gjahr2009...gjahr20хх религия не позволяет :).

Сама прога и пишется, чтобы обойтись без стандартных интерфейсов, ибо должна позволять делать всё в одном месте без скачков по транзакциям и экранам, представляя стуктурированный набор всех необходимых данных. Автоматизация...

Пока остановился на том, что за основу для итогов буду брать сроки СПП, ибо нужно чтобы работало уже сейчас, а попутно почитаю RTTI, который Артем Пономарев порекомендовал.

_________________
I have a dream


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

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


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

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


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

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