sonics написал(а):
я не совсем понимаю, что не так ? поясните пожалуйста подробнее.. вроде (по моей логике) все правильно
У этого оператора есть строгие правила по которым он находит подходящие для суммирования строки. Если быть точнее, то все поля которые не подлежат суммированию(не цифровые) - будут использоваться как ключ для поиска подходящей для суммирования строки.
В вашем случае как вы и сами говорите, ваш материал лежит в разных орг. единицах. Как система должна понять что вы хотите суммировать? Если вам нужна подсуммировка gamng в разрезе по материалу(что странно, т.к. в первой выборке вы это поле не выбирается) то и заполнены у вас должны быть эти 2 поля.
По коду:
1) Этот код точно верный? Зачем второе условие? У вас там нет ничего... А если хотели оставить его на будущее - то прочитайте по принцип YAGNI.
Code:
IF gs_result_tab-gamng EQ '0'.
gs_result_tab-uncreserve = '0'.
ELSEIF gs_result_tab-uncreserve = '1'.
ENDIF.
2) Коллект у вас происходит только если есть запас. При этом во второй выборке у вас это поле не заполняется. Значит ни для одной записи из 2-й выборки даже не будет попытке произвести подсуммировку! Что вы вообще хотите от системы?
Code:
IF gs_result_tab-labst NE '0'.
COLLECT gs_result_tab INTO gt_result_tab_alv.
ENDIF.
Может вы что-то подобное имели ввиду?
Code:
data: lt_zppmrp5 type TABLE OF zppmrp5,
lt_mard type TABLE OF mard.
data: lr_matnr type RANGE OF matnr,
ls_matnr like LINE OF lr_matnr.
SELECT matnr as low
INTO CORRESPONDING FIELDS OF TABLE lr_matnr
FROM mard
WHERE matnr IN matnr AND
lgort IN lgort_d AND
labst > 0.
ls_matnr-sign = 'I'.
ls_matnr-option = 'EQ'.
MODIFY lr_matnr FROM ls_matnr TRANSPORTING sign option WHERE sign is INITIAL.
SELECT gamng matnr
into CORRESPONDING FIELDS OF TABLE lt_zppmrp5
FROM zppmrp5
WHERE matnr IN lr_matnr.
LOOP AT lt_zppmrp5 ASSIGNING <zppmrp5>.
COLLECT <zppmrp5> INTO gt_result_tab_alv.
ENDLOOP.
Это если запас вам нужен только как критерий отбора. Если нет, то придется немного переписать, можно даже на FOR ALL ENTRIES, чтобы не заморачиваться(если данных не много).
Для чего вам поле uncreserve - не знаю.