SAP MM BAPI

From SapWiki

Orden de Compra ME21N

Crear Material MM01

Creación de vista calidad materiales

Crear Lista de Material CS01

Crear una entrega de Pedido de traslado VL10B, contabilizarla y realizar picking

*&---------------------------------------------------------------------*
*&      Form  CREAR_ENTREGA
*&---------------------------------------------------------------------*
*     Crear una entrega de Pedido de traslado VL10B
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CREAR_ENTREGA using p_ebeln
                CHANGING p_entrega
                         p_cont.
* Crear una entrega de Pedido de traslado VL10B
  DATA: begin of lt_ekpo occurs 1.
          include structure ekpo.
  data n_doc type i.
  data end of lt_ekpo.

  data : begin of lt_entregas occurs 1,
    vbeln type vbeln,
    num type i,
  end of lt_entregas.

  data: lt_stock_trans_items like BAPIDLVREFTOSTO occurs 0 with header line,
        lt_return            like BAPIRET2 occurs 0 with header line,
        l_ship_point         like BAPIDLVCREATEHEADER-SHIP_POINT,
        l_due_date           like BAPIDLVCREATEHEADER-DUE_DATE,
        l_delivery           like BAPISHPDELIVNUMB-DELIV_NUMB.

  data: lt_DELIVERIES        like BAPISHPDELIVNUMB occurs 0 with header line,
        lt_CREATED_ITEMS     like BAPIDLVITEMCREATED occurs 0 with header line.
  data: ls_vbkok             like vbkok,
        lt_vbpok             like vbpok occurs 0 with header line,
        lt_prot              like prott occurs 0 with header line,

        l_error_any_0              type c length 1,
        l_error_in_item_deletion_0 type c length 1,
        l_error_in_pod_update_0    type c length 1,
        l_error_in_interface_0     type c length 1,
        l_error_in_goods_issue_0   type c length 1,
        l_error_in_final_check_0   type c length 1,
        l_error_partner_update     type c length 1,
        l_error_sernr_update       type c length 1.

  SELECT SINGLE vstel
    FROM   ekpv
    INTO   l_ship_point
    WHERE  ebeln EQ p_ebeln.

  SELECT *
    FROM ekpo UP TO 1 ROWS
    INTO table lt_ekpo
    WHERE ebeln EQ p_ebeln
    ORDER BY ebelp.

**********************************************************************
* crear entrega
**********************************************************************
  IF p_entrega IS INITIAL.

    REFRESH lt_stock_trans_items.

    LOOP AT lt_ekpo.
      CLEAR lt_stock_trans_items.
      lt_stock_trans_items-ref_doc    = lt_ekpo-ebeln.
      lt_stock_trans_items-ref_item   = lt_ekpo-ebelp.
      lt_stock_trans_items-dlv_qty    = lt_ekpo-menge.
      lt_stock_trans_items-sales_unit = lt_ekpo-meins.
      APPEND lt_stock_trans_items.
    ENDLOOP.

    CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_STO'
    EXPORTING
      ship_point        = l_ship_point
      due_date          = sy-datum
    IMPORTING
      delivery          = l_delivery
    TABLES
      stock_trans_items = lt_stock_trans_items
      DELIVERIES        = lt_DELIVERIES
      CREATED_ITEMS     = lt_CREATED_ITEMS
      RETURN            = lt_return.

    IF l_delivery IS INITIAL.
      LOOP AT lt_return WHERE TYPE EQ 'E'.
        MESSAGE ID lt_return-ID TYPE 'I' NUMBER lt_return-NUMBER WITH
        lt_return-MESSAGE_V1
        lt_return-MESSAGE_V2
        lt_return-MESSAGE_V3
        lt_return-MESSAGE_V4 INTO g_message.

        PERFORM add_news USING 'Creación de entrega:' icon_red_light.
        wa_data-stat =  icon_red_light.

      ENDLOOP.

    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = 'X'.
      .
      p_entrega = l_delivery.
      MESSAGE s000(0k) WITH   l_delivery 'creada con éxito' INTO g_message.
      PERFORM add_news USING 'Creación de entrega:' icon_green_light.
      wa_data-stat =  icon_green_light.
    ENDIF.

