Текущее время: Ср, июл 30 2025, 02:01

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: SORT <...> BY (colum) ASCENDING.
СообщениеДобавлено: Чт, авг 27 2009, 09:34 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 03 2009, 15:37
Сообщения: 292
Откуда: Алматы
Пол: Мужской
Привет всем.

Вопрос: Есть ли возможность сортировать внутреннюю табличку динамически по нескольким столбцам? Я делаю так:

Code:
DATA: BEGIN OF it_col OCCURS 0,
               colum TYPE string,
          END OF it_col.

DATA: colum TYPE string.

* Табличка it_col заполнена техническими названиями столбцов

CLEAR colum.
LOOP AT it_col.
     CONCATENATE it_col-colum colum INTO colum SEPARATED BY space.
ENDLOOP.

SORT it_out BY (colum) ASCENDING. " И вылетаю в дамп

_________________
Все в этом мире стоит под сомнением, над сомнением – только google...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: SORT <...> BY (colum) ASCENDING.  Тема решена
СообщениеДобавлено: Чт, авг 27 2009, 09:53 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
Цитата:
Addition 5

... BY (otab)
Effect:

With the addition BY (otab), the table is not sorted according to the table key, but instead according to the component specified dynamically in the internal table otab (as of release 7.0). Each line of the table otab defined a component of the sort key. The priority of the sort is based on the order of the lines in otab. A maximum of 250 components can be specified. If the table otab is initial, the table is not sorted.

For otab, a standard table of the table type ABAP_SORTORDER_TAB from the ABAP Dictionary must be specified. The line type of this table is the Dictionary structure ABAP_SORTORDER with the following components:
NAME of type SSTRING
for specifying a component of the sort key. The component is entered in the form "comp_name[+off(len)]", whereby "comp_name" must be the name of a component contained in itab in upper case to which an offset/length specification "+off(len)" can be appended. "off" and "len" must be suitable numeric values.

DESCENDING of type CHAR of length 1 for specifying the
sort direction for the current component. If DESCENDING is initial, the sort is performed in ascending order. If DESCENDING has the value "X", the table is sorted in descending order.

ASTEXT of type CHAR of length 1
for textual sorting of the current component. If ASTEXT has the value "X", the sort is performed as with the AS TEXT addition. This is only possible for character-type components. If ASTEXT is initial, character-type components are sorted according to their binary representation.

If a column of otab, has invalid content (NAME contains the name of a component that does not exist or an incorrect offset/length specification, DESCENDING and ASTEXT do not contain "X" or the initial value), this leads to a treatable exception of the class CX_SY_DYN_TABLE_ILL_COMP_VAL.

Notes:
The addition BY (otab) cannot be combined with BY compi.

When using the addition BY (otab), it is not possible to use DESCENDING or AS TEXT to specify a descending sort direction or textual sorting for all components.

If a single bracketed data object (dobj) is specified after the BY addition, its data type decides whether its content is used to specify a single component or multiple components. In either case, no sort takes place if dobj is initial.


Example:

Dynamic import of a database table into a dynamic internal table and dynamic sorting of its content. The name of the database table and the names of the columns by which the table is to be sorted can be entered on a selection screen.

Code:
PARAMETERS dbtab TYPE c LENGTH 30.

SELECT-OPTIONS columns FOR dbtab NO INTERVALS.

DATA: otab  TYPE abap_sortorder_tab,
      oline TYPE abap_sortorder,
      dref  TYPE REF TO data.

FIELD-SYMBOLS: <column> LIKE LINE OF columns,
               <itab> TYPE STANDARD TABLE.

TRY.
    CREATE DATA dref TYPE STANDARD TABLE OF (dbtab).
    ASSIGN dref->* TO <itab>.
  CATCH cx_sy_create_data_error.
    MESSAGE 'Wrong data type!' TYPE 'I' DISPLAY LIKE 'E'.
    LEAVE PROGRAM.
ENDTRY.

TRY.
    SELECT *
           FROM (dbtab)
           INTO TABLE <itab>.
  CATCH cx_sy_dynamic_osql_semantics.
    MESSAGE 'Wrong database table!' TYPE 'I' DISPLAY LIKE 'E'.
    LEAVE PROGRAM.
ENDTRY.

LOOP AT columns ASSIGNING <column>.
  oline-name = <column>-low.
  APPEND oline TO otab.
ENDLOOP.

TRY.
    SORT <itab> BY (otab).
  CATCH cx_sy_dyn_table_ill_comp_val.
    MESSAGE 'Wrong column name!' TYPE 'I' DISPLAY LIKE 'E'.
    LEAVE PROGRAM.
