Текущее время: Чт, мар 28 2024, 17:37

Часовой пояс: UTC + 3 часа


Правила форума


Вопросы по ППМ (MRP) - сюда.
Вопросы по классификации - сюда.
Вопросы по входящим поставкам - сюда.



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: BAPI для MR22 и MR21
СообщениеДобавлено: Пт, июн 08 2012, 10:06 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, ноя 02 2006, 11:27
Сообщения: 51
Откуда: Ярославль
Пол: Мужской
Тема обсуждалась тут http://www.sapboard.ru/forum/viewtopic.php?f=1&t=24301&start=0&hilit=BAPI+MR22
и тут http://www.sapboard.ru/forum/viewtopic.php?f=13&t=42657&start=0&hilit=BAPI+MR22
Результат - найдена BAPI для MR21, но не нашел BAPI для MR22.
Посмотрел внутрь кода BAPI_MATVAL_PRICE_CHANGE, BAPI_PROJECTSTOCK_PRICE_CHANGE, MR22
- они все используют одни и теже ФМ 'PRICES_CHANGE' и 'PRICES_POST', различаются только входные данные.
Так вот если установить флаг SUBS_DBT на входе ФМ 'PRICES_CHANGE' то например BAPIшка BAPI_MATVAL_PRICE_CHANGE
из MR21 превращается в MR22.
Ну и еще пару фокусов в коде надо сделать....
Пробовал работу для управл ценой V и S - работает, для раздельной оценки и нет - работает.

Теперь код для запуска BAPI...
Code:
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS:     p_bwkey  TYPE mbew-bwkey.
PARAMETERS:     p_matnr  TYPE mara-matnr.
PARAMETERS:     p_bwtar  TYPE mbew-bwtar.
PARAMETERS:     p_pspnr  TYPE cobl-ps_posid
                MATCHCODE OBJECT zash_prpm.
PARAMETERS:     p_price  TYPE mbew-verpr.
PARAMETERS:     p_sum    TYPE ebc_tot.""bseg-dmbtr.
PARAMETERS:     p_bktxt  TYPE bktxt    DEFAULT 'bktxt'.
PARAMETERS:     p_xblnr  TYPE xblnr    DEFAULT 'xblnr'.
PARAMETERS:     p_date   TYPE sy-datum   DEFAULT sy-datum.
SELECTION-SCREEN  END  OF BLOCK b2.



START-OF-SELECTION.

  DATA:
        i_material      TYPE  bapi_matval_key-material,
        i_valuationarea TYPE  bapi_matval_key-val_area,
        i_valuationtype TYPE  bapi_matval_key-val_type,
        i_wbselement    TYPE  bapi_matval_key-wbs_element,
        i_bktxt         TYPE  bktxt,
        i_xblnr         TYPE  xblnr,
        i_pricedate     TYPE  bapi_matval_pricedate,
        i_material_evg  TYPE  bapimgvmatnr_copy,
        i_pricechangedocument TYPE  bapi_pricechange_document,
        gt_prices       TYPE  STANDARD TABLE OF bapi_matval_prices,
        wa_prices       TYPE  bapi_matval_prices,
        gt_return       TYPE  STANDARD TABLE OF bapiret2,
        wa_return       TYPE  bapiret2
  .

  DATA l_price     TYPE mbew-verpr.
  DATA c_sum(20)   TYPE c.
  DATA c_price(20) TYPE c.
  DATA l_sum       TYPE bseg-dmbtr.
  DATA wa_qbew     TYPE qbew.
  DATA i_sum       TYPE bseg-dmbtr.
  DATA i_subs_dbt  TYPE c.
********************************

  IF  p_price IS INITIAL
  AND p_sum IS INITIAL.
    MESSAGE i096(zm) WITH 'Введите сумму или цену'.
    exit.
  ELSE.
    IF  p_price   IS INITIAL
    AND NOT p_sum IS INITIAL.
      i_subs_dbt = 'X'.
    ENDIF.

  ENDIF.

  DATA p_pspnr2(18) TYPE c.
  CALL FUNCTION 'CONVERSION_EXIT_ABPSP_INPUT'
    EXPORTING
      input        = p_pspnr
    IMPORTING
      output       = p_pspnr2
    EXCEPTIONS
      length_error = 1
      OTHERS       = 2.

  CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
    EXPORTING
      input        = p_matnr
    IMPORTING
      output       = p_matnr
    EXCEPTIONS
      length_error = 1
      OTHERS       = 2.

  c_sum = p_sum.
  TRANSLATE c_sum USING ',.'.
  SHIFT c_sum LEFT DELETING LEADING space.
  i_sum = c_sum.

  IF p_pspnr IS INITIAL.
    SELECT SINGLE *
    FROM   mbew
    INTO   CORRESPONDING FIELDS OF wa_qbew
    WHERE  bwkey = p_bwkey
    AND    matnr = p_matnr
    AND    bwtar = p_bwtar.
  ELSE.
    SELECT SINGLE *
    FROM   qbew
    INTO   CORRESPONDING FIELDS OF wa_qbew
    WHERE  bwkey = p_bwkey
    AND    matnr = p_matnr
    AND    bwtar = p_bwtar
    AND    pspnr = p_pspnr2.
  ENDIF.

