Добрый вечер, коллеги.
Столкнулся с непонятной работой селекта.
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 избыточное.