Текущее время: Пт, июн 07 2024, 05:00

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: События в ALV Grid
СообщениеДобавлено: Чт, янв 24 2008, 10:21 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, сен 18 2006, 10:37
Сообщения: 177
Откуда: Беларусь
Пол: Мужской
Добрый день!

Подскажите как можно отловить событие удаление строки? (Сама возможность удаления строк должна присутствовать но при этом чтобы некоторые строки удалять было нельзя. Как бы заблокированные строки находятся вверху таблички а под ними можно уже добавлять новые строчки, свои) Или может есть какой способ заблокировать часть строк так чтобы с ними нельзя было выполнять никаких операций ? Пробовал событие before_user_command но оно не срабатывает на кнопку "Удалить строку", "Вставить строку".

Скажите существует ли возможность отловить <перемещение> указателя на другую ячейку (без изменения данных) ?

Спасибо! :-)

_________________
Regards


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: События в ALV Grid
СообщениеДобавлено: Чт, янв 24 2008, 12:13 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
FoLKo написал:
Подскажите как можно отловить событие удаление строки? (Сама возможность удаления строк должна присутствовать но при этом чтобы некоторые строки удалять было нельзя. Как бы заблокированные строки находятся вверху таблички а под ними можно уже добавлять новые строчки, свои) Или может есть какой способ заблокировать часть строк так чтобы с ними нельзя было выполнять никаких операций ?


В событии DATA_CHANGED получаете ссылку на объект типа CL_ALV_CHANGED_DATA_PROTOCOL, в котором есть атрибут MT_DELETED_ROWS. Можете поставить свою проверку и запретить удаление.


FoLKo написал:
существует ли возможность отловить <перемещение> указателя на другую ячейку (без изменения данных) ?

На сервере приложений нельзя (не принимая в расчёт извращения).
Может в GUI версии 7.10 с помощью скриптов на фронтенде можно...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: События в ALV Grid
СообщениеДобавлено: Чт, янв 24 2008, 12:25 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, авг 04 2006, 20:56
Сообщения: 1006
Откуда: 37 МИКРОРАЙОН
Пол: Мужской
FoLKo написал:
Добрый день!

Подскажите как можно отловить событие удаление строки? (Сама возможность удаления строк должна присутствовать но при этом чтобы некоторые строки удалять было нельзя. Как бы заблокированные строки находятся вверху таблички а под ними можно уже добавлять новые строчки, свои) Или может есть какой способ заблокировать часть строк так чтобы с ними нельзя было выполнять никаких операций ? Пробовал событие before_user_command но оно не срабатывает на кнопку "Удалить строку", "Вставить строку".


Цитата:
ALV Grid – функция удаления строк.

Самым первым и пока единственным заданием у меня на проекте было задание написать программу для редактирования таблицы. Я решил редактировать ALV таблицу используя стандартные функции подобно Функциям Вставки, Удаления и Изменения строк. Это работало хорошо, но в техническом задании стоял пункт, согласно которому удаление строки должно было происходить согласно некоторым условиям. Согласно стандартным функциональным возможностям ALV, кнопка «Удалить» на стандартном toolbar инструмента сначала удаляет ряд, а затем вызывает событие DATA_CHANGED. Так как событие DATA_CHANGED вызвано после удаления, удаленный ряд не отслежен в событии DATA_CHANGED, и я не смог проследить удаленный ряд. Я пробовал найти решение на SAPФоруме , но напрасно, поскольку я нашел некоторые посты без ответа.

Условие в задании: Если дата полета, существует, выскакивает сообщение , ‘ Рейс не может удален!!! ’ иначе, рейс может удален.

Как Сделать ........


1. Сначала мы должны объявить событие DATA_CHANGED в нашем собственном классе:
METHODS:
handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed
e_ucomm.

2. Объявление внутренней таблицы должно быть
* Объявление внутренней таблицы

Types: begin of tp_outtab.
include structure sflight.
TYPES: handle_style TYPE lvc_t_styl,
end of tp_outtab.
Data : gt_outtab type standard table of tp_outtab.

3. После определения внутренней таблицы мы должны изменить признаки строк, основанных на условии. В нашем сценарии, если дата рейса существует тогда, мы не должны позволить пользователю удалять ряд. Чтобы сделать это, мы должны установить признак CL_GUI_ALV_GRID=>MC_STYLE_NO_DELETE_ROW к соответствующим рядам.
* Внутренняя таблица

