Разрешить ввод ошибочного поля после сообщения об ошибке E в MIRO?

Я разрабатываю проверку в tx MIRO через BADI MRM_HEADER_CHECK, я показываю сообщение, когда поле «ссылка» уже было использовано. Сообщение имеет тип E, это отключает все поля на экране, и поэтому пользователь не может вернуться в это поле, чтобы исправить его значение.

Скриншот Tcode MIRO

К вашему сведению:

  • Мне нужно показать тип сообщения E, потому что я хочу заблокировать все поля, кроме двух полей, обведенных красным. Я видел, что предложение людей использует это:

  • если я поставлю точку останова SY-DINNR равной 6000.

  • В моем коде BADI LOOP AT SCREEN не видит имен полей, которые я хочу отключить.

  • MESSAGE <msg> TYPE 'S' DISPLAY LIKE 'E' тоже не работает

Я не могу изменить код, который не входит в мой код BADI, например в модулях PAI и PBO:

CHAIN.
  fields: f1,f2,f3.
  MODULE <mod name>.
ENDCHAIN.

Это мой код BADI:

*This field symbol have the values of inputs.
ASSIGN ('(SAPLMR1M)RBKPV') TO <fs_rbkpv>. 
IF <fs_rbkpv>-XBLNR = lwa_bkpf-xblnr.
  MESSAGE lc_message TYPE 'E'.
ENDIF.

Любые идеи? Заранее спасибо.


person Gme Moreno    schedule 10.12.2016    source источник


Ответы (1)


Это невозможно. Нет доступа к полям экрана из BAdI, поэтому вам лучше улучшить стандартный код PBO с помощью оператора CHAIN...ENDCHAIN или найти другую пользовательскую программу выхода / BAdI.

Лично я предлагаю вам не переусердствовать и не усложнять, а просто использовать:

MESSAGE 'Your Message' TYPE 'W' DISPLAY LIKE 'E'.

Будет показано обычное сообщение об ошибке, оставляя поля экрана свободными для ввода. В любом случае счет не будет сохранен до тех пор, пока все поля экрана не станут действительными, независимо от того, отключены они или нет.


P.S. Почему бы вам не использовать стандартный интерфейс I_RBKPV, предоставляемый MRM_HEADER_CHECK, например:

IF i_rbkpv-xblnr = lwa_bkpf-xblnr AND sy-tcode = 'MIRO'.
 ...
ENDIF.

Прямой доступ к памяти через символы полей небезопасен и не должен использоваться там, где в этом нет необходимости.

person Suncatcher    schedule 11.12.2016