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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Перевод фокуса на нужную строку в salv
СообщениеДобавлено: Пн, апр 13 2009, 09:11 
Ассистент
Ассистент

Зарегистрирован:
Вт, авг 12 2008, 11:26
Сообщения: 39
Всем привет. Кто-нибудь знает как используя salv перевести видимую область на нужную строку? У меня есть таблица, содержащая около 1000 строк, при добавлении новой необходимо что пользователь ее видел. Единственное чего я смог добиться, это выделение добавленной строки, но фокус на нее не переходит.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод фокуса на нужную строку в salv
СообщениеДобавлено: Пн, апр 13 2009, 10:11 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Не знаю, что подразумевается под фокусом, но метод set_selected_rows класса cl_salv_selections нормально отрабатывает с единичным выбором строки. При множественном выборе - и выделяет и фокусируется на первой выбранной строке.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод фокуса на нужную строку в salv
СообщениеДобавлено: Пн, апр 13 2009, 10:49 
Ассистент
Ассистент

Зарегистрирован:
Вт, авг 12 2008, 11:26
Сообщения: 39
Странно, у меня стоит selection mode равный single:
gr_selections = gr_table->get_selections( ).
gr_selections->set_selection_mode( gr_selections->single ).

Вот код при добавлении новой строки:
INSERT g_s_attr INTO table tab.
sort tab by /bic/zckr.
read TABLE tab from g_s_attr TRANSPORTING NO FIELDS.

clear it_rows[].
wa_row = sy-tabix.
append wa_row to it_rows.
gr_selections->SET_SELECTED_ROWS( value = it_rows ).

В результате выделяется нужная строка, но она где-то там, внизу и мы ее не видим...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод фокуса на нужную строку в salv
СообщениеДобавлено: Пн, апр 13 2009, 11:21 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Возможно из за сортировки проблема возникает.
Code:
  gr_selections = gr_table->get_selections( ).
  gr_selections->set_selection_mode( 1 ).

  APPEND 100 TO it_rows.
  gr_selections->set_selected_rows( it_rows ).

  gr_table->display( ).
У меня такой код выделяет строку + она становится первой на экране.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод фокуса на нужную строку в salv
СообщениеДобавлено: Пн, апр 13 2009, 11:36 
Ассистент
Ассистент

Зарегистрирован:
Вт, авг 12 2008, 11:26
Сообщения: 39
Я разобрался в чем проблема, но пока не могу ее решить.
Чтобы у меня отобразилась добавленная строчка, я использую метод gr_table->refresh( )
Если я его комментирую, то все фокус переводится, но новой строки нету, отображается старая табличка.
Причем не работает и так:
gr_table->refresh( ).
gr_selections->SET_SELECTED_ROWS( value = it_rows ).
и так:
gr_selections->SET_SELECTED_ROWS( value = it_rows ).
gr_table->refresh( ).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод фокуса на нужную строку в salv
СообщениеДобавлено: Пн, апр 13 2009, 11:56 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, авг 28 2006, 11:24
Сообщения: 292
Пол: Мужской
damluar написал(а):
Я разобрался в чем проблема, но пока не могу ее решить.
Чтобы у меня отобразилась добавленная строчка, я использую метод gr_table->refresh( )

Передайте в метод REFRESH параметр S_STABLE с номером строки и столбца.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод фокуса на нужную строку в salv
СообщениеДобавлено: Пн, апр 13 2009, 12:29 
Ассистент
Ассистент

Зарегистрирован:
Вт, авг 12 2008, 11:26
Сообщения: 39
ага, только параметры имеют тип Char(1), а так бы с удовольствием! )))


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод фокуса на нужную строку в salv
СообщениеДобавлено: Пн, апр 13 2009, 12:33 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, авг 28 2006, 11:24
Сообщения: 292
Пол: Мужской
Прошу прощения за корявую формулировку. Я предлагал применить следующий код:
Code:
gr_selections->SET_SELECTED_ROWS( value = it_rows ).
S_STABLE-ROW = 'X'.
S_STABLE-COL = 'X'.
gr_table->refresh( S_STABLE = S_STABLE ).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод фокуса на нужную строку в salv
СообщениеДобавлено: Пн, апр 13 2009, 13:08 
Ассистент
Ассистент

