Текущее время: Пт, июл 18 2025, 14:26

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Эмуляция нажатия клавиши (ф.кода) в REUSE_ALV_GRID_DISPLAY
СообщениеДобавлено: Вт, апр 26 2005, 12:09 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
Проблема в следующем:

информация выводится посредством REUSE_ALV_GRID_DISPLAY с итогами и подитогами. Кроме того есть возможность отредактировать значение в отдельных столбцах, т.е. определено:

Code:
для нужных столбцов:
  it_fieldcat-edit = 'X'.
  it_fieldcat-input = 'X'.

  ...
  ls_gridset-edt_cll_cb      = 'X'.
  ...
  ls_events-name = slis_ev_data_changed.
  ls_events-form  = 'ON_CHANGE'.
  append ls_events to lt_events.
  ...


все работает ОК за одним исключением - итоги не обновляются при изменении информации в редактируемых столбцах.
Есть мысль эмулировать функц.код 'REFRESH' в процедуре повешанной на событие ON_CHANGE, а затем обработать его в процедуре USER COMMAND, но чёт не знаю чем именно можно эмулировать его (SET USER-COMMAND работает только с простыми списками).

Или как-то по другому обновить список?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 26 2005, 12:28 
Гость
не уверен, но можно попробовать

при срабатывании события:

DATA: L_GRID TYPE REF TO CL_GUI_ALV_GRID.

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = L_GRID.
CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY.


или


CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = L_GRID.
CALL METHOD L_GRID->SET USER-COMMAND
EXPORTING
I_UCOMM = '&RNT'.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 26 2005, 12:34 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
ВН написал(а):
не уверен, но можно попробовать

при срабатывании события:

DATA: L_GRID TYPE REF TO CL_GUI_ALV_GRID.

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = L_GRID.
CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY.


или




CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = L_GRID.
CALL METHOD L_GRID->SET USER-COMMAND
EXPORTING
I_UCOMM = '&RNT'.


эти варианты уже пробовал - я так понимаю здесь мы получаем локальную копию грида и .... короче не пашет.

Может какой-нить assign на соотв.грид (не разу не ассигнил такие объекты), а там уже его обработать?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 26 2005, 13:52 
Гость
по-моему, проблема в другом.
При выходе из ячейки - не срабатывает событие
SLIS_EV_DATA_CHANGED
оно срабатывает только при любой функц.клавише.

Поэтому просто поставь рефреш в модуле user_command
и будет пересчитываться сумма по двойному щелчку на любую клетку


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 26 2005, 14:33 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
ВН написал(а):
по-моему, проблема в другом.
При выходе из ячейки - не срабатывает событие
SLIS_EV_DATA_CHANGED
оно срабатывает только при любой функц.клавише.

Поэтому просто поставь рефреш в модуле user_command
и будет пересчитываться сумма по двойному щелчку на любую клетку


да в юзер комманд то вообще не заходит: т.е. заходит в процедуру (допустим она называется ON_CHANGE) которую я повесил на событие SLIS_EV_DATA_CHANGED, но в процедуру USER_COMMAND ни в какую, поэтому я и хотел сэмулировать в ON_CHANGE функц.код чтобы попасть в USER_COMMAND и там уже обрефрешить.

У-у-у-у... прочитал что написал, сам нифига не понял :D

Короче поборол в конце концов, но как-то уж наворочено получилось, хотелось что-нить попроще.


Последний раз редактировалось OlegDm Вт, апр 26 2005, 14:36, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 26 2005, 14:36 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
Сделай как сказали, только вызывай метод не REFRESH..., а CHECK_CHANGED_DATA - он вызовет тебе событие on_data_changed.

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 26 2005, 14:59 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
nicky555 написал:
Сделай как сказали, только вызывай метод не REFRESH..., а CHECK_CHANGED_DATA - он вызовет тебе событие on_data_changed.


Nicky, у меня ФМ REUSE_ALV_GRID_DISPLAY, и я очень даже хорошо попадаю в процедуру которую повесил на DATA_CHANGED.

Где мне следует вызвать этот метод?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 26 2005, 15:05 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
В Callback для USER_COMMAND ставим следующее:

WHEN 'XXX'.
* актуализация изменений данных
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = l_grid.
CALL METHOD l_grid->check_changed_data.
* здесь имеем обновленные данные
* поставим здесь refresh и будет счастье
То есть, Callback на SLIS_EV_DATA_CHANGED тебе вообще не нужен - просто большая кнопка с кодом 'XXX' и ее обработка в User_command.

Или я чего-то неправильно понял? :roll:

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Последний раз редактировалось nicky555 Вт, апр 26 2005, 15:08, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 26 2005, 15:06 
Гость
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
...
I_CALLBACK_USER_COMMAND = 'VVV'

...
IMPORTING

...

FORM VVV USING R_UCOMM TYPE SY-UCOMM LS TYPE SLIS_SELFIELD.

LS-REFRESH = 'X'.

ENDFORM.


* при двойном щелчке на любую ячейку
попадешь сюда и обновление произойдет


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 26 2005, 15:37 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
Nicky, BH наверное я неправильно изъяснился в самом начале (сам часто пеняю на людей которые не могут нормально вопрос задать), ситуация следующая:

1. i_callback_user_command у меня само собой определен, т.к. помимо редактирования выполняются и еще кой-какие юзеровские функции, в т.ч. и обработка даблклика и т.п.

2. при редактировании ячейки и выходе из нее вызов процедуры i_callback_user_command не происходит, как я уже говорил вызывается процедура (ON_CHANGE) повешенная на событие slis_ev_data_changed.

3. вызывать check_changed_data в ON_CHANGE - это значит запустить самодостаточную и самоподпитывающуюся рекурсию :)

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

В общем в конце концов все сделал в ON_CHANGE и обновление внутр.таблицы и рефрешь грида, получив предварительно ссылку:
Code:
assign ('(SAPLSLVC_FULLSCREEN)gt_grid-grid') to <f>
а затем:
Code:
CALL METHOD <f>->REFRESH_TABLE_DISPLAY
             exporting is_stable = is_stable.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 29 2005, 07:23 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
Понял, наконец, что ты имеешь ввиду - сам наткнулся на такие грабли :)
Я не стал делать доступ к Grid'у - просто повесил жирную кнопку "Обновить" и в User-command код
rs_selfield-refresh = 'X'.
rs_selfield-col_stable = 'X'.
rs_selfield-row_stable = 'X'.

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


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

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


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

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


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

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