Loading



+ Sapforum.Biz » Инструменты » ABAP - Инструментальные средства » SE38 - ABAP Редактор (Модератор: Dmitriy)Тема:
|- Условия при каких можно использовать READ TABLE?



Автор Тема: Условия при каких можно использовать READ TABLE?  (Прочитано 3974 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
хочу использовать что-то типа READ TABLE gt_outtab WITH TABLE KEY werks = l_items-werks and matnr = l_items-matnr

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

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

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

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: Условия при каких можно использовать READ TABLE?
« Ответ #1 : Декабрь 16, 2008, 05:37:32 pm »
Первое: ее потом нельзя использовать в 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

  • SAP ECC 6.0
  • Administrator
  • Newbie
  • *****
  • Сообщений: 299
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
Re: Условия при каких можно использовать READ TABLE?
« Ответ #2 : Декабрь 16, 2008, 05:39:44 pm »
Подводных камней нет. Без UNIQUE ее просто нужно отсортировать по читаемому ключу. Т.е SORT уже готовой, либо ORDER BY в выборке + то, что ты в хелпе прочитал. 

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Administrator
  • Newbie
  • *****
  • Сообщений: 299
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
Re: Условия при каких можно использовать READ TABLE?
« Ответ #3 : Декабрь 16, 2008, 05:42:50 pm »
Первое: ее потом нельзя использовать в 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, если она дальше не нужна и кол-во записей велико.

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: Условия при каких можно использовать READ TABLE?
« Ответ #4 : Декабрь 16, 2008, 05:44:12 pm »
а refresh gt_outtab <> FREE GT_OUTTAB

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: Условия при каких можно использовать READ TABLE?
« Ответ #5 : Декабрь 16, 2008, 05:45:43 pm »
что то не пойму с хелпа , как то читать ?

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

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Administrator
  • Newbie
  • *****
  • Сообщений: 299
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
Re: Условия при каких можно использовать READ TABLE?
« Ответ #6 : Декабрь 16, 2008, 05:47:48 pm »
а refresh gt_outtab <> FREE GT_OUTTAB
Оператор REFRESH просто очищает внутреннюю табличку, но не освобождает оперативную память.

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: Условия при каких можно использовать READ TABLE?
« Ответ #7 : Декабрь 16, 2008, 05:49:04 pm »
спасибо

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Administrator
  • Newbie
  • *****
  • Сообщений: 299
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
Re: Условия при каких можно использовать READ TABLE?
« Ответ #8 : Декабрь 16, 2008, 08:29:59 pm »
Изменять сообщения не стал, просто подправлюсь.
WITH UNIQUE KEY означает, что во внутренней таблице не может быть 2-х и более записей с одним ключем и только, но не факт, что данные отсортированы по нему. Можно объявить как ... SORTED TABLE WITH UNIQUE KEY werks matnr, если хочется, чтобы комбинация завод-материал была уникальна. Про сортировку - выше.
2 Паганель: а что за задача? 
« Последнее редактирование: Декабрь 16, 2008, 09:56:01 pm от Dmitriy »

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: Условия при каких можно использовать READ TABLE?
« Ответ #9 : Декабрь 16, 2008, 08:34:55 pm »
Изменять сообщения не стал, просто подправлюсь.
WITH UNIQUE KEY означает, что во внутренней таблице не может быть 2-х и более записей с одним ключем и только, но не факт, что данные отсортированы по нему. Можно объявить как ... SORTED TABLE WITH UNIQUE KEY werks matnr, если хочется, чтобы комбинация завод-материал была уникальна.

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



« Последнее редактирование: Декабрь 16, 2008, 08:38:30 pm от Dmitriy »

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Administrator
  • Newbie
  • *****
  • Сообщений: 299
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
Re: Условия при каких можно использовать READ TABLE?
« Ответ #10 : Декабрь 16, 2008, 08:41:34 pm »
Цитировать
Т.е. главное отсортировать ? если нету уникальности, то выберется первая запись?
Главное и необходимое условие - таблица должна быть отсортирована по ключу, который ты используешь в операторе READ. А про уникальность: вот я и спросил про задачу, зачем тебе данные с уникальной комбинацией завод-материал? Если нет уникальности, то при нескольких одинаковых записях (завод-материал) не факт, что первую прочитает.
« Последнее редактирование: Декабрь 16, 2008, 08:46:29 pm от Dmitriy »

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: Условия при каких можно использовать READ TABLE?
« Ответ #11 : Декабрь 16, 2008, 08:46:29 pm »
Главное и необходимое условие - таблица должна быть отсортирована по ключу, который ты используешь в операторе READ. А про уникальность: вот я и спросил про задачу, зачем тебе данные с уникальной комбинацией завод-материал?

да я просто в этой табличке просумировал данные приходов по Заводу .....
И уникальность как бы не нужна, только как то не подумал, что действительно тут данные уникальны ....
« Последнее редактирование: Декабрь 16, 2008, 08:49:38 pm от Dmitriy »

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Administrator
  • Newbie
  • *****
  • Сообщений: 299
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
Re: Условия при каких можно использовать READ TABLE?
« Ответ #12 : Декабрь 16, 2008, 08:56:53 pm »
Цитировать
да я просто в этой табличке просумировал данные приходов по Заводу .....
А тогда понятно, приход каждого материала. Рекомендую оператор SORT в этом случае, тогда не нужно заморачиваться ни при объявлении вн. таблицы (обычная), следовательно, и при передаче ее в ALV Grid (ее же и выводить, не ругнется). Все просто.

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: Условия при каких можно использовать READ TABLE?
« Ответ #13 : Декабрь 16, 2008, 09:02:14 pm »
я так понял, что мне достаточно отсортировать и вперед, отлично ... есть некоторые нюансы, ну тут как бы расберусь ...

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Administrator
  • Newbie
  • *****
  • Сообщений: 299
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
Re: Условия при каких можно использовать READ TABLE?
« Ответ #14 : Декабрь 16, 2008, 09:04:39 pm »
Да, все верно, только с оператором READ не забывать BINARY SEARCH, ну да об этом уже писали. ;)

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: Условия при каких можно использовать READ TABLE?
« Ответ #15 : Декабрь 16, 2008, 09:17:30 pm »
Да, все верно, только с оператором READ не забывать BINARY SEARCH, ну да об этом уже писали. ;)

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

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Administrator
  • Newbie
  • *****
  • Сообщений: 299
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
Re: Условия при каких можно использовать READ TABLE?
« Ответ #16 : Декабрь 16, 2008, 09:43:15 pm »
Ссори, а где это про  BINARY SEARCH писали ? шо-то не находит  поиск ...
Немного в теме про оптимизацию. Смысл в том, что с BINARY SEARCH оператор READ работает быстрее, только внутренняя табличка должна быть отсортирована по ключу, в данном случае werks matnr.

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: Условия при каких можно использовать READ TABLE?
« Ответ #17 : Декабрь 16, 2008, 09:44:55 pm »
так и подумал, сейчас перечитаю пост про оптимизацию

