Автор Тема: Расширение по проверке введенных кодов услуг/работ в заказах ТОРО.  (Прочитано 7170 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Онлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
В общем то задача стояла следующая, при вводе позиций работ/услуг в заказ ТОРО надо было разрешить вводить только те услуги, которые находились бы только в той группе, что и группа указанная в заголовке, рисунок внизу. В принципе в этом экзите можно много чего проверить по введенной услуге.

SRVESLL  - Проверки строки работ/услуг, экзит содержит две функции,

EXIT_SAPLMLSP_030 - User Exit: Fill ESLL Structure Before Checks (After Entry)
EXIT_SAPLMLSP_031 - Check ESLL Datat After Checking

В общем-то лучше всего проверку сделать в первой функции, которая получает управление сразу после ввода новой позиции услуги.

Пример решения следующий:
Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*& Настрока проверки чтобы выбор работы в позиции списка было из той же
*& группы что указана в заголовке на закладке "На строне". Если работа
*& из другой группы то выдается сообщение об ошибке!
*&---------------------------------------------------------------------*
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.
Из особенностей, экзит вызывается для всех видимых позиций экрана, так что нужно обязательно проверять поле кода услуги/работы на заполнение.