Текущее время: Чт, июл 31 2025, 18:02

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


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

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


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

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