Зарегистрирован:
Вт, авг 12 2008, 11:26
Сообщения: 39
Установка stable гарантирует что мы останемся на той позиции, на которой стояли. Она никак не влияет на перевод фокуса на нужную строку. При вызове refresh() с любыми параметрами alv переводится в начало списка (из документации). Поэтому видимо придется добавлять новую строку в текущую позицию на которой стоит строка. Всем, кто участвовал, спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод фокуса на нужную строку в salv
СообщениеДобавлено: Пн, апр 13 2009, 13:34 
Ассистент
Ассистент

Зарегистрирован:
Вт, авг 12 2008, 11:26
Сообщения: 39
Блин не понимаю почему, но ваша задумка не работает, хотя обязана! (((


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод фокуса на нужную строку в salv
СообщениеДобавлено: Пн, апр 13 2009, 14:32 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Вот рабочий код по добавлению новой строки по событию дабл-клик и установке "фокуса" на нее.
Code:
DATA: it_vbap TYPE TABLE OF vbap.
DATA: gr_table TYPE REF TO cl_salv_table.
DATA: gr_selections TYPE REF TO cl_salv_selections.
DATA: gr_events TYPE REF TO cl_salv_events_table.

DATA: it_rows TYPE salv_t_row.

*----------------------------------------------------------------------*
*       CLASS lcl_handle_events DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_handle_events DEFINITION.
  PUBLIC SECTION.
    METHODS: on_double_click
             FOR EVENT double_click OF cl_salv_events_table
             IMPORTING row column.
ENDCLASS.                    "lcl_handle_events DEFINITION
DATA: event_handler TYPE REF TO lcl_handle_events.

START-OF-SELECTION.
  SELECT * INTO TABLE it_vbap FROM vbap UP TO 150 ROWS.

  cl_salv_table=>factory( IMPORTING r_salv_table = gr_table CHANGING t_table = it_vbap ).

  gr_selections = gr_table->get_selections( ).
  gr_selections->set_selection_mode( 1 ).


  gr_events = gr_table->get_event( ).
  CREATE OBJECT event_handler.
  SET HANDLER event_handler->on_double_click FOR gr_events.

  gr_table->display( ).

*----------------------------------------------------------------------*
*       CLASS lcl_handle_events IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION.
  METHOD on_double_click.
    APPEND '1530000000777000001Fuflo' TO it_vbap.

    DESCRIBE TABLE it_vbap LINES sy-tfill.
    APPEND sy-tfill TO it_rows.
    gr_selections->set_selected_rows( it_rows ).

    gr_table->refresh( ).
  ENDMETHOD.                    "on_double_click
ENDCLASS.                    "lcl_handle_events IMPLEMENTATION

В моей системе отрабатывает корректно.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод фокуса на нужную строку в salv
СообщениеДобавлено: Пн, апр 13 2009, 18:08 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 01 2005, 13:23
Сообщения: 303
Откуда: Питер
Пол: Мужской
Code:
form add_lines .
  if p_pr is initial.
    clear itab_p.
    itab_p-mandt = sy-mandt.

    append itab_p.

    data lin type i.
    describe table itab_p lines lin.

    call method grid1->refresh_table_display.

    es_row_no-row_id = lin.
    es_row_id-index = lin.
    clear es_col_id.

    call method grid1->set_current_cell_via_id
      exporting
        is_row_id    = es_row_id
        is_column_id = es_col_id
        is_row_no    = es_row_no.
    endif.
  endform.                    " add_lines


:roll:

_________________
Всему своё время...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод фокуса на нужную строку в salv
СообщениеДобавлено: Чт, мар 24 2011, 14:25 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 12:10
Сообщения: 87
а как такую алв в фокусе сделать?
таже ситуация, строчки выделяются, все ок... но получается что на экране кроме алвшки еще есть поля и кнопка....

вообщем так: в алв есть какие-то строчки, и на первом поле висит линк клик по которому перетягиваются данные из алв(и не только) в поля экрана, и в одно из этих полей ставится курсор, потом когда мы все заполняем все что надо, нажимается кнопка ... в алвшке, после ее(кнопки) нажатия, выделяется обновленная/добавленая строка, но курсор ставится почему-то на первое поля экрана, а не на алв... можно от этого как-то избавится? (смысл в том чтобы работать можно было без мышки)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Перевод фокуса на нужную строку в salv
СообщениеДобавлено: Чт, мар 24 2011, 14:48 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
cl_gui_control=>set_focus


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Перевод фокуса на нужную строку в salv
СообщениеДобавлено: Чт, мар 24 2011, 15:26 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 12:10
Сообщения: 87
Пономарев Артем написал:
cl_gui_control=>set_focus

Спасибо! сосвем забыл про этот класс, все в АЛВ-шных искал)


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

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


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

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


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

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