Текущее время: Вс, авг 03 2025, 23:30

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: SORT BY ...
СообщениеДобавлено: Вт, сен 02 2008, 13:29 
Специалист
Специалист

Зарегистрирован:
Ср, мар 21 2007, 14:32
Сообщения: 158
Господа!
передаю в ФМ таблицу TABLE1 без указания ее структуры и таблицу TABLE2 с полями по которым отсортировать ее, что нить типа такой
|fieldname|ASC_OR_DESC|.

Теперь вопрос. Как отсортировать таблицу TABLE1 по полям, указанным в TABLE2 в том порядке в каком они перечислены?
Единственное, что нашел, так это что вроде как можно делать так
Code:
fieldname = 'field1'
sort tablename by (fieldname).

Но вот как сделать чтоб сортировалось по списку полей?
по очереди для каждого поля вызывать sort вроде как неправильно.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SORT BY ...
СообщениеДобавлено: Вт, сен 02 2008, 13:35 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Ср, авг 10 2005, 09:24
Сообщения: 1023
_gary_ написал(а):
Как отсортировать таблицу TABLE1 по полям, указанным в TABLE2 в том порядке в каком они перечислены?


На заре своего программирования на абапе я динамически создавал прогу и передавал ей таблицы для сортировки.

Может, тогда просто не нашел другого пути...

А можно сделать еще одно поле - типа составной ключ, его значения склеивать из нужных полей, и потом по нему и сортировать...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: SORT BY ...
СообщениеДобавлено: Вт, сен 02 2008, 14:20 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
_gary_ написал(а):
Господа!
передаю в ФМ таблицу TABLE1 без указания ее структуры и таблицу TABLE2 с полями по которым отсортировать ее, что нить типа такой
|fieldname|ASC_OR_DESC|.

Теперь вопрос. Как отсортировать таблицу TABLE1 по полям, указанным в TABLE2 в том порядке в каком они перечислены?
Единственное, что нашел, так это что вроде как можно делать так
Code:
fieldname = 'field1'
sort tablename by (fieldname).

Но вот как сделать чтоб сортировалось по списку полей?
по очереди для каждого поля вызывать sort вроде как неправильно.
Может help как-то поможет
Code:
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.

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.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, сен 02 2008, 15:06 
Специалист
Специалист

Зарегистрирован:
Ср, мар 21 2007, 14:32
Сообщения: 158
2 Alex80:

у меня 4.6
не нашел такого типа abap_sortorder.
выглядит конечно красиво.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, сен 02 2008, 15:16 
Директор
Директор

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

у меня 4.6
не нашел такого типа abap_sortorder.
выглядит конечно красиво.
Цитата:
NAME SSTRING 255 Имя компонента, по которому должна выполняться сортировка
DESCENDING CHAR 1 Напр. сорт.: 'X' (по нисх.) или ' ' (по восх. (по умолч.))
ASTEXT CHAR 1 Сортировка: 'X' (AS TEXT) или ' ' (не AS TEXT (по умолч.))
Если это поможет...

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SORT BY ...
СообщениеДобавлено: Вт, сен 02 2008, 16:55 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
_gary_ написал(а):
Единственное, что нашел, так это что вроде как можно делать так
Code:
fieldname = 'field1'
sort tablename by (fieldname).

Но вот как сделать чтоб сортировалось по списку полей?


Более внимательно курим хелп.
Цитата:
SORT itab 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.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


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

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


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

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


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

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