*  c_sum = p_sum.
*  TRANSLATE c_sum USING ',.'.
*  SHIFT c_sum LEFT DELETING LEADING space.
*  l_sum = c_sum + wa_qbew-salk3.
*  l_price = l_sum / wa_qbew-lbkum.

  c_price = p_price.
  TRANSLATE c_price USING ',.'.
  SHIFT c_price LEFT DELETING LEADING space.
  l_price = c_price.

  IF i_subs_dbt = ''.
    IF wa_qbew-verpr = l_price.
      MESSAGE i096(zm) WITH 'Цена не изменилась'.
      exit.
    ENDIF.
  ENDIF.

  i_material      = p_matnr.
  i_valuationarea = p_bwkey.
  i_valuationtype = p_bwtar.
  i_wbselement    = p_pspnr.
  i_bktxt         = p_bktxt.
  i_xblnr         = p_xblnr.
  i_pricedate     = sy-datum.

  CLEAR gt_prices[].
  wa_prices-valuation_view  = '1'.
  wa_prices-curr_type       = '10'."Валюта БЕ
  wa_prices-currency        = 'RUB'.
  wa_prices-price_unit      = '1'.
  wa_prices-price           =  l_price.
  APPEND wa_prices TO gt_prices.

  CLEAR i_pricedate.
*  i_pricedate-fisc_year        = p_gjahr."'2012'.
*  i_pricedate-fisc_period      = p_poper."'006'.
  i_pricedate-price_date       = p_date."sy-datum.

  IF i_wbselement IS INITIAL.
    CALL FUNCTION 'BAPI_MATVAL_PRICE_CHANGE'
      EXPORTING
        material            = i_material
        valuationarea       = i_valuationarea
        valuationtype       = i_valuationtype
        pricedate           = i_pricedate
        z_bktxt             = i_bktxt
        z_xblnr             = i_xblnr
        z_subs_dbt          = i_subs_dbt
        z_sum               = i_sum
      IMPORTING
        pricechangedocument = i_pricechangedocument
      TABLES
        prices              = gt_prices
        return              = gt_return.
  ELSE.
    CALL FUNCTION 'BAPI_PROJECTSTOCK_PRICE_CHANGE'
      EXPORTING
        material            = i_material
        valuationarea       = i_valuationarea
        valuationtype       = i_valuationtype
        wbselement          = i_wbselement
        pricedate           = i_pricedate
        z_bktxt             = i_bktxt
        z_xblnr             = i_xblnr
        z_subs_dbt          = i_subs_dbt
        z_sum               = i_sum
      IMPORTING
        pricechangedocument = i_pricechangedocument
      TABLES
        prices              = gt_prices
        return              = gt_return.

  ENDIF.

  READ TABLE gt_return INTO wa_return
  WITH KEY type = 'E'.
  IF sy-subrc = 0.
    ROLLBACK WORK .
  ELSE.
    COMMIT WORK AND WAIT.
  ENDIF.


