Проблема в операторах выбора.
Вы получаете доступ к MSEG
с единственными значениями EBELN
и EBELP
за раз, взяли значения из структуры wa1
и используетесовокупная сумма.
Вам не нужно group by
, так как вы не используете несколько значений EBELN, EBELP.
Кроме того, оператор ENDSELECT
создает своего рода "цикл"в таблице БД MSEG это не нужно.
Попробуйте использовать следующее:
Select sum( menge ) as menge into QNT101_menge
from mseg
where ebeln = wa1-ebeln
and ebelp = wa1-ebelp
and bwart = '101'.
Select sum( menge ) as menge into QNT102_menge
from mseg
where ebeln = wa1-ebeln
and ebelp = wa1-ebelp
and bwart = '102'.
Также из соображений производительности вы должны пытаться не обращаться к БД, когда в этом нет необходимости (вы выбирали дважды с почтипо тем же критериям).
Вот лучшая версия
Получает таблицу величин, суммированных по типу движения (101 или 102)
select bwart, sum( menge ) as menge
from mseg
into table @data(lt_quantity)
where ebeln = @wa1-ebeln
and ebelp = @wa1-ebelp
and bwart in ( '101' , '102' )
group by bwart.
Затем считывает из внутренней таблицыценности, которые вы хотите.(здесь optional
необходимо, чтобы избежать исключения, если отсутствует тип mov.type)
qnt101_menge = value #( lt_quantity[ bwart = '101']-menge optional ).
qnt102_menge = value #( lt_quantity[ bwart = '102']-menge optional ).
РЕДАКТИРОВАТЬ: встроенные объявления
начиная с ABAP 7.40Вы можете использовать встроенное объявление непосредственно в операторе SELECT
.(см. документацию )
Таблица lt_quantity
объявляется на лету, в момент выполнения оператора select.Вам не нужно объявлять таблицу раньше, но вместо этого система создает ее с надлежащей структурой динамически.
Чтобы использовать эти новые функции, вы должны использовать символ @
перед каждой используемой переменной (так же, когдаиспользование @wa1
)
Если ваша системная версия еще не поддерживает этот синтаксис, вот классическая версия оператора.Обратите внимание, что классический синтаксис SELECT
также отличается от нового (без запятых между полями, без @
, INTO
части, объявленной в нижней части оператора)
types: begin of qty_type,
bwart type mseg-bwart,
menge type mseg-menge,
end of qty_type.
data: lt_quantity type table of qty_type.
select bwart sum( menge ) as menge
from mseg
into table lt_quantity
where ebeln = wa1-ebeln
and ebelp = wa1-ebelp
and bwart in ( '101' , '102' )
group by bwart.