Условия при каких можно использовать READ TABLE?

Автор Паганель, Грудень 16, 2008, 05:35:40 ПП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

Паганель

хочу использовать что-то типа READ TABLE gt_outtab WITH TABLE KEY werks = l_items-werks and matnr = l_items-matnr

по хелпу она (табличка) должна быть обьявлена WITH UNIQUE KEY carrid connid (поля)

Достаточно ли это, можно ли без UNIQUE ? Вроде не дает ....

Какие подводные камни в такой конструкции ?

Паганель

Первое: ее потом нельзя использовать в REUSE_ALV_GRID_DISPLAY
("GT_OUTTAB" is not a "STANDARD TABLE". Non-standard tables can only be
passed to IMPORTING, EXPORTING, or CHANGING parameters. parameters.
)

Dmitriy

Подводных камней нет. Без UNIQUE ее просто нужно отсортировать по читаемому ключу. Т.е SORT уже готовой, либо ORDER BY в выборке + то, что ты в хелпе прочитал. 

Dmitriy

Цитата: Паганель від Грудень 16, 2008, 05:37:32 ПП
Первое: ее потом нельзя использовать в REUSE_ALV_GRID_DISPLAY
("GT_OUTTAB" is not a "STANDARD TABLE". Non-standard tables can only be
passed to IMPORTING, EXPORTING, or CHANGING parameters. parameters.
)
Нужно передавать в стандартную той же структуры, и ее уже в ALV: itab[] = GT_OUTTAB[]. Не забудь почистить: FREE GT_OUTTAB, если она дальше не нужна и кол-во записей велико.


Паганель

что то не пойму с хелпа , как то читать ?

READ TABLE gtq_outtab WITH TABLE KEY werks = resitems-werks matnr = resitems-matnr.
не хавает ....

Dmitriy

Цитата: Паганель від Грудень 16, 2008, 05:44:12 ПП
а refresh gt_outtab <> FREE GT_OUTTAB
Оператор REFRESH просто очищает внутреннюю табличку, но не освобождает оперативную память.


Dmitriy

#8
Изменять сообщения не стал, просто подправлюсь.
WITH UNIQUE KEY означает, что во внутренней таблице не может быть 2-х и более записей с одним ключем и только, но не факт, что данные отсортированы по нему. Можно объявить как ... SORTED TABLE WITH UNIQUE KEY werks matnr, если хочется, чтобы комбинация завод-материал была уникальна. Про сортировку - выше.
2 Паганель: а что за задача? 

Паганель

#9
Цитата: Dmitriy від Грудень 16, 2008, 08:29:59 ПП
Изменять сообщения не стал, просто подправлюсь.
WITH UNIQUE KEY означает, что во внутренней таблице не может быть 2-х и более записей с одним ключем и только, но не факт, что данные отсортированы по нему. Можно объявить как ... SORTED TABLE WITH UNIQUE KEY werks matnr, если хочется, чтобы комбинация завод-материал была уникальна.

Т.е. главное отсортировать ? если нету уникальности, то выберется первая запись ?




Dmitriy

#10
ЦитатаТ.е. главное отсортировать ? если нету уникальности, то выберется первая запись?
Главное и необходимое условие - таблица должна быть отсортирована по ключу, который ты используешь в операторе READ. А про уникальность: вот я и спросил про задачу, зачем тебе данные с уникальной комбинацией завод-материал? Если нет уникальности, то при нескольких одинаковых записях (завод-материал) не факт, что первую прочитает.

Паганель

#11
Цитата: Dmitriy від Грудень 16, 2008, 08:41:34 ПП
Главное и необходимое условие - таблица должна быть отсортирована по ключу, который ты используешь в операторе READ. А про уникальность: вот я и спросил про задачу, зачем тебе данные с уникальной комбинацией завод-материал?

да я просто в этой табличке просумировал данные приходов по Заводу .....
И уникальность как бы не нужна, только как то не подумал, что действительно тут данные уникальны ....

Dmitriy

Цитатада я просто в этой табличке просумировал данные приходов по Заводу .....
А тогда понятно, приход каждого материала. Рекомендую оператор SORT в этом случае, тогда не нужно заморачиваться ни при объявлении вн. таблицы (обычная), следовательно, и при передаче ее в ALV Grid (ее же и выводить, не ругнется). Все просто.

Паганель

я так понял, что мне достаточно отсортировать и вперед, отлично ... есть некоторые нюансы, ну тут как бы расберусь ...

Dmitriy

Да, все верно, только с оператором READ не забывать BINARY SEARCH, ну да об этом уже писали. ;)

Паганель

Цитата: Dmitriy від Грудень 16, 2008, 09:04:39 ПП
Да, все верно, только с оператором READ не забывать BINARY SEARCH, ну да об этом уже писали. ;)

Ссори, а где это про  BINARY SEARCH писали ? шо-то не находит  поиск ...

Dmitriy

Цитата: Паганель від Грудень 16, 2008, 09:17:30 ПП
Ссори, а где это про  BINARY SEARCH писали ? шо-то не находит  поиск ...
Немного в теме про оптимизацию. Смысл в том, что с BINARY SEARCH оператор READ работает быстрее, только внутренняя табличка должна быть отсортирована по ключу, в данном случае werks matnr.

Паганель

так и подумал, сейчас перечитаю пост про оптимизацию

Спасибо

Паганель

а как считывать:
READ TABLE gt_outtab WITH TABLE KEY werks = l_items-werks and matnr = l_items-matnr
не катит ......

Паганель

Ссори, сам нашел
READ TABLE rt_outtab WITH KEY matnr = gt_vw_prod-matnr
                                     werks = gt_in_move-werks.

Uukrul

Цитата: Паганель від Грудень 17, 2008, 03:38:24 ПП
Ссори, сам нашел
READ TABLE rt_outtab WITH KEY matnr = gt_vw_prod-matnr
                                     werks = gt_in_move-werks.
МаладЭц... таки проблема что AND не катит и операция только сравнения, а всякие больше/меньше к сожалению не катят.

№1

Цитата: Uukrul від Грудень 17, 2008, 03:50:10 ПП
МаладЭц... таки проблема что AND не катит и операция только сравнения, а всякие больше/меньше к сожалению не катят.
А в новой версии можно уже http://www.vadoid.com/sap/teched08/COMP209_v2.pdf
Мой блог

Uukrul

Цитата: № 1 від Грудень 17, 2008, 05:09:12 ПП
А в новой версии можно уже http://www.vadoid.com/sap/teched08/COMP209_v2.pdf
Ну у него 4.7 насколько я помню... но что в новой это уже наконец работает, это хорошо... а то LOOP-ами было ну напряжно крутить...

Dmitriy

#23
SORT gt_outtab BY werks matnr.
READ TABLE gt_outtab WITH TABLE KEY werks = l_items-werks matnr = l_items-matnr BINARY SERCH.

Последовательность полей при объявлении gt_outtab в приведенном примере именно werks matnr.

Паганель

Спасибо большое за помощь ...

Толко что сказал Дмитрию что в текущей задаче не прийдется использовать сию конструкцию .... а тут оказалось что всетаки
надо .....

SMF spam blocked by CleanTalk