Текущее время: Пт, сен 12 2025, 23:50

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


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

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


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

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