SAP 获取物料/批次/订单的特性值(学习一)

发布时间:2024年01月10日

1、事务码

MSC1N、MSC2N、MSC3N

2、常用表

MCH1、MCHA、AUSP、MCH*开头的几个

3、批次

1、创建批次

BAPI:BAPI_BATCH_CREATE

2、修改批次

BAPI:BAPI_BATCH_CHANGE

3、删除批次

BAPI:BAPI_BATCH_DELETE

4、获取批次明细

BAPI:BAPI_BATCH_GET_DETAIL

5、查询物料的分类视图是否扩充

BAPI: BAPI_OBJCL_GETCLASSES

OBJECTKEY_IMP:物料号 带前导0

OBJECTTABLE_IMP??MARA

CLASSTYPE_IMP??022

4、特性值

1、获取类别

CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'

?????EXPORTING

????????I_MATNR = LS_DATA-MATNR

????????I_CHARG = LS_DATA-CHARG

????????I_WERKS = LS_DATA-WERKS

?????IMPORTING

????????E_OBJEK = LV_OBJEK

????????E_OBTAB = LV_OBTAB

????????E_KLART = LV_KLART

????????E_CLASS = LV_CLASS.

DATA:LV_OBJEK?????????????TYPE??CUOBN,

?????LV_OBTAB?????????????TYPE??TABELLE,

?????LV_KLART?????????????TYPE??KLASSENART,

?????LV_CLASS?????????????TYPE??KLASSE_D.

2、通过物料+批次获取表和类别

SELECT SINGLE CUOBJ_BM FROM MCH1 INTO @DATA(LV_BM)

?????????WHERE MATNR EQ XXX

???????????AND CHARG EQ XXX.

DATA:LV_OBJECTNAME????????LIKE BAPI1003_KEY-OBJECT,

?????LV_OBJECTTABLE???????LIKE BAPI1003_KEY-OBJECTTABLE,

?????LV_CLASSTYPE?????????LIKE BAPI1003_KEY-CLASSTYPE,

?????RETURN???????????????LIKE TABLE OF BAPIRET2??????WITH HEADER LINE.

CALL FUNCTION 'BAPI_OBJCL_GET_OBJECT_OF_KEY'

?????EXPORTING

????????CLOBJECTKEYIN = LV_BM

?????IMPORTING

????????OBJECTNAME????= LV_OBJECTNAME

????????OBJECTTABLE???= LV_OBJECTTABLE

????????CLASSTYPE?????= LV_CLASSTYPE

?????TABLES

????????RETURN????????= RETURN.

3、获取特性值明细

DATA:I_OBJEK??????????????TYPE??BAPI1003_KEY-OBJECT,

?????I_OBTAB??????????????TYPE??BAPI1003_KEY-OBJECTTABLE,

?????I_KLART??????????????TYPE??BAPI1003_KEY-CLASSTYPE,

?????I_CLASS??????????????TYPE??BAPI1003_KEY-CLASSNUM.

CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'

?????EXPORTING

???????OBJECTKEY????????= I_OBJEK

???????OBJECTTABLE??????= I_OBTAB

???????CLASSNUM?????????= I_CLASS

???????CLASSTYPE????????= I_KLART

???????UNVALUATED_CHARS = 'X'

?????TABLES

???????ALLOCVALUESNUM???= CLASSVALUATIONSNUM

???????ALLOCVALUESCHAR??= CLASSVALUATIONSCHAR

???????ALLOCVALUESCURR??= CLASSVALUATIONSCURR

???????RETURN???????????= RETURN.

4、特性值修改

BAPI:BAPI_OBJCL_CHANGE

5、批量修改批次特性值

BAPI:BAPI_BATCH_SAVE_REPLICA

5、分类、特性值关系

根据分类别查KLAH表,KLAH-CLASS = 'XXX',获取内部等级号 CLINT

根据KLAH-CLINT = KSML-CLINT取得分类下所有的内部特性号 IMERK

根据KSML-IMERK = CABN-ATINN取得特性详细信息,CABNT是特性描述

6、批次对应物料特性值读取

VC_I_GET_CONFIGURATION

批次分类特性值读取函数

BAPI_OBJCL_GETDETAIL

物料特性 /

?200 特性通过数据库取值

??SELECT

????objek "将分类的对象的键值

????atinn "内部特性

????atwrt "特性值

????atflv "内部浮点自

????klart "类别种类

????INTO TABLE gt_ausp

????FROM ausp

????INNER JOIN cabn

????ON cabn~atinn = ausp~atinn

????WHERE objek = '000000000101004001'

??????AND klart = '200'

??????AND atnam = 'WG0078'. " 内部特性

