Application Development 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: 

adding an item or updating

Former Member
0 Kudos

Hi,

can somenone help me on adding an item or changing or updating a purchase requistion

with these Function Modules.

BAPI_PR_CHANGE

BAPI_REQUISITION_CHANGE

ME_UPDATE_REQUISITION

I have tried several hours to do that but I regret to say without any success.

It is also Ok when I can have very simple coding exanple.

Kindly Regards

ertas

1 ACCEPTED SOLUTION

former_member585060
Active Contributor
0 Kudos

Hi,

Try this sample code to change purchase org of a PR using BAPI_REQUISITION_CHANGE

PARAMETERS : P_BANFN TYPE EKKO-EBELN,
             P_EKGRP TYPE EKKO-EKGRP.

DATA :   LT_BAPIEBAN   LIKE BAPIEBAN   OCCURS 0 WITH HEADER LINE,
         LT_BAPIRETURN LIKE BAPIRETURN OCCURS 0 WITH HEADER LINE,
         LT_BAPI_OLD   LIKE BAPIEBANV  OCCURS 0 WITH HEADER LINE,
         LT_BAPI_NEW   LIKE BAPIEBANV  OCCURS 0 WITH HEADER LINE.



  CLEAR : LT_BAPIEBAN, LT_BAPIEBAN[], LT_BAPIRETURN, LT_BAPIRETURN[],
          LT_BAPI_OLD, LT_BAPI_OLD[], LT_BAPI_NEW, LT_BAPI_NEW[].

  CALL FUNCTION 'BAPI_REQUISITION_GETDETAIL'
    EXPORTING
      NUMBER            = P_BANFN
    TABLES
      REQUISITION_ITEMS = LT_BAPIEBAN
      RETURN            = LT_BAPIRETURN
    EXCEPTIONS
      OTHERS            = 1.

 


  LOOP AT LT_BAPIEBAN .
    CLEAR : LT_BAPI_OLD, LT_BAPI_NEW.

    MOVE-CORRESPONDING LT_BAPIEBAN TO LT_BAPI_OLD.
    MOVE-CORRESPONDING LT_BAPIEBAN TO LT_BAPI_NEW.

    LT_BAPI_NEW-PUR_GROUP = P_EKGRP.

    APPEND LT_BAPI_OLD.
    APPEND LT_BAPI_NEW.
  ENDLOOP.


  CALL FUNCTION 'BAPI_REQUISITION_CHANGE'
    EXPORTING
      NUMBER                = P_BANFN
    TABLES
      REQUISITION_ITEMS_OLD = LT_BAPI_OLD
      REQUISITION_ITEMS_NEW = LT_BAPI_NEW
      RETURN                = LT_BAPIRETURN
    EXCEPTIONS
      OTHERS                = 1.

  IF SY-SUBRC NE 0 OR SY-MSGNO NE '041'.
    P_TYPE = 'F'. 

    CLEAR P_MESSAGE.
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'
      EXPORTING
        MSGID               = SY-MSGID
        MSGNR               = SY-MSGNO
        MSGV1               = SY-MSGV1
        MSGV2               = SY-MSGV2
        MSGV3               = SY-MSGV3
        MSGV4               = SY-MSGV4
      IMPORTING
        MESSAGE_TEXT_OUTPUT = P_MESSAGE.

    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.


  ELSE.
    P_TYPE = 'S'. 


    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = 'Y'.
  ENDIF.

Regards

Bala Krishna

2 REPLIES 2

former_member585060
Active Contributor
0 Kudos

Hi,

Try this sample code to change purchase org of a PR using BAPI_REQUISITION_CHANGE

PARAMETERS : P_BANFN TYPE EKKO-EBELN,
             P_EKGRP TYPE EKKO-EKGRP.

DATA :   LT_BAPIEBAN   LIKE BAPIEBAN   OCCURS 0 WITH HEADER LINE,
         LT_BAPIRETURN LIKE BAPIRETURN OCCURS 0 WITH HEADER LINE,
         LT_BAPI_OLD   LIKE BAPIEBANV  OCCURS 0 WITH HEADER LINE,
         LT_BAPI_NEW   LIKE BAPIEBANV  OCCURS 0 WITH HEADER LINE.



  CLEAR : LT_BAPIEBAN, LT_BAPIEBAN[], LT_BAPIRETURN, LT_BAPIRETURN[],
          LT_BAPI_OLD, LT_BAPI_OLD[], LT_BAPI_NEW, LT_BAPI_NEW[].

  CALL FUNCTION 'BAPI_REQUISITION_GETDETAIL'
    EXPORTING
      NUMBER            = P_BANFN
    TABLES
      REQUISITION_ITEMS = LT_BAPIEBAN
      RETURN            = LT_BAPIRETURN
    EXCEPTIONS
      OTHERS            = 1.

 


  LOOP AT LT_BAPIEBAN .
    CLEAR : LT_BAPI_OLD, LT_BAPI_NEW.

    MOVE-CORRESPONDING LT_BAPIEBAN TO LT_BAPI_OLD.
    MOVE-CORRESPONDING LT_BAPIEBAN TO LT_BAPI_NEW.

    LT_BAPI_NEW-PUR_GROUP = P_EKGRP.

    APPEND LT_BAPI_OLD.
    APPEND LT_BAPI_NEW.
  ENDLOOP.


  CALL FUNCTION 'BAPI_REQUISITION_CHANGE'
    EXPORTING
      NUMBER                = P_BANFN
    TABLES
      REQUISITION_ITEMS_OLD = LT_BAPI_OLD
      REQUISITION_ITEMS_NEW = LT_BAPI_NEW
      RETURN                = LT_BAPIRETURN
    EXCEPTIONS
      OTHERS                = 1.

  IF SY-SUBRC NE 0 OR SY-MSGNO NE '041'.
    P_TYPE = 'F'. 

    CLEAR P_MESSAGE.
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'
      EXPORTING
        MSGID               = SY-MSGID
        MSGNR               = SY-MSGNO
        MSGV1               = SY-MSGV1
        MSGV2               = SY-MSGV2
        MSGV3               = SY-MSGV3
        MSGV4               = SY-MSGV4
      IMPORTING
        MESSAGE_TEXT_OUTPUT = P_MESSAGE.

    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.


  ELSE.
    P_TYPE = 'S'. 


    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = 'Y'.
  ENDIF.

Regards

Bala Krishna

0 Kudos

Bala Krishna,

I thank you very much for your kindly efforts.

I have run your coding and I get the message

"Material purchase requisition" is not allowed (ORD 900043)

Do you know why this is not possible ? Is this a common case ?

Regards

ertas