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

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


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

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


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

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