Текущее время: Вт, июл 29 2025, 15:57

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Сворачивающиеся области (Collapsible area)
СообщениеДобавлено: Вт, окт 21 2008, 08:09 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, окт 21 2008, 08:02
Сообщения: 71
Откуда: Moscow
Пол: Мужской
Здравствуйте!

В примерах для эргономики есть пример, демонстрирующий удобную функцию для пользовательского интерфейса - сворачивание отдельных блоков на экране выбора!

К сожалению программа написана одна для всех примеров и целиком понять логику работы конкретного случая не получилось.. Хотелось бы знать - использовал ли кто данный инструмент и по какому алгоритму он это реализовывал? Хотелось бы услышать ответ поподробнее... :oops:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 21 2008, 08:42 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, авг 28 2006, 11:24
Сообщения: 292
Пол: Мужской
1) Данный пример не для экранов выбора, а просто для экранов.
2) Логика следующая: в зависимости от нажатой кнопки, отображается либо подэкран с данными, либо подэкран без данных.
3) Для обработки экранов выбора смотрите примеры:
ABAP-примеры->ABAP-Экраны-> Экраны выбора

Для экранов выбора логика будет аналогичная:
- Добавляете на экран нужные кнопки. (см примеры "Возм. Операции пользователя")
- В зависимости от нажатых кнопок скрываете / отображаете нужные элементы экрана (см примеры "Обработка экранов выбора")


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сворачивающиеся области (Collapsible area)
СообщениеДобавлено: Вт, апр 06 2010, 17:47 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, окт 21 2008, 08:02
Сообщения: 71
Откуда: Moscow
Пол: Мужской
Прошло 1,5 года со времен моего первого сообщения на форуме, но я если честно так ни разу и не реализовывал области тем способом, который тут предлагается - слишком уж навернутая конструкция получалась.. К приятному удивлению для себя обнаружил класс CL_RECA_GUI_DYNPSUBSCR_FRAME который без каких либо проблем позволяет делать красивые экраны с 2 сворачивающимися областями.

1) создаете экран и подэкран на нем (например sub_rights_registry рамером где то 240 на 37 )
2) создаете логику экрана:
Code:
PROCESS BEFORE OUTPUT.
   MODULE pbo.
     CALL SUBSCREEN sub_rights_registry
              INCLUDING  gs_subscreen_rights_reg-repid
                                 gs_subscreen_rights_reg-dynnr.

PROCESS AFTER INPUT.
  CALL SUBSCREEN sub_rights_registry.
  MODULE pai.


2) в глобальных данных объявляете
Code:
data: go_gui_dynpsubscr_frame   TYPE REF TO cl_reca_gui_dynpsubscr_frame,
         gs_subscreen_rights_reg     type recascreen.


3) в РВО модуле создаете примерно вот такую конструкцию:
Code:
* BODY
* init dynpro subscreen frame
  IF go_gui_dynpsubscr_frame IS NOT BOUND.
    CREATE OBJECT go_gui_dynpsubscr_frame
      EXPORTING
        id_repid            = sy-repid
        id_dynnr_top        = '2010'
        id_dynnr_top_small  = '2000'
        id_dynnr_bottom     = '3010'
        id_height           = 1.
  ENDIF.

  CALL METHOD go_gui_dynpsubscr_frame->pbo
    IMPORTING
      ed_repid =  gs_subscreen_rights_reg-repid
      ed_dynnr = gs_subscreen_rights_reg-dynnr.

4) Рисуете экранчики: верхний развернутый 2010, верхний свернутый 2000 (в принципе там и рисовать ничего не надо, лишь бы был), и нижний.

Вот в приципе и все)). Единственное, что разработчики предполагали что данный класс не будет использоваться напрямую а предназначен для объявления наследованных от него локальных классов с переопределнными методами: собственная обработка PAI и PBO (мне хватило логики самих экранов) а также добавления возможности скрытия нижнего экрана в зависимости от определенного условия.

