Автор Тема: Функциональный модуль BAPI_MATERIAL_SAVEDATA.  (Прочитано 7869 раз)

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

Оффлайн themax

  • Newbie
  • *
  • Сообщений: 346
  • Репутация: +5/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Всем добрый день! Пытаюсь написать программу пакетного ввода новых материалов с помощью BAPI_MATERIAL_SAVEDATA. Возникла маленькая проблемка с передачей данных одной из вкладок основной записи материала, а точнее ракурса бух.учёта. Ракурс то сам не создаётся, потому что возникает ошибка - Укажите код управления ценой, это одно из обязательных полей этого ракурса, но не могу понять как передать информацию о коде управления ценой, т.е. я пытаюсь передать код управления ценой V- среднескользящая цена, но судя по ошибке которую я смотрю в отладчике программа не может поставить и ругается. В инете много различного рода примеров создания материалов с использованием этого BAPI, и вроде бы местами мелькают примеры с использованием нужного мне ракурса. Значение поля передаётся в строке BAPI_MBEW-PRICE_CTRL = 'V', но безрезультатно. Может быть кто реализовывал? Буду весьма признателен. Вот собственно кусок кода программы использования этого BAPI
Код: You are not allowed to view links. Register or Login
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' или закомментировать, то отрабатывает без ошибок, пишет материал такой то создан или расширен и потом этот материал просматривается и изменяется, но без ракурса бух.учёт.
 

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Функциональный модуль BAPI_MATERIAL_SAVEDATA.
« Ответ #1 : Март 18, 2015, 01:43:12 pm »
Ну у меня как-то так, создавалось:
Код: You are not allowed to view links. Register or Login
*   Данне оценки
    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 нигде.

Оффлайн themax

  • Newbie
  • *
  • Сообщений: 346
  • Репутация: +5/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Функциональный модуль BAPI_MATERIAL_SAVEDATA.
« Ответ #2 : Март 19, 2015, 05:13:04 am »
Вот в общем я добавил ещё поля думая что может это поможет
Код: You are not allowed to view links. Register or Login

  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 какие то конкретным значением заполнено? У меня просто в основной записи материала она не проставляется, т.е. поле пустое, вот я его и делаю пустым.
« Последнее редактирование: Март 19, 2015, 05:16:49 am от themax »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Функциональный модуль BAPI_MATERIAL_SAVEDATA.
« Ответ #3 : Март 19, 2015, 09:39:02 am »
You are not allowed to view links. Register or Login
Вот в общем я добавил ещё поля думая что может это поможет
Код: You are not allowed to view links. Register or Login

  bapi_mbew-val_type = ''.
  bapi_mbewx-val_type = ''.
Мне кажется что вы вот эти переменные не правильно заполняете. Во-первых, если  bapi_mbew-val_type = ''. тогда в  bapi_mbewx-val_type = ''  должно быть Х, а не пустое значение как у вас. И потом вы уверены что у вас там пусто для этого вида материала. Пришлите картинку созданного материала,, ракурс бухгалтерия 1.

Оффлайн themax

  • Newbie
  • *
  • Сообщений: 346
  • Репутация: +5/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Функциональный модуль BAPI_MATERIAL_SAVEDATA.
« Ответ #4 : Март 19, 2015, 10:26:38 am »
Как Вы и сказали я добавил в поле bapi_mbewx-val_type = 'X'. Теперь ошибка выходит такая E 360 Различные ключевые поля для ДаннПользов VALUATIONDATA и структуры НезависимКнопок VALUATIONDATAX. Просто как мне кажется если поле вообще ни как не заполняется, то может и в таблице bapi_mbewx тоже надо ставить значение пусто?! Я извиняюсь за интеллект, но я чота я понять не могу как картинку сюда вставлять, чтобы ракурс показать Вам. bapi_mbewx-val_type это вид оценки, для того вида материала, которые уже существуют в системе везде в ракурсе бух.учёт 1 вид оценки поле стоит пустым.

Sapforum.Biz

Re: Функциональный модуль BAPI_MATERIAL_SAVEDATA.
« Ответ #4 : Март 19, 2015, 10:26:38 am »