取物料特性

本文详细介绍了如何使用特定的程序逻辑从物料主数据中提取并处理特性值,包括增加前导零、单位转换、特性值排序和去重等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义结构存放特性值:

  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/archive/2013/04/10/3012685.html

内容概要:本文档提供了关于“微型车间生产线的设计与生产数据采集试验研究”的毕业设计复现代码,涵盖从论文结构生成、机械结构设计、PLC控制系统设计、生产数据采集与分析系统、有限元分析、进度管理、文献管理和论文排版系统的完整实现。通过Python代码和API调用,详细展示了各个模块的功能实现和相互协作。例如,利用SolidWorks API设计机械结构,通过PLC控制系统模拟生产流程,使用数据分析工具进行生产数据的采集和异常检测,以及利用进度管理系统规划项目时间表。 适合人群:具有机械工程、自动化控制或计算机编程基础的学生或研究人员,尤其是从事智能制造领域相关工作的人员。 使用场景及目标:①帮助学生或研究人员快速搭建和理解微型车间生产线的设计与实现;②提供完整的代码框架,便于修改和扩展以适应不同的应用场景;③作为教学或科研项目的参考资,用于学习和研究智能制造技术。 阅读建议:此资源不仅包含详细的代码实现,还涉及多个学科领域的知识,如机械设计、电气控制、数据分析等。因此,在学习过程中,建议读者结合实际操作,逐步理解每个模块的功能和原理,并尝试调整参数以观察不同设置下的系统表现。同时,可以参考提供的文献资,深入研究相关理论和技术背景。
<think>我们正在寻找一个能够获取物分类视图的ABAP函数。根据引用[1]中的代码片段,我们可以看到通过INOB、KSSK和KLAH表的连接查询来获取物的分类编号。这通常用于获取物的批次分类信息,但方法类似。 在SAP中,获取物的分类视图通常涉及到分类系统的表,如INOB(对象编号和分类对象的关系)、KSSK(分配类到对象)和KLAH(分类头数据)等。 但是,SAP也提供了一些标准的函数模块来获取分类信息。常用的函数模块有: - `CLAF_CLASSIFICATION_OF_OBJECTS`:获取对象的分类数据 - `BAPI_OBJCL_GETCLASSES`:通过BAPI获取对象的分类 - `BAPI_OBJCL_GETDETAIL`:获取分类的详细信息 其中,`BAPI_OBJCL_GETCLASSES` 可以用于获取指定对象(如物)的分类列表。 下面是一个使用 `BAPI_OBJCL_GETCLASSES` 获取物分类的示例: ```abap DATA: lt_matnr_range TYPE RANGE OF bapi1003_alloc_list-objkey, ls_matnr_range LIKE LINE OF lt_matnr_range, lt_alloclist TYPE TABLE OF bapi1003_alloc_list, lt_allocvalues TYPE TABLE OF bapi1003_alloc_values, lt_return TYPE TABLE OF bapiret2. * 设置物号范围,例如物号'000000000000001000' ls_matnr_range-sign = 'I'. ls_matnr_range-option = 'EQ'. ls_matnr_range-low = '000000000000001000'. APPEND ls_matnr_range TO lt_matnr_range. * 调用BAPI获取分类 CALL FUNCTION 'BAPI_OBJCL_GETCLASSES' EXPORTING objecttable_imp = 'MARA' " 对象表,物主数据 classtype_imp = '' " 分类类型,如果为空则获取所有 read_valuations = abap_true " 读取评估(特性值) keydate = sy-datum " 关键日期 language = sy-langu " 语言 TABLES objkeyrange_tab = lt_matnr_range alloclist = lt_alloclist " 返回的分类列表 allocvalues = lt_allocvalues " 返回的特性值 return = lt_return. * 检查返回信息 LOOP AT lt_return INTO DATA(ls_return) WHERE type CA 'AEX'. " 处理错误 ENDLOOP. * 输出分类信息 LOOP AT lt_alloclist INTO DATA(ls_alloclist). WRITE: / '物:', ls_alloclist-objkey, '分类:', ls_alloclist-class, '类型:', ls_alloclist-classtype. ENDLOOP. ``` 这个函数模块会返回物分配的分类列表以及特性值(如果设置了`read_valuations`参数)。注意,`objkeyrange_tab`参数需要传递一个对象键值范围表,这里对象键值对于物就是物号。 另外,引用[1]中使用了直接查询数据库表的方式,但使用BAPI是更推荐的方式,因为它封装了业务逻辑,并且考虑了权限等因素。 如果只需要分类编号而不需要特性值,也可以使用函数`CLAF_CLASSIFICATION_OF_OBJECTS`,但使用BAPI更为标准。 因此,推荐使用`BAPI_OBJCL_GETCLASSES`来获取物的分类视图。 §§相关问题§§ 1. 如何获取物分类的特性值? 2. 如何使用ABAP查询分类系统的数据库表? 3. 在SAP中如何创建分类? 4. 如何通过分类获取物?</think>在 ABAP 中获取物分类视图的标准函数是 **`CLAF_CLASSIFICATION_OF_OBJECTS`**。以下是详细的使用方法和代码示例: ### 核心函数说明 ```abap CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS' EXPORTING classtype = '001' " 分类类型(如001=物分类) object = 'MARA' " 对象表名(物主数据) object_key = lv_matnr " 物号 only_classname = space " 是否仅返回分类名(空=返回全部信息) language = sy-langu " 当前语言 TABLES allocations = lt_alloc " 返回的分类分配数据 values = lt_values " 返回的特性值 EXCEPTIONS no_classification = 1 " 无分类数据 no_classtypes = 2 " 无效分类类型 invalid_object = 3 " 无效对象 others = 4. ``` ### 完整代码示例 ```abap DATA: lt_alloc TYPE STANDARD TABLE OF bapi1003_alloc_list, " 分类分配表 lt_values TYPE STANDARD TABLE OF bapi1003_alloc_values, " 特性值表 lv_matnr TYPE matnr VALUE '000000000000001000'. " 物号示例 " 调用函数获取分类数据 CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS' EXPORTING classtype = '001' " 物分类标准类型 object = 'MARA' " 对象表 object_key = lv_matnr " 物号 language = sy-langu " 系统语言 TABLES allocations = lt_alloc " 分类分配结果 values = lt_values " 特性值结果 EXCEPTIONS no_classification = 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. " 输出分类信息 LOOP AT lt_alloc INTO DATA(ls_alloc). WRITE: / '分类编号:', ls_alloc-class, '分类描述:', ls_alloc-classtext. ENDLOOP. ``` ### 关键参数说明 1. **`classtype`** - 分类类型标识码(必填) - 示例:`001`(物主分类)、`023`(批次分类)[^1] 2. **`object`** - 数据库表名(固定为 `MARA` 表示物) 3. **`object_key`** - 物号(长度需与 `MARA-MATNR` 一致) 4. **`allocations` 返回表** - 包含字段:`CLASS`(分类编号)、`CLASSTEXT`(分类描述)、`CLASSTYPE`(分类类型) 5. **`values` 返回表** - 包含特性值字段:`CHARACT`(特性代码)、`VALUE`(特性值)、`VALUE_TEXT`(特性描述) ### 替代方案:直接表查询 若需更高性能,可直接查询分类表: ```abap SELECT klah~class, klah~classtext FROM inob JOIN kssk ON inob~cuobj = kssk~objek JOIN klah ON kssk~clint = klah~clint WHERE inob~objek = @lv_matnr " 物号 AND inob~klart = '001' " 分类类型 AND inob~obtab = 'MARA' " 对象表 AND kssk~mafid = 'O' " 对象标识 INTO TABLE @DATA(lt_class). ``` ### 注意事项 - 分类类型需根据业务需求选择(`001`=物主分类,`023`=批次分类等)[^1] - 物号长度需与 `MARA-MATNR` 匹配(通常为 18 位字符) - 函数返回结果包含多语言描述(通过 `language` 参数控制)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值