Текущее время: Вс, июл 27 2025, 17:25

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: CL_GUI_ALV_GRID: принудительный запуск DATA_CHANGED
СообщениеДобавлено: Чт, сен 24 2009, 19:02 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пн, авг 08 2005, 15:50
Сообщения: 505
Откуда: München
Пол: Мужской
Добрый день всем!

Есть редактируемый ALV, где пользователь корректирует записи, добавляет новые. На каждое его действие вызывается событие DATA_CHANGED, где можно прогнать всякие проверки, запихнуть сообщения в журнал - в общем, всё привычно.

Теперь представим, что при запуске ALV в табличке уже имеются кое-какие данные, которые подгружены, скажем, из внешнего источника. Как проверить их корректность аналогичным образом? Ведь пока пользователь к ним не прикоснётся, DATA_CHANGED не отработает. Надо как бы перебрать все ячейки и для каждой запустить DATA_CHANGED. Есть идеи?

_________________
Le chevalier du SAP


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: CL_GUI_ALV_GRID: принудительный запуск DATA_CHANGED
СообщениеДобавлено: Чт, сен 24 2009, 21:22 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Заверните все проверки в DATA_CHANGED в подпрограмму и запускайте в цикле. Если надо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CL_GUI_ALV_GRID: принудительный запуск DATA_CHANGED
СообщениеДобавлено: Пт, сен 25 2009, 05:56 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Попробуйте зарегистрировать событие DATA_CHANGED на кнопку ENTER, потом при запуске программы сделайте имитацию нажатия ENTERa(на форуме где видел такое обсуждение), может получится.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CL_GUI_ALV_GRID: принудительный запуск DATA_CHANGED
СообщениеДобавлено: Пт, сен 25 2009, 07:22 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Besa написал:
Попробуйте зарегистрировать событие DATA_CHANGED на кнопку ENTER, потом при запуске программы сделайте имитацию нажатия ENTERa(на форуме где видел такое обсуждение), может получится.

Зачем заниматься извращениями и делать не явную и не чёткую логику отчёта?
Если есть необходимость проверить строки вн.таблицы на непротиворечивость и консистентность , то следует реализовать проверку в виде метода\подпрограммы\ФМ. Если какие то части кода пересекаются с кодом в обработчике события DATA_CHANGED - вынести их в отдельные методы\подпрограммы\ФМ и вызывать по мере необходимости.
John Doe правильно написал.

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CL_GUI_ALV_GRID: принудительный запуск DATA_CHANGED
СообщениеДобавлено: Пт, сен 25 2009, 13:06 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пн, авг 08 2005, 15:50
Сообщения: 505
Откуда: München
Пол: Мужской
sy-uname написал(а):
Зачем заниматься извращениями и делать не явную и не чёткую логику отчёта?
Если есть необходимость проверить строки вн.таблицы на непротиворечивость и консистентность , то следует реализовать проверку в виде метода\подпрограммы\ФМ. Если какие то части кода пересекаются с кодом в обработчике события DATA_CHANGED - вынести их в отдельные методы\подпрограммы\ФМ и вызывать по мере необходимости.
John Doe правильно написал.

Это всё верно, конечно. Просто редактируемый ALV предоставляет очень удобный интерфейс анализа ошибок ввода. Ошибки выкидывает в журнал во всплывающем окне, при двойном клике на ошибке фокус устанавливается в соответствующую ячейку. Ячейки с неправильно ведёнными данными подсвечены красными рамками.

Очень бы хотелось на этот механизм. Если сначала запустить проверку имеющихся данных, я пока не очень представляю, в какой форме вывалить ошибки… И как сделать так, чтобы пользователю было удобно с этим работать…

_________________
Le chevalier du SAP


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: CL_GUI_ALV_GRID: принудительный запуск DATA_CHANGED
СообщениеДобавлено: Пт, сен 25 2009, 13:27 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
sokov написал:
Это всё верно, конечно. Просто редактируемый ALV предоставляет очень удобный интерфейс анализа ошибок ввода. Ошибки выкидывает в журнал во всплывающем окне, при двойном клике на ошибке фокус устанавливается в соответствующую ячейку. Ячейки с неправильно ведёнными данными подсвечены красными рамками.