Вот.. просто подумал вдруг кому пригодится))


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сворачивающиеся области (Collapsible area)
СообщениеДобавлено: Ср, апр 07 2010, 10:33 
Почетный гуру
Почетный гуру

Зарегистрирован:
Пт, дек 04 2009, 12:52
Сообщения: 219
на ту же тему....

1) Создаем экран 0100, с двумя областями подэкранов (SUB0, SUB1)
в логике которого указываем следующее:
Code:
*------------------------------
PROCESS BEFORE OUTPUT.

  MODULE event_pbo.
* 1 подэкран
  MODULE event_pbo_subscreen.
  CALL SUBSCREEN sub0 INCLUDING call_prog call_subscreen.
  MODULE EVENT_PBO_POPSUBSCREEN.
* 2 подэкран
  MODULE event_pbo_subscreen.
  CALL SUBSCREEN sub1 INCLUDING call_prog call_subscreen.
  MODULE event_pbo_popsubscreen.
*
  MODULE event_pbo_finished.

*------------------------------
PROCESS AFTER INPUT.
  MODULE get_fcode.
*
  MODULE event_pai.
* 1 подэкран
  MODULE event_pai_subscreen.
  CALL SUBSCREEN sub0.
  MODULE event_pai_popsubscreen.
* 2 подэкран
  MODULE event_pai_subscreen.
  CALL SUBSCREEN sub1.
  MODULE event_pai_popsubscreen.
*
  MODULE event_pai_finished.
  MODULE fcode_exit.
  MODULE CLEAR_OKCODE.


2) Создаем два подэкрана 0200 и 0300

4) Создаем PF-статус 'MAIN100', с кнопкой 'EXIT'.

5) В программе пишем следующее:

Code:
REPORT  z_test2 .

DATA: ok-code       LIKE sy-ucomm,
*     ----- для первого подэкрана
      toggle_view_1 TYPE REF TO cl_toggle_view_mm,
      composite_1   TYPE REF TO cl_composite_screen_view_mm,
      one_view_1    TYPE REF TO cl_screen_view_mm,
*     ----- для второго подэкрана
      toggle_view_2 TYPE REF TO cl_toggle_view_mm,
      composite_2   TYPE REF TO cl_composite_screen_view_mm,
      one_view_2    TYPE REF TO cl_screen_view_mm.

INCLUDE lmeviewsf01.



*---------------------------------------------------------------------*
*       CLASS lcl_def_view_cmd DEFINITION
*---------------------------------------------------------------------*
*       ОБРАБОТЧИК ОК-КОДА                                            *
*---------------------------------------------------------------------*
CLASS lcl_def_view_cmd DEFINITION.
  PUBLIC SECTION.
    INTERFACES: if_command_mm.

ENDCLASS.
*---------------------------------------------------------------------*
*       CLASS lcl_def_view_cmd IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS lcl_def_view_cmd IMPLEMENTATION.
  METHOD if_command_mm~execute.

    CASE im_fcode.

      WHEN 'EXIT'.
*      PERFORM exit_program.
        LEAVE PROGRAM.
        CLEAR im_fcode.
      WHEN 'MEV4000BUTTON'.   "для 1 подэкрана: нажатие кнопки развернуть/свернуть
        ...
      WHEN 'MEV4001BUTTON'.   "для 2 подэкрана: нажатие кнопки развернуть/свернуть
        ...
    ENDCASE.
  ENDMETHOD.
ENDCLASS.



*-----------------------------------
INITIALIZATION.
  PERFORM make_screen .



*---------------------------------------------------------------------*
*       FORM make_screen
*---------------------------------------------------------------------*
*       СОЗДАНИЕ ЭКРАНА
*---------------------------------------------------------------------*
FORM make_screen.
  DATA:
        factory           TYPE REF TO if_view_factory_mm,
        cnt               TYPE REF TO cl_controller_mm,
        default_view      TYPE REF TO cl_window_mm,
        cmd_proc          TYPE REF TO cl_command_processors_mm,
        def_cmd           TYPE REF TO lcl_def_view_cmd.


  CALL FUNCTION 'MEVIEWS_GET_FACTORY'
       IMPORTING
            ex_view_factory = factory.

