CUOB_CHECK_EXISTENCE_OF_OBJECT - проверка присвоения объекта классу

Автор Паганель, Жовтень 03, 2010, 11:39:41 ПП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

Паганель

При использовании некоторых ФМ для работы с классификацией, например описанной http://sapforum.biz/index.php/topic,1319.0.html следует тщательно проверять вводимые данные, иначе последствия .... ну читайте в соответствующей теме.

Или просто необходимо проверить проверить, например проклассифицирован ли обьект. Для этого используется внутренний номер
Цитата: Uukrul  link=topic=1319.msg7839#msg7839 date=1286125756
Как видим основная проблема заключается в том, что описание класса то конечно вставляется в привязке к материалу, но на самом деле классифицировать будем то партии?! Вот поэтому надо получить внутренний номер объекта для конфигурации, поле  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.

SMF spam blocked by CleanTalk