取物料特性

定义结构存放特性值:

  DATA: BEGIN OF wa_mchb,
        atnam LIKE cabn-atnam, "特征名称
        atbez LIKE cabnt-atbez, "特征描述
        atwrt LIKE cawn-atwrt, "特性值
  END OF wa_mchb.

  DATA:   it_data LIKE wa_mchb OCCURS WITH HEADER LINE.  ”定义内表存放特性值

*取物料组特性
  DATA: lt_class      TYPE TABLE OF sclass.        里面放着物料主数据t-cod是MM03里分类下的分配表
  DATA: lt_objectdata TYPE TABLE OF clobjdat.  里面放着物料主数据t-cod是MM03里分类下的物料特性表
  DATA: ls_objectdata TYPE clobjdat.                 物料特性结构
  DATA: lf_object      LIKE ausp-objek.               一个对象的变量:就是把物料编号增加前导零到18位赋给 lf_object

*定义一个子例程  增加前导零,
  DEFINE  zm_convert_alpha_input2.
    call function 'CONVERSION_EXIT_MATN1_INPUT'
      exporting
        input        &1
      importing
        output       &1
      exceptions
        length_error 1
        others       2.
    if sy-subrc <> 0.
* Implement suitable error handling here
    endif.

*    清空工作区和内表准备存放物料特性
      CLEAR: lf_object,ls_objectdata.
      REFRESH: lt_class,lt_objectdata.

*    调用刚才定义的增加前导零,把物料编号增加前导零到18位赋给 lf_object

zm_convert_alpha_input2: gs_pd-matnr.

* 调用该函数取出物料特性值

      CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'
        EXPORTING
          classtype          '001'
          object             lf_object
        TABLES
          t_class            lt_class
          t_objectdata       lt_objectdata
        EXCEPTIONS
          no_classification  1
          no_classtypes      2
          invalid_class_type 3
          OTHERS             4.
      IF sy-subrc <> 0.
      ENDIF.

*循环内表里把特性值名称、特性值、特性值描述取出来放在自定义的内表it_data里.
      LOOP AT lt_objectdata INTO ls_objectdata.
        it_data-atnam ls_objectdata-atnam.  "特性名称
        it_data-atwrt ls_objectdata-ausp1.  "特性值
        IF it_data-atwrt '?'.
          it_data-atwrt ''.
        ENDIF.
        it_data-atbez ls_objectdata-smbez.  "特征描述

        APPEND it_data.

        CLEAR: ls_objectdata.
      ENDLOOP.

      SORT it_data BY atnam atbez.  "排序批次特性表
      DELETE ADJACENT DUPLICATES FROM it_data COMPARING ALL FIELDS. "删除重复的数据。

然后就是把特性表里的特性值读出来放在所要显示的内表中,这里的内表是gt_tab。

注意:我们在取特性值的时候是要传递一些内表中的比如物料这些信息的,所以在取特性值的前提下我们要先loop  那些内表,这里是内表gt_pd,这里我没有做循环。

提示:

这边我们在取特性值之前我还可以先转换一下单位

*    单位转换
      CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
        EXPORTING
          input    gs_pd-meins
          language '1'
        IMPORTING
          output   gs_pd-meins.

      MODIFY gt_pd FROM gs_pd."
      MOVE-CORRESPONDING gs_pd TO it_data.  

原文地址:https://www.cnblogs.com/caizjian/p/3012685.html