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

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


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

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


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

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