Текущее время: Пн, июл 21 2025, 16:23

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: ALV - отменить удаление строк
СообщениеДобавлено: Чт, мар 27 2008, 14:27 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 16:38
Сообщения: 304
При удалении строк срабатывает событие DATA_CHANGED.

Можно ли в этом событии ОТМЕНИТЬ удаление строк?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 27 2008, 14:55 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, авг 04 2006, 20:56
Сообщения: 1006
Откуда: 37 МИКРОРАЙОН
Пол: Мужской
http://sapboard.ru/forum/viewtopic.php ... ht=#223591


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 27 2008, 15:15 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 16:38
Сообщения: 304
Это я пост я читал.
Однако посчитал его достаточно громоздким. Но судя по-всему более нормального способа нету. :(

P.S. Как я понял проверка условия удаления происходит в двух местах: один раз при выставлении стиля, второй в data_change.

Мне же нужно, чтобы при удалении пользователю задавался вопрос "Удалить?" и если он отказался, то ничего не удалять.
Так что я не могу проставить стиль при выборе данных, так как всё зависит от ответа пользователя в data_change.

Пока как вариант решения в случае отказа просто добавлять удаляемые строки в конец таблицы. Тогда после удаления данные всё-равно останутся. Минус такого решения - очередность данных изменится.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 27 2008, 16:58 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Валерка написал(а):
Мне же нужно, чтобы при удалении пользователю задавался вопрос "Удалить?" и если он отказался, то ничего не удалять.

Можно заменить стандартную кнопку удаления на свою, а уже из обработки своего кода функции попросить ALV удалить строки.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 27 2008, 17:41 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 16:38
Сообщения: 304
Я так и сделал сначало. Но потом оказалось, что кнопкой CUT тоже можно удалять ВЫДЕЛЕННЫЕ строки. А при замене CUT мне не удалось копировать в буфер обмена данные, как это делает ALV.
Да ещё вроде можно просто по клавише DEL удалить и в этом случае вроде команда в USER_COMMAND не приходит (хотя это уже точно не помню).

Решил проблему следующем образом (он работает и для кнопок CUT и DEL, а также и для клавиши DEL):
1. Создал обработчики DATA_CHANGED и DATA_CHANGED_FINISHED
2. При приходе сообщения в DATA_CHANGED запоминаю все строки, которые пользователь хочет удалить (а кроме самих строк с данными запоминаю и номера строк, откуда эти строки хотят удалить). Сделать это легко, так как при входе в DATA_CHANGED удаляемые строки удаляются из просмотра в ALV, но в самой внутренней таблицы они ещё есть.
3. Задаю пользователю вопрос "Хотите удалить? Точно? Вы подумали?"
4. Если пользователь сказал "Да", то удаляю данные, которые я запомнил в пп 2.
5. При приходе сообщения в CHANGED_FINISHED (в тут у нас строки уже удалились из внутренней таблмицы) проверяю: "есть данные для восстановления?" Если есть, то восстанавливаю их в исходную таблицу.

Вроде метод работает.
Можно даже проверять каждую строку: нужно её удалять или нет, только при этом нужно не забыть, что индексы восстанавливаемых строк нужно корректировать в соответствии с тем, сколько уже строк с индексами меньшими текущему уже были удалены, а то строки будут восстанавливаться не в том месте.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ALV - отменить удаление строк
СообщениеДобавлено: Вт, апр 07 2009, 14:20 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, мар 13 2006, 10:03
Сообщения: 58
тоже столкнулся с этой проблемой, два дня решал
1. нужно поставить для всех строк стиль cl_gui_alv_grid=>mc_style_no_delete_row (поле fieldname должно быть пустое иначе не сработатет)
теперь строки удалить нельзя
2. в обработчике data_changed теперь тяжело угадать что строку удаляют =)
я проверяю следующим способом:
если таблицы MT_DELETED_ROWS, MT_INSERTED_ROWS, MT_MOD_CELLS пустые, то была попытка удалить
3. если вы хотите удалить строку, то просто удаляете соотвествующую запись из внутренней талицы которую передаете в ALV
если не хотите, то не делаете ничего


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

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


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

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


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

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