‎2006 Aug 14 4:43 AM
Hi,
I have implemented a BAPI call "BAPI_GOODSMVT_CREATE" in the ABAP program to have the goods issue.
I have tried the function in SE37 to test the parameters provided, it is successful and a document no. created.
However an error message always returned that the cost centre does not exist on 05.03.2006, actually this period is opened and I have post the records in the SE37 in the same period.
The posting date and the document date is entered in the BAPI2017_GM_HEAD_01.
Any hints or experince on that?
Message was edited by: Chung Angus
‎2006 Aug 14 12:19 PM
Check whether you are providing the cost center value with leading zeroes? If not, you need to do so.
Use the function CONVERSION_EXIT_ALPHA_INPUT to add leading zeroes.
-Kiran
*Please reward useful answers
‎2006 Aug 14 5:18 AM
bapi will check the validity of that cost centre on that given date.
so check that one in KS03.
u have to check VALID FROM , not VALID TO
Regards
Prabhu
Message was edited by: Prabhu Peram
‎2006 Aug 14 10:51 AM
In KS03, the cost center is valid to '31.12.9999', it should be ok to post in any time.
I have tried to remove the cost center from the BAPI and it works.
Once the cost center is provided, any other information should be entered in order to let the function works?
‎2006 Aug 14 11:04 AM
Hi,
Check the sample program.
http://www.sap-img.com/abap/bapi-goodsmvt-create-to-post-goods-movement.htm
Regards
vijay
‎2006 Aug 14 11:04 AM
Check the below code:
&----
*& Report YTESTLOSS *
*& *
&----
*& *
*& *
&----
REPORT ytestloss .
***********data declarations*******************
TYPES : BEGIN OF ty_lgort_sum,
lgort LIKE mseg-lgort,
menge1 LIKE mseg-menge,
menge2 LIKE mseg-menge,
lossquantity LIKE mseg-menge,
umlgo like mseg-menge.
TYPES : END OF ty_lgort_sum.
TYPES : BEGIN OF ty_gds,
lgort LIKE mseg-lgort,
menge1 LIKE mseg-menge,
menge2 LIKE mseg-menge,
lossquantity LIKE mseg-menge,
bwart LIKE mseg-bwart,
matnr LIKE mseg-matnr,
umlgo like mseg-menge,
werks LIKE mseg-werks.
TYPES : END OF ty_gds.
*********internal tables***********
DATA : i_mseg LIKE TABLE OF mseg WITH HEADER LINE,
i_mseg1 TYPE STANDARD TABLE OF ty_lgort_sum WITH HEADER LINE,
i_mkpf LIKE TABLE OF mkpf WITH HEADER LINE.
*********Work areas***********
DATA : wa_mseg LIKE mseg,
wa_mseg1 TYPE ty_gds,
wa_mkpf LIKE mkpf,
wa_lgort_sum TYPE ty_lgort_sum,
wa_loss_data LIKE zpesloss,
wa_zpesloss LIKE zpesloss.
*******Varaiables************
DATA : ws_zolorg LIKE zocmtpa-zolorg.
DATA : ws_date LIKE sy-datum.
***********bapi declaration*************
TYPES : BEGIN OF t_return .
INCLUDE STRUCTURE bapiret2.
TYPES : END OF t_return.
TYPES : BEGIN OF t_items.
INCLUDE STRUCTURE bapi2017_gm_item_create.
TYPES: END OF t_items.
DATA: i_items TYPE STANDARD TABLE OF t_items,
i_return_goods TYPE STANDARD TABLE OF t_return.
DATA: wa_items TYPE t_items.
DATA : i_bapireturn LIKE TABLE OF zpesloss,
wa_bapireturn LIKE zpesloss.
DATA : i_bapi LIKE TABLE OF bapi2017_gm_head_ret-mat_doc.
DATA : v_header LIKE bapi2017_gm_head_01,
v_gm_code LIKE bapi2017_gm_code.
DATA: wa_headret LIKE bapi2017_gm_head_ret,
wa_matdoc TYPE bapi2017_gm_head_ret-mat_doc,
wa_matdocyr TYPE bapi2017_gm_head_ret-doc_year.
************************************************************
SELECT *
FROM mseg
INTO
CORRESPONDING FIELDS OF TABLE i_mseg
WHERE ( bwart = '101'
OR bwart = '102' )
AND werks = 'SP01'
AND ( lgort = 'BA01'
OR lgort = 'CA01'
OR lgort = 'HU01' )
AND matnr = 'LNGES1'.
31 days from sy-datum********
CALL FUNCTION 'RM_GO_BACK_N_DAYS'
EXPORTING
start_date = sy-datum
n_days = 31
KALENDER =
IMPORTING
hist_date = ws_date
EXCEPTIONS
negative_days = 1
initial_start_date = 2
OTHERS = 3
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
**********selecting from mkpf
SELECT mblnr
xabln
budat
mjahr
FROM mkpf
INTO CORRESPONDING FIELDS OF TABLE i_mkpf
FOR ALL ENTRIES IN i_mseg
WHERE mblnr = i_mseg-mblnr AND
( budat >= ws_date AND
budat <= sy-datum ).
******Selecting for percentage**********
SELECT SINGLE zolorg
INTO ws_zolorg
FROM zocmtpa.
IF sy-subrc = 0.
ENDIF.
break invvi2.
LOOP AT i_mseg .
CLEAR : wa_lgort_sum,i_mseg1.
SELECT SINGLE * FROM zpesloss
INTO CORRESPONDING FIELDS OF wa_zpesloss
WHERE mblnr = i_mseg-mblnr
AND lgort = i_mseg-lgort.
IF sy-subrc EQ 0.
DELETE i_mseg.
CONTINUE.
ENDIF.
*********movement type 101***********
IF sy-subrc NE 0.
wa_lgort_sum-lgort = i_mseg-lgort.
wa_lgort_sum-umlgo = i_mseg-umlgo.
IF i_mseg-bwart = '101'.
wa_lgort_sum-menge1 = i_mseg-menge.
COLLECT wa_lgort_sum INTO i_mseg1.
*********movement type 102***********
ELSE.
wa_lgort_sum-menge2 = i_mseg-menge.
COLLECT wa_lgort_sum INTO i_mseg1.
ENDIF.
ENDIF.
ENDLOOP.
LOOP AT i_mseg1.
wa_mseg1-lossquantity = ( i_mseg1-menge1 - i_mseg1-menge2 ) * ws_zolorg
/ 100.
IF wa_mseg1-lossquantity > 0.
wa_mseg1-bwart = '551'.
wa_mseg1-matnr = 'LNGES1'.
wa_mseg1-lgort = i_mseg1-lgort.
wa_mseg1-werks = 'SP01'.
ELSE.
wa_mseg1-bwart = '552'.
ENDIF.
***********Bapi************************
CLEAR : v_header, v_gm_code.
Header Data
v_header-pstng_date = sy-datum.
v_header-doc_date = sy-datum.
Code Group
v_gm_code-gm_code = '03'.
CLEAR i_items[].
wa_items-material = wa_mseg1-matnr.
wa_items-plant = wa_mseg1-werks.
wa_items-stge_loc = wa_mseg1-umlgo.
wa_items-move_type = wa_mseg1-bwart.
wa_items-entry_qnt = wa_mseg1-lossquantity.
APPEND wa_items TO i_items.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = v_header
goodsmvt_code = v_gm_code
TESTRUN = ' '
IMPORTING
goodsmvt_headret = wa_headret
materialdocument = wa_matdoc
matdocumentyear = wa_matdocyr
TABLES
goodsmvt_item = i_items
GOODSMVT_SERIALNUMBER =
return = i_return_goods .
IF i_return_goods IS INITIAL .
COMMIT WORK.
wa_bapireturn-mblnr = wa_matdoc.
wa_bapireturn-lgort = wa_mseg1-lgort.
APPEND wa_bapireturn TO i_bapireturn.
ELSE.
ROLLBACK WORK.
ENDIF.
ENDLOOP.
refresh : i_items.
*******update database table zpesloss*********
break invvi2.
LOOP AT i_mseg INTO wa_mseg .
READ TABLE i_mkpf WITH KEY mblnr = wa_mseg-mblnr BINARY SEARCH INTO
wa_mkpf.
IF sy-subrc EQ 0.
wa_loss_data-budat = wa_mkpf-budat.
READ TABLE i_bapireturn INTO wa_bapireturn
WITH KEY lgort = wa_mseg-lgort.
IF sy-subrc EQ 0.
wa_loss_data-type = wa_mseg-matnr.
wa_loss_data-mblnr = wa_mseg-mblnr.
wa_loss_data-budat = wa_mkpf-budat.
wa_loss_data-bwart = wa_mseg-bwart.
wa_loss_data-loss_doc = wa_bapireturn-mblnr.
wa_loss_data-losspostdt = sy-datum.
wa_loss_data-lgort = wa_mseg-lgort.
MODIFY zpesloss FROM wa_loss_data.
CLEAR : wa_mseg,wa_mkpf,wa_loss_data.
ENDIF.
ENDIF.
ENDLOOP.
Regards,
Prakash.
‎2006 Aug 14 11:12 AM
Hi Chung,
Check Prabhu's post.
he is right , you have to check the "valid from" (not valid till) date for the cost center you have used.
Regards,
ravi
‎2006 Aug 14 11:32 AM
I have seen both examples and I have the similar program.
But the difference is the cost center is provided in the GOODSMVT_ITEM. Once it is provided, error "Cost center ABC /1101019 does not exist on 05.03.2006 .", ABC is the controlling area that is the company name. The posting period either for FI and MM is opened.
Any one has tried to have the BAPI_GOODSMVT_CREATE with cost center?
‎2006 Aug 14 11:40 AM
Hi Ravi,
The 'valid from' of the cost center is 01.01.2000 and 'to' 31.12.9999.
‎2006 Aug 14 12:19 PM
Check whether you are providing the cost center value with leading zeroes? If not, you need to do so.
Use the function CONVERSION_EXIT_ALPHA_INPUT to add leading zeroes.
-Kiran
*Please reward useful answers
‎2006 Aug 14 1:12 PM
Hi Kiran,
Really thousand thanks to your answer, excellent!
My program works.