Очень бы хотелось на этот механизм. Если сначала запустить проверку имеющихся данных, я пока не очень представляю, в какой форме вывалить ошибки… И как сделать так, чтобы пользователю было удобно с этим работать…

Это вообще идеологически не верно - почему это вдруг прочитанные данные имеют ошибки и вываивают на пользователя проблему приведения данных в нормальный вид? Значит где то дыра в интерфейсе доступа к данным, кто то где то пишет в таблицы без проверок и т.п.
А проверку можно "вываливать" в виде журнала (см. примеры отчётов SBAL_DEMO_*) + можно светофорчик в строку добавить.

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CL_GUI_ALV_GRID: принудительный запуск DATA_CHANGED
СообщениеДобавлено: Пт, сен 25 2009, 13:43 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Чисто теоретически можно сделать примерно так:
Позвать метод CHANGE_DATA_FROM_INSIDE.
Позвать метод CHECK_CHANGED_DATA.
Написать обработчик на событие DATA_CHANGED.
В нем выдрать эксземпляр ER_DATA_CHANGED класса CL_ALV_CHANGED_DATA_PROTOCOL.

Прогнать отдельно написанные проверки и заполнить протокол так, как душе угодно.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: CL_GUI_ALV_GRID: принудительный запуск DATA_CHANGED
СообщениеДобавлено: Пт, сен 25 2009, 15:33 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пн, авг 08 2005, 15:50
Сообщения: 505
Откуда: München
Пол: Мужской
sy-uname написал(а):
Это вообще идеологически не верно - почему это вдруг прочитанные данные имеют ошибки и вываивают на пользователя проблему приведения данных в нормальный вид? Значит где то дыра в интерфейсе доступа к данным, кто то где то пишет в таблицы без проверок и т.п.
А проверку можно "вываливать" в виде журнала (см. примеры отчётов SBAL_DEMO_*) + можно светофорчик в строку добавить.

Да, так и есть: создаётся некий массив данных, который нужно затолкать, скажем, в БЕ. При этом пользователю предоставляется возможность подгрузить «рыбу» из другой БЕ и дополнить/отредактировать её. Здесь возможны ошибки – к примеру, какой-либо дебитор расширен на исходную БЕ, а на целевую – нет. Пользователь должен со всем этим разобраться. Исправить мелкие ошибки всяко быстрее, чем колотить с нуля. Но не суть.

Пономарев Артем написал:
Чисто теоретически можно сделать примерно так:
Позвать метод CHANGE_DATA_FROM_INSIDE.
Позвать метод CHECK_CHANGED_DATA.
Написать обработчик на событие DATA_CHANGED.
В нем выдрать эксземпляр ER_DATA_CHANGED класса CL_ALV_CHANGED_DATA_PROTOCOL.

Прогнать отдельно написанные проверки и заполнить протокол так, как душе угодно.

Ход мыслей абсолютно верный! Попробовал всякие варианты, но есть один затык: после любых программных изменений (CHANGE_DATA_FROM_INSIDE, APPEND ROWS, изменение таблицы данных + REFRESH) не вызывается событие DATA_CHANGED. Не помогает ни CHECK_CHANGED_DATA, ни REFRESH_TABLE_DISPLAY… Изменения, естественно, в таблице видны.

Есть идеи?

_________________
Le chevalier du SAP


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: CL_GUI_ALV_GRID: принудительный запуск DATA_CHANGED
СообщениеДобавлено: Пт, сен 25 2009, 16:09 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
sokov написал:
sy-uname написал(а):
Это вообще идеологически не верно - почему это вдруг прочитанные данные имеют ошибки и вываивают на пользователя проблему приведения данных в нормальный вид? Значит где то дыра в интерфейсе доступа к данным, кто то где то пишет в таблицы без проверок и т.п.
А проверку можно "вываливать" в виде журнала (см. примеры отчётов SBAL_DEMO_*) + можно светофорчик в строку добавить.

