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

Как программно выделить строки в Table Control?



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
sphinks
Участник
Участник



Joined: 08 Feb 2008
Posts: 7

PostPosted: Fri Feb 08, 2008 11:52 am    Post subject: Как программно выделить строки в Table Control? Reply with quote

Собственно весь вопрос сформулирован в названии топика. Есть желание реализовать функцию Select All/Deselect All для таблицы построенной на базе Table Contorl. Выделение всех позиций начинается с выделения одной позиции, так что хочеться знать как выделить строку таблицы программно?
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 190
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Fri Feb 08, 2008 12:49 pm    Post subject: Reply with quote

Может примеры помогут
Table Controls: Examples with Modifications
Back to top
View user's profile Send private message Blog Visit poster's website
Admiral
Участник
Участник



Joined: 05 Feb 2008
Posts: 3
Location: Киев

PostPosted: Fri Feb 08, 2008 2:17 pm    Post subject: Reply with quote

В свойствах экранной таблицы ставишь ВыделСтолбц = Многокр., взводишь чекбокс "Со СцВыбора" и в поле напротив вписываешь имя столбца соответствующей внутренней таблицы с типом CHAR1. Кстати, такое поле должно быть в структуре вн.таблицы (чаще всего ему дают имя MARK). Значение этого поля, равное 'X' выделяет соответствующую строку на экране и наоборот, выделение строки на экране взводит поле в 'X'. Т.о. программно выделить все строки экранной таблицы, значит просто в цикле присвоить полю MARK значение 'X'.
_________________
"/h" Стань хозяином судьбы!
Back to top
View user's profile Send private message
sphinks
Участник
Участник



Joined: 08 Feb 2008
Posts: 7

PostPosted: Fri Feb 08, 2008 2:48 pm    Post subject: Reply with quote

Admiral wrote:
В свойствах экранной таблицы ставишь ВыделСтолбц = Многокр., взводишь чекбокс "Со СцВыбора" и в поле напротив вписываешь имя столбца соответствующей внутренней таблицы с типом CHAR1. Кстати, такое поле должно быть в структуре вн.таблицы (чаще всего ему дают имя MARK). Значение этого поля, равное 'X' выделяет соответствующую строку на экране и наоборот, выделение строки на экране взводит поле в 'X'. Т.о. программно выделить все строки экранной таблицы, значит просто в цикле присвоить полю MARK значение 'X'.


Пробовал уже так, но подумал что это не правильно. После твоего поста убедился что направление мысли верное. Но не работает. Тогда приложу исходники:

Code:
REPORT  ZTEST_TABLE                                                 .
CONTROLS flights TYPE TABLEVIEW USING SCREEN 100.

TABLES cosp.

DATA: ok_code TYPE sy-ucomm,
      save_ok TYPE sy-ucomm.

DATA: itab TYPE TABLE OF ZTEST_STRUCT
      , wa_itab LIKE LINE OF itab
      , fill TYPE i
      , wa_cols LIKE LINE OF flights-cols.

DATA: lines TYPE i,
      limit TYPE i,
      line TYPE i,
      f TYPE i.

SELECT * FROM cosp INTO CORRESPONDING FIELDS OF TABLE itab.

CALL SCREEN 100.

MODULE status_0100 OUTPUT.
  SET PF-STATUS 'SCREEN_100'.
  DESCRIBE TABLE itab LINES fill.
  flights-lines = fill.
  flights-H_GRID = 'X'.
  flights-V_GRID = 'X'.
  flights-LINE_SELECTOR = 'X'.
ENDMODULE.

MODULE fill_table_control OUTPUT.
  READ TABLE itab INTO wa_itab INDEX flights-current_line.
ENDMODULE.

MODULE cancel INPUT.
  LEAVE PROGRAM.
ENDMODULE.

MODULE read_table_control INPUT.
  lines = sy-loopc.
  MODIFY itab FROM wa_itab INDEX flights-current_line.
ENDMODULE.

MODULE user_command_0100 INPUT.
  save_ok = ok_code.
  CLEAR ok_code.
  CASE save_ok.
    WHEN 'NEXT_LINE'.
      flights-top_line = flights-top_line + 1.
      limit = fill - lines + 1.
      IF flights-top_line > limit.
        flights-top_line = limit.
      ENDIF.
    WHEN 'PREV_LINE'.
      flights-top_line = flights-top_line - 1.
      IF flights-top_line < 0.
        flights-top_line = 0.
      ENDIF.
    WHEN 'NEXT_PAGE'.
      flights-top_line = flights-top_line + lines.
      limit = fill - lines + 1.
      IF flights-top_line > limit.
        flights-top_line = limit.
      ENDIF.
    WHEN 'PREV_PAGE'.
      flights-top_line = flights-top_line - lines.
      IF flights-top_line < 0.
        flights-top_line = 0.
      ENDIF.
    WHEN 'LAST_PAGE'.
      flights-top_line =  fill - lines + 1.
    WHEN 'FIRST_PAGE'.
      flights-top_line = 0.
    WHEN 'SELE'.
      GET CURSOR LINE f.
      line = flights-TOP_LINE + f - 1.
      READ TABLE itab INTO wa_itab INDEX line.
      wa_itab-MARK = 'X'.
      MODIFY itab FROM wa_itab INDEX line.

  ENDCASE.
ENDMODULE.


Экранная логика:

Code:
PROCESS BEFORE OUTPUT.
  MODULE status_0100.
  LOOP WITH CONTROL flights.
    MODULE fill_table_control.
  ENDLOOP.

PROCESS AFTER INPUT.
  MODULE cancel AT EXIT-COMMAND.
  LOOP WITH CONTROL flights.
    MODULE read_table_control.
  ENDLOOP.
  MODULE user_command_0100.


внутренняя таблица Itab представляет собой таблицу cosp, поля которой выводиться в таблицу + поле MARK типа CHAR1. Соотвественно в ScreenPainter поле "Со СцВыбора" получило имя MARK. Не работает, и при выделении строки в таблице на экране внутренняя таблица этого не отображает.
Back to top
View user's profile Send private message
sphinks
Участник
Участник



Joined: 08 Feb 2008
Posts: 7

PostPosted: Fri Feb 08, 2008 3:15 pm    Post subject: Reply with quote

ко второму часу я нашел ошибку.Smile Поле в ScreenPainter надо было обозвать не MARK, а wa_itab-MARK, так как wa_itab - рабочая область таблицы. Глупость, но времени отняло.Sad

Спасибо, всем кто откликнулся.
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.