Код BAPI...
Code:
FUNCTION bapi_matval_price_change.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     VALUE(MATERIAL) TYPE  BAPI_MATVAL_KEY-MATERIAL
*"     VALUE(VALUATIONAREA) TYPE  BAPI_MATVAL_KEY-VAL_AREA
*"     VALUE(VALUATIONTYPE) TYPE  BAPI_MATVAL_KEY-VAL_TYPE
*"     VALUE(PRICEDATE) TYPE  BAPI_MATVAL_PRICEDATE
*"     VALUE(MATERIAL_EVG) TYPE  BAPIMGVMATNR_COPY OPTIONAL
*"     VALUE(Z_XBLNR) TYPE  BAPI_MATVAL_KEY-Z_XBLNR OPTIONAL
*"     VALUE(Z_BKTXT) TYPE  BAPI_MATVAL_KEY-Z_BKTXT OPTIONAL
*"     VALUE(Z_SUBS_DBT) TYPE  BAPI_MATVAL_KEY-Z_SUBS_DBT OPTIONAL
*"     VALUE(Z_SUM) TYPE  BSEG-DMBTR OPTIONAL
*"  EXPORTING
*"     VALUE(PRICECHANGEDOCUMENT) TYPE  BAPI_PRICECHANGE_DOCUMENT
*"  TABLES
*"      PRICES STRUCTURE  BAPI_MATVAL_PRICES
*"      RETURN STRUCTURE  BAPIRET2
*"----------------------------------------------------------------------
ENHANCEMENT-POINT BAPI_MATVAL_PRICE_CHANGE_G6 SPOTS ES_SAPLCKMLSENDPRICE.
*$*$-Start: BAPI_MATVAL_PRICE_CHANGE_G6---------------------------------------------------------$*$*
ENHANCEMENT 1  MGV_GENERATED_SAPLCKMLSENDPRIC.    "active version
*{BAPI Begin} generation http://intranet.sap.com/materialversion
*Do not change coding between begin and end comments. ANI 20050323
CALL FUNCTION 'MATNR_BAPI_CONV_FROM_EXTERNAL'
EXPORTING
  MATNR_EXT  = MATERIAL_EVG-MATERIAL_EXT
  MATNR_VERS = MATERIAL_EVG-MATERIAL_VERS
  MATNR_GUID = MATERIAL_EVG-MATERIAL_GUID
CHANGING
  MATNR_INT  = MATERIAL
  .
*{BAPI End} generation
ENDENHANCEMENT.
*$*$-End:   BAPI_MATVAL_PRICE_CHANGE_G6---------------------------------------------------------$*$*
*{   INSERT         DEVK919499                                        2
* ЗЮ 2012-06-06 Z_BKTXT
*}   INSERT

  CALL FUNCTION 'CKML_MATVAL_PRICE_CHANGE'
    EXPORTING
      material            = material
      valuationarea       = valuationarea
      valuationtype       = valuationtype
      pricedate           = pricedate
*{   INSERT         DEVK919499                                        3
      z_xblnr             = z_xblnr
      z_bktxt             = z_bktxt
      z_subs_dbt          = z_subs_dbt
      z_sum               = z_sum
*}   INSERT
    IMPORTING
      pricechangedocument = pricechangedocument
    TABLES
      prices              = prices
      return              = return.

ENDFUNCTION.


Код ФМ 'CKML_MATVAL_PRICE_CHANGE' ...
Code:
FUNCTION ckml_matval_price_change.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     VALUE(MATERIAL) TYPE  BAPI_MATVAL_KEY-MATERIAL
*"     VALUE(VALUATIONAREA) TYPE  BAPI_MATVAL_KEY-VAL_AREA
*"     VALUE(VALUATIONTYPE) TYPE  BAPI_MATVAL_KEY-VAL_TYPE
*"     VALUE(SPECIAL_STOCK_IND) TYPE  BAPI_MATVAL_KEY-SPEC_STOCK
*"       OPTIONAL
*"     VALUE(SDDOCUMENTNUMBER) TYPE  BAPI_MATVAL_KEY-SD_DOC OPTIONAL
*"     VALUE(SDDOCUMENTITEM) TYPE  BAPI_MATVAL_KEY-ITM_NUMBER OPTIONAL
*"     VALUE(WBSELEMENT) TYPE  BAPI_MATVAL_KEY-WBS_ELEMENT OPTIONAL
*"     VALUE(PRICEDATE) TYPE  BAPI_MATVAL_PRICEDATE
*"     VALUE(Z_BKTXT) TYPE  BKTXT OPTIONAL
*"     VALUE(Z_XBLNR) TYPE  XBLNR1 OPTIONAL
*"     VALUE(Z_SUBS_DBT) TYPE  CHAR01 OPTIONAL
*"     VALUE(Z_SUM) TYPE  BSEG-DMBTR OPTIONAL
*"  EXPORTING
*"     VALUE(PRICECHANGEDOCUMENT) TYPE  BAPI_PRICECHANGE_DOCUMENT
*"  TABLES
*"      PRICES STRUCTURE  BAPI_MATVAL_PRICES
*"      RETURN STRUCTURE  BAPIRET2


.....

    IF ls_matpr_cr-newpeinh = ls_matpr_cr-peinh AND
       ls_matpr_cr-newstprs = ls_matpr_cr-stprs AND
       ls_matpr_cr-newpvprs = ls_matpr_cr-pvprs.