* Создание контейнера для подэкранов
  CREATE OBJECT default_view EXPORTING
                               im_dynpro = '0100'
                               im_prog = sy-cprog
                               im_max_subviews = 2     "кол-во подэкр.
                               im_pfstatus = 'MAIN100'.

  CALL METHOD default_view->set_name( 'xxx' ).            "#EC NOTEXT
  CALL METHOD default_view->set_label( ' ' ).

  CREATE OBJECT def_cmd.
  CREATE OBJECT cmd_proc.
  CALL METHOD cmd_proc->add( def_cmd ).
  CREATE OBJECT cnt EXPORTING im_commands = cmd_proc
                              im_model    = default_view.
* контроллер для контейнера подэкранов
  CALL METHOD default_view->set_controller( cnt ).



* ПЕРВЫЙ ПОДЭКРАН
* -----------------------------------------------
  CREATE OBJECT one_view_1 EXPORTING
                               im_dynpro = '0200'
                               im_prog = sy-cprog.
  CALL METHOD one_view_1->set_name( '---' ).
  CALL METHOD one_view_1->set_label( 'Первый подэкран' ).
* "открытые данные"
  toggle_view_1 =
             factory->make_toggle_view(
                  im_view_a  = one_view_1
                  im_name = 'toggle_1'
                  im_postfix = 0 ).
* "объект: закрытые-открытые данные"
  composite_1 = factory->make_complex_expand_view(
                  im_toggle_view = toggle_view_1
                  im_name = 'expand_data'
                  im_quickinfo_open = 'open'
                  im_postfix     = 0 ).


  CALL METHOD default_view->add EXPORTING
                                     im_screen_view = composite_1
                                     im_position = 0.

* Открываем ПЕРВЫЙ подэкран (2-открыть, 1-закрыть)
  CALL METHOD toggle_view_1->activate_subview_by_number( 2 ).

* ВТОРОЙ ПОДЭКРАН
* -----------------------------------------------
  CREATE OBJECT one_view_2 EXPORTING
                               im_dynpro = '0300'
                               im_prog = sy-cprog.
  CALL METHOD one_view_2->set_name( '---' ).
  CALL METHOD one_view_2->set_label( 'Второй подэкран' ).
* "открытые данные"
  toggle_view_2 =
             factory->make_toggle_view(
                  im_view_a  = one_view_2
                  im_name = 'toggle_2'
                  im_postfix = 0 ).
* "объект: закрытые-открытые данные"
  composite_2 = factory->make_complex_expand_view(
                  im_toggle_view = toggle_view_2
                  im_name = 'expand_data'
                  im_quickinfo_open = 'open'
                  im_postfix     = 0 ).


  CALL METHOD default_view->add EXPORTING
                                     im_screen_view = composite_2
                                     im_position = 0.

* Открываем ВТОРОЙ подэкран
  CALL METHOD toggle_view_2->activate_subview_by_number( 2 ).



* "Запускаем" экран
  CALL METHOD default_view->send.

  LEAVE PROGRAM.
ENDFORM.


6) P.S. вывод гридов можно писать в PBO подэкранов


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сворачивающиеся области (Collapsible area)
СообщениеДобавлено: Вт, ноя 01 2011, 20:21 
Специалист
Специалист

Зарегистрирован:
Чт, май 06 2010, 18:14
Сообщения: 152
ppeter а возможно ли этот способ применить для экрана выбора? Если да, то можете рассказать поподробнее как это реализовать.

_________________
Я не волшебник, я только учусь.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сворачивающиеся области (Collapsible area)
СообщениеДобавлено: Ср, ноя 02 2011, 12:05 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
femina_alba написал(а):
ppeter а возможно ли этот способ применить для экрана выбора? Если да, то можете рассказать поподробнее как это реализовать.

Киньте сюда код, по которому рисуется Ваш селективный экран. И объясните, для чего необходимо реализовать сворачивание как в теме.


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

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


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

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


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

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