Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SMOD/CMOD - Расширения => Тема начата: Uukrul от Сентябрь 09, 2007, 02:29:45 am
-
В общем то задача стояла следующая, при вводе позиций работ/услуг в заказ ТОРО надо было разрешить вводить только те услуги, которые находились бы только в той группе, что и группа указанная в заголовке, рисунок внизу. В принципе в этом экзите можно много чего проверить по введенной услуге.
SRVESLL - Проверки строки работ/услуг, экзит содержит две функции,
EXIT_SAPLMLSP_030 - User Exit: Fill ESLL Structure Before Checks (After Entry)
EXIT_SAPLMLSP_031 - Check ESLL Datat After Checking
В общем-то лучше всего проверку сделать в первой функции, которая получает управление сразу после ввода новой позиции услуги.
Пример решения следующий:
*&---------------------------------------------------------------------*
*& Настрока проверки чтобы выбор работы в позиции списка было из той же
*& группы что указана в заголовке на закладке "На строне". Если работа
*& из другой группы то выдается сообщение об ошибке!
*&---------------------------------------------------------------------*
data: l_matkl like mara-matkl,
l_matkl_pos like asmd-matkl,
field_matkl(30) value '(SAPLCOIH)AFVGD-MATKL'.
field-symbols: <fs>.
* Обработка только для позиций с заполненным кодом услуги
if srv_esll-srvpos <> space.
assign: (field_matkl) to <fs>.
if sy-subrc = 0.
* Группа материала из заголовка заказа
l_matkl = <fs>.
* Прочитать группу услуги
select single matkl into (l_matkl_pos)
from asmd where asnum = srv_esll-srvpos.
if l_matkl_pos <> l_matkl.
* Сказать, что группа услуги не совпадает с группой введенной в заголовке
message id 'YY' type 'E' number '030' with l_matkl_pos l_matkl.
endif.
unassign <fs>.
endif.
endif.
Из особенностей, экзит вызывается для всех видимых позиций экрана, так что нужно обязательно проверять поле кода услуги/работы на заполнение.