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

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


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

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


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

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