Автор Тема: BAPI_MATERIAL_SAVEDATA - создание новой записи ОЗМ  (Прочитано 18798 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
вопрос глупый, наверное. но ответ найти не могу.
использую BAPI_MATERIAL_SAVEDATA,
создаю новый ОЗМ, ругается, что не указан номер материала.
на расширение работает нормально.

подскажите, пожалуйста
 
« Последнее редактирование: Апрель 06, 2010, 10:40:27 pm от Uukrul »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 762
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: создание новой записи ОЗМ
« Ответ #1 : Апрель 05, 2010, 09:58:56 pm »
You are not allowed to view links. Register or Login
создаю новый ОЗМ, ругается, что не указан номер материала.
Ну скорее всего создается материал с внешней нумерацией, вот его и надо ввести, новый код материала. Посмотрите настройку вида материала который создаете.

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: создание новой записи ОЗМ
« Ответ #2 : Апрель 06, 2010, 10:09:26 am »
я правильно понимаю, что если материал с внешней нумерацией, то, при создании его руками через mm01  я тоже ввожу номер материала?

на самом деле mm01  нумер присваивается автоматически.

на всякий случай привожу код программы, просто на создание материала с кратким текстом. наверное, там где-то косяк.
Код: You are not allowed to view links. Register or Login

REPORT  ZMM_LOAD_NOMENCLATURE1.
data: it_headdata LIKE  BAPIMATHEAD,
      it_clientdata LIKE  BAPI_MARA,
      it_clientdatax LIKE  BAPI_MARAX, tbl_return like STANDARD TABLE OF BAPIRET2 WITH HEADER LINE,
 tbl_materialdescription like STANDARD TABLE OF BAPI_MAKT WITH HEADER LINE, tbl_returnmessages like STANDARD TABLE OF BAPI_MATRETURN2  WITH HEADER LINE.

PERFORM fill_bapi_structures.

CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
  EXPORTING
    headdata             = it_headdata
    clientdata           = it_clientdata
    clientdatax          = it_clientdatax
   IMPORTING
    return               = tbl_return
  TABLES
    materialdescription  = tbl_materialdescription
     returnmessages       = tbl_returnmessages.

IF tbl_return-type EQ 'E'.
 ELSE.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = 'X'.

ENDIF.

*&---------------------------------------------------------------------*
*&      Form  fill_bapi_structures
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM fill_bapi_structures.

  CLEAR: it_headdata,
  it_clientdata,
  it_clientdatax.
   REFRESH: tbl_materialdescription, 
   tbl_return.
* fill header
*  it_headdata-material = '000000000000000002'."record-matnr.
  it_headdata-matl_type = 'ROH'."record-nmtar.
  it_headdata-basic_view = 'X'.
  it_headdata-IND_SECTOR = 'M'.

   it_clientdata-base_uom = 'ST'."record-meins.
   it_clientdatax-base_uom = 'X'.
 tbl_materialdescription-langu = 'E'.
tbl_materialdescription-matl_desc = 'short text'."record-maktx.
APPEND tbl_materialdescription.
*
 ENDFORM. " fill_bapi_structures



Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 762
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: создание новой записи ОЗМ
« Ответ #3 : Апрель 06, 2010, 11:03:55 am »
Ну сейчас посмотрел, короче надо получить номер материала сначала функцией BAPI_MATERIAL_GETINTNUMBER, а уже дальше его использовать в HEADDATA-MATERIAL для этой бапишки. Документация типа пишет так:
Цитировать
Only external number assignment is supported for the material number (MATERIAL). If you want the material number to be assigned internally, the method BAPI_MATERIAL_GETINTNUMBER must first be called. This method determines an internal number for the material to be created. You must enter this internal number in field HEADDATA-MATERIAL.
IND_SECTOR

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: создание новой записи ОЗМ
« Ответ #4 : Апрель 06, 2010, 09:21:02 pm »
спасибо, все получилось

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 762
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: BAPI_MATERIAL_SAVEDATA - создание новой записи ОЗМ
« Ответ #5 : Апрель 06, 2010, 10:42:04 pm »
You are not allowed to view links. Register or Login
спасибо, все получилось
Ok! Тему ну и почти готовый пример перенес в раздел SE37 ну и чуть переименовал для быстроты поиска.

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: создание новой записи ОЗМ
« Ответ #6 : Апрель 13, 2010, 03:01:32 pm »
Цитата: Uukrul  link=topic=1111.msg6856#msg6856 date=1270541035
Ну сейчас посмотрел, короче надо получить номер материала сначала функцией BAPI_MATERIAL_GETINTNUMBER, а уже дальше его использовать в HEADDATA-MATERIAL для этой бапишки. Документация типа пишет так:

можно ли с помощью этой или какой-нибудь другой функции заполнять расширение таблицы mara (z-поля), которые должны заполняться при создании материала

Оффлайн DEAD_MOROZ

  • Newbie
  • *
  • Сообщений: 63
  • Репутация: +0/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: BAPI_MATERIAL_SAVEDATA - создание новой записи ОЗМ
« Ответ #7 : Апрель 14, 2010, 09:19:38 am »
Для заполнения Z-полей BAPi использует специальные структуры:
EXTENSIONIN STRUCTURE  BAPIPAREX OPTIONAL
EXTENSIONINX STRUCTURE  BAPIPAREXX OPTIONAL

Попробуйте подать значения Z-полей в эти структуры.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 762
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: BAPI_MATERIAL_SAVEDATA - создание новой записи ОЗМ
« Ответ #8 : Апрель 14, 2010, 05:23:42 pm »
You are not allowed to view links. Register or Login
Попробуйте подать значения Z-полей в эти структуры.
Там правда типы полей могут быть или CHAR или NUMC а вот со всякими CURR/DEC могут быть проблемы.

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: BAPI_MATERIAL_SAVEDATA - создание новой записи ОЗМ
« Ответ #9 : Апрель 15, 2010, 11:17:02 am »
 на закладке Основных данных есть объем, ЕИ объема, вес брутто.  - подскажите где они проставляются, в структуре BAPI_MARA их нет

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 762
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: BAPI_MATERIAL_SAVEDATA - создание новой записи ОЗМ
« Ответ #10 : Апрель 16, 2010, 11:56:12 pm »
You are not allowed to view links. Register or Login
на закладке Основных данных есть объем, ЕИ объема, вес брутто.  - подскажите где они проставляются, в структуре BAPI_MARA их нет
UNITSOFMEASURE STRUCTURE  BAPI_MARM OPTIONAL - Не пробовал, но типа похоже на оно.

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: BAPI_MATERIAL_SAVEDATA - создание новой записи ОЗМ
« Ответ #11 : Апрель 17, 2010, 06:30:42 pm »
Цитата: Uukrul  link=topic=1111.msg6894#msg6894 date=1271451372
UNITSOFMEASURE STRUCTURE  BAPI_MARM OPTIONAL - Не пробовал, но типа похоже на оно.

тоже так думаю, только у меня альтернативные единицы проставляются, а объем нет ((( и ошибки не выдается

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 762
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: BAPI_MATERIAL_SAVEDATA - создание новой записи ОЗМ
« Ответ #12 : Апрель 18, 2010, 11:24:29 pm »
You are not allowed to view links. Register or Login
тоже так думаю, только у меня альтернативные единицы проставляются, а объем нет ((( и ошибки не выдается
Ну давай пример программки, если можно выдрать из общего текста. А то самому с нуля все рисовать дольше будет.

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: BAPI_MATERIAL_SAVEDATA - создание новой записи ОЗМ
« Ответ #13 : Апрель 19, 2010, 01:38:20 pm »
Цитата: Uukrul  link=topic=1111.msg6899#msg6899 date=1271622269
Ну давай пример программки, если можно выдрать из общего текста. А то самому с нуля все рисовать дольше будет.

программка:
Код: You are not allowed to view links. Register or Login
REPORT  ZMM_LOAD_MATERIAL.
DATA: MATNR LIKE  BAPI1003_KEY-OBJECT."MARA-MATNR.
DATA: IT_HEADDATA LIKE  BAPIMATHEAD,
      IT_CLIENTDATA LIKE  BAPI_MARA,
      IT_CLIENTDATAX LIKE  BAPI_MARAX,
      IT_PLANTDATA LIKE BAPI_MARC ,
      IT_PLANTDATAX LIKE BAPI_MARCX,
      IT_VALUATIONDATA LIKE BAPI_MBEW ,
      IT_VALUATIONDATAX LIKE BAPI_MBEWX ,
      IT_SALESDATA LIKE BAPI_MVKE,
      IT_SALESDATAX LIKE BAPI_MVKEX,

      TBL_RETURN LIKE STANDARD TABLE OF BAPIRET2 WITH HEADER LINE,
      TBL_RETURN1 LIKE STANDARD TABLE OF  BAPIRETURN1 WITH HEADER LINE,
      TBL_MATERIALDESCRIPTION LIKE STANDARD TABLE OF BAPI_MAKT WITH HEADER LINE,
      TBL_UNITSOFMEASURE LIKE STANDARD TABLE OF BAPI_MARM  WITH HEADER LINE,
      TBL_UNITSOFMEASUREX LIKE STANDARD TABLE OF BAPI_MARMX  WITH HEADER LINE,
      TBL_MATERIALLONGTEXT  LIKE STANDARD TABLE OF BAPI_MLTX  WITH HEADER LINE,
      TBL_TAXCLASSIFICATIONS LIKE STANDARD TABLE OF BAPI_MLAN  WITH HEADER LINE,
      TBL_RETURNMESSAGES LIKE STANDARD TABLE OF BAPI_MATRETURN2  WITH HEADER LINE,
      TBL_EXTENSIONIN LIKE STANDARD TABLE OF  BAPIPAREX  WITH HEADER LINE,
      TBL_EXTENSIONINX LIKE STANDARD TABLE OF BAPIPAREXX  WITH HEADER LINE.

PERFORM FILL_BAPI_STRUCTURES.

CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
  EXPORTING
    HEADDATA            = IT_HEADDATA
    CLIENTDATA          = IT_CLIENTDATA
    CLIENTDATAX         = IT_CLIENTDATAX
  IMPORTING
    RETURN              = TBL_RETURN
  TABLES
    MATERIALDESCRIPTION = TBL_MATERIALDESCRIPTION
    UNITSOFMEASURE      = TBL_UNITSOFMEASURE
    UNITSOFMEASUREX     = TBL_UNITSOFMEASUREX
    EXTENSIONIN         = TBL_EXTENSIONIN
    EXTENSIONINX        = TBL_EXTENSIONINX.
.


IF TBL_RETURN-TYPE EQ 'E'.
*  PERFORM write_error USING w_tabix 'BAPI' tbl_return-message.
*  CONTINUE.
ELSE.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      WAIT = 'X'.
ENDIF.

*&---------------------------------------------------------------------*
*&      Form  fill_bapi_structures
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FILL_BAPI_STRUCTURES.
  DATA: IBAPIMATINR LIKE STANDARD TABLE OF BAPIMATINR WITH HEADER LINE.

    CLEAR:  IT_HEADDATA,
            IT_CLIENTDATA,
            IT_CLIENTDATAX,
            IT_PLANTDATA,
            IT_PLANTDATAX,
            IT_VALUATIONDATA,
            IT_VALUATIONDATAX,
            IT_SALESDATA,
            IT_SALESDATAX.

  REFRESH:  TBL_MATERIALDESCRIPTION,
            TBL_UNITSOFMEASURE,
            TBL_UNITSOFMEASUREX,
            TBL_TAXCLASSIFICATIONS,
            TBL_MATERIALLONGTEXT,
            TBL_EXTENSIONIN,
            TBL_RETURN,
            TBL_RETURN1,
            TBL_TAXCLASSIFICATIONS,
            TBL_RETURNMESSAGES,
            TBL_EXTENSIONIN,
            TBL_EXTENSIONINX .

* генирация сделующего номера материала
  CALL FUNCTION 'BAPI_MATERIAL_GETINTNUMBER'
    EXPORTING
      MATERIAL_TYPE          =  'ROH'
     INDUSTRY_SECTOR        = 'M'
*     REQUIRED_NUMBERS       = 1
   IMPORTING
     RETURN                 = TBL_RETURN1
    TABLES
      MATERIAL_NUMBER        =   IBAPIMATINR
            .
  READ TABLE  IBAPIMATINR  INDEX 1.

* fill header
  IT_HEADDATA-MATERIAL = IBAPIMATINR-MATERIAL.
  IT_HEADDATA-MATL_TYPE = 'ROH'.
  IT_HEADDATA-BASIC_VIEW = 'X'.
  IT_HEADDATA-IND_SECTOR = 'M'.

* fill clientdata
  IT_CLIENTDATA-MATL_GROUP = '01'.
  IT_CLIENTDATA-BASE_UOM = 'ST'.
  IT_CLIENTDATA-DIVISION  = '01'.
  IT_CLIENTDATA-ITEM_CAT   = 'NORM'.
  IT_CLIENTDATA-OLD_MAT_NO = '123123'.
  IT_CLIENTDATA-PO_UNIT = 'KAR'.
  IT_CLIENTDATA-PUR_VALKEY = '1'.
  IT_CLIENTDATA-TRANS_GRP = '0001'.
  IT_CLIENTDATA-NET_WEIGHT =  '3'.
  IT_CLIENTDATA-UNIT_OF_WT = 'KG'.
  IT_CLIENTDATA-PUR_STATUS = '01'.
  IT_CLIENTDATA-SIZE_DIM =  '4'.
  IT_CLIENTDATA-VAR_ORD_UN  = '1'.


  IT_CLIENTDATAX-BASE_UOM = 'X'.
  IT_CLIENTDATAX-MATL_GROUP = 'X'.
  IT_CLIENTDATAX-DIVISION  = 'X'.
  IT_CLIENTDATAX-ITEM_CAT   = 'X'.
  IT_CLIENTDATAX-OLD_MAT_NO = 'X'.
  IT_CLIENTDATAX-PO_UNIT = 'X'.
  IT_CLIENTDATAX-PUR_VALKEY = 'X'.
  IT_CLIENTDATAX-TRANS_GRP = 'X'.
  IT_CLIENTDATAX-NET_WEIGHT =  'X'.
  IT_CLIENTDATAX-UNIT_OF_WT = 'X'.
  IT_CLIENTDATAX-PUR_STATUS = 'X'.
  IT_CLIENTDATAX-SIZE_DIM =  'X'.
  IT_CLIENTDATAX-VAR_ORD_UN = 'X'.
  IT_CLIENTDATAX-ALLWD_VOL  = 'X'.
  IT_CLIENTDATAX-PACK_VO_UN = 'X'.

** fill unit of measure
*IF record-brgew NE space.
  TBL_UNITSOFMEASURE-ALT_UNIT = 'KAR' .
  TBL_UNITSOFMEASURE-NUMERATOR =  '2'.
  TBL_UNITSOFMEASURE-DENOMINATR =  '1'.
  TBL_UNITSOFMEASURE-VOLUME = '12'.
  TBL_UNITSOFMEASURE-VOLUMEUNIT = 'M3'.
  TBL_UNITSOFMEASURE-GROSS_WT = '123'.
  TBL_UNITSOFMEASURE-UNIT_OF_WT  ='KG'.
  APPEND TBL_UNITSOFMEASURE.

   TBL_UNITSOFMEASUREX-ALT_UNIT = 'KAR' .
  TBL_UNITSOFMEASUREX-NUMERATOR =  'X'.
  TBL_UNITSOFMEASUREX-DENOMINATR =  'X'.
  TBL_UNITSOFMEASUREX-VOLUME = 'X'.
  TBL_UNITSOFMEASUREX-VOLUMEUNIT = 'X'.
  TBL_UNITSOFMEASUREX-GROSS_WT = 'X'.
  TBL_UNITSOFMEASUREX-UNIT_OF_WT ='X'.

  APPEND TBL_UNITSOFMEASUREX.



** fill material description
  TBL_MATERIALDESCRIPTION-LANGU = 'E'.
  TBL_MATERIALDESCRIPTION-MATL_DESC = 'short text'.
  APPEND TBL_MATERIALDESCRIPTION.
  TBL_MATERIALDESCRIPTION-LANGU = 'R'.
  TBL_MATERIALDESCRIPTION-MATL_DESC = 'короткий текст'.
  APPEND TBL_MATERIALDESCRIPTION.

  TBL_EXTENSIONIN-STRUCTURE = 'BAPI_TE_MARA'.
  TBL_EXTENSIONIN-VALUEPART1   = IBAPIMATINR-MATERIAL.
  TBL_EXTENSIONIN-VALUEPART1+18(9) ='123344566'.
  APPEND  TBL_EXTENSIONIN.

  TBL_EXTENSIONINX-STRUCTURE = 'BAPI_TE_MARAX'.
  TBL_EXTENSIONINX-VALUEPART1   = IBAPIMATINR-MATERIAL.
  TBL_EXTENSIONINX-VALUEPART1+18(1)  = 'X'.
  APPEND  TBL_EXTENSIONINX.


ENDFORM. " fill_bapi_structures

From Dmitriy: кнопка "#" ("Код") в панели редактирования сообщения, лучше так...
« Последнее редактирование: Апрель 19, 2010, 02:28:24 pm от Dmitriy »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 762
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: BAPI_MATERIAL_SAVEDATA - создание новой записи ОЗМ
« Ответ #14 : Апрель 20, 2010, 11:39:39 am »
Ну все оказалось просто, данные для первого экрана берутся из данных структуры MARM, для BAPI в вашем примере это tbl_unitsofmeasure, так вот надо было добавить строку с номером 1 с описанием базисной единицы измерения, у вас в примере это штуки, так вот я добавил данные типа так: tbl_unitsofmeasure-numerator =  '1'. После этого все красиво заполнилось для полей вес брутто и объем.
Код: You are not allowed to view links. Register or Login
** fill unit of measure
  tbl_unitsofmeasure-alt_unit = 'ST' .
  tbl_unitsofmeasure-numerator =  '1'.
  tbl_unitsofmeasure-denominatr =  '1'.
  tbl_unitsofmeasure-volume = '12'.
  tbl_unitsofmeasure-volumeunit = 'M3'.
  tbl_unitsofmeasure-gross_wt = '123'.
  tbl_unitsofmeasure-unit_of_wt  ='KG'.
  APPEND tbl_unitsofmeasure.

  tbl_unitsofmeasurex-alt_unit = 'ST' .
  tbl_unitsofmeasurex-numerator =  'X'.
  tbl_unitsofmeasurex-denominatr =  'X'.
  tbl_unitsofmeasurex-volume = 'X'.
  tbl_unitsofmeasurex-volumeunit = 'X'.
  tbl_unitsofmeasurex-gross_wt = 'X'.
  tbl_unitsofmeasurex-unit_of_wt ='X'.
  APPEND tbl_unitsofmeasurex.
Идея пришла таким образом зашел в просмотр созданной ОЗМ на закладку допданных и там увидел типа так как на картинке, т.е. есть ШТ = ШТ и для этой единицы нет заполнения данных, хотя для единицы измерения коробка все заполнено, ну вот отсюда и пришла мысль сделать строку единиц для штук. Кстати, обратите внимание, что штуки имеют код ST.

Оффлайн Martha

  • Newbie
  • *
  • Сообщений: 51
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: BAPI_MATERIAL_SAVEDATA - создание новой записи ОЗМ
« Ответ #15 : Апрель 20, 2010, 01:55:07 pm »
Цитата: Uukrul  link=topic=1111.msg6902#msg6902 date=1271752779
Ну все оказалось просто, данные для первого экрана берутся из данных структуры MARM, для BAPI в вашем примере это tbl_unitsofmeasure, так вот надо было добавить строку с номером 1 с описанием базисной единицы измерения, у вас в примере это штуки, так вот я добавил данные типа так: tbl_unitsofmeasure-numerator =  '1'. После этого все красиво заполнилось для полей вес брутто и объем.
 

спасибо