Текущее время: Сб, авг 02 2025, 22:22

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: REUSE_ALV_GRID_DISPLAY_LVC
СообщениеДобавлено: Вт, сен 14 2010, 16:13 
Начинающий
Начинающий

Зарегистрирован:
Чт, июн 25 2009, 10:56
Сообщения: 14
Добрый вечер, господа.

Есть редактируемый ФМ REUSE_ALV_GRID_DISPLAY_LVC.

Задача - при нажатии кнопки выхода проверить были ли изменения в ячейках,
и, если были, окошко с вопросом 'Данные не сохранятся, сохранить?',
и, соответственно, сохранить изменения перед выходом.

Есть два обработчика вида:

Code:
  lt_event-name = 'DATA_CHANGED'.
  lt_event-form = 'DO_DATA_CHANGED'.
  APPEND lt_event.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
       EXPORTING
             i_callback_user_command  = 'ALV_USER_COMMAND'
            it_events                = lt_event[]
       TABLES
            t_outtab                 = gt_data.



Code:
FORM alv_user_command USING r_ucomm  LIKE sy-ucomm
                                               rs_selfield TYPE slis_selfield.

  DATA: ref_grid TYPE REF TO cl_gui_alv_grid,

  CASE r_ucomm.
    WHEN 'EXIT'.

     IF ref_grid IS INITIAL.
        CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
             IMPORTING
                  e_grid = ref_grid.
      ENDIF.

*      IF NOT ref_grid IS INITIAL.
*        CALL METHOD ref_grid->check_changed_data
*          IMPORTING
*            e_valid = flag_edit.
*      ENDIF.
*     rs_selfield-exit = 'X'.
   ENDCASE.
ENDFORM.



Code:
FORM do_data_changed USING data_changed TYPE REF TO
                                        cl_alv_changed_data_protocol.
break-point.
ENDFORM.


При нажатии кнопки выхода сначала срабатывает первый, потом второй.
Как решить задачу?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: REUSE_ALV_GRID_DISPLAY_LVC
СообщениеДобавлено: Ср, сен 15 2010, 06:04 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Все правильно. В Вашем случае Событие DATA_CHANGED можно вызвать по стандартной кнопке сохранить (&DATA_SAVE) или принудительно (call method ref_grid->check_changed_data). Также событие DATA_CHANGED отрабатывает только тогда, когда были какие-либо изменения, иначе нет. Следовательно, чтобы отследить, пытается ли пользователь выйти из программы предварительно не сохранив данные по кнопке сохранить, нужно
Code:
FORM do_data_changed USING data_changed TYPE REF TO
                                        cl_alv_changed_data_protocol.
...
  if sy-ucomm = 'EXIT'.
Сохранить?
  endif.
...
ENDFORM.


Code:
FORM alv_user_command USING r_ucomm  LIKE sy-ucomm
                                               rs_selfield TYPE slis_selfield.

  DATA: ref_grid TYPE REF TO cl_gui_alv_grid,

  CASE r_ucomm.
...
    WHEN 'EXIT'.

     IF ref_grid IS INITIAL.
        CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
             IMPORTING
                  e_grid = ref_grid.
      ENDIF.

      IF NOT ref_grid IS INITIAL.
        CALL METHOD ref_grid->check_changed_data
          IMPORTING
            e_valid = flag_edit.
      ENDIF.
...
   ENDCASE.
ENDFORM.


Вроде так...

Также советую посмотреть примеры из пакета SLIS + в гугле есть много теоретической информации по АЛВ.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: REUSE_ALV_GRID_DISPLAY_LVC
СообщениеДобавлено: Ср, сен 15 2010, 09:09 
Начинающий
Начинающий

Зарегистрирован:
Чт, июн 25 2009, 10:56
Сообщения: 14
Besa, спасибо за ответ.
Но пользователь может нажать кнопку 'Не сохранять'
или вообще 'Отмена' чтобы остатьтся в гриде.
В этом случае такая схема не отработает.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: REUSE_ALV_GRID_DISPLAY_LVC
СообщениеДобавлено: Ср, сен 15 2010, 09:30 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
ANkom написал(а):
Besa, спасибо за ответ.
Но пользователь может нажать кнопку 'Не сохранять'
или вообще 'Отмена' чтобы остатьтся в гриде.
В этом случае такая схема не отработает.


Цитата:
...Задача - при нажатии кнопки выхода проверить были ли изменения в ячейках,
и, если были, окошко с вопросом 'Данные не сохранятся, сохранить?'...


По поводу, кнопок " 'Не сохранять' или вообще 'Отмена' ", откуда же я могу знать о чем Вы там с пользователями договорились и какую логику придумали , однозначного ответа нет. Я привел достаточно информации чтобы Вам самому подумать и решить Вашу задачу...


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

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


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

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


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

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