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

Post Goods Issue

Former Member
0 Likes
2,557

Hi,

Is there any BAPI or FM for to do the PGI for a delivery?

Right now i am doing BDC recording with delivery number. If any error, unable to return bcoz it is listing in error log.

Pls. advice.

Thanks

Sunil.

Hi,

Is there any BAPI or FM for to do the PGI for a delivery?

Right now i am doing BDC recording with delivery number. If any error, unable to return bcoz it is listing in error log.

Pls. advice.

Thanks

Sunil.

13 REPLIES 13
Read only

Former Member
0 Likes
1,900

Use FM WS_DELIVERY_UPDATE or WS_DELIVERY_UPDATE_2:

Set:


I_VBKOK-VBELN_VL = WA_VBELN.  "Delivery Number
I_VBKOK-WABUC    = 'X'.  "PGI

Read only

Former Member
0 Likes
1,900

Hi,

Try this BAPI_GOODSMVT_CREATE

Read only

Former Member
0 Likes
1,900

BAPI_GOODSMVT_CREATE for MB1B right. Not for PGI.

I need the function module or BAPI for PGI.

Thanks

Sunil.

Read only

0 Likes
1,900

Aparna's reply should be enough for you

WS_DELIVERY_UPDATE

Read only

Former Member
0 Likes
1,900

When i am using FM - WS_DELIVERY_UPDATE ..

How to catch the return messages if any error like T-Code locked or Deficit unrestrict item.

Thanks

Read only

0 Likes
1,900

Look the export parameters, it will return one of those in case of errors

Read only

Former Member
0 Likes
1,900

Still i am unable to process it for errors.. Can you give me an example

Thanks

Read only

0 Likes
1,900

how are you calling it. it is pretty simple one . waht are the paramters you are using? You would need to use commit too

Read only

Former Member
0 Likes
1,900

I do have Delivery Number (VBELN) - 80555141

I do have Line Item details in Delivery. Those are

Item Num 0010

Material 377359

Plant CJK2

Location 1000

quantity 30

It should return the error(any kind of error) the Standard Error Message - the one when i am getting when doing manually VL02N.

Please advice.

Read only

0 Likes
1,900

would be hard to say anything w/o seeing the code and the values at the run time.

Try debugging to see what is happening. I used this one in my code several times w/o any issues

Read only

Former Member
0 Likes
1,900

Can you provide me the code what you return. I will try to compare what is wrong in mine.

Thanks,

Sunil.

Read only

0 Likes
1,900

i am at a different place now, so no access to that code; but in SAP where used list it is shown how it is called



* carry out goods issue
  L_VBKOK-VBELN_VL = L_VBELN.
  L_VBKOK-WABUC    = 'X'.

  SET UPDATE TASK LOCAL.
  CALL FUNCTION 'WS_DELIVERY_UPDATE'
       EXPORTING
            VBKOK_WA           = L_VBKOK
            SYNCHRON           = ' '                      "HP_306797
            NO_MESSAGES_UPDATE = ' '
            UPDATE_PICKING     = 'X'
            COMMIT             = ' '
            DELIVERY           = L_VBELN
            NICHT_SPERREN      = 'X'
       TABLES
            PROT               = L_PROTT
       EXCEPTIONS
            OTHERS             = 0.
  COMMIT WORK AND WAIT.

Read only

Former Member
0 Likes
1,900

Hi,

Can you look at the Code below and let me know.. How to handle the errors for TI_ITEM_UN[].

I am trying to do PGI with the movement type 641 .. It is saying Code 01 is not possible for movement type 641.

FUNCTION Z_STO_MB1B_POSTGOODS.

*"----


""Local interface:

*" IMPORTING

*" VALUE(IVBELN) TYPE VBELN

*" TABLES

*" RETURN STRUCTURE BAPIRET2

*"----


MOVE IVBELN TO W_VBELN.

IF W_VBELN IS INITIAL.

EXIT.

ENDIF.

SELECT * INTO CORRESPONDING

FIELDS OF TABLE I_LIPS

FROM LIPS

WHERE VBELN EQ W_VBELN.

IF SY-SUBRC NE 0.

EXIT.

ENDIF.

IF I_LIPS[] IS INITIAL.

