Текущее время: Пн, июл 28 2025, 14:50

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


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

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


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

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