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

former_member190312
Active Participant
0 Likes
787

hI ALL,

how many BAPI's are there for GR? i am using <b>BAPI_GOODSMVT_CREATE </b> for GR.now a days, it is showing some error.can u plz suggest any other bapi's for GR.

any idea will be highly appreaciated.

Regards

pabitra

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
736

Hi Pabitra

Maybe you can post the errors you are facing with the code which can help to expect better advices and solutions.

Kind Regards

Eswar

6 REPLIES 6
Read only

Former Member
0 Likes
737

Hi Pabitra

Maybe you can post the errors you are facing with the code which can help to expect better advices and solutions.

Kind Regards

Eswar

Read only

0 Likes
736

Hi Eswar,

Thanks for ur help.i am using a developed program for GR.i used this program before.there was no error.but now i am facing error like

PO ordered quqntity exceeded by 18,000 EA..i am using BAPI_GOODSMVT_CREATE for goods transfer.

In the selection screen, i am putting

PO number- PO1

material number- MAT

GR quantity- 18,000

delivery order-111

i want to receive the material MAT of quantity 18,000 from that PO.initially i have ordered PO quntity as 1 lakh. Till now i have received 42,000 materials,now i try to receive 18,000 materials.but it is showing this type of error.

This error is fired from the return parameter of that BAPI only.error having message class-M7 & error no-022

is comming.

i am giving my coding below.plz suggest where is the problem.it is very very urgent.recently my company has added some patches to update the SAP.is this the cause for that error.plz suggest.

any idea will be highly appreaciated.

Regards

REPORT zmui001

LINE-SIZE 140

LINE-COUNT 65

NO STANDARD PAGE HEADING.

*--


DATA DECLARATION--


*-- tables

TABLES : ekpo,

ekbe,

marv.

*--Includes

INCLUDE : <icon>. " Include for Icons

*-- Types

TYPES : BEGIN OF t_mseg,

ebeln LIKE ekko-ebeln,

name1 LIKE lfa1-name1,

lifnr LIKE lfa1-lifnr,

eknam LIKE t024-eknam,

mblnr LIKE mkpf-mblnr,

matnr LIKE ekpo-matnr,

maktx LIKE makt-maktx,

lgort LIKE mseg-lgort,

charg LIKE mseg-charg, "chg: 10/17/2005

menge LIKE mseg-menge,

budat LIKE mkpf-budat,

bldat LIKE mkpf-bldat, " chg : 08/18/2003

xblnr LIKE mkpf-xblnr,

END OF t_mseg.

DATA: BEGIN OF t_ekbe,

ebeln LIKE ekbe-ebeln,

ebelp LIKE ekbe-ebelp,

bwart LIKE ekbe-bwart,

matnr LIKE ekbe-matnr,

menge LIKE ekbe-menge,

END OF t_ekbe,

BEGIN OF t_ekpo,

ebeln LIKE ekpo-ebeln,

ebelp LIKE ekpo-ebelp,

matnr LIKE ekpo-matnr,

menge LIKE ekpo-menge,

END OF t_ekpo.

TYPES : BEGIN OF t_options.

INCLUDE STRUCTURE itcpo.

TYPES : END OF t_options.

*--Internal tables

DATA: BEGIN OF i_item OCCURS 50. "Create Material Document Item

INCLUDE STRUCTURE bapi2017_gm_item_create.

DATA: END OF i_item .

DATA: BEGIN OF i_return OCCURS 20. "Return parameter

INCLUDE STRUCTURE bapiret2.

DATA: END OF i_return.

DATA: BEGIN OF i_part OCCURS 0, " Internal table for split data

part(20),

END OF i_part.

DATA: BEGIN OF i_return1 OCCURS 20. "Return parameter

INCLUDE STRUCTURE bapiret1.

DATA: END OF i_return1.

*-- Work areas

DATA: BEGIN OF wa_header . "Material Document Header Data

INCLUDE STRUCTURE bapi2017_gm_head_01.

DATA: END OF wa_header .

DATA: BEGIN OF wa_return . "Output Structure

INCLUDE STRUCTURE bapi2017_gm_head_ret.

DATA: END OF wa_return .

*-- Work areas

DATA: wa_mseg TYPE t_mseg,

wa_ekbe LIKE t_ekbe,

wa_ekpo LIKE t_ekpo,

