Текущее время: Вс, июл 20 2025, 10:31

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Селект не вытаскивает сумму
СообщениеДобавлено: Ср, сен 19 2012, 12:56 
Специалист
Специалист

Зарегистрирован:
Ср, янв 18 2012, 13:43
Сообщения: 120
Доброго всем дня, коллеги!

Проблема в программировании. Не корректно отрабатывает селект для выборки "for all entries". Прошу помочь:
примерный код:


data: begin of z_belnr OCCURS 0,
belnr like auak-belnr,
end of z_belnr. " 18/09/2012 10мам
SELECT belnr from auak into z_belnr-belnr
WHERE budat < s_repdat-low and objnr = gt_anli_wa-objnr.
append z_belnr.
ENDSELECT. " 19/09 10mam

CLEAR z_belnr.

SELECT ANBTR FROM ANEP INTO summ_x
for ALL ENTRIES IN z_belnr
WHERE BELNR = z_belnr-belnr " 19/09 10mam
AND ANLN1 = gt_anli_wa-ANLN1
AND ANLN2 = gt_anli_wa-ANLN2
* AND BZDAT < s_repdat-low " 19/09 10mam
* AND LNRAN = TAB_ANEK-LNRAN
AND AFABE = '01'
AND BUKRS IN s_bukrs
AND ( BWASL = '116' OR BWASL = '338' OR BWASL = '339'
OR BWASL = '215' OR BWASL = '265' OR BWASL = '160'
OR BWASL = '217' OR BWASL = '267' ).
summ-summ1 = summ-summ1 + summ_x. " 19/09 10mam
clear summ_x.
ENDSELECT.


В первом селекте я формирую внутреннюю таблицу z_belnr, которая состоит из одного поля. Программа туда закладывает по критериям всего три записи. Это я все проверял в отладке. Дальше следующии селект у меня должен выятгивать сумму из ANEP для всех записей из таблицы z_belnr. И я задаю связь между двумя таблицами ANEP и z_belnr через поле BELNR (записью WHERE BELNR = z_belnr-belnr). Но в отладке смотрю. Что делает система:
- во-первых не разу не увидел чтобы заполнилось поле z_belnr-belnr никак не пойму ... ну да ладно, выборки из таблицы идет;
- что самое критично для меня, это то, что в z_belnr содержится 3 записи, а селект проходит два раза, причем два раза вытягиваются нужные суммы, а третья сумма не вытягивается. Селект идет на третрий круг и почему-то минует тело селекта и выходит на строку ENDSELECT.

Почему не работает нормально select ... for all entries.??? Может я гдето в синтаксисе ошибся?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Селект не вытаскивает сумму
СообщениеДобавлено: Ср, сен 19 2012, 13:02 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Много раз обсуждалось.
Учитесь правильно пользоваться поиском.
Первая же ссылка указывает на причину проблемы.

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


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

Зарегистрирован:
Ср, апр 18 2012, 14:20
Сообщения: 252
Откуда: РБ, г. Гомель
Пол: Мужской
суммы ANBTR случайно не одинаковые?
FOR ALL ENTRIES удаляет из результата запроса повторяющиеся строки


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

Зарегистрирован:
Ср, янв 18 2012, 13:43
Сообщения: 120
Точно суммы у меня одинаковые. Как раз третьей суммы и нет. Получается не нужно без FOR ALL ENTRIES обходиться как то. loop делать, а так и неохота было.

Удав написал(а):
Удав
Извините ))) Буду пользоваться хелпом.

MantiCore1977 написал:
суммы ANBTR случайно не одинаковые?
FOR ALL ENTRIES удаляет из результата запроса повторяющиеся строки
Спасибо большое за ответ.


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

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 492
Пол: Мужской
Если нет особого желания объединить запросы через join, то можете воспользоваться range:
Code:
RANGES: z_belnr FOR auak-belnr.

SELECT belnr FROM auak INTO z_belnr-low
  WHERE budat < s_repdat-low AND objnr = gt_anli_wa-objnr.
  z_belnr-option = 'EQ'.
  z_belnr-sign   = 'I'.
  APPEND z_belnr.
ENDSELECT.

SELECT SUM( anbtr ) FROM anep INTO summ-summ1
  WHERE belnr IN z_belnr
    AND anln1 = gt_anli_wa-anln1
    AND anln2 = gt_anli_wa-anln2
    AND afabe = '01'
    AND bukrs IN s_bukrs
    AND bwasl IN ('116', '338', '339',
                  '215', '265', '160',
                  '217', '267' ).

CLEAR: z_belnr, z_belnr[].

upd. Перед вторым селектом незабудьте добавить проверку:
Code:
IF not z_belnr[] IS INITIAL.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Селект не вытаскивает сумму
СообщениеДобавлено: Чт, сен 20 2012, 06:11 
Специалист
Специалист

