PDA

Ver la Versión Completa : Bapi_goodsmvt_create


AJAAVE
15/04/10, 23:18:29
Buenas Tardes.

Estoy realizando a través de la bapi BAPI_GOODSMVT_CREATE una entrada de mercancias con referencia a un documento de Entrega con el movimiento 101, esto me funciona perfecto, mas sin embargo, si trato de anular el documento creado por la MIGO, me lanza el siguiente error: No se ha podido actualizar el flujo de documentos para la entrega, de hecho la entrada de mercancia la puedo realizar varias veces, parareciera que me falta algo al momento de pasarle a la bapi, he probado pasando varias cosas y nada, aca les dejo el codigo haber que ven.


METHOD LOAD_BAPI_GOODSMVT_CREATE.
FIELD-SYMBOLS: <WA_DET2> TYPE TY_DET1,
<WA_ITEM_CREATE> TYPE BAPI2017_GM_ITEM_CREATE,
<WA_CAB> TYPE ZMM_TXTCAB_T,
<WA_RETURN> TYPE BAPIRET2,
<WA_LOG> TYPE ZSTR_MES_LOG.

DATA: L_GOODSMVT_HEADER TYPE BAPI2017_GM_HEAD_01,
L_GOODSMVT_CODE TYPE BAPI2017_GM_CODE,
IT_GOODSMVT_ITEM TYPE TABLE OF BAPI2017_GM_ITEM_CREATE,
L_GM_HEAD_RET TYPE BAPI2017_GM_HEAD_RET,
IT_RETURN TYPE TABLE OF BAPIRET2.

READ TABLE IT_CAB ASSIGNING <WA_CAB> INDEX 1.

LOOP AT IT_DET2 ASSIGNING <WA_DET2>.

AT NEW VBELN.
* Datos de Cabecera
CLEAR IT_GOODSMVT_ITEM.
CLEAR IT_RETURN.
L_GOODSMVT_HEADER-PSTNG_DATE = <WA_CAB>-FEC_CON.
L_GOODSMVT_HEADER-DOC_DATE = <WA_CAB>-FEC_DOC.
IF <WA_CAB>-TIP_PRO = '1'.
L_GOODSMVT_HEADER-HEADER_TXT = <WA_CAB>-NOM_TXT.
ENDIF.
L_GOODSMVT_HEADER-REF_DOC_NO = <WA_DET2>-VBELN.
* L_GOODSMVT_HEADER-REF_DOC_NO_LONG = <WA_DET2>-VBELN.
* Tipo de movimiento
L_GOODSMVT_CODE-GM_CODE = '01'.
ENDAT.
* Posiciones
APPEND INITIAL LINE TO IT_GOODSMVT_ITEM ASSIGNING <WA_ITEM_CREATE>.
<WA_ITEM_CREATE>-MATERIAL = <WA_DET2>-MATNR.
<WA_ITEM_CREATE>-STGE_LOC = '2001'.
<WA_ITEM_CREATE>-MOVE_TYPE = '101'.
<WA_ITEM_CREATE>-ENTRY_QNT = <WA_DET2>-CANTIDAD.
<WA_ITEM_CREATE>-NO_MORE_GR = 'X'.
<WA_ITEM_CREATE>-MVT_IND = 'B'.
* <WA_ITEM_CREATE>-DELIV_NUMB = <WA_DET2>-VBELN.
* ME->READ_LIPS( EXPORTING I_VBELN = <WA_DET2>-VBELN
* I_MATNR = <WA_DET2>-MATNR
* CHANGING C_POS = <WA_ITEM_CREATE>-DELIV_ITEM ).

<WA_ITEM_CREATE>-DELIV_NUMB_TO_SEARCH = <WA_DET2>-VBELN.
ME->READ_LIPS( EXPORTING I_VBELN = <WA_DET2>-VBELN
I_MATNR = <WA_DET2>-MATNR
CHANGING C_POS = <WA_ITEM_CREATE>-DELIV_ITEM_TO_SEARCH ).


AT END OF VBELN.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
GOODSMVT_HEADER = L_GOODSMVT_HEADER
GOODSMVT_CODE = L_GOODSMVT_CODE
IMPORTING
GOODSMVT_HEADRET = L_GM_HEAD_RET
TABLES
GOODSMVT_ITEM = IT_GOODSMVT_ITEM
RETURN = IT_RETURN.

IF SY-SUBRC = 0.
IF IT_RETURN IS INITIAL.
ME->LOAD_ZMM_TRAENT( EXPORTING I_ORI = '1'
I_VBELN = <WA_DET2>-VBELN
I_MBLNR = L_GM_HEAD_RET-MAT_DOC ).
COMMIT WORK AND WAIT.
APPEND INITIAL LINE TO IT_LOG ASSIGNING <WA_LOG>.
<WA_LOG>-ICON = ICON_GREEN_LIGHT.
CONCATENATE L_GM_HEAD_RET-MAT_DOC TEXT-015 INTO <WA_LOG>-MESSAGE SEPARATED BY SPACE.
ELSE.
LOOP AT IT_RETURN ASSIGNING <WA_RETURN>.
APPEND INITIAL LINE TO IT_LOG ASSIGNING <WA_LOG>.
MOVE-CORRESPONDING <WA_RETURN> TO <WA_LOG>.
<WA_LOG>-ICON = ICON_RED_LIGHT.
CONCATENATE <WA_DET2>-VBELN ':' <WA_LOG>-MESSAGE INTO <WA_LOG>-MESSAGE SEPARATED BY SPACE.
ENDLOOP.
ENDIF.
ENDIF.
ENDAT.
ENDLOOP.
UNASSIGN <WA_CAB>.
UNASSIGN <WA_DET2>.
UNASSIGN <WA_ITEM_CREATE>.
UNASSIGN <WA_RETURN>.
UNASSIGN <WA_LOG>.

gracias de antemano por la ayuda prestada

AJAAVE
15/04/10, 23:54:03
Listo solucionado, no se porque tanto aqui:


<WA_ITEM_CREATE>-DELIV_NUMB = <WA_DET2>-VBELN.
ME->READ_LIPS( EXPORTING I_VBELN = <WA_DET2>-VBELN
I_MATNR = <WA_DET2>-MATNR
CHANGING C_POS = <WA_ITEM_CREATE>-DELIV_ITEM ).

Como aqui hay que pasarle la entrega:

<WA_ITEM_CREATE>-DELIV_NUMB_TO_SEARCH = WA_ITEM_CREATE>-DELIV_NUMB.
<WA_ITEM_CREATE>-DELIV_ITEM_TO_SEARCH = <WA_ITEM_CREATE>-DELIV_ITEM.