Posted: Fri Nov 09, 2012 12:34 pm Post subject: Tabbed block. Запоминать закладку.
Всем привет!
Товарищи, помогите разобраться с тем, как запоминать закладку.
Использую 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.
Насчет '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-я закладка.
Age: 41 Joined: 01 Feb 2008 Posts: 387 Location: Воронеж
Posted: Fri Nov 09, 2012 12:52 pm Post subject:
А кто мешает Вам сбросить память при запуске транзакции? Хотя может есть вообще другой способ управления закладками. Сходу не помню. Хотя кажется, что для этого используется глобальная переменная, а не область памяти. Эта переменная автоматом очиститься, когда выйдете из транзакции. _________________ Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Fri Nov 09, 2012 1:09 pm Post subject:
Используйте для присвоения активной закладки событие 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.
Да, я через 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' использую?
А кто мешает Вам сбросить память при запуске транзакции? Хотя может есть вообще другой способ управления закладками. Сходу не помню. Хотя кажется, что для этого используется глобальная переменная, а не область памяти. Эта переменная автоматом очиститься, когда выйдете из транзакции.
Заметил, что запуская через транзакцию переменная в 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 - переменная остается в памяти.
Age: 41 Joined: 01 Feb 2008 Posts: 387 Location: Воронеж
Posted: Fri Nov 09, 2012 1:37 pm Post subject:
Думаю, что Вам нужно запускать через транзакцию как это будет делать пользователь. А как вы обрабатываете кнопку "Назад" по которой снова попадаете на селекционный экран. _________________ Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Думаю, что Вам нужно запускать через транзакцию как это будет делать пользователь. А как вы обрабатываете кнопку "Назад" по которой снова попадаете на селекционный экран.
Стандартным alv-шным статусом пользуюсь через фм 'REUSE_ALV_GRID_DISPLAY', то есть не обрабатываю сам. Я подозреваю все переменные чистятся.
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.