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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Ahrefs [Bot]


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

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