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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Не отрабатывает событие TOP_OF_PAGE (Класс CL_GUI_ALV_GRID)
СообщениеДобавлено: Пт, июл 08 2011, 15:48 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, окт 15 2010, 14:06
Сообщения: 292
Приветствую. Помогите разрешить проблему.
Не отрабатываем собственное расширение для события TOP_OF_PAGE для класса.

Свой класс в программе создал. Сделал описание и реализацию события.
Сделал привязку своего события для класса.

А прога не заходит в реализацию. Что делать?

Класс - CL_GUI_ALV_GRID.
Привязку события делаю после выполнения метода SET_TABLE_FOR FORST_DISPLAY.
Класс выводится в контейнер на самодельном окне.

P.S. Вроде не <я не знать русский языка>, а что-то туплю. Видимо меня поглотил великий пятницо :(


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не отрабатывает событие TOP_OF_PAGE (Класс CL_GUI_ALV_GRID)
СообщениеДобавлено: Пт, июл 08 2011, 15:53 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, окт 15 2010, 14:06
Сообщения: 292
Да, почему-то в BCALV_TEST_GRID_EVENTS это событие тоже не отрабатывает


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не отрабатывает событие TOP_OF_PAGE (Класс CL_GUI_ALV_GRID)
СообщениеДобавлено: Пт, июл 08 2011, 15:54 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, окт 15 2010, 14:06
Сообщения: 292
А в BCALV_TEST_FULLSCREEN_EVENTS отрабатывает. Но тут он не в окне.
Помогите, плизззз


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не отрабатывает событие TOP_OF_PAGE (Класс CL_GUI_ALV_GRID)
СообщениеДобавлено: Пт, июл 08 2011, 16:44 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, окт 15 2010, 14:06
Сообщения: 292
Нашел мою же проблему тут:
http://www.sapfans.com/forums/viewtopic.php?f=3&t=66564
Но челу не отчетили. Плохо


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не отрабатывает событие TOP_OF_PAGE (Класс CL_GUI_ALV_GRID)
СообщениеДобавлено: Пт, июл 08 2011, 16:56 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, окт 15 2010, 14:06
Сообщения: 292
Немцы говорят, что в документашке к классу нету инфы по событию TOP_OF_PAGE.
http://www.abapforum.com/forum/viewtopic.php?t=253
Похоже, надо придумывать как обойтись без этой темы.
Печально


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не отрабатывает событие TOP_OF_PAGE (Класс CL_GUI_ALV_GRID)
СообщениеДобавлено: Пт, июл 08 2011, 17:22 
Специалист
Специалист

Зарегистрирован:
Вт, сен 15 2009, 16:41
Сообщения: 201
Пол: Мужской
О, Степик появился, и сразу же неординарными вопросами:)))) Отрадно отрадно.
Посмотри функцию вывода
REUSE_ALV_GRID_DISPLAY_LVC.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Не отрабатывает событие TOP_OF_PAGE (Класс CL_GUI_ALV_GRID)
СообщениеДобавлено: Сб, июл 09 2011, 07:44 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

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

Свой класс в программе создал. Сделал описание и реализацию события.
Сделал привязку своего события для класса.

А прога не заходит в реализацию. Что делать?

Класс - CL_GUI_ALV_GRID.
Привязку события делаю после выполнения метода SET_TABLE_FOR FORST_DISPLAY.
Класс выводится в контейнер на самодельном окне.

