Текущее время: Пт, июл 25 2025, 05:54

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


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

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


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

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