Текущее время: Вт, апр 23 2024, 15:11

Часовой пояс: 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
Сообщения: 347
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 часа


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

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


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

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