wa_options TYPE t_options,

i_ekbe LIKE STANDARD TABLE OF t_ekbe,

i_ekbe2 LIKE STANDARD TABLE OF t_ekbe,

i_ekpo LIKE STANDARD TABLE OF t_ekpo.

*---Variables

DATA: v_first, " variable to get first digit

v_set TYPE c,

v_found TYPE p,

v_menge TYPE p,

v_ebeln LIKE ekko-ebeln,

v_lifnr LIKE ekko-lifnr,

v_belnr LIKE ekbe-belnr,

v_postdate LIKE mkpf-budat,

v_bukrs LIKE marv-bukrs,

v_datum LIKE sy-datum,

v_lgort LIKE mard-lgort, " Stge. location

v_bwart LIKE mseg-bwart, " Movement type

v_infnr LIKE eina-infnr, " Info record no.

v_ltsnr LIKE eina-ltsnr.

*---Constants

CONSTANTS: c_comma TYPE c VALUE ',', " For splitting data at commas

c_01(2) TYPE c VALUE '01', " For movement code in Bapi

c_b TYPE c VALUE 'B', " For mvt. Indicator in Bapi

c_save(4) TYPE c VALUE 'SAVE', " For button text

c_clear(5) TYPE c VALUE 'CLEAR', " For clear button

c_mvmt(4) TYPE c VALUE 'MVMT',

c_ok(2) TYPE c VALUE 'OK',

c_error(5) TYPE c VALUE 'Error'.

*--


SELECTION SCREEN DESIGN--


SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME.

PARAMETERS: p_bar(75) , " Scanned data from barcode

p_ebeln LIKE ekko-ebeln, " PO number

p_matnr LIKE ekpo-matnr, " Material number

p_menge LIKE ekpo-menge, " Quantity

  • p_lifnr LIKE ekko-lifnr, " Vendor code

p_frbnr LIKE mkpf-frbnr, " Reference doc for goods mvt

p_status(5) TYPE c.

SELECTION-SCREEN END OF BLOCK blk1.

SELECTION-SCREEN PUSHBUTTON 15(10) v_save USER-COMMAND mvmt.

SELECTION-SCREEN PUSHBUTTON 40(10) v_clear USER-COMMAND clear.

*----


INITIALIZATION -


INITIALIZATION.

v_save = c_save .

v_clear = c_clear.

*--


AT SELECTION_SCREEN--


AT SELECTION-SCREEN .

IF sy-ucomm = c_clear.

PERFORM f_clear.

ELSE.

IF sy-ucomm <> c_mvmt.

  • if not sy-tabix is initial and sy-ucomm <> c_mvmt.

*--- Extracting the data by splitting the scanned values.

PERFORM f_get_split_data.

*--- Validating the input data.

PERFORM f_check_inputs.

ELSE .

*--- Validating the input data.

PERFORM f_check_inputs.

*-- Determining the posting date and period check.

PERFORM f_get_posting_date.

*---Post goods movement

PERFORM f_post_receipt.

ENDIF.

ENDIF.

----


  • SUBROUTINES *

----


&----


*& Form f_check_inputs

&----


  • Validating the input parameters

----


FORM f_check_inputs.

*-- Validating material no.

SELECT SINGLE matnr INTO p_matnr

FROM mara

WHERE matnr = p_matnr.

IF sy-subrc = 4.

p_status = c_error.

MESSAGE e003(zm) WITH 'Material no.'.

ENDIF.

*-- Validating JHT reference no.

SELECT SINGLE ebeln

lifnr

bukrs

INTO (p_ebeln, v_lifnr , v_bukrs)

FROM ekko

  • where unsez = p_unsez. chg:07072003

WHERE ebeln = p_ebeln.

IF sy-subrc = 4.

p_status = c_error.

MESSAGE e003(zm) WITH 'Purchase order no.'.

ENDIF.

*-- Validating material po combination

SELECT SINGLE *

FROM ekpo

WHERE ebeln = p_ebeln

AND matnr = p_matnr.

IF sy-subrc = 4.

p_status = c_error.

MESSAGE e003(zm) WITH 'Purchase order no.' ' and Material no.'.

ENDIF.

*--- Checking for DO entry . (chng : 30/06/2003)

IF p_frbnr IS INITIAL.

