Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => Тема начата: themax от Март 18, 2015, 05:35:02 am
-
Всем добрый день! Пытаюсь написать программу пакетного ввода новых материалов с помощью BAPI_MATERIAL_SAVEDATA. Возникла маленькая проблемка с передачей данных одной из вкладок основной записи материала, а точнее ракурса бух.учёта. Ракурс то сам не создаётся, потому что возникает ошибка - Укажите код управления ценой, это одно из обязательных полей этого ракурса, но не могу понять как передать информацию о коде управления ценой, т.е. я пытаюсь передать код управления ценой V- среднескользящая цена, но судя по ошибке которую я смотрю в отладчике программа не может поставить и ругается. В инете много различного рода примеров создания материалов с использованием этого BAPI, и вроде бы местами мелькают примеры с использованием нужного мне ракурса. Значение поля передаётся в строке BAPI_MBEW-PRICE_CTRL = 'V', но безрезультатно. Может быть кто реализовывал? Буду весьма признателен. Вот собственно кусок кода программы использования этого BAPI
form call_bapi .
data: x type t134-numki,
ld_number type bapimathead-material,
objnum type objnum,
ld_error type c.
select single numki from t134 into (wa-numki) where mtart = wa-matl_type.
call function 'NUMBER_GET_NEXT'
exporting
nr_range_nr = wa-numki "Number range interval
object = 'MATERIALNR' "Number range object (SNRO)
* QUANTITY = '1' "No. of numbers
* SUBOBJECT = ' '
* TOYEAR = '0000'
* IGNORE_BUFFER = ' '
importing
number = ld_number
* QUANTITY =
returncode = ld_error
exceptions
interval_not_found = 1
number_range_not_intern = 2
object_not_found = 3
quantity_is_0 = 4
quantity_is_not_1 = 5
interval_overflow = 6
buffer_overflow = 7
others = 8.
bapimathead-material = ld_number."itab-MATERIAL.
bapimathead-ind_sector = 'C'.
"bapimatheadx-IND_SECTOR = 'C'.
bapimathead-matl_type = wa-matl_type.
bapimathead-basic_view = 'X'.
bapi_mara-matl_group = wa-matl_group.
bapi_mara-base_uom = wa-base_uom .
BAPI_MARA-DIVISION = '30'.
bapi_marax-matl_group = 'X'.
bapi_marax-base_uom = 'X'.
BAPI_MARAX-DIVISION = 'X'.
bapimathead-ACCOUNT_VIEW = 'X'.
bapimathead-purchase_view = 'X'.
* bapimathead-storage_view = 'X'.
bapimathead-warehouse_view = 'X'.
bapi_marc-plant = '3000'.
bapi_marcx-plant = bapi_marc-plant.
bapi_marcx-pur_group = 'X'.
bapi_marcx-base_qty = 'X'.
BAPI_MLGN-WHSE_NO = '001'.
BAPI_MLGNX-WHSE_NO = BAPI_MLGN-WHSE_NO.
BAPI_MBEW-VAL_CLASS = '15'.
BAPI_MBEWX-VAL_CLASS = 'X'.
BAPI_MBEW-VAL_AREA = '3000'.
BAPI_MBEWX-VAL_AREA = BAPI_MBEW-VAL_AREA.
BAPI_MBEW-PRICE_CTRL = 'V'.
BAPI_MBEWX-PRICE_CTRL = 'X'.
* BAPI_MBEW-STD_PRICE = '1'.
* BAPI_MBEWX-STD_PRICE = 'X'.
* BAPI_MLTX-TEXT_LINE = 'mbugoga'.
* bapi_mard-stge_loc = '001'.
* bapi_mardx-stge_loc = bapi_mard-stge_loc.
* bapi1003_key-classnum = itab-classnum.
*IT_BAPI-LANGU = ITAB-LANGU.
it_bapi-langu_iso = 'RU'.
it_bapi-matl_desc = wa-matl_desc.
append it_bapi.
clear it_bapi.
call function 'BAPI_MATERIAL_SAVEDATA'
exporting
headdata = bapimathead
clientdata = bapi_mara
clientdatax = bapi_marax
PLANTDATA = BAPI_MARC
PLANTDATAX = bapi_marcx
WAREHOUSENUMBERDATA = BAPI_MLGN
WAREHOUSENUMBERDATAX = BAPI_MLGNX
VALUATIONDATA = BAPI_MBEW
VALUATIONDATAX = BAPI_MBEWX
* MATERIALLONGTEXT = BAPI_MLTX
importing
return = it_return
tables
materialdescription = it_bapi.
concatenate 'Создание материала:' wa-matl_desc into msg separated by space.
perform indicator using msg 0.
call function 'BAPI_TRANSACTION_COMMIT' .
*---this is the message type which indicates whether it is failed or succeded
it1-type = it_return-type.
it1-number = it_return-number.
it1-id = it_return-id.
it1-message_v1 = it_return-message_v1.
it1-message_v2 = it_return-message_v2.
it1-message_v3 = it_return-message_v3.
it1-message_v4 = it_return-message_v4.
it1-message = it_return-message.
append it1.
clear it1.
objnum = ld_number.
wa-matnr = ld_number.
if wa-tnved is not initial.
add_class: objnum wa-tnved.
endif.
if wa-kpved is not initial.
add_class: objnum wa-kpved.
endif.
if wa-skp is not initial.
add_class: objnum wa-skp.
endif.
endform.
Ракурс бух.учёта активируется строкой bapimathead-ACCOUNT_VIEW = 'X'. При попытке запустить создание материала пишет что материал создан, но когда пытаешся потом просмотреть этот созданный материал MM03 пишет что Материала 68341 нет или он не активирован, когда в дебаге смотрю поле it_return-message пишет что Укажите управление ценой. Вот и не пойму я, что я не так сделал уже даже и не знаю. Стоит мне убрать поле bapimathead-ACCOUNT_VIEW = 'X' или закомментировать, то отрабатывает без ошибок, пишет материал такой то создан или расширен и потом этот материал просматривается и изменяется, но без ракурса бух.учёт.
-
Ну у меня как-то так, создавалось:
* Данне оценки
ls_valuationdata-val_area = <Область>.
ls_valuationdata-val_cat = ls_matnr-bwtty.
ls_valuationdata-val_class = ls_matnr-bklas.
ls_valuationdata-price_ctrl = ls_matnr-vprsv.
ls_valuationdatax-val_area = <Область>.
ls_valuationdatax-val_cat = true.
ls_valuationdatax-val_class = true.
ls_valuationdatax-price_ctrl = true.
Ну у меня еще категория оценки заполняется. Но в целом, вы данные коммитите? А то я не заметил в вашей программе COMMIT WORK нигде.
-
Вот в общем я добавил ещё поля думая что может это поможет
bapi_mbew-val_area = '3000'.
bapi_mbewx-val_area = '3000'.
bapi_mbew-val_type = ''.
bapi_mbewx-val_type = ''.
bapi_mbew-VAL_CAT = ''.
BAPI_MBEWX-VAL_CAT = ''.
bapi_mbew-val_class = '15'.
bapi_mbewx-val_class = 'X'.
bapi_mbew-ML_SETTLE = '2'.
bapi_mbewx-ML_SETTLE = 'X'.
bapi_mbew-ML_ACTIVE = 'X'.
bapi_mbewx-ML_ACTIVE = 'X'.
"ML_ACTIVE
bapi_mbew-price_ctrl = 'V'.
bapi_mbewx-price_ctrl = 'X'.
bapi_mbew-PR_CTRL_PP = 'V'.
bapi_mbewx-PR_CTRL_PP = 'X'.
bapi_mbew-PR_CTRL_PY = 'V'.
bapi_mbewx-PR_CTRL_PY = 'X'.
bapi_mbew-VCLASS_PP = '15'.
bapi_mbewx-VCLASS_PP = 'X'.
bapi_mbew-VCLASS_PY = '15'.
bapi_mbewx-VCLASS_PY = 'X'.
bapi_mbew-price_unit = '1'.
bapi_mbew-PR_UNIT_PP = '1'.
bapi_mbew-PR_UNIT_PY = '1'.
bapi_mbewx-price_unit = 'X'.
bapi_mbewx-PR_UNIT_PP = 'X'.
bapi_mbewx-PR_UNIT_PY = 'X'.
Всё равно в соммите в дебаге пишет Укажите управление ценой. Не могу понять что не так делаю. У вас поле val_cat какие то конкретным значением заполнено? У меня просто в основной записи материала она не проставляется, т.е. поле пустое, вот я его и делаю пустым.
-
Вот в общем я добавил ещё поля думая что может это поможет
bapi_mbew-val_type = ''.
bapi_mbewx-val_type = ''.
Мне кажется что вы вот эти переменные не правильно заполняете. Во-первых, если bapi_mbew-val_type = ''. тогда в bapi_mbewx-val_type = '' должно быть Х, а не пустое значение как у вас. И потом вы уверены что у вас там пусто для этого вида материала. Пришлите картинку созданного материала,, ракурс бухгалтерия 1.
-
Как Вы и сказали я добавил в поле bapi_mbewx-val_type = 'X'. Теперь ошибка выходит такая E 360 Различные ключевые поля для ДаннПользов VALUATIONDATA и структуры НезависимКнопок VALUATIONDATAX. Просто как мне кажется если поле вообще ни как не заполняется, то может и в таблице bapi_mbewx тоже надо ставить значение пусто?! Я извиняюсь за интеллект, но я чота я понять не могу как картинку сюда вставлять, чтобы ракурс показать Вам. bapi_mbewx-val_type это вид оценки, для того вида материала, которые уже существуют в системе везде в ракурсе бух.учёт 1 вид оценки поле стоит пустым.