??SORT gt_ausp BY objek atinn.

????

????READ TABLE gt_ausp INTO gs_ausp

??????WITH KEY objek = '000000000101004001'

???????????????atinn = 'WG0078'

???????????????BINARY SEARCH.

??IF sy-subrc = 0.

????CALL FUNCTION 'MC_FLTP_CHAR'

??????EXPORTING

????????fc_a_fld = gs_ausp-atflv

??????IMPORTING

????????fc_r_fld = gs_alv-wg0078.

??ENDIF.

通过 BAPI 取值

DATA: lv_matnr???????????TYPE matnr,

??????lv_object??????????TYPE objnum,

??????ls_alloclist???????TYPE bapi1003_alloc_list,

??????lt_alloclist???????TYPE TABLE OF bapi1003_alloc_list,

??????ls_return??????????TYPE bapiret2,

??????lt_return??????????TYPE TABLE OF bapiret2,

??????ls_allocvaluesnum??TYPE bapi1003_alloc_values_num,

??????lt_allocvaluesnum??TYPE TABLE OF bapi1003_alloc_values_num,

??????ls_allocvalueschar TYPE bapi1003_alloc_values_char,

??????lt_allocvalueschar TYPE TABLE OF bapi1003_alloc_values_char,

??????ls_allocvaluescurr TYPE bapi1003_alloc_values_curr,

??????lt_allocvaluescurr TYPE TABLE OF bapi1003_alloc_values_curr,

??????ls_retur2??????????TYPE bapiret2,

??????lt_retur2??????????TYPE TABLE OF bapiret2.

lv_object = lv_matnr.??" 物料号带前置零

CALL FUNCTION 'BAPI_OBJCL_GETCLASSES' " 可以通过 cl03 查看

??EXPORTING

????objectkey_imp???= lv_object " 物料号

????objecttable_imp = 'MARA'

????classtype_imp???= '200'

??TABLES

????alloclist???????= lt_alloclist

????return??????????= lt_return.

READ TABLE lt_alloclist INTO ls_alloclist INDEX 1.

CALL FUNCTION 'BAPI_OBJCL_GETDETAIL' " 也可以用 claf_classification_of_objects 取值

??EXPORTING

????objectkey???????= lv_object

????objecttable?????= 'MARA'

????classnum????????= ls_alloclist-classnum

????classtype???????= '200'

??TABLES

????allocvaluesnum??= lt_allocvaluesnum

????allocvalueschar = lt_allocvalueschar

????allocvaluescurr = lt_allocvaluescurr

????return??????????= lt_retur2.

通过 BAPI 创建特性

l_objectkeynew = l_matnr.

l_objecttablenew = 'MARA'.

l_classnumnew = ls_tmp-class.

l_classtypenew = ls_tmp-klart.

CLEAR: lt_numout,lt_charout,lt_returnout.

CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'

??EXPORTING

????objectkey???????= l_objectkeynew

????objecttable?????= l_objecttablenew

????classnum????????= l_classnumnew

????classtype???????= l_classtypenew

??TABLES

????allocvaluesnum??= lt_numout

????allocvalueschar = lt_charout

????allocvaluescurr = lt_currout

????return??????????= lt_returnout.

CLEAR ls_return.

READ TABLE lt_returnout INTO ls_return WITH KEY type = 'E'.

IF sy-subrc <> 0.

??CLEAR lt_returnout.

??CALL FUNCTION 'BAPI_OBJCL_DELETE' "删除已有分类

????EXPORTING

??????objectkey???= l_objectkeynew

??????objecttable = l_objecttablenew

??????classnum????= l_classnumnew

??????classtype???= l_classtypenew

*?????CHANGENUMBER =

*?????KEYDATE?????= SY-DATUM

????TABLES

??????return??????= lt_returnout.

??CLEAR ls_return.

??READ TABLE lt_returnout INTO ls_return WITH KEY type = 'E'.

??IF sy-subrc = 0.

????CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

????MESSAGE e000 WITH '删除物料' l_objectkeynew '已有分类失败'.

??ELSE.

????CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

??????EXPORTING

????????wait = 'X'.

??ENDIF.

ENDIF.

LOOP AT gt_upload INTO gs_upload WHERE matnr = ls_tmp-matnr AND klart =

ls_tmp-klart AND class = ls_tmp-class.

??CLEAR: ls_num, ls_char,l_atinn,l_atfor.

??CALL FUNCTION 'CONVERSION_EXIT_ATINN_INPUT'

????EXPORTING

??????input??= gs_upload-atnam

????IMPORTING

??????output = l_atinn.

* SELECT SINGLE atfor FROM cabn INTO l_atfor WHERE atinn = l_atinn.

