Текущее время: Ср, июл 30 2025, 23:21

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Изменения в ALV grid
СообщениеДобавлено: Чт, фев 01 2007, 11:29 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 05 2005, 17:02
Сообщения: 70
Уже много написано про АЛВ, но поиски и изучение обсуждений не помогли... :(
У меня есть редактируемый АЛВ. Пользователь может в нём добавлять и удалять строки, редактировать некоторые ячейки.
Я создал обработчик событий и отлвавливаю DATA_CHANGED. В некоторых ситуациях мне надо запретить изменения. Как мне это сделать? Т.е. если пользователь пытается удалить строку, то я не должен дать ему это.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изменения в ALV grid
СообщениеДобавлено: Чт, фев 01 2007, 12:57 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, ноя 12 2004, 10:44
Сообщения: 370
Откуда: Москва
Вольдемар написал(а):
Уже много написано про АЛВ, но поиски и изучение обсуждений не помогли... :(
У меня есть редактируемый АЛВ. Пользователь может в нём добавлять и удалять строки, редактировать некоторые ячейки.
Я создал обработчик событий и отлвавливаю DATA_CHANGED. В некоторых ситуациях мне надо запретить изменения. Как мне это сделать? Т.е. если пользователь пытается удалить строку, то я не должен дать ему это.


заполните ER_DATA_CHANGED (протокол), запишите в него сообщение об ошибке, и оно всплывет автоматом.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, фев 01 2007, 13:21 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 05 2005, 17:02
Сообщения: 70
Вариант с сообщениями меня не устраивает. Во-первых, всё равно строка добавляется или удаляется, в-вторых... нунеохота ругаться, лучший вариант - вообще не делать ничего.
А что значит "заполните ER_DATA_CHANGED"? Я что, могу туда что-то своё записать? Дело в том, что рефреш таблиц er_data_changed->mt_deleted_rows и er_data_changed->mt_inserted_rows ни к чему не приводит...
Насколько я понимаю, это просто объект нотификации, реальные данные для изменений таблицы лежат где-то в другом месте...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, фев 01 2007, 14:09 
Гость
ну для отмены модификации ячеек
достаточно :

Code:
FORM EDITDATA USING RR_DATA_CHANGED TYPE REF TO
                                          CL_ALV_CHANGED_DATA_PROTOCOL.

  DATA: L_GRID TYPE REF TO CL_GUI_ALV_GRID, ZI TYPE I.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = L_GRID.
 
   CLEAR:   RR_DATA_CHANGED->MT_MOD_CELLS[].

  CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY.
ENDFORM.


а вот для отмены добавления/удаления строки,
советую для этих целей просто повесить свои кнопки в
статусе - и обрабатывать их уже по желанию


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, фев 01 2007, 15:56 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 05 2005, 17:02
Сообщения: 70
С изменениями проще - я динамически навешиваю на нужные ячейки статус MC_STYLE_NO_DELETE_ROW


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, фев 01 2007, 16:36 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 05 2005, 17:02
Сообщения: 70
Проблема решается следующим образом:
Code:
1) завожу копию OUT_TABLE, OUT_TABLE_SAVE и флаг fl_good
2) отлавливаю событие DATA_CHANGED
в нём смотрю какие строки изменились. Для удалённых -
    LOOP AT pr_data_changed->mt_deleted_rows INTO l_del_row.
      READ TABLE OUT_TABLE INTO OUT_LINE INDEX l_del_row-row_id.
      IF sy-subrc = 0.
        IF (можно удалять)
           fl_good = 'X'
        ELSE
           fl_good = ' '

3) отлавливаю событие DATA_CHANGED_FINISHED
в нём
  IF fl_good = 'X'
    OUT_TABLE_SAVE[] = OUT_TABLE[]
  ELSE
    OUT_TABLE[] = OUT_TABLE_SAVE[]
    call method refresh_grid.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, фев 01 2007, 17:31 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Что то не очень понятно, наверно нить обсуждения потерял, флаг выставляешь в зависимости от состояния строки, а применяешь для всей таблицы.

И второе, если пользователь сделает сортировку по колонке во время редактирования, проблем не будет при таком перекопировании таблиц?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, фев 01 2007, 18:37 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 05 2005, 17:02
Сообщения: 70
1) Событие DATA_CHANGED возникает при каждом удалении/добавлении строки. Поэтому восстановление копии фактически делает откат на 1 операцию
2) Сортировка относится к ПРЕДСТАВЛЕНИЮ таблицы (как и фильтрация). Так что проблем быть не должно.

Добавлю, что вариант сделан на скорую руку (чтоб минимально работало) и проблемы могут быть. Есть ещё не очень приятный момент - изменения происходят медленно, так что я хорошо вижу, что строка удаляется, а потом снова появляется...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, фев 01 2007, 18:53 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 05 2005, 17:02
Сообщения: 70
Вдогонку.
Если заранее (при подготовке таблицы) известно, что строку нельзя удалить, то для неё можно поставить стиль MC_STYLE_NO_DELETE_ROW.

Например
Code:

types: begin of TRow,
  ....
    style type lvc_t_styl,
  end of TRow

types TOutTable  type table of TRow.
data: out_table type TOutTable, out_row type TRow.

****  Заполняем out_table ***
затем
data: cell like out_row-cell,
      style type LVC_S_STYL.

loop at out_table into out_row
  if <condition>
    cell = out_row-cell
    style-style = cl_gui_alv_grid=>MC_STYLE_DISABLED.
    insert style into cell-style.
    update out_table from out_row
  endif.
endloop.
   


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, фев 01 2007, 20:03 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Сортировка относится не только к представлению на фронтэнде, но и к порядку данных в исходной таблице на сервере приложения.


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

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


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

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


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

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