MESSAGE e018(m7) WITH 'Delivery no.'.

p_status = c_error.

PERFORM f_clear.

ENDIF.

*-- Validating material po do combination

SELECT SINGLE a~belnr

INTO v_belnr

FROM ekbe AS a

INNER JOIN mkpf AS b

ON abelnr = bmblnr

AND agjahr = bmjahr

WHERE a~ebeln = ekpo-ebeln

AND a~ebelp = ekpo-ebelp

AND b~xblnr = p_frbnr.

IF sy-subrc = 0.

MESSAGE e019(zm) WITH v_belnr.

p_status = c_error.

PERFORM f_clear.

ENDIF.

p_status = c_ok.

ENDFORM. " f_check_inputs

&----


*& Form f_get_split_data

&----


  • Extracting the data by splitting the Scanned data

----


FORM f_get_split_data.

*-- Splitting the data at commas

SPLIT p_bar AT c_comma INTO TABLE i_part.

*-- Assigning the parts to variables.

LOOP AT i_part.

v_first = i_part-part+0(1).

TRANSLATE v_first TO UPPER CASE.

CASE v_first .

  • WHEN 'V'.

  • p_lifnr = i_part-part+1(10).

WHEN 'P'.

p_matnr = i_part-part+1(18).

WHEN 'Q'.

p_menge = i_part-part+1(13).

WHEN 'K'.

p_ebeln = i_part-part+1(10).

WHEN 'D'.

p_frbnr = i_part-part+2(16).

WHEN OTHERS.

CONTINUE.

ENDCASE.

ENDLOOP.

ENDFORM. " f_get_split_data

&----


*& Form f_get_posting_date

&----


  • Determing the posting date for document

----


FORM f_get_posting_date.

*-- get the current period for todays date.

DATA: l_period LIKE t009b-poper.

CALL FUNCTION 'DATE_TO_PERIOD_CONVERT'

EXPORTING

i_date = sy-datum

i_periv = 'K4'

IMPORTING

e_buper = l_period

  • E_GJAHR =

EXCEPTIONS

input_false = 1

t009_notfound = 2

t009b_notfound = 3

OTHERS = 4

.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

*-- Determining whether the open period

SELECT SINGLE *

FROM marv

WHERE bukrs = v_bukrs.

IF sy-subrc = 0.

IF l_period = marv-lfmon .

v_postdate = sy-datum.

ELSE.

CALL FUNCTION 'BAPI_CCODE_GET_FIRSTDAY_PERIOD'

EXPORTING

companycodeid = v_bukrs

fiscal_period = marv-lfmon

fiscal_year = marv-lfgja

IMPORTING

first_day_of_period = v_postdate

return = i_return1.

IF NOT i_return[] IS INITIAL.

LOOP AT i_return1.

MESSAGE i016(zm) WITH i_return-message.

ENDLOOP.

ENDIF.

ENDIF.

ENDIF.

ENDFORM. " f_get_posting_date

&----


*& Form f_post_receipt

&----


  • Post the goods receipt for entered data.

----


FORM f_post_receipt.

PERFORM f_fill_item.

PERFORM f_fill_header.

PERFORM f_execute_transfer.

PERFORM f_clear.

ENDFORM. " f_post_receipt

&----


*& Form f_fill_item

&----


  • Updating the item data for the GR

----


FORM f_fill_item.

*----


Checking for IQC cycle is done here.(chng : 23/07/2003)

PERFORM f_check_iqc.

*---- Assigning movement type as per IQC cycle.(chng : 23/07/2003)

IF v_lgort IS INITIAL.

MOVE '101' TO i_item-move_type.

SELECT SINGLE lgort INTO i_item-stge_loc

FROM ekpo

  • where ebeln = v_ebeln and " chg :07/07/2003

WHERE ebeln = p_ebeln AND

matnr = p_matnr .

ELSE.

MOVE v_lgort TO i_item-stge_loc.

MOVE v_bwart TO i_item-move_type.

ENDIF.

MOVE p_matnr TO i_item-material.

MOVE p_menge TO i_item-entry_qnt.

  • move v_ebeln to i_item-po_number. " 07/07/2003

MOVE p_ebeln TO i_item-po_number.

MOVE v_lifnr TO i_item-vendor.

