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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Пн, апр 25 2016, 15:53 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Andrewsh, Вы с каждым шагом все больше запутываете свой простой вопрос.

Зачем Вы делаете CREATE OBJECT GRID1, а потом вызываете ФМ которые сам по себе создает свой экземпляр класса?

В общем, используйте объектную модель вывода АЛВ, для этого посмотрите простейший пример BCALV_GRID_01.

Далее зарегистрируйте нужные Вам события и используйте их обработчик. см те же BCALV_GRID_*


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Пн, апр 25 2016, 20:56 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Parazit написал:
Забыл один момент, в cl_gui_alv_grid для того, чтобы события DELAYED заработали, нужно вызвать метод register_delayed_event. В REUSE я такого не заметил.

Поясню последнюю фразу, а то с телефона не очень удобно было.
При поиске в REUSE по слову "register" я не нашел вызова register_delayed_event, а по слову "delay" вообще ничего не находится. Это значит, что без лишних извращений вы не получите желаемого.
Лично я не знаю ни одной причины, зачем нужно использовать функции "REUSE", т.к. кроме подобного геморроя ничего больше не получишь. Поэтому всегда пользуюсь классом CL_GUI_ALV_GRID и имею все преимущества объектного программирования, чего и Вам желаю!

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Вт, апр 26 2016, 09:54 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 26 2011, 10:56
Сообщения: 55
Понятно... т.е. надо переделать вывод в ALV на set_table_for_first_display и не пользоваться REUSE...
Попробую сейчас это сделать...

По set_table_for_first_display сразу встречный вопрос, возможно ли динамически менять ширину контейнера под размеры окна? Всегда пользовался REUSE по причине того, что он сам подстраивается под размер окна пользователя, а set_table_for_first_display (внутри можно поменять) надо как-то отловить событие изменение размера SAP окна и изменить размер контейнера так же....


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Вт, апр 26 2016, 10:44 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Andrewsh написал(а):
Понятно... т.е. надо переделать вывод в ALV на set_table_for_first_display и не пользоваться REUSE...
Попробую сейчас это сделать...

По set_table_for_first_display сразу встречный вопрос, возможно ли динамически менять ширину контейнера под размеры окна? Всегда пользовался REUSE по причине того, что он сам подстраивается под размер окна пользователя, а set_table_for_first_display (внутри можно поменять) надо как-то отловить событие изменение размера SAP окна и изменить размер контейнера так же....

Конечно можно, удобней всего использовать cl_gui_docking_container. Посмотрите примеры.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Вт, апр 26 2016, 11:01 
Почетный гуру
Почетный гуру

Зарегистрирован:
Пт, дек 04 2009, 12:52
Сообщения: 219
Andrewsh написал(а):
возможно ли динамически менять ширину контейнера под размеры окна?
Возножно. В screen-painter-е дважды кликаете по контейнеру, далее, в открывшемся в окошке атрибутов, в нижней его части устанавливаете галочки ИзмРазмера: ПоВертик. и ПоГоризонт.

Andrewsh написал(а):
Понятно... т.е. надо переделать вывод в ALV на set_table_for_first_display и не пользоваться REUSE
Это не так. Там где возможно использовать REUSE, его нужно использовать (чтобы понапрасну не плодить тонны ненужного кода и связанных с ним ошибок в экранной логике).
Вот примерный план действий:

Code:
* ОБЪЯВЛЯЕТЕ ГЛОБАЛЬНУЮ ПЕРЕМЕННУЮ
DATA go_alv_grid TYPE REF TO cl_gui_alv_grid .


* СОЗДАЕТЕ ОБРАБОТЧИК СОБЫТИЙ
*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS:
      handle_delayed_callback FOR EVENT delayed_callback OF cl_gui_alv_grid .
      .........
      .........
ENDCLASS.                    "lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION .
  METHOD handle_delayed_callback .

  ENDMETHOD .                    "handle_delayed_callback
  .........
  .........
ENDCLASS.                    "lcl_event_receiver DEFINITION

* ПРИ ВЫЗОВЕ REUSE РЕГИСТРИРУЕТЕ CALLBACK-ПОДПРОГРАММУ
*&---------------------------------------------------------------------*
*&      Form  GRID_SHOW
*&---------------------------------------------------------------------*
FORM grid_show .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'GRID_PFSTAT' " -->> callbeck-подпрограмма
      .........
      .........

ENDFORM .                    "GRID_SHOW

