Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SE37 - Построитель функций => Тема начата: Паганель от Октябрь 03, 2010, 11:39:41 pm
-
При использовании некоторых ФМ для работы с классификацией, например описанной http://sapforum.biz/index.php/topic,1319.0.html следует тщательно проверять вводимые данные, иначе последствия .... ну читайте в соответствующей теме.
Или просто необходимо проверить проверить, например проклассифицирован ли обьект. Для этого используется внутренний номер
Как видим основная проблема заключается в том, что описание класса то конечно вставляется в привязке к материалу, но на самом деле классифицировать будем то партии?! Вот поэтому надо получить внутренний номер объекта для конфигурации, поле allkssk-cuobj, причем как видим для класса 023 указываем таблицу не MCHA из описания класса, а таблицу MARA.
Пример использования ФМ, обернут в form для удобства дальнейшего использования.
*&---------------------------------------------------------------------*
*& Form CHECK_EXIST
*&---------------------------------------------------------------------*
* Проверяем нет ли присвоения
*----------------------------------------------------------------------*
FORM check_exist_mat USING rs_matnr TYPE KSSK-OBJEK
CHANGING rs_exist TYPE c.
" Приводим номер материала к внутреннему формату
" На всякий случай
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = rs_matnr
IMPORTING
output = rs_matnr
EXCEPTIONS
length_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
exist = 'X'.
DATA: object_number LIKE inob-cuobj.
CALL FUNCTION 'CUOB_CHECK_EXISTENCE_OF_OBJECT'
EXPORTING
class_type = pa_klart
object_id = rs_matnr
table = 'MARA'
IMPORTING
object_number = object_number
EXCEPTIONS
lock_problem = 1
object_not_found = 2.
IF sy-subrc <> 0.
exist = space.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " CHECK_EXIST
Думаю суть понятна с комментариев.
-
Для вызова использую такую конструкцию (в основном для приведения типов),
предположим, что есть параметр
PARAMETERS: pa_matnr type mara-matnr.
DATA: L_OBJEK_ID TYPE KSSK-OBJEK.
DATA: exist TYPE c.
MOVE so_matnr-low TO L_OBJEK_ID.
PERFORM check_exist_mat USING L_OBJEK_ID CHANGING exist.