SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Tabbed block. Запоминать закладку.



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
flex
Специалист
Специалист



Joined: 02 Feb 2011
Posts: 50

PostPosted: Fri Nov 09, 2012 12:34 pm    Post subject: Tabbed block. Запоминать закладку. Reply with quote

Всем привет!
Товарищи, помогите разобраться с тем, как запоминать закладку.

Использую LDB PNP и после pnp-шного экрана с помощью subscreen и tabbed block добавляю несколько закладок.

Code:

SELECTION-SCREEN: BEGIN OF TABBED BLOCK params FOR 2 LINES,
                    TAB (50) text-001 USER-COMMAND zucomm1 DEFAULT SCREEN 1001,
                    TAB (50) text-002 USER-COMMAND zucomm2 DEFAULT SCREEN 1002,
                    TAB (50) text-003 USER-COMMAND zucomm3 DEFAULT SCREEN 1003,
                    TAB (50) text-004 USER-COMMAND zucomm4 DEFAULT SCREEN 1004,
                  END OF BLOCK params.


Запускаю, программа отработала. Нажимаю назад - скидывает на первую вкладку (что и логично). Мне нужно, чтобы закладка запоминалась.

И хочется сделать по-уму. Итак, возможно ли как-нибудь обойтись без выгрузки закладки в память?

Пытался делать что-то в этом роде, но я думаю это не совсем правильно. Может быть есть какая-то таблица переменных определенной сессии программы?...

Code:

  IMPORT g_last_tab FROM MEMORY ID 'ZUCOMM'.

  IF g_last_tab IS NOT INITIAL.
    CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
      EXPORTING
        functioncode           = 'ZUCOMM2'
      EXCEPTIONS
        function_not_supported = 1
        OTHERS                 = 2.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
  ENDIF.
Back to top
View user's profile Send private message
flex
Специалист
Специалист



Joined: 02 Feb 2011
Posts: 50

PostPosted: Fri Nov 09, 2012 12:48 pm    Post subject: Reply with quote

Насчет 'SAPGUI_SET_FUNCTIONCODE' я наверное загнул.

Нашел вариант правильней:

Code:
 
IMPORT g_last_tab FROM MEMORY ID 'ZUCOMM'.

  IF g_last_tab IS NOT INITIAL.
    CONCATENATE '100' g_last_tab+6(1) INTO g_name_last_tab.
    params-dynnr = g_name_last_tab.
    params-activetab = g_last_tab.
  ENDIF.


Единственное, что не устраивает, что при следующем запуске программы в таком случае будет запомненная закладка. А в моем случае мне нужно запоминать закладку только для так сказать определенной программной сессии. Запустили->выбрали закладку-> программа отработала->нажали назад на селекционный->там запомненная закладка выбралась->вышли из программы->по умолчанию 1-я закладка.
Back to top
View user's profile Send private message
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Fri Nov 09, 2012 12:52 pm    Post subject: Reply with quote

А кто мешает Вам сбросить память при запуске транзакции? Хотя может есть вообще другой способ управления закладками. Сходу не помню. Хотя кажется, что для этого используется глобальная переменная, а не область памяти. Эта переменная автоматом очиститься, когда выйдете из транзакции.
_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Fri Nov 09, 2012 1:09 pm    Post subject: Reply with quote

Используйте для присвоения активной закладки событие INITIALIZATION (перед вызовом экрана выбора) и событие LOAD-OF-PROGRAM для отслеживания первого запуска программы.
Code:
LOAD-OF-PROGRAM.
  first_call = 'X'.

INITIALIZATION.
  IF first_call IS INITIAL.
    params-activetab = g_last_tab.
  ELSE.
    params-activetab = 'ZUCOMM2'.
    CLEAR first_call.
  ENDIF.

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
flex
Специалист
Специалист



Joined: 02 Feb 2011
Posts: 50

PostPosted: Fri Nov 09, 2012 1:24 pm    Post subject: Reply with quote

Да, я через INITIALIZATION и "выбирал" вкладку, забыл написать.

Удав wrote:
Используйте для присвоения активной закладки событие INITIALIZATION (перед вызовом экрана выбора) и событие LOAD-OF-PROGRAM для отслеживания первого запуска программы.
Code:
LOAD-OF-PROGRAM.
  first_call = 'X'.

INITIALIZATION.
  IF first_call IS INITIAL.
    params-activetab = g_last_tab.
  ELSE.
    params-activetab = 'ZUCOMM2'.
    CLEAR first_call.
  ENDIF.


Хм... Когда нажимаю "назад", то по-новой вызывается LOAD-OF-PROGRAM. И получается, что эта переменная всегда будет заполнена.

Может ещё какая-то проблема в том, что я 'REUSE_ALV_GRID_DISPLAY' использую?
Back to top
View user's profile Send private message
flex
Специалист
Специалист



Joined: 02 Feb 2011
Posts: 50

PostPosted: Fri Nov 09, 2012 1:34 pm    Post subject: Reply with quote

XXX_:) wrote:
А кто мешает Вам сбросить память при запуске транзакции? Хотя может есть вообще другой способ управления закладками. Сходу не помню. Хотя кажется, что для этого используется глобальная переменная, а не область памяти. Эта переменная автоматом очиститься, когда выйдете из транзакции.


Заметил, что запуская через транзакцию переменная в MEMORY ID ''... чистится, так что мне подходит такой вариант:

Code:

INITIALIZATION.

    IMPORT g_last_tab FROM MEMORY ID 'ZUCOMM'.

    IF g_last_tab IS NOT INITIAL.
      CONCATENATE '100' g_last_tab+6(1) INTO g_name_last_tab.
      params-dynnr = g_name_last_tab.
      params-activetab = g_last_tab.
      gv_actvivetab = g_last_tab+6(1).
    ENDIF.


Но запуская как программу в se38/se80 - переменная остается в памяти.
Back to top
View user's profile Send private message
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Fri Nov 09, 2012 1:37 pm    Post subject: Reply with quote

Думаю, что Вам нужно запускать через транзакцию как это будет делать пользователь. А как вы обрабатываете кнопку "Назад" по которой снова попадаете на селекционный экран.
_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
flex
Специалист
Специалист



Joined: 02 Feb 2011
Posts: 50

PostPosted: Fri Nov 09, 2012 1:42 pm    Post subject: Reply with quote

XXX_:) wrote:
Думаю, что Вам нужно запускать через транзакцию как это будет делать пользователь. А как вы обрабатываете кнопку "Назад" по которой снова попадаете на селекционный экран.


Стандартным alv-шным статусом пользуюсь через фм 'REUSE_ALV_GRID_DISPLAY', то есть не обрабатываю сам. Я подозреваю все переменные чистятся.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.