MOVE c_b TO i_item-mvt_ind.

  • select single ebelp into i_item-po_item " chg :29/07/2003

  • from ekpo

  • where ebeln = p_ebeln

  • and matnr = p_matnr

  • and elikz = ''.

SELECT ebeln

ebelp

matnr

menge

INTO CORRESPONDING FIELDS OF TABLE i_ekpo

FROM ekpo

WHERE ebeln = p_ebeln

AND matnr = p_matnr

AND loekz = '' .

SORT i_ekpo BY ebeln ebelp matnr.

LOOP AT i_ekpo INTO wa_ekpo.

IF v_found = 0.

SELECT ebeln ebelp

bwart menge

INTO CORRESPONDING FIELDS OF TABLE i_ekbe

FROM ekbe

WHERE ebeln = p_ebeln

AND ebelp = wa_ekpo-ebelp

AND matnr = p_matnr.

  • and elikz = '' . CHG -- 03/19/2004

IF sy-subrc = 0.

LOOP AT i_ekbe INTO wa_ekbe .

IF wa_ekbe-bwart = '101'.

v_menge = v_menge + wa_ekbe-menge.

ENDIF.

IF wa_ekbe-bwart = '102'.

v_menge = v_menge - wa_ekbe-menge.

ENDIF.

IF wa_ekbe-bwart = '122'.

v_menge = v_menge - wa_ekbe-menge.

ENDIF.

ENDLOOP.

  • chng: 03/19/2004 compare po qty against receipt

v_menge = v_menge + p_menge .

IF wa_ekpo-menge >= v_menge .

v_found = 1.

MOVE wa_ekpo-ebelp TO i_item-po_item.

ENDIF.

ELSE .

v_found = 1.

MOVE wa_ekpo-ebelp TO i_item-po_item.

ENDIF.

ENDIF.

CLEAR : wa_ekbe, i_ekbe, v_menge.

ENDLOOP.

IF v_found = 0 .

MESSAGE e003(zm) WITH ' delivery items'.

ENDIF.

APPEND i_item.

CLEAR : i_item, v_found .

ENDFORM. " f_fill_item

&----


*& Form f_check_iqc

&----


  • Checking the storage location for the (chng : 23/07/2003)

----


FORM f_check_iqc.

CALL FUNCTION 'Z_M_GET_IQC_STATUS'

EXPORTING

matnr = p_matnr

lifnr = v_lifnr

IMPORTING

lgort = v_lgort

bwart = v_bwart

ltsnr = v_ltsnr

infnr = v_infnr

EXCEPTIONS

non_iqc_vendor = 1

OTHERS = 2.

IF sy-subrc <> 0.

CLEAR : v_lgort , v_bwart , v_ltsnr.

ENDIF.

ENDFORM. " f_check_iqc

&----


*& Form f_fill_header

&----


  • Updating data in the header

----


FORM f_fill_header.

MOVE v_postdate TO wa_header-pstng_date.

MOVE sy-datum TO wa_header-doc_date.

MOVE p_frbnr TO wa_header-ref_doc_no.

ENDFORM. " f_fill_header

&----


*& Form f_execute_transfer

&----


  • Executing the goods movement.

----


FORM f_execute_transfer.

CALL FUNCTION 'BAPI_GOODSMVT_CREATE'

EXPORTING

goodsmvt_header = wa_header

goodsmvt_code = c_01

IMPORTING

goodsmvt_headret = wa_return

TABLES

goodsmvt_item = i_item

return = i_return.

IF i_return[] IS INITIAL .

COMMIT WORK.

*--- UPdating Info record for IQC cycle ind.(chng : 23/07/2003)

IF NOT v_ltsnr IS INITIAL.

UPDATE eina SET ltsnr = v_ltsnr

WHERE infnr = v_infnr.

ENDIF.

REFRESH : i_item.

CLEAR : wa_header,v_ltsnr , v_infnr,v_bwart,v_lifnr.

MESSAGE i012(migo) WITH wa_return-mat_doc.

PERFORM f_do_print.

ELSE.

REFRESH : i_item.

CLEAR : wa_header,v_ltsnr , v_infnr,v_bwart,v_lifnr.

PERFORM write_errors.

ENDIF.

ENDFORM. " f_execute_transfer

FORM write_errors.

WRITE: 0(90) sy-uline ,

/0'|',

3 'System messages for GR posting',

90 '|',