ENDTRY.

_________________
"I have a dream"(c)Martin Luther King, Jr.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SORT <...> BY (colum) ASCENDING.
СообщениеДобавлено: Чт, авг 27 2009, 10:04 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 03 2009, 15:37
Сообщения: 292
Откуда: Алматы
Пол: Мужской
Thanks!!! ) "Help" is a power.

_________________
Все в этом мире стоит под сомнением, над сомнением – только google...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: SORT <...> BY (colum) ASCENDING.
СообщениеДобавлено: Чт, авг 27 2009, 12:10 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 03 2009, 15:37
Сообщения: 292
Откуда: Алматы
Пол: Мужской
Он у меня сортирует по самому крайнему выбранному столбцу. А мне нужно, чтобы было на подобие "SORT it_out BY matnr maktx ASCENDING".
Может подскажите, что не правильно...
Code:
  DATA: otab TYPE abap_sortorder_tab,
        oline TYPE abap_sortorder.
  DATA: cxtab TYPE cxtab_column.

...

  LOOP AT tab100-cols INTO cxtab WHERE selected = 'X'.
    CLEAR otab.
    colum = cxtab-screen-name+7.
    oline-name = colum.
    APPEND oline TO otab.
  ENDLOOP.

  IF sy-subrc = 0.
      SORT it_out BY (otab).
  ENDIF.

_________________
Все в этом мире стоит под сомнением, над сомнением – только google...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: SORT <...> BY (colum) ASCENDING.
СообщениеДобавлено: Чт, авг 27 2009, 12:44 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пт, янв 18 2008, 10:34
Сообщения: 716
Откуда: Moscow
Пол: Мужской
FeBO-Sh написал:
Он у меня сортирует по самому крайнему выбранному столбцу. А мне нужно, чтобы было на подобие "SORT it_out BY matnr maktx ASCENDING".
Может подскажите, что не правильно...
Code:
  DATA: otab TYPE abap_sortorder_tab,
        oline TYPE abap_sortorder.
  DATA: cxtab TYPE cxtab_column.

...

  LOOP AT tab100-cols INTO cxtab WHERE selected = 'X'.
    CLEAR otab.
    colum = cxtab-screen-name+7.
    oline-name = colum.
    APPEND oline TO otab.
  ENDLOOP.

  IF sy-subrc = 0.
      SORT it_out BY (otab).
  ENDIF.

проверьте таблицу OTAB (сколько там записей) сортировка всегда идет в порядке записей в таблице
не понятна также надобность в
Code:
clear otab


а вообще попрактикуйтесь с мастером создания TABLE CONTROL в SCREEN PAINTER

_________________
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э. Йодан)


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: SORT <...> BY (colum) ASCENDING.
СообщениеДобавлено: Чт, авг 27 2009, 14:55 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 03 2009, 15:37
Сообщения: 292
Откуда: Алматы
Пол: Мужской
Да да в этом и была ошибка я каждый раз очищал OTAB. )) Я понимаю, но с литературой здесь проблематично, приходиться учиться методом тыка.
И чтоб не открывать новую тему, задам еще вопрос. Вы подсказали мне классный метод фильтрации (стандартный), а есть стандартный метод поиска в TABLE CONTROL?

_________________
Все в этом мире стоит под сомнением, над сомнением – только google...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: SORT <...> BY (colum) ASCENDING.
СообщениеДобавлено: Чт, авг 27 2009, 19:05 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
FeBO-Sh написал:
Я понимаю, но с литературой здесь проблематично, приходиться учиться методом тыка.

Хм... И кнопка F1 на клавиатуре тоже выдрана? И транзакция ABAPDOCU не работает? И в ABAP Editor нет доступа к меню Environment -> Examples? :shock:

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SORT <...> BY (colum) ASCENDING.
СообщениеДобавлено: Пт, авг 28 2009, 07:42 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Ср, июн 13 2007, 16:36
Сообщения: 585
Откуда: Belarus
Пол: Мужской
Jelena написала:
FeBO-Sh написал:
Я понимаю, но с литературой здесь проблематично, приходиться учиться методом тыка.

Хм... И кнопка F1 на клавиатуре тоже выдрана? И транзакция ABAPDOCU не работает? И в ABAP Editor нет доступа к меню Environment -> Examples? :shock:

Ну вот, сразу все секреты и раскрыла ...... ;-)


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

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


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

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


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

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