*{   REPLACE        DEVK919499                                        5
*\      l_nochange = 'X'.
*     ЗЮ 2012-06-07
      if z_subs_dbt = ''.
       l_nochange = 'X'.
      endif.
*}   REPLACE
    ENDIF.

....

* price change necessary
  IF l_dochange IS INITIAL.
    IF 1 = 0.
      MESSAGE e046(ckprch).
    ENDIF.
    CALL FUNCTION 'BALW_BAPIRETURN_GET2'
      EXPORTING
        type   = 'S'
        cl     = 'CKPRCH'
        number = '046'
      IMPORTING
        return = ls_return.
    APPEND ls_return TO return.
    EXIT.
  ENDIF.
*{   INSERT         DEVK919499                                        4
* ЗЮ 2012-06-06

  data wa_cr    type cki_pae_cr.
  data wa_matpr type ckmpr_f_mat_price.
  data wa_qbew  type qbew.

  if z_subs_dbt = 'X'.
  loop at lt_matpr into wa_matpr.
    loop at wa_matpr-cr into wa_cr.


     if wa_matpr-pp-sobkz is initial.
      select single *
      from   mbew
      into   corresponding fields of wa_qbew
      where  bwkey = wa_matpr-pp-bwkey
      and    matnr = wa_matpr-pp-matnr
      and    bwtar = wa_matpr-pp-bwtar.
     else.
      select single *
      from   qbew
      into   corresponding fields of wa_qbew
      where  bwkey = wa_matpr-pp-bwkey
      and    matnr = wa_matpr-pp-matnr
      and    bwtar = wa_matpr-pp-bwtar
      and    sobkz = wa_matpr-pp-sobkz
      and    pspnr = wa_matpr-pp-pspnr.
     endif.
     wa_cr-newsalk3 = wa_qbew-salk3 + z_sum.
     wa_cr-salk3    = wa_qbew-salk3.
     wa_cr-ZUUMB    = wa_cr-salk3 - wa_cr-newsalk3.
     modify wa_matpr-cr from wa_cr.
    endloop.   "matpr-cr
    modify lt_matpr from wa_matpr.
  endloop.   "lt_matpr
  endif.   " z_subs_dbt = 'X'.
*}   INSERT

* change prices
  CALL FUNCTION 'PRICES_CHANGE'
    EXPORTING
      actual_bdatj   = l_bdatj
      actual_poper   = l_poper
      budat          = l_budat
      bukrs          = ls_ckibwkey-bukrs
*{   INSERT         DEVK919499                                        3
      XBLNR          = z_xblnr
      SUBS_DBT       = z_SUBS_DBT
*}   INSERT
    TABLES
      t_matpr        = lt_matpr
    EXCEPTIONS
      error_message  = 1
      invalid_period = 2
      OTHERS         = 3.
* message collection not activated -> error_message!
  IF sy-subrc <> 0.
    CALL FUNCTION 'BALW_BAPIRETURN_GET2'
      EXPORTING
        type   = sy-msgty
        cl     = sy-msgid
        number = sy-msgno
        par1   = sy-msgv1
        par2   = sy-msgv2
        par3   = sy-msgv3
        par4   = sy-msgv4
      IMPORTING
        return = ls_return.
*   any subrc <> 0 is handeled as error
*   (exception invalid_period comes as message type I)
    INSERT ls_return INTO return INDEX 1.
    EXIT.
  ENDIF.
*{   INSERT         DEVK919499                                        2
* ЗЮ 2012-06-06  BKTXT
*}   INSERT
  CALL FUNCTION 'PRICES_POST'
    EXPORTING
*{   INSERT         DEVK919499                                        1
      i_bktxt         = z_bktxt
      SUBS_DBT        = z_SUBS_DBT
*}   INSERT
      bukrs         = ls_ckibwkey-bukrs
    IMPORTING
      o_belnr       = l_belnr
      o_kjahr       = l_kjahr
    TABLES
      t_matpr       = lt_matpr
    EXCEPTIONS
      error_message = 1.