* В CALLBACK-ПОДПРОГРАММЕ УСТАНАВЛИВАЕТЕ ОБРАБОТЧИКИ СОБЫТИЙ ДЛЯ ОБЪЕКТА ГРИДА
*&---------------------------------------------------------------------*
*&      Form  grid_pfstat
*&---------------------------------------------------------------------*
FORM grid_pfstat                                            "#EC CALLED
      USING pt_extab TYPE slis_t_extab .                    "#EC *

* SET PF-STATUS 'GRID' EXCLUDING pt_extab .
* SET TITLEBAR 'TITLEBAR' WITH ''.

  CHECK go_alv_grid IS NOT BOUND .

* получение объекта грида
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = go_alv_grid.
  CHECK go_alv_grid IS BOUND .

* установка обработчика события
  SET HANDLER lcl_event_receiver=>handle_delayed_callback FOR go_alv_grid .

* регистрация события
  go_alv_grid->register_delayed_event(
      EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_delayed_move_curr_cell ).

ENDFORM . " grid_pfstat


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Вт, апр 26 2016, 11:08 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 351
Andrewsh написал(а):
...возможно ли динамически менять ширину контейнера под размеры окна?
Насколько я понял вопрос: см. viewtopic.php?f=13&t=92441&p=549302, последний ответ (от Besa).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Ср, апр 27 2016, 14:30 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 26 2011, 10:56
Сообщения: 55
Урааа! Заработало!!!
Сделал как написал "Бородин Игорь" - огромное спасибо!
Событие срабатывает, в отладчик уходит....
Осталась только одна проблема - REUSE_ALV_COMMENTARY_WRITE не обновляет текст. Т.е. что делаю:
Code:

METHOD handle_delayed_callback .
    BREAK-POINT.

    call function 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    importing
      e_grid        = grid1.

*получаем код столбца и строки по которой кликнули
    call method grid1->get_current_cell
              importing
                es_row_id = ls_row
                es_col_id = ls_col.

  REFRESH IT_LIST_COMMENTARY.
  CLEAR LS_LINE.
  LS_LINE-TYP  = 'S'.
  LS_LINE-KEY  = ''.
  LS_LINE-INFO = ls_col. "для проверки выведем просто код столбца
  clear ls_col.
  APPEND LS_LINE TO IT_LIST_COMMENTARY.


  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
       EXPORTING
            IT_LIST_COMMENTARY = IT_LIST_COMMENTARY
            I_END_OF_LIST_GRID = 'X'.

   grid1->refresh_table_display( i_soft_refresh = 'X' ).

  ENDMETHOD .     


В результате обновления не происходит :-(...

Строку grid1->refresh_table_display( i_soft_refresh = 'X' ) уже просто так... результат все равно тот-же..


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Ср, май 04 2016, 06:10 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 26 2011, 10:56
Сообщения: 55
Пока решил проблему выводом необходимой инфы просто в message в статус бар.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Чт, май 05 2016, 09:40 
Специалист
Специалист

Зарегистрирован:
Чт, дек 02 2010, 08:37
Сообщения: 156
REUSE_ALV_COMMENTARY_WRITE не обновляет текст, скорее всего, потому, что
в процедуре для события END-OF-LIST, вероятно есть команда REFRESH IT_LIST_COMMENTARY.
Т.к. событие END_OF_LIST отрабатывает после метода handle_delayed_callback, то все
изменения, записанные в IT_LIST_COMMENTARY меняются снова.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Пт, май 06 2016, 06:01 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 26 2011, 10:56
Сообщения: 55
Т.е. вы предлагаете в end_of_list выводить значение переменной которая будет меняться в delayed_call_back?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Пт, май 06 2016, 08:02 
Специалист
Специалист

Зарегистрирован:
Чт, дек 02 2010, 08:37
Сообщения: 156
Я предлагаю не затирать те значения, которые выведены в delayed_callback.
Или можете сделать переменную глобальной и использовать ее в end-of-list.
Лучше, конечно, чтобы все было в одном месте.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Пт, май 06 2016, 11:59 
Почетный гуру
Почетный гуру

Зарегистрирован:
Пт, дек 04 2009, 12:52
Сообщения: 219
Попробуйте после REUSE_ALV_COMMENTARY_WRITE вызвать cl_gui_cfw=>set_new_ok_code( new_code = 'DUMMY' ), чтобы инициировать PBO-логику.


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

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


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

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


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

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