Текущее время: Чт, июл 24 2025, 02:43

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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