Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SE37 - Построитель функций => Тема начата: Martha от Апрель 05, 2010, 04:21:55 pm
-
вопрос глупый, наверное. но ответ найти не могу.
использую BAPI_MATERIAL_SAVEDATA,
создаю новый ОЗМ, ругается, что не указан номер материала.
на расширение работает нормально.
подскажите, пожалуйста
-
создаю новый ОЗМ, ругается, что не указан номер материала.
Ну скорее всего создается материал с внешней нумерацией, вот его и надо ввести, новый код материала. Посмотрите настройку вида материала который создаете.
-
я правильно понимаю, что если материал с внешней нумерацией, то, при создании его руками через mm01 я тоже ввожу номер материала?
на самом деле mm01 нумер присваивается автоматически.
на всякий случай привожу код программы, просто на создание материала с кратким текстом. наверное, там где-то косяк.
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
-
Ну сейчас посмотрел, короче надо получить номер материала сначала функцией 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
-
спасибо, все получилось
-
спасибо, все получилось
Ok! Тему ну и почти готовый пример перенес в раздел SE37 ну и чуть переименовал для быстроты поиска.
-
Ну сейчас посмотрел, короче надо получить номер материала сначала функцией BAPI_MATERIAL_GETINTNUMBER, а уже дальше его использовать в HEADDATA-MATERIAL для этой бапишки. Документация типа пишет так:
можно ли с помощью этой или какой-нибудь другой функции заполнять расширение таблицы mara (z-поля), которые должны заполняться при создании материала
-
Для заполнения Z-полей BAPi использует специальные структуры:
EXTENSIONIN STRUCTURE BAPIPAREX OPTIONAL
EXTENSIONINX STRUCTURE BAPIPAREXX OPTIONAL
Попробуйте подать значения Z-полей в эти структуры.
-
Попробуйте подать значения Z-полей в эти структуры.
Там правда типы полей могут быть или CHAR или NUMC а вот со всякими CURR/DEC могут быть проблемы.
-
на закладке Основных данных есть объем, ЕИ объема, вес брутто. - подскажите где они проставляются, в структуре BAPI_MARA их нет
-
на закладке Основных данных есть объем, ЕИ объема, вес брутто. - подскажите где они проставляются, в структуре BAPI_MARA их нет
UNITSOFMEASURE STRUCTURE BAPI_MARM OPTIONAL - Не пробовал, но типа похоже на оно.
-
UNITSOFMEASURE STRUCTURE BAPI_MARM OPTIONAL - Не пробовал, но типа похоже на оно.
тоже так думаю, только у меня альтернативные единицы проставляются, а объем нет ((( и ошибки не выдается
-
тоже так думаю, только у меня альтернативные единицы проставляются, а объем нет ((( и ошибки не выдается
Ну давай пример программки, если можно выдрать из общего текста. А то самому с нуля все рисовать дольше будет.
-
Ну давай пример программки, если можно выдрать из общего текста. А то самому с нуля все рисовать дольше будет.
программка:
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: кнопка "#" ("Код") в панели редактирования сообщения, лучше так...
-
Ну все оказалось просто, данные для первого экрана берутся из данных структуры MARM, для BAPI в вашем примере это tbl_unitsofmeasure, так вот надо было добавить строку с номером 1 с описанием базисной единицы измерения, у вас в примере это штуки, так вот я добавил данные типа так: tbl_unitsofmeasure-numerator = '1'. После этого все красиво заполнилось для полей вес брутто и объем.
** 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.
-
Ну все оказалось просто, данные для первого экрана берутся из данных структуры MARM, для BAPI в вашем примере это tbl_unitsofmeasure, так вот надо было добавить строку с номером 1 с описанием базисной единицы измерения, у вас в примере это штуки, так вот я добавил данные типа так: tbl_unitsofmeasure-numerator = '1'. После этого все красиво заполнилось для полей вес брутто и объем.
спасибо