Спасибо

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: Условия при каких можно использовать READ TABLE?
« Ответ #18 : Декабрь 17, 2008, 03:34:54 pm »
а как считывать:
READ TABLE gt_outtab WITH TABLE KEY werks = l_items-werks and matnr = l_items-matnr
не катит ......

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: Условия при каких можно использовать READ TABLE?
« Ответ #19 : Декабрь 17, 2008, 03:38:24 pm »
Ссори, сам нашел
READ TABLE rt_outtab WITH KEY matnr = gt_vw_prod-matnr
                                     werks = gt_in_move-werks.

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.311
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
Re: Условия при каких можно использовать READ TABLE?
« Ответ #20 : Декабрь 17, 2008, 03:50:10 pm »
Ссори, сам нашел
READ TABLE rt_outtab WITH KEY matnr = gt_vw_prod-matnr
                                     werks = gt_in_move-werks.
МаладЭц... таки проблема что AND не катит и операция только сравнения, а всякие больше/меньше к сожалению не катят.

Оффлайн №1

  • Administrator
  • Jr. Member
  • *****
  • Сообщений: 522
  • Reputation Power: 1
  • №1 has no influence.
  • Пол: Мужской
  • Самая большая ложь - это неверно понятая правда.
Re: Условия при каких можно использовать READ TABLE?
« Ответ #21 : Декабрь 17, 2008, 05:09:12 pm »
МаладЭц... таки проблема что AND не катит и операция только сравнения, а всякие больше/меньше к сожалению не катят.
А в новой версии можно уже http://www.vadoid.com/sap/teched08/COMP209_v2.pdf

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.311
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
Re: Условия при каких можно использовать READ TABLE?
« Ответ #22 : Декабрь 17, 2008, 05:15:03 pm »
А в новой версии можно уже http://www.vadoid.com/sap/teched08/COMP209_v2.pdf
Ну у него 4.7 насколько я помню... но что в новой это уже наконец работает, это хорошо... а то LOOP-ами было ну напряжно крутить...

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Administrator
  • Newbie
  • *****
  • Сообщений: 299
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
Re: Условия при каких можно использовать READ TABLE?
« Ответ #23 : Декабрь 17, 2008, 05:47:20 pm »
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.
« Последнее редактирование: Декабрь 17, 2008, 05:58:24 pm от Dmitriy »

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: Условия при каких можно использовать READ TABLE?
« Ответ #24 : Декабрь 17, 2008, 09:11:03 pm »
Спасибо большое за помощь ...

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

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: Условия при каких можно использовать READ TABLE?
« Ответ #25 : Декабрь 18, 2008, 02:40:58 am »
Для себя что бы потом сновая не искать, как пользоватся:

