Текущее время: Пн, окт 15 2018, 22:58

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Loop using key порядок обработки записей
СообщениеДобавлено: Чт, сен 20 2018, 15:01 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 14:06
Сообщения: 110
Добрый день.

Код и результат ниже. Не могу найти, где объясняется, почему при использовании ключа записи обрабатываются в обратном порядке.
Code:
REPORT.

TYPES:BEGIN OF line_ty,
        id TYPE i,
        parent TYPE i,
        priority TYPE i,
        text TYPE string,
      END OF line_ty.
TYPES table_ty TYPE STANDARD TABLE OF line_ty WITH EMPTY KEY
                                              WITH NON-UNIQUE SORTED KEY parent COMPONENTS parent.

DATA lt TYPE table_ty.

lt = VALUE #( ( id = 1 parent = 0 text = 'HeaderA' )
              ( id = 2 parent = 0 text = 'HeaderB' )
              ( id = 3 parent = 0 text = 'HeaderC' )
              ( id = 4 parent = 0 text = 'HeaderD' )
              ( id = 5 parent = 1 text = 'A' )
              ( id = 6 parent = 1 priority = 1 text = 'B' )
              ( id = 7 parent = 1 priority = 2 text = 'C' )
              ( id = 8 parent = 2 text = 'D' )
              ( id = 9 parent = 3 text = 'E' )
              ( id = 10 parent = 2 text = 'F' )
              ( id = 11 parent = 3 text = 'G' )
            ).
SORT lt BY id parent priority.
ULINE.
LOOP AT lt INTO DATA(ls) USING KEY parent WHERE parent = 0.
  WRITE:/ ls-id, ls-text.
ENDLOOP.
ULINE.
LOOP AT lt INTO ls WHERE parent = 0.
  WRITE:/ ls-id, ls-text.
ENDLOOP.
ULINE.

Code:
__________________________
         4  HeaderD
         3  HeaderC
         2  HeaderB
         1  HeaderA
__________________________
         1  HeaderA
         2  HeaderB
         3  HeaderC
         4  HeaderD
__________________________


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Loop using key порядок обработки записей
СообщениеДобавлено: Чт, сен 20 2018, 15:36 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 14:35
Сообщения: 4426
Откуда: Москва
Ну, вы же написали конструкцию LOOP AT USING KEY, используя ключ, в котором только один компонент (Parent).
Значит, порядок обхода записей с иcпользованием этого ключа внутри одинакового значения parent в общем случае не детерминирован.

Если хотите обойти строки таблицы с Parent = 0 строго с возрастанием по порядку id, у вас аж два варианта:
1. В ключ parent добавить второй компонент ID
2. Найти первую строку в сортированной таблице с Parent = 0 с использованием binary search и далее с найденного sy-tabix крутить обычный loop, без using key, пока parent не поменяется

_________________
Удача - результат нашего желания (© А. Нортон)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Loop using key порядок обработки записей  Тема решена
СообщениеДобавлено: Чт, сен 20 2018, 18:41 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пт, янв 18 2008, 11:34
Сообщения: 704
Откуда: Tashkent -> Astana -> Moscow
Пол: Мужской
Duplicate Non-Unique Keys

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Loop using key порядок обработки записей
СообщениеДобавлено: Пт, сен 21 2018, 09:40 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 14:06
Сообщения: 110
То, что надо!

Цитата:
If there are already one or more duplicates in the target table, the source block duplicates are inserted in their original order in front of the first duplicate in the target table.

То есть поведение фиксировано. Спасибо. :pivo:


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

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


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

Сейчас этот форум просматривают: Google Feedfetcher, olegbash


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

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