Да, так и есть: создаётся некий массив данных, который нужно затолкать, скажем, в БЕ. При этом пользователю предоставляется возможность подгрузить «рыбу» из другой БЕ и дополнить/отредактировать её. Здесь возможны ошибки – к примеру, какой-либо дебитор расширен на исходную БЕ, а на целевую – нет. Пользователь должен со всем этим разобраться. Исправить мелкие ошибки всяко быстрее, чем колотить с нуля. Но не суть.

Я бы реализовал следующую логику:
1. Выделил проверку одной записи в процедуру. Опция вывода ошибок на экран - отдельный параметр.
2. При загрузке данных для каждой строки, в произошла хотя бы одна ошибка, выставляется статус "Ошибка" (например с помощью "светофора")
3. Для пользователя предоставил бы возможность по даблклику на светофоре(или на всей строке) получить в отдельном окне протокол ошибок (повторный запуск процедуры)
4.В DATA_CHANGED сделать вызов той же процедуры, чтобы проверка отрабатывала и при изменении. Если после изменения ошибок не обнаружилось, менять статус на зеленый "светофор".

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CL_GUI_ALV_GRID: принудительный запуск DATA_CHANGED
СообщениеДобавлено: Пт, сен 25 2009, 16:28 
Специалист
Специалист

Зарегистрирован:
Сб, май 14 2005, 20:46
Сообщения: 108
Откуда: Санкт-Петербург
http://forums.sdn.sap.com/thread.jspa?m ... 14#4569714
http://forums.sdn.sap.com/thread.jspa?m ... 77#5776877


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CL_GUI_ALV_GRID: принудительный запуск DATA_CHANGED
СообщениеДобавлено: Сб, окт 17 2009, 23:57 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пн, авг 08 2005, 15:50
Сообщения: 505
Откуда: München
Пол: Мужской
В общем, изрядно помучившись, вышел на реализацию:

  1. Собираем данные во внутреннюю таблицу, скажем gt_data_to_load
  2. Инициализируем* ALV Grid с ПУСТОЙ внутренней таблицей, скажем gt_data
  3. После инициализации вызываем метод CL_GUI_ALV_GRID->APPEND_ROWS и передаём число строк в таблице gt_data_to_load. Затем сразу же вызываем CL_GUI_ALV_GRID->CHECK_CHANGED_DATA. Это приводит к тому, что в ALV добавляются пустые строки и мы вываливаемся в обработчик события DATA_CHANGED. Важно: до внесения пользователем изменений в таблицу ни в коем случае не вызывать REFRESH_TABLE_DISPLAY, а то потеряется лог ошибок! Почему это происходит, я так и не понял.
  4. В обработчике события DATA_CHANGED напихиваем данных в ALV из таблицы gt_data_to_load с помощью CL_ALV_CHANGED_DATA_PROTOCOL->MODIFY_CELL.
  5. После выхода из обработчика DATA_CHANGED оказываемся в коде сразу после вызова CL_GUI_ALV_GRID->CHECK_CHANGED_DATA. Данные, которые мы добавили в ALV, уже перенесены в таблицу gt_data (естественно, значения только тех ячеек, которые не скрыты и доступны для изменения). Скопировав недостающие данные (если нужно), убиваем таблицу gt_data_to_load – она нам больше не нужна. Далее работаем с gt_data.
  6. Работаем в редактируемым ALV как обычно.

* Можно нарисовать экран с контейнером и в PBO инициализировать объект, я же предпочитаю полноэкранный ALV – вызов REUSE_ALV_GRID_DISPLAY_LVC, затем в первой обработке события ON_TOP_OF_PAGE получаем объект GO_GUI_ALV_GRID с помощью GET_GLOBALS_FROM_SLVC_FULLSCR. Для приведённого алгоритма никакой разницы нет. Единственное, полноэкранный ALV автоматически не даёт сохранить данные, пока в логе есть красные ошибки, - просто не допускает к обработчику нажания на дискетку. Это достаточно удобно, пользователь не может это обойти (в нарисованном ALV пользователям как-то удавалось загасить лог и сохраниться).

_________________
Le chevalier du SAP


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

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


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

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


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

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