??READ TABLE lt_cabn INTO ls_cabn WITH KEY atinn = l_atinn.

??IF sy-subrc <> 0.

????MESSAGE e000 WITH '特性没有维护,请先维护特性!'.

??ENDIF.

??l_atfor = ls_cabn-atfor.

??IF gs_upload-atwrt IS NOT INITIAL.

????IF l_atfor = 'CHAR'.

??????ls_char-charact = gs_upload-atnam.

??????ls_char-charact_descr = gs_upload-atbez.

??????ls_char-value_char = gs_upload-atwrt.

??????APPEND ls_char TO lt_char.

????ELSEIF l_atfor = 'NUM'.

??????ls_num-charact = gs_upload-atnam.

??????ls_num-charact_descr = gs_upload-atbez.

??????ls_num-value_from = gs_upload-atwrt.

??????APPEND ls_num TO lt_num.

????ENDIF.

??ENDIF.

ENDLOOP.

CALL FUNCTION 'BAPI_OBJCL_CREATE'

??EXPORTING

????objectkeynew????= l_objectkeynew

????objecttablenew??= l_objecttablenew

????classnumnew?????= l_classnumnew

????classtypenew????= l_classtypenew

????status??????????= '1'

*????standardclass???=

*????changenumber????=

*???KEYDATE?????????= SY-DATUM

*???NO_DEFAULT_VALUES = ' '

* IMPORTING

*???CLASSIF_STATUS??=

??tables

????allocvaluesnum??= lt_num

????allocvalueschar = lt_char

*???ALLOCVALUESCURR =

????return??????????= lt_return.

CLEAR: l_type,l_info, ls_return.

READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.

IF sy-subrc = 0.

??CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

??CLEAR l_info.

??CALL FUNCTION 'MESSAGE_TEXT_BUILD'

????EXPORTING

??????msgid???????????????= ls_return-id

??????msgnr???????????????= ls_return-number

??????msgv1???????????????= ls_return-message_v1

??????msgv2???????????????= ls_return-message_v2

??????msgv3???????????????= ls_return-message_v3

??????msgv4???????????????= ls_return-message_v4

????IMPORTING

??????message_text_output = l_info.

??l_type = 'E'.

ELSE.

??CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

????EXPORTING

??????wait = 'X'.

??l_type = 'S'.

??l_info = '物料主数据分类视图创建特性成功'.

ENDIF.

物料批次特性 / 023 特性

通过数据库取值

??

SELECT

????mch1~matnr,

????mch1~charg,

????cabn~atnam,

????ausp~atwrt,

????ausp~atflv

????FROM mch1

????INNER JOIN ausp

????ON ausp~objek = mch1~cuobj_bm

????INNER JOIN cabn

????ON cabn~atinn = ausp~atinn

????WHERE mch1~matnr = '000000000101004001'

????AND mch1~charg = '152200110'.

销售订单特性 / VC 特性 / 可配置物料特性 / 300 特性

通过数据库取值

??

SELECT

????vbap~vbeln,

????vbap~posnr,

????cabn~atinn,"内部特性

????cabn~atnam,"特性名称

????ibsymbol~atwrt,"特性值

????ibsymbol~atflv,

????ibsymbol~atflb

????INTO TABLE @DATA(gt_data)

????FROM vbap

????INNER JOIN ibin

???????ON ibin~instance = vbap~cuobj

??????AND ibin~valto = '99991231235959'

????INNER JOIN ibinvalues

???????ON ibinvalues~in_recno = ibin~in_recno

????INNER JOIN ibsymbol

???????ON ibsymbol~symbol_id = ibinvalues~symbol_id

????INNER JOIN cabn

???????ON cabn~atinn = ibsymbol~atinn

????WHERE vbap~vbeln = '2000046612'

??????AND vbap~posnr = '000010'.

通过 BAPI 取值

??

SELECT SINGLE

????cuobj

????matnr

????INTO (l_cuobj,l_matnr)

????FROM vbap

????WHERE vbeln = w_mseg-kdauf

????AND posnr = w_mseg-kdpos.

????

??DATA: t_configuration LIKE STANDARD TABLE OF conf_out WITH HEADER LINE.

????????

??IF l_cuobj IS NOT INITIAL.

????CALL FUNCTION 'VC_I_GET_CONFIGURATION'

??????EXPORTING

????????instance??????????????= l_cuobj

????????language??????????????= '1'

????????iv_max_massprocessing = 10

??????TABLES

????????configuration?????????= t_configuration.

??ENDIF.

文章来源:https://blog.csdn.net/qq_36952606/article/details/135503473
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。