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

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


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

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


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

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