*   Entrega creada asigna en ITAB.
    LOOP AT lt_CREATED_ITEMS.
      lt_entregas-vbeln = lt_CREATED_ITEMS-DELIV_NUMB.
      lt_entregas-num = 1.
      COLLECT lt_entregas.
    ENDLOOP.

  ELSE.
    l_delivery = p_entrega.
    lt_entregas-vbeln = l_delivery.
    lt_entregas-num = 1.
    COLLECT lt_entregas.
  ENDIF.

*--------------------------------------------------------------------*
* contabiliza SM & picking entregas.
*--------------------------------------------------------------------*
  DATA lt_return2 TYPE bapiret2_t.
  DATA lt_lips TYPE TABLE OF lips WITH HEADER LINE.
  DATA: ls_data           TYPE bapiobdlvhdrchg,
        ls_control        TYPE bapiobdlvhdrctrlchg,
        lt_item_control   TYPE TABLE OF  bapiobdlvitemctrlchg WITH HEADER LINE,
        lt_item_data      TYPE TABLE OF bapiobdlvitemchg WITH HEADER LINE,
        lt_item_spl       TYPE TABLE OF /spe/bapiobdlvitemchg WITH HEADER LINE,
        ls_techn_control  TYPE  bapidlvcontrol.

  loop at lt_entregas.
    REFRESH lt_return.

* modificar entrega
    REFRESH lt_lips.
* si no tiene almacen => actualizar con almacén de origen
    select * into TABLE lt_lips from lips where vbeln = l_delivery and lgort = space.
    IF sy-subrc = 0.
      LOOP AT lt_lips.
        lt_item_spl-deliv_numb      = lt_lips-vbeln.
        lt_item_spl-deliv_item      = lt_lips-posnr.
        lt_item_control-deliv_numb  = lt_lips-vbeln.
        lt_item_control-deliv_item  = lt_lips-posnr.
        lt_item_data-deliv_numb     = lt_lips-vbeln.
        lt_item_data-deliv_item     = lt_lips-posnr.
        lt_item_data-dlv_qty        = lt_lips-lfimg.
        lt_item_spl-stge_loc        = wa_data-lgort_ori. "almacén de origen
        lt_item_data-material       = lt_lips-matnr.
        lt_item_data-fact_unit_nom  = lt_lips-umvkz.
        lt_item_data-fact_unit_denom  = lt_lips-umvkn.
        lt_item_data-base_uom         = lt_lips-meins.
        lt_item_data-sales_unit       = lt_lips-vrkme.

        APPEND lt_item_spl.
        APPEND lt_item_control.
        APPEND lt_item_data.
      ENDLOOP.

*—–> modificar la entrega
      ls_data-deliv_numb         = l_delivery.
      ls_control-deliv_numb      = l_delivery.
      ls_techn_control-upd_ind   = 'U'.

      CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
      EXPORTING
        header_data                   = ls_data
        header_control                = ls_control
        delivery                      = l_delivery
        techn_control                 = ls_techn_control
      TABLES
        item_data                     = lt_item_data[]
        item_control                  = lt_item_control[]
        RETURN                        = lt_return
        item_data_spl                 = lt_item_spl[]
        .

      LOOP AT lt_return WHERE TYPE = 'E'.
        MOVE lt_return-MESSAGE TO g_message.
        PERFORM add_news USING 'Modif. Almacén de Entrega:' icon_red_light.
        wa_data-stat =  icon_red_light.
        EXIT.
      ENDLOOP.
      IF sy-subrc = 0.
        CONTINUE.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT = 'X'.
      ENDIF.
    ENDIF.

    l_delivery = lt_entregas-vbeln.
    ls_vbkok-vbeln_vl = l_delivery.
    ls_vbkok-wabuc    = 'X'.   "contabilizar Salida merc.

    SELECT vbeln AS vbeln_vl
           posnr AS posnr_vl
           matnr
           charg
           lfimg
           lgmng
           umvkz
           umvkn
           vrkme
           meins
           werks FROM lips
                 INTO CORRESPONDING FIELDS OF TABLE lt_vbpok
                 WHERE vbeln EQ l_delivery.

    LOOP AT lt_vbpok.
      lt_vbpok-vbeln       = lt_vbpok-vbeln_vl.
      lt_vbpok-posnn       = lt_vbpok-posnr_vl.
      lt_vbpok-lgort       = wa_data-lgort_ori. "lt_ekpo-lgort. "p_lgort.
      lt_vbpok-mdiff_lgort = wa_data-lgort_ori.  "lt_ekpo-lgort. "p_lgort.

      MODIFY lt_vbpok.
    ENDLOOP.

    CALL FUNCTION 'WS_DELIVERY_UPDATE_2'
      EXPORTING
        vbkok_wa                  = ls_vbkok
