Текущее время: Пт, июл 25 2025, 16:22

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Ключ внутренней таблицы
СообщениеДобавлено: Ср, май 13 2009, 15:13 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, апр 25 2006, 15:14
Сообщения: 280
Подскажите плиз, как правильно организовать внутреннюю таблицу и ключ в таком случае: есть таблица, полей в ней предположим 10 (a, b, c, d, e...). Нужно прочитать таблицу, по двум полям, например по каждой паре D и E (не ключевые поля! записей соотв. каждой паре полей может быть 10 или 100..), соотвественно для всех записей соотв. одному сочетанию этих полей выполнить какую-то операцию (и так далее для всех встречающихся пар D-E). Как в этом случае организовать таблицу и как её читать?
Сорри за тупой вопрос, апапить приходится редко..


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ключ внутренней таблицы  Тема решена
СообщениеДобавлено: Ср, май 13 2009, 15:27 
Специалист
Специалист

Зарегистрирован:
Пт, сен 05 2008, 08:08
Сообщения: 134
Пол: Женский
Если нужно обработать ВСЕ записи таблицы, вариант:
Создать стандартную таблицу с полями d e в начале, а дальше порядок не важен. Отсортировать по d e. Дальше LOOP AT по таблице, обрабатывать
AT NEW e/ AT END OF e.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ключ внутренней таблицы
СообщениеДобавлено: Ср, май 13 2009, 15:55 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
Или sorted table с ключем d e.

Или как-то так оформить (в зависимости от поставленной задачи, если для разных пар нужна разная обработка, например) , хотя коллеги могут не согласиться:

Code:
types: begin of str,
        a, b, c, d, e,
       END OF str.

data: t1 type sorted table of str with NON-UNIQUE key d e.
data: t2 type sorted table of str with NON-UNIQUE key d e.

t2[] = t1[].
delete ADJACENT DUPLICATES FROM t2 COMPARING d e.

FIELD-SYMBOLS: <fs1> like line of t2,
               <fs2> like line of t1.

loop at t2 ASSIGNING <fs2>.
loop at t1 ASSIGNING <fs1> where d = <fs2>-d and
                                  e = <fs2>-e.

endloop.
endloop.


_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ключ внутренней таблицы
СообщениеДобавлено: Чт, май 14 2009, 09:42 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, апр 25 2006, 15:14
Сообщения: 280
Спасибо! Сейчас буду пробовать.
А кстати, в чём разница между таблицей без ключа и таблицей с NON-UNIQE KEY?
Я так понимаю что мне нужна SORTED TABLE OF TAB1 WITH NON-UNIQE KEY d e?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ключ внутренней таблицы
СообщениеДобавлено: Чт, май 14 2009, 09:43 
Ассистент
Ассистент

Зарегистрирован:
Чт, ноя 20 2008, 15:57
Сообщения: 27
Я бы сказал, что верхний вариант лучше, поскольку loop в loop - это бяка,
но AT NEW e \ AT END OF e не всегда будет отрабатывать - провал в логике - изменение поля d без изменения e.
Надо просто добавить анализ d

_________________
Все в жизни фигня, кроме пчел; и пчелы тоже фигня, но их много...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ключ внутренней таблицы
СообщениеДобавлено: Чт, май 14 2009, 09:58 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
Shumov Nikita написал(а):
Я бы сказал, что верхний вариант лучше, поскольку loop в loop - это бяка,
но AT NEW e \ AT END OF e не всегда будет отрабатывать - провал в логике - изменение поля d без изменения e.
Надо просто добавить анализ d


Loop в Loop по сортированой таблице не сильно криминален.

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ключ внутренней таблицы
СообщениеДобавлено: Чт, май 14 2009, 10:04 
Специалист
Специалист

Зарегистрирован:
Пт, сен 05 2008, 08:08
Сообщения: 134
Пол: Женский
Shumov Nikita написал(а):
но AT NEW e \ AT END OF e не всегда будет отрабатывать - провал в логике - изменение поля d без изменения e.
Надо просто добавить анализ d

Не может быть! :wink: А код можно?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ключ внутренней таблицы
СообщениеДобавлено: Чт, май 14 2009, 10:07 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Yellow Raven написала:
Не может быть! :wink: А код можно?