Зарегистрирован:
Ср, янв 18 2012, 13:43
Сообщения: 120
Korvax написал:
Если нет особого желания объединить запросы через join, то можете воспользоваться range:
Code:
RANGES: z_belnr FOR auak-belnr.

SELECT belnr FROM auak INTO z_belnr-low
WHERE budat < s_repdat-low AND objnr = gt_anli_wa-objnr.
z_belnr-option = 'EQ'.
z_belnr-sign = 'I'.
APPEND z_belnr.
ENDSELECT.

SELECT SUM( anbtr ) FROM anep INTO summ-summ1
WHERE belnr IN z_belnr
AND anln1 = gt_anli_wa-anln1
AND anln2 = gt_anli_wa-anln2
AND afabe = '01'
AND bukrs IN s_bukrs
AND bwasl IN ('116', '338', '339',
'215', '265', '160',
'217', '267' ).

CLEAR: z_belnr, z_belnr[].

upd. Перед вторым селектом незабудьте добавить проверку:
Code:
IF not z_belnr[] IS INITIAL.


JOIN воспользоваться не получается, так как у меня есть дата, по которой необходимо задавать условие budat<s_repdat-low или budat in s_repdat . А как мне известно в left outer join допустимы условия только "=[color=#00BF80]"[/color]. Сравнение использовать нельзя....

Так бы с радостью использовал бы JOIN

А за RANGES спасибо. Сейчас попробую так. Loop делать ну уж ооочень не хочется.


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

Зарегистрирован:
Ср, апр 18 2012, 14:20
Сообщения: 252
Откуда: РБ, г. Гомель
Пол: Мужской
а эти условия с "<" и не надо в join писать, это для where


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Селект не вытаскивает сумму
СообщениеДобавлено: Чт, сен 20 2012, 08:05 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 492
Пол: Мужской
Мне кажется что в данном случае использовать стоит не left join, а просто join. В следствии чего задача сводится к выбору: какое решение работает быстрее, либо первое, либо как-то так..
Code:
SELECT SUM( anbtr ) INTO summ-summ1
  FROM auak JOIN anep
    ON auak~belnr = anep~belnr
  WHERE auak~budat < s_repdat-low
    AND auak~objnr = gt_anli_wa-objnr
    AND anep~anln1 = gt_anli_wa-anln1
    AND anep~anln2 = gt_anli_wa-anln2
    AND anep~afabe = '01'
    AND anep~bukrs IN s_bukrs
    AND anep~bwasl IN ('116', '338', '339',
                       '215', '265', '160',
                       '217', '267' ).


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

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 492
Пол: Мужской
MantiCore1977 написал:
а эти условия с "<" и не надо в join писать, это для where

помнится мне что с left join возникают проблемы при написании условий в where :)
Code:
В WHERE-условии не должны появляться поля из правой таблицы LEFT OUTER


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

Зарегистрирован:
Ср, апр 18 2012, 14:20
Сообщения: 252
Откуда: РБ, г. Гомель
Пол: Мужской
Korvax написал:
MantiCore1977 написал:
а эти условия с "<" и не надо в join писать, это для where

помнится мне что с left join возникают проблемы при написании условий в where :)
Code:
В WHERE-условии не должны появляться поля из правой таблицы LEFT OUTER

угу
только зачем тут left join :mrgreen:
inner вполне подходит


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

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 492
Пол: Мужской
согласен, но ведь автор написал что это "примерный код", так что стоит лишь догадываться что творится в голове и в abap редакторе у автора... ))


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Селект не вытаскивает сумму
СообщениеДобавлено: Чт, сен 20 2012, 11:43 
Специалист
Специалист

Зарегистрирован:
Ср, янв 18 2012, 13:43
Сообщения: 120
Korvax написал:
MantiCore1977 написал:
а эти условия с "<" и не надо в join писать, это для where

помнится мне что с left join возникают проблемы при написании условий в where :)
Code:
В WHERE-условии не должны появляться поля из правой таблицы LEFT OUTER


:oops: ДО этого про left outer join знал только.

Открыл sql где подробно описана логика left outer и inner. Понял, что лучше inner.

SELECT SUM( anbtr ) INTO summ-summ1
FROM auak JOIN anep
ON auak~belnr = anep~belnr
WHERE auak~budat < s_repdat-low
AND auak~objnr = gt_anli_wa-objnr
AND anep~anln1 = gt_anli_wa-anln1
AND anep~anln2 = gt_anli_wa-anln2
AND anep~afabe = '01'
AND anep~bukrs IN s_bukrs
AND anep~bwasl IN ('116', '338', '339',
'215', '265', '160',
'217', '267' ).

Не думал что можно в where задавать условия из разных таблиц. У меня в left oter join не прокатывало, вот думал в inner и не прокатит.

Спасибо большое за участие. Хоть научили "неумеху". Опыта набрался. :wink:


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

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


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

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


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

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