*        commit                    = 'X'
        delivery                  = l_delivery
        update_picking            = 'X'
        if_error_messages_send    = ' '
      IMPORTING
        ef_error_any              = l_error_any_0
        ef_error_in_item_deletion = l_error_in_item_deletion_0
        ef_error_in_pod_update    = l_error_in_pod_update_0
        ef_error_in_interface     = l_error_in_interface_0
        ef_error_in_goods_issue   = l_error_in_goods_issue_0
        ef_error_in_final_check   = l_error_in_final_check_0
        ef_error_partner_update   = l_error_partner_update
        ef_error_sernr_update     = l_error_sernr_update
      TABLES
        vbpok_tab                 = lt_vbpok
        prot                      = lt_prot.

    IF l_error_any_0 EQ 'X'.
      LOOP AT lt_prot where msgty eq 'E'.
        MESSAGE ID     lt_prot-msgid
                TYPE   'I'
                NUMBER lt_prot-msgno
                WITH   lt_prot-msgv1
                       lt_prot-msgv2
                       lt_prot-msgv3
                       lt_prot-msgv4 into g_message.
        PERFORM add_news USING 'Contabilización de entrega:' icon_red_light.
        wa_data-stat =  icon_red_light.
*        error = 'X'.
      ENDLOOP.

    ELSE.
      COMMIT WORK AND WAIT.
      MESSAGE S000(0k) WITH  'Se contabilizó la entrega' l_delivery into g_message.
      PERFORM add_news USING 'Contabilización de entrega:' icon_green_light.
      wa_data-stat =  icon_green_light.
      p_cont = 'X'.
    ENDIF.

  endloop.
ENDFORM.                    " CREAR_ENTREGA

BAPI_GOODSMVT_CREATE entrada de mercancía para pedido de traslado MIGO con referencia a entrega

form recepcion USING p_oc p_entrega CHANGING p_materialdocument
                                             p_MATDOCUMENTYEAR.
* entrada de mercancía para pedido de traslado MIGO con referencia
* a entrega

 DATA: lt_item TYPE TABLE OF  bapi2017_gm_item_create,
       lt_ekpo TYPE TABLE OF ekpo,
       lt_return TYPE TABLE OF bapiret2.

 data: ls_ekpo TYPE ekpo,
       ls_header LIKE  bapi2017_gm_head_01,
       ls_code LIKE  bapi2017_gm_code,
       ls_item LIKE LINE OF lt_item,
       ls_return LIKE LINE OF lt_return.

 DATA: l_materialdocument TYPE  bapi2017_gm_head_ret-mat_doc,
       l_MATDOCUMENTYEAR TYPE  BAPI2017_GM_HEAD_RET-DOC_YEAR,
       l_testrun TYPE testrun VALUE space.

 CLEAR: lt_item[],
        ls_header,
        ls_code,
        l_materialdocument.

 SELECT * FROM ekpo INTO TABLE lt_ekpo
                         WHERE ebeln = p_oc.
 IF sy-subrc = 0.
    ls_header-pstng_date = sy-datum.
    ls_header-doc_date   = sy-datum.
    ls_header-ref_doc_no = p_entrega.
    ls_header-header_txt = wa_data-vbeln.
    ls_code-gm_code      = '01'. "MB1C ver tabla T158G

    LOOP AT lt_ekpo INTO ls_ekpo.
      CLEAR ls_item.
      ls_item-move_type  = '101'.
      ls_item-material   = ls_ekpo-matnr.
      ls_item-plant      = ls_ekpo-werks.
      ls_item-stge_loc   = ls_ekpo-lgort.