/0(90) sy-uline .

LOOP AT i_return.

CASE i_return-type.

WHEN 'E'.

MESSAGE i016(zm) WITH i_return-message.

WHEN 'W'.

MESSAGE i017(zm) WITH i_return-message.

WHEN 'I'.

  • WRITE: /0'|',

  • icon_yellow_light AS ICON ,

  • '|',

  • 10 i_return-message,

  • 90 '|'.

MESSAGE i018(zm) WITH i_return-message.

WHEN 'S'.

  • WRITE: /0'|',

  • icon_green_light AS ICON ,

  • '|',

  • 10 i_return-message,

  • 90 '|'.

MESSAGE i018(zm) WITH i_return-message.

WHEN OTHERS.

  • WRITE: /0'|',

  • icon_red_light AS ICON ,

  • '|',

  • 10 i_return-message,

  • 90 '|'.

MESSAGE e016(zm) WITH i_return-message.

ENDCASE.

  • AT LAST .

  • WRITE:/0(90) sy-uline .

  • ENDAT.

ENDLOOP.

ENDFORM. " write_errors

&----


*& Form f_clear

&----


  • Clearing the input parameters

----


FORM f_clear.

CLEAR : p_ebeln ,

p_bar,

p_matnr,

p_frbnr,

v_lifnr,

p_menge,

p_status.

Read only

0 Likes
736

Hi Pabitra

Kindly check if you are facing the same problem when you post a GR online instead of BAPI just to confirm.

Kind Regards

Eswar

Read only

0 Likes
736

Hi eswar,

Very much thanks for ur help.

we are using MIGO to receive the material for the PO of order type MB.but if the PO type is LPA (scheduling agreement), then we will go for this above program(BAPI) as we can not execute MIGO for scheduling agreement PO type.

i asked functional consultant to execute MIGO for scheduling type of PO. but they said they can not do MIGO for scheduling type of PO .so i have to use this program only for scheduling type of PO.

plz suggest any idea.

Regards

pabitra

Read only

0 Likes
736

Hi Pabitra

Itz difficult for me to advice as i dont have feel of your system. Anyhow, will try to explore and get back to you with my findings. Keep the spirit.

Kind Regards

Eswar

Read only

anversha_s
Active Contributor
0 Likes
736

Hi,

BAPI BAPI_GOODSMVT_CREATE

This piece of code may be helpful.


* Structures for BAPI
  data: gm_header  type bapi2017_gm_head_01.
  data: gm_code    type bapi2017_gm_code.
  data: gm_headret type bapi2017_gm_head_ret.
  data: gm_item    type table of
                   bapi2017_gm_item_create with header line.
  data: gm_return  type bapiret2 occurs 0.
  data: gm_retmtd  type bapi2017_gm_head_ret-mat_doc.
 
  clear: gm_return, gm_retmtd. refresh gm_return.
 
 
* Setup BAPI header data.
  gm_header-pstng_date = sy-datum.
  gm_header-doc_date   = sy-datum.
  gm_code-gm_code      = '06'.                              " MB11
 
* Write 551 movement to table
  clear gm_item.
  move '551'        to gm_item-move_type     .
  move '000000000040001234' to gm_item-material.
  move '1'        to gm_item-entry_qnt.
  move 'EA'       to gm_item-entry_uom.
  move '0004'     to gm_item-plant.
  move '4000'     to gm_item-stge_loc.
  move '201'      to gm_item-move_reas.
 
* Determine cost center per plant
  case xresb-werks.
    when '0004'.
      move '0000041430' to gm_item-costcenter.
    when '0006'.
      move '0000041630' to gm_item-costcenter.
    when '0007'.
      move '0000041731' to gm_item-costcenter.
    when '0008'.
      move '0000041830' to gm_item-costcenter.
  endcase.
 
  append gm_item.
 
* Call goods movement BAPI
  call function 'BAPI_GOODSMVT_CREATE'
       exporting
            goodsmvt_header  = gm_header
            goodsmvt_code    = gm_code
       importing
            goodsmvt_headret = gm_headret
            materialdocument = gm_retmtd
       tables
            goodsmvt_item    = gm_item
            return           = gm_return.
 
   call function 'BAPI_TRANSACTION_COMMIT'
       exporting
            wait = 'X'.

rgds

anver

if hlped pls mark points