Текущее время: Ср, авг 06 2025, 00:20

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Работа через таблицу стилей в ALV GRID.
СообщениеДобавлено: Ср, июн 17 2015, 11:01 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, авг 14 2009, 09:17
Сообщения: 91
Приветствую, коллеги.

Недавно столкнулся с такой ситуацией при работе с ALV-Grid. Требуется при изменении ячейки «A» в строке открывать или закрывать на редактирование другую ячейку «B» в поле типа дата.

В своей разработке использую объектную модель: класс «CL_GUI_CUSTOM_CONTAINER», класс «CL_GUI_ALV_GRID».

1.При первоначальном выводе данных (IT_OUTTAB) на экран:
• ячейка «B» закрыта на редактирование через таблицу стилей (LVC_T_STYL) по строке при помощи использования атрибута «CL_GUI_ALV_GRID=> MC_STYLE_DISABLED»;
• при определении каталога полей поле открыто на редактирование (LVC_S_FCAT-EDIT = «Х»), к которому относится ячейка «B»;
• зарегистрировано событие на изменение «HANDLE_DATA_CHANGED»;
• метод "CL_GUI_ALV_GRID->SET_READY_FOR_INPUT"=1,т.е. ALV готов к вводу данных.
2.При изменении ячейки «A» в строке через срабатывания событие на изменение «HANDLE_DATA_CHANGED»:
• открывается на редактирование ячейка «B» в поле типа дата через изменения строки для ячейки «B» в таблице стилей (LVC_T_STYL) по строке при помощи использования атрибута «CL_GUI_ALV_GRID=> MC_STYLE_ENABLED»;
• обновляется вывод данных (IT_OUTTAB) на экран при помощи методов «CL_GUI_ALV_GRID->REFRESH_TABLE_DISPLAY» и «CL_GUI_CFW=>FLUSH».
3. Визуально ячейка «В» на текущий момент открыто на редактирование, но После выбора значения даты из появившегося на экране календаря, ячейка «В» в поле типа дата по строке не обновляется на выбранное значение. Складывалось впечатление, что ячейка «В» в поле типа дата по строке так и осталось закрытой от редактирования независимо от того, что на выше описанном шаге №2 я её открыл.

При анализе выше указанной ситуации через отладчик я выяснил, что строка для ячейки «B» в таблице стилей (LVC_T_STYL) по строке не изменилась на статус «Открыта на редактирование» (то что было выполнено в выше описанном шаге №2), а осталось в статусе «Закрыта на редактирование» (то что было выполнено в выше описанном шаге №1). Получается вызванные мною методы («CL_GUI_ALV_GRID->REFRESH_TABLE_DISPLAY» и «CL_GUI_CFW=>FLUSH») в выше описанном шаге №2 для актуализации выводимых данных на экран (IT_OUTTAB) не обновили содержимое таблиц стилей (LVC_T_STYL) по каждой строке.

Подскажите пожалуйста, как мне решить выше описанную у меня проблему, т.е. корректно в динамике обеспечить выбор значения даты из календаря для ячейки «B» в поле типа дата по строке при условии открытия ячейки «B» на редактирование.

Версия компонентов SAP NetWeaver AS ABAP 7.31.

Заранее благодарю.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Работа через таблицу стилей в ALV GRID.  Тема решена
СообщениеДобавлено: Ср, июн 17 2015, 11:38 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
Много букв, но попробую осилить :wink:

Предлагаю понять, какую именно таблицу вы обновляете (на Frontend'e или в контексте процесса). Синхронизация данных между этими двумя инстанциями происходит как раз через CL_GUI_CFW=>FLUSH. Непонятно также, что именно вы ожидаете увидеть, прерывая, фактически, процесс изменения данных пользователем при обработки события DATA_CHANGED.

Я бы построил процесс следующим образом:
1) ALV Grid создать с флагом I_APPL_EVENTS = 'X' - это мне даст выход в PAI/PBO обработку экрана;
2) при обработке события DATA_CHANGED выставить глобальный флаг (нужна доп/обработка таблицы данных);
3) в PAI-обработке вызвать синхронизацию данных CL_GUI_CFW=>FLUSH;
4) в PAI-обработке изменить содержимое таблицы стилей + снять глобальный флаг (!);
5) в PBO-обработке сделать Soft Refresh ALV Grid.

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

Если мне память не изменяет, зарегистрировав событие ENTER (метод REGISTER_EDIT_EVENT), получим эффект пункта 1), но без флага Application Events при нажатии пользователем кнопки ввода... :roll:

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Работа через таблицу стилей в ALV GRID.
СообщениеДобавлено: Ср, июн 17 2015, 15:26 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
как вариант:
у события data_changed есть параметр er_data_changed -
объект класса cl_alv_changed_data_protocol,
в котором есть метод modify_cell, в который можно передать поле со стилями
и на всякий случай вызвать cl_gui_cfw=>flush.
есть еще метод cl_gui_alv_grid->set_delta_cells, но его надо осторожно применять
в этом событии


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Работа через таблицу стилей в ALV GRID.
СообщениеДобавлено: Ср, июн 17 2015, 20:07 
Ассистент
Ассистент

Зарегистрирован:
Чт, май 17 2007, 16:31
Сообщения: 40
Откуда: Санкт-Петербург
В CL_ALV_CHANGED_DATA_PROTOCOL для изменения стилей есть специальный метод MODIFY_STYLE. Пример использования в BCALV_GRID_EDIT.
Или из perform_semantic_checks:
Code:
*     заново рассчитать стили ячеек
      PERFORM fill_celltab.

*     собственно изменить стили в гриде
*      CALL METHOD er_data_changed->modify_cell
*        EXPORTING
*          i_row_id    = wa_row-row_id
*          i_fieldname = 'CELLTAB'
*          i_value     = wa_9003_grid-celltab.

*     работать с локальной копией CELLTAB, т.к. er_data_changed->modify_style
*     меняет таблицу саму <fs_grid>-celltab, по которой делается LOOP.

      DATA: lt_celltab LIKE wa_9003_grid-celltab.

      FIELD-SYMBOLS:
            <fs_style> LIKE LINE OF lt_celltab. " <fs_grid>-celltab

      REFRESH lt_celltab.
      APPEND LINES OF wa_9003_grid-celltab TO lt_celltab.

      LOOP AT lt_celltab ASSIGNING <fs_style>.
        CALL METHOD er_data_changed->modify_style
          EXPORTING
            i_row_id    = wa_row-row_id
            i_fieldname = <fs_style>-fieldname
            i_style     = <fs_style>-style.
      ENDLOOP.


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

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


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

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


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

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