* si material esta sujeto a lote => lote = pedido de traslado
      SELECT COUNT(*) FROM MARc WHERE MATNR = ls_ekpo-matnr
      AND WERKS = ls_ekpo-werks
      AND XCHAR = 'X'.
      IF sy-subrc = 0.
        ls_item-batch = p_oc.
      ENDIF.
      ls_item-entry_qnt  = ls_ekpo-menge.
      ls_item-po_number  = ls_ekpo-ebeln.
      ls_item-po_item    = ls_ekpo-ebelp.
      ls_item-val_type   = ls_ekpo-bwtar.
      ls_item-mvt_ind    = 'B'. "indicador de movimiento
      ls_item-DELIV_NUMB = p_entrega.
      APPEND ls_item TO lt_item.
    ENDLOOP.

    CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header  = ls_header
      goodsmvt_code    = ls_code
      testrun          = l_testrun
    IMPORTING
      materialdocument = l_materialdocument
      MATDOCUMENTYEAR  = l_MATDOCUMENTYEAR
    TABLES
      goodsmvt_item    = lt_item
      RETURN           = lt_return
      .
    IF lt_return[] IS INITIAL.
* proceso OK
      p_materialdocument = l_materialdocument.
      p_MATDOCUMENTYEAR  = l_MATDOCUMENTYEAR.

      MESSAGE S000(0k) WITH 'Se creo documento de material'
      l_materialdocument l_MATDOCUMENTYEAR INTO g_message.
      PERFORM add_news USING 'Recepción:' icon_green_light.
* commit work
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = 'X'.
   ELSE.
* error
      LOOP AT lt_return INTO ls_return
      GROUP BY COND string( WHEN ls_return-TYPE = 'E' THEN |EQ 1|
      WHEN ls_return-TYPE = 'A' THEN |EQ 2|
      WHEN ls_return-TYPE = 'W' THEN |EQ 3|
      WHEN ls_return-TYPE = 'I' THEN |EQ 4|
      )
      ASCENDING
      ASSIGNING FIELD-SYMBOL(<group>).
        LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<ls_return>).
          EXIT.
        ENDLOOP.
        EXIT.
      ENDLOOP.
      IF sy-subrc = 0.
        MOVE <ls_return>-MESSAGE TO g_message.
        PERFORM add_news USING 'Recepción:' icon_red_light.
         wa_data-stat =  icon_red_light.
      ENDIF.

    ENDIF.
 ELSE.
 ENDIF.
ENDFORM. " f_entrada_merc_pedido

Crear entrega de salida según pedido(VL01N), contabilizarla y realizar picking

form entrega_cliente_final USING p_pedido p_oc CHANGING p_entrega
                                                        p_contabilizado_cli.
* VL01N
  DATA: lt_sales_order    TYPE TABLE OF bapidlvreftosalesorder WITH HEADER LINE,
        lt_return type TABLE OF bapiret2,
        lt_ekpo type TABLE OF ekpo WITH HEADER LINE,
        ls_return like LINE OF lt_return,
        l_delivery       TYPE  bapishpdelivnumb-deliv_numb,
        l_num_deliveries TYPE  bapidlvcreateheader-num_deliveries,
        l_VSTEL type VSTEL.

  if p_entrega is INITIAL.
    lt_sales_order-ref_doc = p_pedido.
    lt_sales_order-REF_ITEM = wa_data-posnr.
    APPEND lt_sales_order.

    SELECT SINGLE vstel into l_VSTEL from vbap where vbeln = wa_data-vbeln and
                                                   posnr = wa_data-posnr.

* crear la entrega
    CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS'
      EXPORTING
        SHIP_POINT              = l_vstel
      IMPORTING
        delivery                = l_delivery
        num_deliveries          = l_num_deliveries
      TABLES
        sales_order_items       = lt_sales_order
        return                  = lt_return
        .

  IF l_delivery IS INITIAL.
    LOOP AT lt_return INTO ls_return
      GROUP BY COND string( WHEN ls_return-type = 'E' THEN |EQ 1|
                          WHEN ls_return-type = 'A' THEN |EQ 2|
                          WHEN ls_return-type = 'W' THEN |EQ 3|
                          WHEN ls_return-type = 'I' THEN |EQ 4|
                          )
              ASCENDING
              ASSIGNING FIELD-SYMBOL(<group>).
      LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<ls_return>).
        exit.
      ENDLOOP.
      EXIT.
   ENDLOOP.
   IF sy-subrc = 0.
     move <ls_return>-message to g_message.
     PERFORM add_news USING 'Entrega Cliente Final:' icon_red_light.
     return.
   ENDIF.

  else.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.

     p_entrega = l_delivery.
     MESSAGE s000(0k) WITH   l_delivery 'creada con éxito' into g_message.
     PERFORM add_news USING 'Entrega Cliente Final:' icon_green_light.
  endif.
  else.
    l_delivery = p_entrega.
  endif.
