Текущее время: Вт, авг 05 2025, 11:01

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


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

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


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

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