LOOP AT GT_OUTTAB INTO LS_OUTTAB.
CLEAR LS_OUTTAB-HANDLE_STYLE.
CLEAR : LS_HANDLE_STYLE.
L_INDEX = SY-TABIX.
REFRESH LT_HANDLE_STYLE.
IF NOT LS_OUTTAB-FLDATE IS INITIAL.
LS_HANDLE_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_NO_DELETE_ROW.
INSERT LS_HANDLE_STYLE INTO TABLE LT_HANDLE_STYLE.
• Копировать ваш handle_style к handle_style текущего ряда gt_outtab.
INSERT LINES OF LT_HANDLE_STYLE INTO TABLE LS_OUTTAB-HANDLE_STYLE.
MODIFY GT_OUTTAB FROM LS_OUTTAB INDEX L_INDEX.
ENDIF.
ENDLOOP.
• Расположение
GS_LAYOUT-STYLEFNAME = 'HANDLE_STYLE'.

4. Регистрируем события, чтобы вызвать событие DATA_CHANGED , когда изменяем строки, или нажимаем «ENTER».
* Произвольно DATA_CHANGED срабатывает при нажатии клавиши «ENTER».

CALL METHOD OBJ_GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.

CALL METHOD OBJ_GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.

5. В методе HANDLE_DATA_CHANGED мы должны утвердить это.
METHOD HANDLE_DATA_CHANGED.
*-проверить условие(состояние) удаления
CALL METHOD CHECK_DELETE_COND( ER_DATA_CHANGED ).

ENDMETHOD. " handle_data_changed
* -----------------------------------------------------------------------
*-Метод проверки условия удаления
METHOD CHECK_DELETE_COND.
DATA: DL_DEL_ROW TYPE LVC_S_MOCE,
LS_OUTTAB LIKE LINE OF GT_OUTTAB,
DL_TABIX TYPE SY-TABIX.

DATA: LS_SELECTED_ROW TYPE LVC_S_ROID ,
LT_SELECTED_ROWS TYPE LVC_T_ROID .

FIELD-SYMBOLS: <FS_OUTTAB> TYPE TABLE.

ASSIGN PR_DATA_CHANGED->MP_MOD_ROWS->* TO <FS_OUTTAB>.
CALL METHOD OBJ_GRID->GET_SELECTED_ROWS
IMPORTING
ET_ROW_NO = LT_SELECTED_ROWS.
LOOP AT LT_SELECTED_ROWS INTO LS_SELECTED_ROW.
READ TABLE DT_COALUL INTO LS_OUTTAB INDEX LS_SELECTED_ROW-ROW_ID.
IF SY-SUBRC = 0.
IF NOT LS_OUTTAB-FLDATE IS INITIAL.
MESSAGE I000(0K) WITH 'Рейс не может быть удален'(043).
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
ENDMETHOD. "check_delete_cond
FoLKo написал:
Скажите существует ли возможность отловить <перемещение> указателя на другую ячейку (без изменения данных) ?
Спасибо! :-)

Насколько мне известно нет. А зачем это нужно ?


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

Зарегистрирован:
Пн, сен 18 2006, 10:37
Сообщения: 177
Откуда: Беларусь
Пол: Мужской
Спасибо, попробую!

4 ROKO:
А какие типы у LS_HANDLE_STYLE и LT_HANDLE_STYLE ? :roll:

> Насколько мне известно нет. А зачем это нужно ?
Думал сделать табличку и чтобы при перемещении, рядом в дополнительных полях отображались подробные сведения о выбранной строке.

_________________
Regards


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

Зарегистрирован:
Пт, авг 04 2006, 20:56
Сообщения: 1006
Откуда: 37 МИКРОРАЙОН
Пол: Мужской
FoLKo написал:
Спасибо, попробую!

4 ROKO:
А какие типы у LS_HANDLE_STYLE и LT_HANDLE_STYLE ? :roll:

Code:
       ls_handle_style TYPE lvc_s_styl
       lt_handle_style TYPE lvc_t_styl

FoLKo написал:
Думал сделать табличку и чтобы при перемещении, рядом в дополнительных полях отображались подробные сведения о выбранной строке.

Это при вводе значения что-ли в ячейку?


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

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


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

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


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

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