EXIT.

ENDIF.

LOOP AT I_LIPS.

  • READING TABLE EKPO FOR STOCK TYPE BASED ON LIPS

SELECT SINGLE * FROM EKPO INTO WA_EKPO

WHERE EBELN EQ I_LIPS-VGBEL

AND EBELP EQ I_LIPS-POSNR.

IF SY-SUBRC NE 0.

EXIT.

ELSE.

APPEND WA_EKPO TO I_EKPO .

ENDIF.

  • READING MARA TABLE TO CHECK BATCH OR NON-BATCH

SELECT SINGLE * FROM MARA INTO WA_MARA

WHERE MATNR EQ I_LIPS-MATNR.

IF SY-SUBRC NE 0.

EXIT.

ELSE.

APPEND WA_MARA TO I_MARA .

ENDIF.

  • BATCH MANAGED AGAINST MARA-XCHPF

IF WA_MARA-XCHPF EQ 'X'.

IF I_LIPS-CHARG IS INITIAL.

EXIT.

ELSE.

IF WA_EKPO-INSMK EQ 'S'.

SELECT SINGLE * FROM MCHB INTO WA_MCHB

WHERE MATNR EQ I_LIPS-MATNR

AND WERKS EQ I_LIPS-WERKS

AND LGORT EQ I_LIPS-LGORT

AND CHARG EQ I_LIPS-CHARG

AND CSPEM GE I_LIPS-LFIMG.

ELSEIF WA_EKPO-INSMK EQ 'X'.

SELECT SINGLE * FROM MCHB INTO WA_MCHB

WHERE MATNR EQ I_LIPS-MATNR

AND WERKS EQ I_LIPS-WERKS

AND LGORT EQ I_LIPS-LGORT

AND CHARG EQ I_LIPS-CHARG

AND CINSM GE I_LIPS-LFIMG.

ELSEIF WA_EKPO-INSMK EQ ' '.

SELECT SINGLE * FROM MCHB INTO WA_MCHB

WHERE MATNR EQ I_LIPS-MATNR

AND WERKS EQ I_LIPS-WERKS

AND LGORT EQ I_LIPS-LGORT

AND CHARG EQ I_LIPS-CHARG.

ENDIF.

APPEND WA_MCHB TO I_MCHB.

ENDIF.

ELSE.

  • NON-BATCH MANAGED AGAINST MARA-XCHPF

IF WA_EKPO-INSMK EQ 'S'.

SELECT SINGLE * FROM MARD INTO WA_MARD

WHERE MATNR EQ I_LIPS-MATNR

AND WERKS EQ I_LIPS-WERKS

AND LGORT EQ I_LIPS-LGORT.

ELSEIF WA_EKPO-INSMK EQ 'X'.

SELECT SINGLE * FROM MARD INTO WA_MARD

WHERE MATNR EQ I_LIPS-MATNR

AND WERKS EQ I_LIPS-WERKS

AND LGORT EQ I_LIPS-LGORT.

ELSEIF WA_EKPO-INSMK EQ ' '.

SELECT SINGLE * FROM MARD INTO WA_MARD

WHERE MATNR EQ I_LIPS-MATNR

AND WERKS EQ I_LIPS-WERKS

AND LGORT EQ I_LIPS-LGORT.

ENDIF.

ENDIF.

IF SY-SUBRC EQ 0.

APPEND WA_MARD TO I_MARD.

move WA_EKPO-MEINS TO TI_MCHB-MEINS.

MOVE: I_LIPS-MATNR TO TI_MCHB-MATNR,

I_LIPS-WERKS TO TI_MCHB-WERKS,

I_LIPS-CHARG TO TI_MCHB-CHARG,

I_LIPS-LGORT TO TI_MCHB-LGORT,

I_LIPS-LFIMG To TI_MCHB-MENGE,

I_LIPS-VBELN TO TI_MCHB-VBELN,

I_LIPS-POSNR TO TI_MCHB-POSNR.

IF WA_EKPO-INSMK EQ 'S'.

MOVE WA_EKPO-INSMK TO TI_MCHB-INSMK.

MOVE C_343 TO TI_MCHB-MOVE_TYPE.

ELSEIF WA_EKPO-INSMK EQ 'X'.

