sonics написал(а):
Kuranov.Dmitry написал(а):
Тут может быть не так :
1) что-то с условиями цикла LOOP
2) что-то не так с критериями выборки SELECT
3) не выбрались документы с видом движения 101 и кодом движения F
И еще дам совет, после SELECT обрабатывать sy-subrc, чтобы проверить как он сработал
я попробовал, дебагер дал значение 4
у вас может сработать такой сценарий
обрабатываем строку 1 первой таблицы
селект находит 101 F . ставим у строки 1 Х
обрабатываем строку 2 первой таблицы
селект не находит ничего. sy-subrc =4 но структура mseg содержит данные от предыдущего селекта и ставит опять лишний X
Правильно так:
Code:
LOOP AT gt_result_tab ASSIGNING <gs_result_tab> where MTART EQ 'HALB' and ZBESK EQ 'P'.
CLEAR mseg. " очистим от мусора. если селектт обломается, то он не затронет структуру и оставит что было до него
select single * from MSEG where "BWART EQ '101' and
"KZBEW EQ 'F' AND
LGORT EQ <gs_result_tab>-LGORT AND
MATNR EQ <gs_result_tab>-MATNR AND
LFBJA EQ <gs_result_tab>-LFGJA.
check sy-subrc eq 0. "Если нет документа, то Х не ставим
IF mseg-BWART EQ '101' and mseg-KZBEW EQ 'F'. "проверим наш ли документ
* mseg-AUFNR is not INITIAL.
* mseg-KZBEW EQ 'F'.
<gs_result_tab>-ia = 'X'.
ENDIF.
ENDLOOP.
и то я не уверен что вам именно это надо.
я бы сделал так.
Code:
LOOP AT gt_result_tab ASSIGNING <gs_result_tab> where MTART EQ 'HALB' and ZBESK EQ 'P'.
select single * from MSEG where BWART EQ '101' and
KZBEW EQ 'F' AND
LGORT EQ <gs_result_tab>-LGORT AND
MATNR EQ <gs_result_tab>-MATNR AND
LFBJA EQ <gs_result_tab>-LFGJA.
check sy-subrc = 0.
<gs_result_tab>-ia = 'X'.
ENDLOOP
Конечно с производительностью тут есть над чем поработать, например сначала собрать из mseg в внутреннюю таблицу, чтоб не делать 100500 селектов