Текущее время: Сб, июл 26 2025, 04:22

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Непонятная работа SELECT ... FOR ALL ENTRIES IN
СообщениеДобавлено: Ср, окт 05 2011, 20:25 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пт, окт 13 2006, 16:44
Сообщения: 55
Пол: Мужской
Добрый вечер, коллеги.

Столкнулся с непонятной работой селекта.

Code:
  TYPES: BEGIN OF ts_bseg,
           shkzg TYPE bseg-shkzg,
           dmbtr TYPE bseg-dmbtr,
           wrbtr TYPE bseg-wrbtr,
         END OF ts_bseg,
         BEGIN OF ts_belnr,
           belnr TYPE bkpf-belnr,
         END OF ts_belnr.

  data: lt_bseg TYPE TABLE OF ts_bseg,
        lt_belnr TYPE TABLE OF ts_belnr.

  CLEAR: lf_oborot,
         lt_bseg[],
         lt_belnr[].

  SELECT belnr
    INTO TABLE lt_belnr
    FROM bkpf
    WHERE bukrs EQ lf_bukrs
      AND gjahr EQ lf_year_cur
      AND budat LE i_expar-evaldate
      AND budat GE lf_month_begin
      AND xblnr EQ lf_hkont
      AND monat EQ lf_month_cur
      AND xreversal EQ space.
  IF lt_belnr[] IS NOT INITIAL.
    SELECT shkzg dmbtr wrbtr
      INTO TABLE lt_bseg
      FROM bseg
      FOR ALL ENTRIES IN lt_belnr
      WHERE bukrs EQ lf_bukrs
        AND belnr EQ lt_belnr-belnr
        AND gjahr EQ lf_year_cur
        AND hkont EQ lf_hkont.
  ENDIF.


В результирующей таблице lt_bseg 158 записей. Это неправильный результат.

Добавил в структуру внутренней таблицы lt_bseg поле belnr, стало работать правильно.
Code:
  TYPES: BEGIN OF ts_bseg,
           belnr TYPE bseg-belnr,
           shkzg TYPE bseg-shkzg,
           dmbtr TYPE bseg-dmbtr,
           wrbtr TYPE bseg-wrbtr,
         END OF ts_bseg,
         BEGIN OF ts_belnr,
           belnr TYPE bkpf-belnr,
         END OF ts_belnr.

  data: lt_bseg TYPE TABLE OF ts_bseg,
        lt_belnr TYPE TABLE OF ts_belnr.

  CLEAR: lf_oborot,
         lt_bseg[],
         lt_belnr[].

  SELECT belnr
    INTO TABLE lt_belnr
    FROM bkpf
    WHERE bukrs EQ lf_bukrs
      AND gjahr EQ lf_year_cur
      AND budat LE i_expar-evaldate
      AND budat GE lf_month_begin
      AND xblnr EQ lf_hkont
      AND monat EQ lf_month_cur
      AND xreversal EQ space.
  IF lt_belnr[] IS NOT INITIAL.
    SELECT belnr shkzg dmbtr wrbtr
      INTO TABLE lt_bseg
      FROM bseg
      FOR ALL ENTRIES IN lt_belnr
      WHERE bukrs EQ lf_bukrs
        AND belnr EQ lt_belnr-belnr
        AND gjahr EQ lf_year_cur
        AND hkont EQ lf_hkont.
  ENDIF.


160 записей в результирующей lt_bseg.
Объясните, пожалуйста, как так может получиться? По хелпу таких нюансов не нашел. По-моему, код должен выполняться идентично, поле belnr в данном случае в lt_bseg избыточное.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятная работа SELECT ... FOR ALL ENTRIES IN  Тема решена
СообщениеДобавлено: Ср, окт 05 2011, 20:38 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, авг 28 2006, 11:24
Сообщения: 292
Пол: Мужской
Из встроенной справки:
Цитата:
The whole logical expression sql_cond is evaluated for each individual line of the internal table itab. The resulting set of the SELECT statement is the union of the resulting sets from the individual evaluations. Duplicate lines are automatically removed from the resulting set. If the internal table itab is empty, the whole WHERE statement is ignored and all lines in the database are put in the resulting set.


Т.е по-хорошему, все ключевые поля должны быть в выборке.
По-моему, во внутреннюю таблицу эти поля не обязательно добавлять, лишь бы они были перечислены в запросе.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятная работа SELECT ... FOR ALL ENTRIES IN
СообщениеДобавлено: Чт, окт 06 2011, 10:40 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пт, окт 13 2006, 16:44
Сообщения: 55
Пол: Мужской
Точно, надо внимательнее читать хелп. Спасибо.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятная работа SELECT ... FOR ALL ENTRIES IN
СообщениеДобавлено: Чт, окт 06 2011, 11:31 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, авг 28 2006, 11:24
Сообщения: 292
Пол: Мужской
Кстати, этот же результат можно организовать вообще без for all entries: через bsis/bsas, еще и эффективнее будет.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятная работа SELECT ... FOR ALL ENTRIES IN
СообщениеДобавлено: Пн, окт 10 2011, 14:23 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Rokhay написал:
Кстати, этот же результат можно организовать вообще без for all entries: через bsis/bsas, еще и эффективнее будет.

К сожалению не все записи попадают в BSIS/BSAS. Позиции по счетам (HKONT), у которых нет признака SKB1-XKRES (Просмотр отд.позиций) придется все равно искать в BSEG. :(

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятная работа SELECT ... FOR ALL ENTRIES IN
СообщениеДобавлено: Пн, окт 10 2011, 17:11 
Специалист
Специалист

Зарегистрирован:
Пт, окт 20 2006, 16:39
Сообщения: 230
неправильно написал.


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

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


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

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


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

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