MOVE WA_EKPO-INSMK TO TI_MCHB-INSMK.

MOVE C_321 TO TI_MCHB-MOVE_TYPE.

  • ENDIF.

ENDIF.

APPEND TI_MCHB.

ENDIF.

  • MOVE WA_EKPO-INSMK TO STOCK_TY.

CLEAR : WA_MARA, WA_EKPO,WA_MARD,WA_MCHB, I_LIPS, TI_MCHB.

ENDLOOP.

CLEAR : WA_MARA, WA_EKPO,WA_MARD,WA_MCHB, I_LIPS, TI_MCHB.

IF NOT TI_MCHB[] IS INITIAL.

LOOP AT TI_MCHB.

IF TI_MCHB-INSMK EQ ' '.

MOVE-CORRESPONDING TI_MCHB TO TI_ITEM_UN.

APPEND TI_ITEM_UN.

CLEAR TI_ITEM_UN.

ELSEIF TI_MCHB-INSMK EQ 'S'

OR TI_MCHB-INSMK EQ 'X'.

MOVE-CORRESPONDING TI_MCHB TO TI_ITEM_BQ.

TI_ITEM_BQ-INSMK = ' '.

APPEND TI_ITEM_BQ.

CLEAR TI_ITEM_BQ.

ENDIF.

CLEAR: TI_ITEM_UN, TI_ITEM_BQ, TI_MCHB.

ENDLOOP.

ENDIF.

IF NOT TI_ITEM_BQ[] IS INITIAL.

LOOP AT TI_ITEM_BQ.

CLEAR: TI_ITEM, TI_RET, E_HEAD , E_HEADRET .

REFRESH: TI_ITEM, TI_RET.

  • PREPARING THE DATE INFORMATION

E_HEAD-PSTNG_DATE = SY-DATUM.

E_HEAD-DOC_DATE = SY-DATUM.

E_CODE-GM_CODE = C_04.

  • PREPARING ITEMS FOR BAPI

TI_ITEM-MATERIAL = TI_ITEM_BQ-MATNR.

TI_ITEM-PLANT = TI_ITEM_BQ-WERKS.

TI_ITEM-STGE_LOC = TI_ITEM_BQ-LGORT.

TI_ITEM-BATCH = TI_ITEM_BQ-CHARG.

TI_ITEM-MOVE_TYPE = TI_ITEM_BQ-MOVE_TYPE.

TI_ITEM-ENTRY_UOM = TI_ITEM_BQ-MEINS.

TI_ITEM-ENTRY_QNT = TI_ITEM_UN-MENGE.

TI_ITEM-STCK_TYPE = ' '.

TI_ITEM-MOVE_MAT = TI_ITEM_BQ-MATNR.

TI_ITEM-MOVE_PLANT = TI_ITEM_BQ-WERKS.

TI_ITEM-MOVE_STLOC = TI_ITEM_BQ-LGORT.

TI_ITEM-MOVE_BATCH = TI_ITEM_BQ-CHARG.

APPEND TI_ITEM.

CALL FUNCTION 'BAPI_GOODSMVT_CREATE'

EXPORTING

goodsmvt_header = E_HEAD

goodsmvt_code = E_CODE

IMPORTING

goodsmvt_headret = E_HEADRET

TABLES

goodsmvt_item = TI_ITEM

return = TI_RET.

  • COMMIT WORK

IF NOT E_HEADRET-MAT_DOC IS INITIAL.

COMMIT WORK AND WAIT.

SELECT SINGLE * FROM MSEG INTO WA_MSEG

WHERE MBLNR EQ E_HEADRET-MAT_DOC

AND MJAHR EQ E_HEADRET-DOC_YEAR.

IF SY-SUBRC EQ 0.

PERFORM CALL_TRANSACTION.

SELECT SINGLE * FROM VBUP INTO WA_VBUP

WHERE VBELN EQ W_VBELN

AND POSNR EQ TI_ITEM_BQ-POSNR.

IF SY-SUBRC EQ 0

AND WA_VBUP-WBSTA EQ 'C'.

CONCATENATE E_HEADRET-MAT_DOC E_HEADRET-DOC_YEAR

TI_ITEM-MATERIAL TI_ITEM_BQ-POSNR

