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

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

SAP 获取物料/批次/订单的特性值(学习一)_第1张图片

批次分类特性值读取函数

BAPI_OBJCL_GETDETAIL

SAP 获取物料/批次/订单的特性值(学习一)_第2张图片

物料特性 /

 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.

你可能感兴趣的:(学习,大数据,sql,经验分享,笔记)