И нужно заполнить таблицу CKML_PRICE_SEND через SPRO:
УправМатПотоками -> Оценка и Контировка -> Настройка отправки цен материалов
modify wa_matpr-cr from wa_cr


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI для MR22 и MR21
СообщениеДобавлено: Пт, июн 08 2012, 18:16 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
Достойно! Добаавил в FAQ по MM

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI для MR22 и MR21
СообщениеДобавлено: Сб, июн 09 2012, 06:46 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, ноя 02 2006, 11:27
Сообщения: 51
Откуда: Ярославль
Пол: Мужской
Тестирую проводки прошлым месяцем, так как делаю селект из MBEW, а не из MBEWH.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI для MR22 и MR21
СообщениеДобавлено: Ср, июн 13 2012, 07:00 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, ноя 02 2006, 11:27
Сообщения: 51
Откуда: Ярославль
Пол: Мужской
Доработал код 'CKML_MATVAL_PRICE_CHANGE' для проводок прошлым периодом...

Code:
...
* price change necessary
  IF l_dochange IS INITIAL.
    IF 1 = 0.
      MESSAGE e046(ckprch).
    ENDIF.
    CALL FUNCTION 'BALW_BAPIRETURN_GET2'
      EXPORTING
        type   = 'S'
        cl     = 'CKPRCH'
        number = '046'
      IMPORTING
        return = ls_return.
    APPEND ls_return TO return.
    EXIT.
  ENDIF.