*--------------------------------------------------------------------*
* contabiliza SM & picking entregas.
*--------------------------------------------------------------------*
  DATA lt_return2 TYPE bapiret2_t.
  DATA lt_lips TYPE TABLE OF lips WITH HEADER LINE.
  DATA: ls_data           TYPE bapiobdlvhdrchg,
        ls_control        TYPE bapiobdlvhdrctrlchg,
        lt_item_control   TYPE TABLE OF  bapiobdlvitemctrlchg WITH HEADER LINE,
        lt_item_data      TYPE TABLE OF bapiobdlvitemchg WITH HEADER LINE,
        lt_item_spl       TYPE TABLE OF /spe/bapiobdlvitemchg WITH HEADER LINE,
        ls_techn_control  TYPE  bapidlvcontrol.

   check l_delivery is NOT INITIAL.

* modificar entrega
    REFRESH lt_lips.
* si no tiene lote => actualizar
    select * into TABLE lt_lips from lips where vbeln = l_delivery and charg = space.
    IF sy-subrc = 0.
      LOOP AT lt_lips.
        select COUNT(*) from marc where matnr = lt_lips-matnr and
                                        werks = lt_lips-werks and
                                        xchar = 'X'.  "sujeto a lote
        check sy-subrc = 0.
        lt_item_data-deliv_numb      = lt_lips-vbeln.
        lt_item_data-deliv_item      = lt_lips-posnr.
        lt_item_data-dlv_qty         = lt_lips-lfimg.
        lt_item_data-batch           = p_oc.   "lote => pedido de traslado
        lt_item_data-material        = lt_lips-matnr.
        lt_item_data-fact_unit_nom   = lt_lips-umvkz.
        lt_item_data-fact_unit_denom = lt_lips-umvkn.
        lt_item_data-base_uom        = lt_lips-meins.
        lt_item_data-sales_unit      = lt_lips-vrkme.

        lt_item_control-deliv_numb   = lt_lips-vbeln.
        lt_item_control-deliv_item   = lt_lips-posnr.
        lt_item_control-chg_delqty   = 'X'.

        APPEND lt_item_spl.
        APPEND lt_item_control.
        APPEND lt_item_data.
      ENDLOOP.

*—–> modificar la entrega
      if lt_item_data[] is NOT INITIAL.
        ls_data-deliv_numb         = l_delivery.
        ls_control-deliv_numb      = l_delivery.
        ls_techn_control-upd_ind   = 'U'.

        CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
        EXPORTING
          header_data                   = ls_data
          header_control                = ls_control
          delivery                      = l_delivery
          techn_control                 = ls_techn_control
        TABLES
          item_data                     = lt_item_data[]
          item_control                  = lt_item_control[]
          RETURN                        = lt_return
*        item_data_spl                 = lt_item_spl[]
        .

        LOOP AT lt_return INTO ls_return WHERE TYPE = 'E'.
          MOVE ls_return-MESSAGE TO g_message.
          PERFORM add_news USING 'Modif. Almacén de Entrega:' icon_red_light.
          wa_data-stat =  icon_red_light.
          EXIT.
        ENDLOOP.
        IF sy-subrc = 0.
          RETURN.   "------------------------->
        ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT = 'X'.
        ENDIF.
      ENDIF.
    ENDIF.