FORM test TABLES   gt_bk_in_move.
  DATA: rt_outtab TYPE STANDARD TABLE OF gs_outtab
        WITH HEADER LINE WITH KEY matnr werks.

  rt_outtab[] = gt_outtab[].

  LOOP AT gt_bk_in_move INTO ls_bk_in_move.
    READ TABLE rt_outtab WITH KEY matnr = ls_bk_in_move-matnr
                                  werks = ls_bk_in_move-werks.
    IF sy-subrc NE 0.
      rt_outtab-matnr  = ls_bk_in_move-matnr.
      rt_outtab-werks  = ls_bk_in_move-werks.
      rt_outtab-pmenge = ls_bk_in_move-menge.
      rt_outtab-pdmbtr = ls_bk_in_move-dmbtr.
      rt_outtab-waers  = ls_bk_in_move-waers.
      rt_outtab-meins  = ls_bk_in_move-meins.
      APPEND rt_outtab.
    ELSE.
      rt_outtab-pmenge = rt_outtab-pmenge + ls_bk_in_move-menge.
      rt_outtab-pdmbtr = rt_outtab-pdmbtr + ls_bk_in_move-dmbtr.
      MODIFY rt_outtab FROM rt_outtab INDEX sy-tabix.
    ENDIF.
  ENDLOOP.

  " ПЕРЕНОС ДАННЫХ
  gt_outtab[] = rt_outtab[].
  FREE rt_outtab[].

ENDFORM.         

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.311
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
Re: Условия при каких можно использовать READ TABLE?
« Ответ #26 : Декабрь 18, 2008, 03:53:07 pm »
Для себя что бы потом сновая не искать, как пользоватся:
  LOOP AT gt_bk_in_move INTO ls_bk_in_move.
    READ TABLE rt_outtab WITH KEY matnr = ls_bk_in_move-matnr
                                  werks = ls_bk_in_move-werks.
  