*{   INSERT         DEVK919499                                        4
* ЗЮ 2012-06-06

  data wa_cr    type cki_pae_cr.
  data wa_matpr type ckmpr_f_mat_price.
  data wa_qbew  type qbew.
  data gt_qbewh type standard table of qbewh.
  data wa_qbewh type qbewh.
  data z_err    type c.
  data z_salk3  type mbew-salk3.

  clear z_err.

  if z_subs_dbt = 'X'.

  if  ls_marv-lfgja = l_bdatj
  and ls_marv-lfmon = l_poper.
* Запас на сегодня
  loop at lt_matpr into wa_matpr.
    loop at wa_matpr-cr into wa_cr.
     if wa_matpr-pp-sobkz is initial.
      select single *
      from   mbew
      into   corresponding fields of wa_qbew
      where  bwkey = wa_matpr-pp-bwkey
      and    matnr = wa_matpr-pp-matnr
      and    bwtar = wa_matpr-pp-bwtar.

      IF sy-subrc IS INITIAL.
        z_salk3 = wa_qbew-salk3.
      else.
        z_err   = 'X'.
      ENDIF.
     else.
      select single *
      from   qbew
      into   corresponding fields of wa_qbew
      where  bwkey = wa_matpr-pp-bwkey
      and    matnr = wa_matpr-pp-matnr
      and    bwtar = wa_matpr-pp-bwtar
      and    sobkz = wa_matpr-pp-sobkz
      and    pspnr = wa_matpr-pp-pspnr.

      IF sy-subrc IS INITIAL.
        z_salk3 = wa_qbew-salk3.
      else.
        z_err   = 'X'.
      ENDIF.
     endif.
     if z_err is initial.
      wa_cr-newsalk3 = z_salk3 + z_sum.
      wa_cr-salk3    = z_salk3.
      wa_cr-ZUUMB    = wa_cr-salk3 - wa_cr-newsalk3.
     endif.
     modify wa_matpr-cr from wa_cr.
    endloop.   "matpr-cr
    modify lt_matpr from wa_matpr.
  endloop.   "lt_matpr

  else.

  loop at lt_matpr into wa_matpr.
    loop at wa_matpr-cr into wa_cr.
     if wa_matpr-pp-sobkz is initial.
      select *
      from   mbewh
      into   corresponding fields of table gt_qbewh
      where  bwkey = wa_matpr-pp-bwkey
      and    matnr = wa_matpr-pp-matnr
      and    bwtar = wa_matpr-pp-bwtar
      AND    lfgja >= l_bdatj
      ORDER BY lfgja lfmon.

      IF sy-subrc IS INITIAL.
        DELETE gt_qbewh WHERE lfgja = l_bdatj
                        AND   lfmon < l_poper.
        READ TABLE gt_qbewh INDEX 1 INTO wa_qbewh.
        IF sy-subrc IS INITIAL.
          z_salk3 = wa_qbewh-salk3.
        else.
          z_err   = 'X'.
        ENDIF.
      ENDIF.

     else.

      select *
      from   qbewh
      into   corresponding fields of table gt_qbewh
      where  bwkey = wa_matpr-pp-bwkey
      and    matnr = wa_matpr-pp-matnr
      and    bwtar = wa_matpr-pp-bwtar
      and    sobkz = wa_matpr-pp-sobkz
      and    pspnr = wa_matpr-pp-pspnr
      AND    lfgja >= l_bdatj
      ORDER BY lfgja lfmon.

      IF sy-subrc IS INITIAL.
        DELETE gt_qbewh WHERE lfgja = l_bdatj
                        AND   lfmon < l_poper.
        READ TABLE gt_qbewh INDEX 1 INTO wa_qbewh.
        IF sy-subrc IS INITIAL.
          z_salk3 = wa_qbewh-salk3.
        else.
          z_err   = 'X'.
        ENDIF.
      ENDIF.
     endif.
     if z_err is initial.
      wa_cr-newsalk3 = z_salk3 + z_sum.
      wa_cr-salk3    = z_salk3.
      wa_cr-ZUUMB    = wa_cr-salk3 - wa_cr-newsalk3.
     endif.
     modify wa_matpr-cr from wa_cr.
    endloop.   "matpr-cr
    modify lt_matpr from wa_matpr.
  endloop.   "lt_matpr

  endif.   " if  ls_marv-lfgja = l_bdatj

  endif.   " z_subs_dbt = 'X'.

  if z_err = ''.

* change prices
  CALL FUNCTION 'PRICES_CHANGE'
    EXPORTING
      actual_bdatj   = l_bdatj
      actual_poper   = l_poper
      budat          = l_budat
      bukrs          = ls_ckibwkey-bukrs
*{   INSERT         DEVK919499                                        3
      XBLNR          = z_xblnr
      SUBS_DBT       = z_SUBS_DBT
*}   INSERT
    TABLES
      t_matpr        = lt_matpr
    EXCEPTIONS
      error_message  = 1
      invalid_period = 2
      OTHERS         = 3.
...
  CALL FUNCTION 'PRICES_POST'
    EXPORTING
*{   INSERT         DEVK919499                                        1
      i_bktxt         = z_bktxt
      SUBS_DBT        = z_SUBS_DBT
*}   INSERT
      bukrs         = ls_ckibwkey-bukrs
    IMPORTING
      o_belnr       = l_belnr
      o_kjahr       = l_kjahr
    TABLES
      t_matpr       = lt_matpr
    EXCEPTIONS
      error_message = 1.

  endif."  if z_err = 'X'.



Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI для MR22 и MR21
СообщениеДобавлено: Пт, авг 31 2018, 13:22 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Вставлю свои пять копеек.
Относительно новый BAPI_MATVAL_DEBIT_CREDIT.
Задача была переоценить (деб/кред) желательно, чтобы в одном документе было несколько позиций(материал/завод/партия) с указанием причины и текста заголовка.

Пакетник - не устраивал, нужно было в один LUW укладывать с другими бапишками, да и в целом...

BAPI_M_REVAL_CREATEPRICECHANGE - его толком и не попробовал - нельзя заполнить причину и текст, дальше не знаю, может еще какие проблемы с ним. Тут про него писали что вроде как надо что то в нем подправлять https://archive.sap.com/discussions/thread/1510755

BAPI_MATVAL_PRICE_CHANGE - поломать несколько стандартных ФМов, в моем случае недопустимо.

BAPI_MATVAL_DEBIT_CREDIT - все устраивает, кроме того, что создает документ только с одной позицией.

В целом задачу обозначенную выше удалось решить через:
CALL FUNCTION 'PRICES_PROPOSE'
+
CALL FUNCTION 'PRICES_CHANGE'
+
CALL FUNCTION 'PRICES_POST'
+
COMMIT

Нюансы:
SUBS_DBT везде Х
Обязательно заполнить ACCOUNT_MODIFICATION в PRICES_CHANGE
Корректно заполнить таблицу CR в T_MATPR, зависит от конкретного случая, я смотрел например как это делается в BAPI_MATVAL_DEBIT_CREDIT.
Нужно время, на то, чтобы прописать нормально вызов цепочки ФМов PRICES (заполнение данных, обработка ошибок и тд)

Результат:
В последствие отказался от решения с ФМами PRICES, так как все таки в BAPI, до вызова ФМов PRICES* куча выборок и проверок, это дает более стабильную работу и минимизирует риски посадить кривой документ, который может чего то не того сделать. В общем через BAPI_MATVAL_DEBIT_CREDIT с одной позицией создаю, пока это устраивает.
Если у кого то есть большое желание, можно конечно, обрастить логикой вызов Фмов PRICES(как в BAPI) и сделать чтобы создавались документы с множеством позиций, конечно чтобы написать качественный ZBAPI нужно время и хороший тест.

Глубокого теста не проводил, но оба варианта рабочие, было протестировано в рамках конкретной задачи.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB