BAPI_MATERIAL_SAVEREPLICA扩展字段注意

时间:2024-03-18 19:36:57

     BAPI_MATERIAL_SAVEREPLICA中需要对物料主数据比如MARA的附加结构进行维护时,需要使用BAPI的扩展结构。经过调试BAPI发现包含文件L1001MASSUEBF01处理扩展字段时语句如下:

BAPI_MATERIAL_SAVEREPLICA扩展字段注意

传入的结构名有两个

cust_mara  LIKE t133d-routn VALUE 'BAPI_TE_E1MARA',

cust_mara2 LIKE t133d-routn VALUE 'BAPI_TE_E1MARA2'

BAPI_TE_E1MARA 的字段MATERIAL长度只有18位,适合SAP ECC, BAPI_TE_E1MARA2 的字段MATERIAL长度40位,适合SAP S4

表it_p_extensionin的结构如下图:

BAPI_MATERIAL_SAVEREPLICA扩展字段注意

      结构wa_bapi_te_e1mara 或 wa_bapi_te_e1mara2 如下图。其中结构ZABAPI_TE_E1MARA2中的字段是需要给物料主数据表MARA中附加的相关字段,需要开发人员手动添加。注意的是每当用240个字符长度截取字段时,刚好能够整截。比如下图中从MATERIAL字段到ZZSQDAT字段长度相加刚好是240个字符长度,后续字段也要如此。

BAPI_MATERIAL_SAVEREPLICA扩展字段注意

    在BAPI的语句:MOVE it_p_extensionin-valuepart1 TO wa_bapi_te_e1mara.

MOVE it_p_extensionin-valuepart1 TO wa_bapi_te_e1mara2 valuepart1的长度是240,在传值给valuepart1时需要注意计算:虽然it_p_extensionin结构中已有MATERIAL字段,但还是需要

valuepart1的长度 = MATERIAL的长度 + 其它字段的长度 = 240个字符长度。

valuepart1的值 = MATERIAL的值 + 其它字段的值。因为wa_bapi_te_e1mara或wa_bapi_te_e1mara2的结构中包含了MATERIAL字段。

附源码:

*处理扩展字段
  DATA:begin of ls_exmara.
      data matnr type mara-matnr.
      include STRUCTURE zabapi_te_e1mara2.
  data end of ls_exmara.

  DATA:begin of ls_exmarax.
      data matnr type mara-matnr.
      include STRUCTURE zabapi_te_e1mara2x.
  data end of ls_exmarax.

  DATA: l_valuepart(960),
        l_valuepartx(960).
  data:lt_extensionin like STANDARD TABLE OF bapie1parex WITH HEADER LINE,
       lt_extensioninx like STANDARD TABLE OF bapie1parexx WITH HEADER LINE.

  MOVE-CORRESPONDING zsmara TO ls_exmara.
  l_valuepart = ls_exmara.

  lt_extensionin-material_long  = zsmara-matnr.
  lt_extensionin-structure = 'BAPI_TE_E1MARA2'.
  lt_extensionin-valuepart1 = l_valuepart(240).
  lt_extensionin-valuepart2 = l_valuepart+240(480).
  APPEND lt_extensionin.

  ls_exmarax-matnr = zsmara-matnr.
  ls_exmarax-BRGEW = 'X'.
  ls_exmarax-VOLEH = 'X'.
  ls_exmarax-VOLUM = 'X'.
  ls_exmarax-ZZCPLB = 'X'.
  ls_exmarax-ZZCC = 'X'.
  ls_exmarax-ZZSW = 'X'.
  ls_exmarax-ZZGL = 'X'.
  ls_exmarax-ZZZDKH = 'X'.
  ls_exmarax-ZZCX = 'X'.
  ls_exmarax-ZZJX = 'X'.
  ls_exmarax-ZZHGBM = 'X'.
  ls_exmarax-ZZSQR = 'X'.
  ls_exmarax-ZZSQDAT = 'X'.
  ls_exmarax-ZZGLGX = 'X'.
  ls_exmarax-ZZWLCR = 'X'.
  ls_exmarax-ZZBQTY = 'X'.
  ls_exmarax-ZZBZGG = 'X'.
  ls_exmarax-ZZPRD = 'X'.
  ls_exmarax-ZZAUFNR = 'X'.
  ls_exmarax-ZZOBNAME = 'X'.

  l_valuepartx = ls_exmarax.
  lt_extensioninx-material_long  = zsmara-matnr.
  lt_extensioninx-structure = 'BAPI_TE_E1MARA2X'.
  lt_extensioninx-valuepart1 = l_valuepartx(240).
  lt_extensioninx-valuepart2 = l_valuepartx+240(480).
  APPEND lt_extensioninx.

  CALL FUNCTION 'BAPI_MATERIAL_SAVEREPLICA'
    EXPORTING
      noappllog           = ''
      nochangedoc         = ''
      testrun             = ''
      inpfldcheck         = ''
*     FLAG_CAD_CALL       = ' '
*     NO_ROLLBACK_WORK    = ' '
*     FLAG_ONLINE         = ' '
    IMPORTING
      return              = ls_return
    TABLES
      headdata            = it_headdata
      clientdata          = lt_clientdata
      clientdatax         = lt_clientdatax
      plantdata           = lt_plantdata
      plantdatax          = lt_plantdatax
      materialdescription = lt_bapimakt
      extensionin         =  lt_extensionin    "扩展字段
      extensioninx        =  lt_extensioninx
      materiallongtext    = lt_mltx
      returnmessages      = lt_return.