А как по поводу BINARY SEARCH?.

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: Условия при каких можно использовать READ TABLE?
« Ответ #27 : Декабрь 18, 2008, 04:28:24 pm »
Второй раз намекают на это, что-то не пойму что не так

Оффлайн NachDenken

  • Newbie
  • *
  • Сообщений: 143
  • Reputation Power: 0
  • NachDenken has no influence.
Re: Условия при каких можно использовать READ TABLE?
« Ответ #28 : Декабрь 18, 2008, 04:44:05 pm »
Привет, народу
вот у меня тоже как раз выборка bseg/bset
и сделав выборку по bset во внут табличку (созданную с типом таблица с ключами)
и выполнив поиск по ней с использование бинари сертч,
удалось добиться ускорения аж на 5 -10 %
ну не знаю...
мож у меня в консерватории нужно поправить :)

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Administrator
  • Newbie
  • *****
  • Сообщений: 299
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
Re: Условия при каких можно использовать READ TABLE?
« Ответ #29 : Декабрь 18, 2008, 04:50:47 pm »
Второй раз намекают на это, что-то не пойму что не так
Посмотри код, выше скинул же, только до цикла сортируй. :)

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: Условия при каких можно использовать READ TABLE?
« Ответ #30 : Декабрь 18, 2008, 04:53:34 pm »
спасибо, сразу не заметил  :)
Цитировать
SORT gt_outtab BY werks matnr.
READ TABLE gt_outtab WITH TABLE KEY werks = l_items-werks matnr = l_items-matnr BINARY SERCH.

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.311
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
Re: Условия при каких можно использовать READ TABLE?
« Ответ #31 : Декабрь 18, 2008, 05:01:47 pm »
и выполнив поиск по ней с использование бинари сертч,
удалось добиться ускорения аж на 5 -10 %
Ну так 10% это уже не мало...  как говорится там 10 тут 5, глядишь и стало пошустрее... или оптимизация это когда 100-200%? Так это уже называется переписывание кода!

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: Условия при каких можно использовать READ TABLE?
« Ответ #32 : Декабрь 18, 2008, 11:14:06 pm »
а BINARY SERCH кроме скорости еще что то дает, хотя глупый вопрос конечно, не думаю что точность ...

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.311
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
Re: Условия при каких можно использовать READ TABLE?
« Ответ #33 : Декабрь 18, 2008, 11:49:22 pm »
а BINARY SERCH кроме скорости еще что то дает, хотя глупый вопрос конечно, не думаю что точность ...
В  смысле что-то дает? Вопрос не корректен, это типа а педаль газа в машине что-то кроме увеличения скорости дает? Ответ, дает больший расход бензина и увеличение скорости, чего мы и добиваемся, программа не только должна правильно считать, но и считать как можно быстрее  ;) вот бинарный поиск и позволяет получить ускорение в 5% - 10%, как по мне это не мало, особенно если поиск вызывается в каком-нибудь цикле пару тысяч раз.

Оффлайн Паганель

  • blogger
  • Full Member
  • *
  • Сообщений: 1.331
  • Reputation Power: 0
  • Паганель has no influence.
  • Пол: Мужской
Re: Условия при каких можно использовать READ TABLE?
« Ответ #34 : Декабрь 19, 2008, 12:21:57 pm »
В  смысле что-то дает? Вопрос не корректен, это типа а педаль газа в машине что-то кроме увеличения скорости дает? Ответ, дает больший расход бензина и увеличение скорости, чего мы и добиваемся, программа не только должна правильно считать, но и считать как можно быстрее  ;) вот бинарный поиск и позволяет получить ускорение в 5% - 10%, как по мне это не мало, особенно если поиск вызывается в каком-нибудь цикле пару тысяч раз.

Да Вопрос не корректен, просто тестирую, вижу что суммы не сходятся ...... грешным делом подумал на BINARY SERCH, потом правда нашел.


 


Facebook Comments