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

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


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

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


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

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