**********************************************************************
***picking
**********************************************************************
   data: lt_vbpok type TABLE OF vbpok WITH HEADER LINE,
         lt_prot  type TABLE OF prott WITH HEADER LINE,
         ls_vbkok like vbkok,
         l_error_any_0              type c length 1,
         l_error_in_item_deletion_0 type c length 1,
         l_error_in_pod_update_0    type c length 1,
         l_error_in_interface_0     type c length 1,
         l_error_in_goods_issue_0   type c length 1,
         l_error_in_final_check_0   type c length 1,
         l_error_partner_update     type c length 1,
         l_error_sernr_update       type c length 1.

    REFRESH lt_return.

    select * into TABLE lt_ekpo from ekpo where ebeln = p_oc.

    ls_vbkok-vbeln_vl = l_delivery.
    ls_vbkok-wabuc    = 'X'.  "contabilizar Salida merc.

    SELECT vbeln AS vbeln_vl
           posnr AS posnr_vl
           matnr
           charg
           lfimg
           lgmng
           umvkz
           umvkn
           vrkme
           meins
      FROM lips
      INTO CORRESPONDING FIELDS OF TABLE lt_vbpok
                                   WHERE vbeln EQ l_delivery.

    LOOP AT lt_vbpok.
      lt_vbpok-vbeln       = lt_vbpok-vbeln_vl.
      lt_vbpok-posnn       = lt_vbpok-posnr_vl.
       lt_vbpok-taqui = 'X'.   "confirmar picking
      MODIFY lt_vbpok.
    ENDLOOP.

    CALL FUNCTION 'WS_DELIVERY_UPDATE_2'
      EXPORTING
        vbkok_wa                  = ls_vbkok
        commit                    = 'X'
        delivery                  = l_delivery
        update_picking            = 'X'
        if_error_messages_send    = ' '
      IMPORTING
        ef_error_any              = l_error_any_0
        ef_error_in_item_deletion = l_error_in_item_deletion_0
        ef_error_in_pod_update    = l_error_in_pod_update_0
        ef_error_in_interface     = l_error_in_interface_0
        ef_error_in_goods_issue   = l_error_in_goods_issue_0
        ef_error_in_final_check   = l_error_in_final_check_0
        ef_error_partner_update   = l_error_partner_update
        ef_error_sernr_update     = l_error_sernr_update
      TABLES
        vbpok_tab                 = lt_vbpok
        prot                      = lt_prot.

    IF l_error_any_0 EQ 'X'.
      LOOP AT lt_prot where msgty eq 'E'.
        MESSAGE ID     lt_prot-msgid
                TYPE   'I'
                NUMBER lt_prot-msgno
                WITH   lt_prot-msgv1
                       lt_prot-msgv2
                       lt_prot-msgv3
                       lt_prot-msgv4 into g_message.
        PERFORM add_news USING 'Entrega Cliente Final:' icon_red_light.
      ENDLOOP.

    ELSE.
      MESSAGE S000(0k) WITH  'Se contabilizó la entrega' l_delivery into g_message.
      PERFORM add_news USING 'Entrega Cliente Final:' icon_green_light.
      p_contabilizado_cli = 'X'.

    ENDIF.
endform.

Leer Datos de Clasificación de Material

FORM obtiene_embalaje  USING    p_matnr
                       CHANGING p_emba1.

  DATA: vl_classtype   LIKE klah-klart VALUE '001',
        vl_objecttable LIKE tcla-obtab VALUE 'MARA',
        vl_clint       LIKE klah-clint VALUE '0000000000'.

  DATA: tmp_material(18).

  DATA: tl_objectdata LIKE clobjdat OCCURS 0 WITH HEADER LINE.
  DATA  tl_class      LIKE  sclass  OCCURS 0 WITH HEADER LINE.
  DATA: vl_objek LIKE ausp-objek.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = p_matnr
    IMPORTING
      output = tmp_material.

  vl_objek = tmp_material.

  CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'
    EXPORTING
      classtext          = 'X'
      classtype          = vl_classtype
      clint              = vl_clint
      features           = 'X'
      language           = sy-langu
      object             = vl_objek
      objecttable        = vl_objecttable
      key_date           = sy-datum
      initial_charact    = 'X'
      change_service_clf = 'X'
    TABLES
      t_class            = tl_class
      t_objectdata       = tl_objectdata
    EXCEPTIONS
      no_classification  = 1
      no_classtypes      = 2
      invalid_class_type = 3
      OTHERS             = 4.
endform.