P.S. Вроде не <я не знать русский языка>, а что-то туплю. Видимо меня поглотил великий пятницо :(

Каких результатов добиваетесь?

1 - Самодельный экран. То есть там по мимо контейнера есть еще элементы и без динпро никак? Или же Вы просто используете динпро для того чтобы увидеть АЛВ в окне, а не на весь экран?(В таком случае можно использовать АЛВ ФМ указав I_SCREEN кооринаты).
2 - Нужно видеть шапку в сапе или основная цель при распечатке? Если при распечатке, то есть события PRINT_TOP_OF_PAGE, рисуете шапку и при распечатке она будет.

Почему в примерах по гриду ОО нету шапок и упоминания события TOP_OF_PAGE? Почему в примере BCALV_GRID_01 пишут - шапку можно увидеть только при распечатке и при просмотре алв лист? Так же в SALV, если юзать фулскрин то шапка есть, переводишь в контейнер - ее нету. Я думаю, традиционную шапку алв можно сделать только на фулскрине. То есть, когда мы используем АЛВ ФМ и указываем на шапку(обычная или ХТМЛ не важно), у системы в распоряжении весь экран и она его сплитует на два контейнера - в первом алв, во втором шапка. Когда указываем рабочую область "контейнер" для АЛВ ОО, то у системы есть только контейнер, она(система) не может использовать экран, потому что экран не ее(системы), а Ваш. Тем самый не может сплитовать на доп контейнер для шапки, потому что сплитуется только экран. Контейнер не сплитуется. Все имхо.

Решение вопроса зависит от ожидаемого результата. Если нужно использовать строго контейнер на экране для алв и видеть шапку как в АЛВ ФМ, то можно попробовать дорисовать вручную еще один контейнер для шапки и собрать шапку в ручную. Такую же шапку повторить в событии PRINT_TOP_OF_PAGE для распечатки.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не отрабатывает событие TOP_OF_PAGE (Класс CL_GUI_ALV_GRID)
СообщениеДобавлено: Вт, июл 12 2011, 08:29 
Начинающий
Начинающий

Зарегистрирован:
Пн, июл 11 2011, 09:34
Сообщения: 3
Сталкивался с такой проблемой.
Помог вызов метода list_processing_events перед вызовом set_table_for_first_display.

Code:
* вызываем обработку события top_of_page
    CALL METHOD ваш_алв_объект->list_processing_events
      EXPORTING
        i_event_name = 'TOP_OF_PAGE'.


Однако у меня привязка события была до вызова того же set_table_for_first_display.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Не отрабатывает событие TOP_OF_PAGE (Класс CL_GUI_ALV_GRID)
СообщениеДобавлено: Вт, июл 12 2011, 14:42 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Roronoa Zoro написал(а):
Сталкивался с такой проблемой.
Помог вызов метода list_processing_events перед вызовом set_table_for_first_display.

Code:
* вызываем обработку события top_of_page
    CALL METHOD ваш_алв_объект->list_processing_events
      EXPORTING
        i_event_name = 'TOP_OF_PAGE'.


Однако у меня привязка события была до вызова того же set_table_for_first_display.

Хорошо, если это работает :)
Только я вот не могу догнать как пример соорудить :oops: . Попробовал несколько вариантов, с использованием Вашего решения, не вижу я шапку от АЛВ в контейнере. Если не затруднит скиньте пример.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не отрабатывает событие TOP_OF_PAGE (Класс CL_GUI_ALV_GRID)
СообщениеДобавлено: Вт, июл 12 2011, 17:31 
Начинающий
Начинающий

Зарегистрирован:
Пн, июл 11 2011, 09:34
Сообщения: 3
Вот накидал тут на скорую руку. Заодно сам вспомнил. Ключевым моментом являет еще создание объекта заголовка. Без него в обработчик заходить отказывается. Если захотите запустить создайте экран 100 и на нем
2 контейнера 'CONT' и 'CONT_HEADER' для АЛВ и заголовка соответсвенно.

Code:
REPORT ztestprg NO STANDARD PAGE HEADING LINE-SIZE 255.


* алв данные
DATA: go_alv         TYPE REF TO cl_gui_alv_grid,
      go_cont        TYPE REF TO cl_gui_custom_container,
      go_cont_header TYPE REF TO cl_gui_custom_container,
      gt_fcat        TYPE lvc_t_fcat,
      gs_layo        TYPE lvc_s_layo,
      gt_out         TYPE TABLE OF zco_debit.

DATA: go_document        TYPE REF TO cl_dd_document.

** предопределение класса для перехвата событий
CLASS lcl_event_handler DEFINITION DEFERRED.

* объект класса для перехвата событий
DATA: go_event_handler   TYPE REF TO lcl_event_handler .

*---------------------------------------------------------------------*
* CLASS lcl_event_handler DEFINITION
*---------------------------------------------------------------------*
* Класс для перехвата собатий - объявление
*---------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION.
  PUBLIC SECTION.
    METHODS:
      handle_top_of_page
        FOR EVENT top_of_page  OF cl_gui_alv_grid
            IMPORTING e_dyndoc_id sender.

  PRIVATE SECTION.
    METHODS:
      set_header_text IMPORTING e_dyndoc_id TYPE REF TO cl_dd_document.
