ABAP 中获取特性内部编号 ATINN 并写入 AUSP 的最佳实践
在 SAP ABAP 中,AUSP-ATINN 是特性内部编号(Internal Characteristic Number),它不是手工"给"的值,而是通过特性名称查出来的。常见获取方式如下:
1. 通过特性名称查询 ATINN
最标准的方式是查表 CABN(特性主表):
DATA: lv_atnam TYPE cabn-atnam VALUE '你的特性名',
lv_atinn TYPE ausp-atinn.
SELECT SINGLE atinn FROM cabn INTO lv_atinn
WHERE atnam = lv_atnam.
如果特性有多个类别/类类型,CABN 中同一 ATNAM 可能对应多条记录,需要结合 ATKLA(特性组)或 KLART 等条件精确筛选:
SELECT SINGLE atinn FROM cabn INTO lv_atinn
WHERE atnam = lv_atnam
AND atkla = lv_atkla. "特性组
2. 通过函数模块获取
SAP 提供了一些 FM 可以按名称取 ATINN,例如:
CLAP_DDB_GET_ALLOCATION等分类相关 FM- 更常用的是直接用
CABN查询,简单可靠
3. 写入 AUSP 时的典型用法
AUSP 是特性值表,插入/更新时 ATINN 必须来自 CABN,不能随意赋值:
DATA: ls_ausp TYPE ausp.
ls_ausp-mandt = sy-mandt.
ls_ausp-objek = lv_objek. "对象号,如物料/批次的对象号
ls_ausp-atinn = lv_atinn. "从 CABN 查到的特性内部编号
ls_ausp-atwrt = lv_value. "特性值
ls_ausp-atflv = ' '. "值是否为空标志
INSERT ausp FROM ls_ausp.
注意事项
- ATINN 是系统内部编号,不同系统(开发/测试/生产)中同一特性的 ATINN 可能不同,绝对不能硬编码,必须按
ATNAM动态查询。 CABN中ATNAM大小写敏感(一般大写),查询前可用TRANSLATE ... TO UPPER CASE。- 对象号
OBJEK也不是随便给的,需要根据对象类型(物料、批次、设备等)通过CLFM相关逻辑或OBJNR规则生成,通常用CLAP_DDB_...系列 FM 或CUOB_GET_NUMBER获取。 - 如果只是读特性值,建议用
CLAF_CLASSIFICATION_DATA或CLFM相关 API,而不是直接操作AUSP。
如果你是想手工在 SE16 里给 AUSP-ATINN 赋值,那是不行的——它是内部编号,必须通过 CABN 关联获得。
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
sap-abap 张国生
