Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

BAPI for MR22 transaction

Former Member
0 Likes
12,392

Hi Guru,

I have to update some data in MR22 transaction in MR22(Debit/Credit Material).

Is there any BAPI suggested by SAP.

If there , pls help me.

Sandeep

1 ACCEPTED SOLUTION
Read only

RaymondGiuseppi
Active Contributor
0 Likes
6,539

Take a look at

- BAPI_MATVAL_PRICE_CHANGE ([Note 646630 - Send Material Prices and BAPI_MATVAL_PRICE_CHANGE usage|https://service.sap.com/sap/support/notes/646630])

- BAPI_M_REVAL_CREATEPRICECHANGE (you need a modification there to remove some code at the beginning "error_flag = 'X'.")

- PRICES_CHANGE and PRICES_POST in sequence (the previous BAPI and transactions MR21/22 call those FM so read those to find how to call)

- BDC on MR21 or MR22

Regards

Take a look at

- BAPI_MATVAL_PRICE_CHANGE ([Note 646630 - Send Material Prices and BAPI_MATVAL_PRICE_CHANGE usage|https://service.sap.com/sap/support/notes/646630])

- BAPI_M_REVAL_CREATEPRICECHANGE (you need a modification there to remove some code at the beginning "error_flag = 'X'.")

- PRICES_CHANGE and PRICES_POST in sequence (the previous BAPI and transactions MR21/22 call those FM so read those to find how to call)

- BDC on MR21 or MR22

Regards

3 REPLIES 3
Read only

RaymondGiuseppi
Active Contributor
0 Likes
6,540

Take a look at

- BAPI_MATVAL_PRICE_CHANGE ([Note 646630 - Send Material Prices and BAPI_MATVAL_PRICE_CHANGE usage|https://service.sap.com/sap/support/notes/646630])

- BAPI_M_REVAL_CREATEPRICECHANGE (you need a modification there to remove some code at the beginning "error_flag = 'X'.")

- PRICES_CHANGE and PRICES_POST in sequence (the previous BAPI and transactions MR21/22 call those FM so read those to find how to call)

- BDC on MR21 or MR22

Regards

Read only

Former Member
0 Likes
6,539

'BAPI_MATVAL_PRICE_CHANGE' is a BAPI for MR21 only, not for MR22.

But setting flag SUBS_DBT inside this BAPI makes it BAPI for MR22.

You also have to write some code inside...

Code to run BAPI:

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.

Code of BAPI_MATVAL_PRICE_CHANGE:

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

Read only

0 Likes
6,539

Code of 'CKML_MATVAL_PRICE_CHANGE' …

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.

  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'.

Fill the table 'CKML_PRICE_SEND' by SPRO before using BAPI_MATVAL_PRICE_CHANGE