+1 :lol:

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ключ внутренней таблицы
СообщениеДобавлено: Чт, май 14 2009, 11:12 
Ассистент
Ассистент

Зарегистрирован:
Чт, ноя 20 2008, 15:57
Сообщения: 27
Согласен - не прав. :lol:

_________________
Все в жизни фигня, кроме пчел; и пчелы тоже фигня, но их много...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ключ внутренней таблицы
СообщениеДобавлено: Пт, май 15 2009, 12:49 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, апр 25 2006, 15:14
Сообщения: 280
Yellow Raven написала:
Если нужно обработать ВСЕ записи таблицы, вариант:
Создать стандартную таблицу с полями d e в начале, а дальше порядок не важен. Отсортировать по d e. Дальше LOOP AT по таблице, обрабатывать
AT NEW e/ AT END OF e.


Пытаюсь делать так:

Code:
LOOP AT lt_tab1 INTO ls_struc1.

AT NEW field2.

  PERFORM some_fucn CHANGING ls_stru1.
.......

Таблице обычная sorted table, ключ из 4х полей - уникальный. Первых два поля field1 и field2 как раз те что мне нужны.
Сразу после AT NEW, в структуре заменяются на звёздочки значения всех полей кроме field1 и field2 соотвественно. Почему так происходит? Мне же нужно обрабатывать остальные значения в этой структуре выбранные в LOOP.. :(


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ключ внутренней таблицы
СообщениеДобавлено: Пт, май 15 2009, 12:56 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
на счет звездочек, так и должно быть, хотите использовать остальные поля, создайте еще одну структуру, в которую до оператора AT NEW закидывайте строку таблицы.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ключ внутренней таблицы
СообщениеДобавлено: Пт, май 15 2009, 13:01 
Специалист
Специалист

Зарегистрирован:
Пт, сен 05 2008, 08:08
Сообщения: 134
Пол: Женский
Да, есть такое.
Можно переприсвоить после LOOP: ls_struc2 = ls_struc1. (До AT NEW).
Можно написать
LOOP AT lt_tab1 ASSIGNING <fs_struc1>.
AT NEW field2.
ls_stru1 = <fs_struc1>.
PERFORM some_fucn CHANGING ls_stru1.
.....


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ключ внутренней таблицы
СообщениеДобавлено: Пт, май 15 2009, 15:14 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Немного нет так :wink:
Code:
LOOP AT lt_tab1 ASSIGNING <fs_struc1>.
  ls_stru1 = <fs_struc1>.
  AT NEW field2.
    PERFORM some_fucn CHANGING ls_stru1.

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ключ внутренней таблицы
СообщениеДобавлено: Сб, май 16 2009, 16:38 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Ср, мар 16 2005, 09:37
Сообщения: 42
Откуда: Москва
Code:
LOOP AT lt_tab1 ASSIGNING <fs_struc1>.
  ls_stru1 = <fs_struc1>.
  AT NEW field2.
    PERFORM some_fucn CHANGING ls_stru1.
А в чем радость от первого присвоения в цикле?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ключ внутренней таблицы
СообщениеДобавлено: Сб, май 16 2009, 18:00 
Ассистент
Ассистент

Зарегистрирован:
Чт, ноя 20 2008, 15:57
Сообщения: 27
Удав написал(а):
Немного нет так :wink:
Code:
LOOP AT lt_tab1 ASSIGNING <fs_struc1>.
ls_stru1 = <fs_struc1>.
AT NEW field2.
PERFORM some_fucn CHANGING ls_stru1.


Исправляю свою оплошность:

LOOP AT lt_tab1 ASSIGNING <fs_struc1> - цикл по таблице.
ls_stru1 = <fs_struc1> - присвоение текущей записи в другой структуре.
AT NEW field2 - на изменение второго поля таблицы lt_tab1. ПОСЛЕ ЭТОЙ КОМАНДЫ ВСЕ ПОЛЯ ПРАВЕЯ field2 СБРАСЫВАЮТСЯ, а поскольку нам нужно анализировать их, то тут нам и поможет струтура ls_stru1.
PERFORM some_fucn CHANGING ls_stru1 - обработка этой структуры

_________________
Все в жизни фигня, кроме пчел; и пчелы тоже фигня, но их много...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

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


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

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


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

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