ENDCLASS.

*---------------------------------------------------------------------*
* CLASS lcl_event_handler IMPLEMENTATION
*---------------------------------------------------------------------*
* Класс для перехвата собатий - описание
*---------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION .
  METHOD handle_top_of_page.
    CALL METHOD e_dyndoc_id->initialize_document.

    CALL METHOD me->set_header_text
      EXPORTING
        e_dyndoc_id = e_dyndoc_id.

    CALL METHOD e_dyndoc_id->display_document
      EXPORTING
        parent = go_cont_header.

  ENDMETHOD.

  METHOD set_header_text.

    CALL METHOD e_dyndoc_id->add_text
      EXPORTING
        text      = 'Hello, World!'.

  ENDMETHOD.
ENDCLASS.
*---------------------------------------------------------------------*
*       CLASS lcl_event_handler IMPLEMENTATION
*---------------------------------------------------------------------*


*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
* отображаем данные
  PERFORM display.
ENDMODULE.                 " STATUS_0100  OUTPUT

*&---------------------------------------------------------------------*
*&      Form  DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display.

  IF go_alv IS INITIAL.

* создаем контейнер
    CREATE OBJECT go_cont
      EXPORTING
        container_name     = 'CONT'.

* создаем контейнер для шапки
    CREATE OBJECT go_cont_header
      EXPORTING
        container_name     = 'CONT_HEADER'.

* создаем объект ALV
    CREATE OBJECT go_alv
      EXPORTING
        i_parent           = go_cont.

* создаём объект заголовка
    CREATE OBJECT go_document
      EXPORTING
        style = 'ALV_GRID'.

* обработчик событий
    CREATE OBJECT go_event_handler.

* регим события
    SET HANDLER go_event_handler->handle_top_of_page
            FOR ALL INSTANCES.

* заполняем филдкаталог
    CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
          EXPORTING
               i_structure_name       = 'SFLIGHT'
          CHANGING
               ct_fieldcat            = gt_fcat
          EXCEPTIONS
               inconsistent_interface = 1
               program_error          = 2
               OTHERS                 = 3.
     IF sy-subrc <> 0.
*    --Exception handling
     ENDIF.

* вызываем обработку события top_of_page
    CALL METHOD go_alv->list_processing_events
      EXPORTING
        i_event_name = 'TOP_OF_PAGE'
        i_dyndoc_id  = go_document.

* вызываем алв на экран
    CALL METHOD go_alv->set_table_for_first_display
      EXPORTING
        is_layout                     = gs_layo
      CHANGING
        it_outtab                     = gt_out
        it_fieldcatalog               = gt_fcat.

  ELSE.

* перерисовка алв
    CALL METHOD go_alv->refresh_table_display.

  ENDIF.

ENDFORM.                    " DISPLAY


************************************************************************
* Начало программы
************************************************************************
END-OF-SELECTION.
  CALL SCREEN 100.



код на 100 экране
Code:
PROCESS BEFORE OUTPUT.
  MODULE STATUS_0100.

PROCESS AFTER INPUT.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Не отрабатывает событие TOP_OF_PAGE (Класс CL_GUI_ALV_GRID)
СообщениеДобавлено: Вт, июл 12 2011, 18:13 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Так ведь контейнеров все равно два :wink:
Спасибо, за пример, хороший. Понятно, именно об этом я говорил :)
Этого не знал CALL METHOD go_alv->list_processing_events, просто предполагал не привязывать шапку к АЛВ событию, может жить сама.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не отрабатывает событие TOP_OF_PAGE (Класс CL_GUI_ALV_GRID)
СообщениеДобавлено: Вт, июл 12 2011, 19:41 
Начинающий
Начинающий

Зарегистрирован:
Пн, июл 11 2011, 09:34
Сообщения: 3
Контейнеров действительно два. Но может вам как вариант использовать splitter контейнер.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Не отрабатывает событие TOP_OF_PAGE (Класс CL_GUI_ALV_GRID)
СообщениеДобавлено: Ср, июл 13 2011, 03:07 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Roronoa Zoro написал(а):
Контейнеров действительно два. Но может вам как вариант использовать splitter контейнер.

Да, без проблем, конечно можно, автору решать.


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

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


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

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


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

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