Необходимо, чтобы в транзакции MIGO при проводки переноса выполнялась проверка на вид движения и если вид движения "301", то выдавалось сообщение об о ошибке.
Данная задача была реализована при помощи BADI "MB_MIGO_BADI" методов "Line_modify" и "Check_item".
Но обнаружилась такая ошибка: Если создать проводку переноса с двумя позициями материалов и сразу нажать кнопку Проводка(Post), то методы отрабатывают нормально, если же нажмем кнопку Временно сохранить(HOLD), сохранится временный документ - проводка переноса с двумя позициями(в моем примере). Выйдем из транзакции MIGO, снова её запустим, выберем сохраненный с двумя позициями материалов и нажмём кнопку Проводка(Post) выполнится как и положено BADI "MB_MIGO_BADI" и её методы "Line_modify" и "Check_item".
В начале выполнится метод "Line_modify", но выполнится для i_line_id = '00001' т.е для первой позиции
DATA: l_subrc TYPE sysubrc.
READ TABLE gt_line
WITH KEY table_line = i_line_id
IF sy-subrc = 0.
IF cs_goitem-bwart NE '301'.
IF l_subrc NE 0. INSERT i_line_id INTO TABLE gt_line. ENDIF.
ENDIF.
затем отработает метод "Check_item" c i_line_id = '00001'
DATA: ls_bapiret TYPE bapiret2.
* Read external data
READ TABLE gt_line
WITH TABLE KEY table_line = i_line_id
TRANSPORTING NO FIELDS.
IF sy-subrc NE 0.
ls_bapiret-type = 'E'.
ls_bapiret-id = 'ZMM'.
ls_bapiret-number = '443'.
ls_bapiret-message_v1 = '301'.
INSERT ls_bapiret INTO TABLE et_bapiret2.
ENDIF.
А затем снова тут же ещё раз вызывается метод "Check_item" но уже с i_line_id = '00002', а так как метод "Line_modify" не вызвался для i_line_id = '00002', то в таблицу gt_line запись не добавилась и следовательно когда выполняется метод "Check_item" но уже с i_line_id = '00002' в gt_line запись не находится и следовательно выдается ошибка.
Как быть?
Как использовать метод "Line_modify" для каждой позиции при оперировании с временно сохраненными документами?
Или быть может посоветуете другой способ решения проблемы.