INTO RETURN-MESSAGE

SEPARATED BY SPACE.

MOVE 'S' TO RETURN-TYPE.

APPEND RETURN.

ELSE.

CONCATENATE 'PGI NOT DONE' TI_ITEM_BQ-MATNR TI_ITEM_BQ-POSNR

INTO RETURN-MESSAGE

SEPARATED BY SPACE.

MOVE 'E' TO RETURN-TYPE.

APPEND RETURN.

ENDIF.

ENDIF.

  • BUILDING ERROR REPORT

ELSE.

LOOP AT TI_RET WHERE TYPE EQ C_A

OR TYPE EQ C_E.

TI_MCHB-TYPE = TI_RET-TYPE.

IF TI_ITEM_BQ-MENGE EQ 0.

CONCATENATE TI_RET-ID TI_RET-NUMBER TI_RET-MESSAGE

INTO TI_ITEM_BQ-MESSG

SEPARATED BY SPACE.

CONCATENATE TI_RET-MESSAGE '(OR)' 'Del.Qantity - 0.00'

INTO TI_RET-MESSAGE SEPARATED BY SPACE.

MOVE-CORRESPONDING TI_RET TO RETURN.

APPEND RETURN.

ELSE.

CONCATENATE TI_RET-ID TI_RET-NUMBER TI_RET-MESSAGE

INTO TI_ITEM_BQ-MESSG

SEPARATED BY SPACE.

MOVE-CORRESPONDING TI_RET TO RETURN.

APPEND RETURN.

ENDIF.

ENDLOOP.

ENDIF.

ENDLOOP.

ENDIF.

IF NOT TI_ITEM_UN[] IS INITIAL.

LOOP AT TI_ITEM_UN.

CLEAR: TI_ITEM, TI_RET, E_HEAD , E_HEADRET .

REFRESH: TI_ITEM, TI_RET.

  • PREPARING THE DATE INFORMATION

E_HEAD-PSTNG_DATE = SY-DATUM.

E_HEAD-DOC_DATE = SY-DATUM.

E_CODE-GM_CODE = '01'.

TI_ITEM_UN-MOVE_TYPE = 641.

  • PREPARING ITEMS FOR BAPI

TI_ITEM-MATERIAL = TI_ITEM_UN-MATNR.

TI_ITEM-PLANT = TI_ITEM_UN-WERKS.

TI_ITEM-STGE_LOC = TI_ITEM_UN-LGORT.

TI_ITEM-BATCH = TI_ITEM_UN-CHARG.

TI_ITEM-MOVE_TYPE = TI_ITEM_UN-MOVE_TYPE.

TI_ITEM-ENTRY_UOM = TI_ITEM_UN-MEINS.

TI_ITEM-ENTRY_QNT = TI_ITEM_UN-MENGE.

TI_ITEM-STCK_TYPE = ' '.

TI_ITEM-DELIV_NUMB_TO_SEARCH = W_VBELN.

TI_ITEM-DELIV_ITEM_TO_SEARCH = TI_ITEM_UN-POSNR.

  • TI_ITEM-MOVE_MAT = TI_ITEM_BQ-MATNR.

  • TI_ITEM-MOVE_PLANT = TI_ITEM_BQ-WERKS.

  • TI_ITEM-MOVE_STLOC = TI_ITEM_BQ-LGORT.

  • TI_ITEM-MOVE_BATCH = TI_ITEM_BQ-CHARG.

APPEND TI_ITEM.

CALL FUNCTION 'BAPI_GOODSMVT_CREATE'

EXPORTING

goodsmvt_header = E_HEAD

goodsmvt_code = E_CODE

IMPORTING

goodsmvt_headret = E_HEADRET

TABLES

goodsmvt_item = TI_ITEM

return = TI_RET.

IF NOT E_HEADRET-MAT_DOC IS INITIAL.

ELSE.

CONCATENATE TI_RET-ID TI_RET-NUMBER TI_RET-MESSAGE

INTO TI_ITEM_UN-MESSG

SEPARATED BY SPACE.

MOVE-CORRESPONDING TI_RET TO RETURN.

APPEND RETURN.

ENDIF.

ENDLOOP.

ENDIF.

ENDFUNCTION.