Disculpen me comí el nombre de la bapi, todo funciona perfecto hasta que por ejemplo me salta alguna validación en el cuerpo de la BAPI, entonces por mas q la corrija es como que queda en un estado en q no me permite seguir y no me reinicia el estado interno de la transacción, acá va el procedimiento
FORM persistirMovimiento.
DATA:
posActual TYPE I,
e_Error like bapiret2,
mensage TYPE STRING,
loc_e_lineas LIKE e_LINEA_DOCU ,
loc_e_serials LIKE e_nrosDeSerie ,
sel_rows TYPE lvc_t_roid,
sel_row TYPE lvc_s_roid,
e_serial LIKE e_LINEA_SERIAL .
REFRESH sel_rows.
CLEAR sel_row.
IF e_LINEAS IS INITIAL.
MESSAGE ID 'ZMIGO_EXCEPCIONES' TYPE 'S' NUMBER '002'.
EXIT.
ENDIF.
posActual = 0.
CLEAR t_mensages.
CLEAR l_goodsmvt_header.
l_goodsmvt_header-pstng_date = FE_FECHACONT.
l_goodsmvt_header-doc_date = FE_DOCUMENTO .
l_goodsmvt_header-pr_uname = sy-uname.
l_goodsmvt_header-header_txt = TXT_TEXTOCAB.
l_goodsmvt_header-ref_doc_no = ''.
* Tipo de movimiento
l_goodsmvt_code = '01'.
* Posiciones
CLEAR i_goodsmvt_item.
* recorro cada linea del pedido
LOOP AT e_LINEAS INTO loc_e_lineas.
* verifico si se encuentra marcado como OK
IF loc_e_lineas-OK = 'X'.
CLEAR loc_e_serials.
posActual = posActual + 1.
cantRecepcionada = 0.
loc_e_serials = loc_e_lineas-NROS .
DESCRIBE TABLE loc_e_serials.
cantRecepcionada = SY-TFILL.
i_goodsmvt_item-plant = TXT_IDCENTRO .
i_goodsmvt_item-stge_loc = loc_e_lineas-ALMAC.
i_goodsmvt_item-VENDOR = loc_e_lineas-NROPRO.
i_goodsmvt_item-move_type = TXT_IDMOV .
i_goodsmvt_item-MVT_IND = 'B'.
i_goodsmvt_item-PO_NUMBER = loc_e_lineas-NROPO.
i_goodsmvt_item-po_item = loc_e_lineas-POSPO.
i_goodsmvt_item-ENTRY_QNT = cantRecepcionada .
APPEND i_goodsmvt_item.
* Numeros de serie
LOOP AT loc_e_serials INTO e_serial.
i_goodsmvt_serial-MATDOC_ITM = posActual.
i_goodsmvt_serial-SERIALNO = e_serial-NRO.
append i_goodsmvt_serial.
ENDLOOP.
ENDIF.
ENDLOOP.
IF posActual = 0.
MESSAGE ID 'ZMIGO_EXCEPCIONES' TYPE 'S' NUMBER '010'.
EXIT.
ENDIF.
CLEAR i_return.
* Persistencia del documento de ingreso
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = l_goodsmvt_header
goodsmvt_code = l_goodsmvt_code
testrun = ''
IMPORTING
goodsmvt_headret = l_goodsmvt_headret
materialdocument = l_materialdocument
matdocumentyear = l_matdocumentyear
TABLES
goodsmvt_item = i_goodsmvt_item
GOODSMVT_SERIALNUMBER = i_goodsmvt_serial
return = i_return .
break-point.
IF SY-SUBRC = 0.
describe table i_return lines sy-tfill.
append i_return to t_mensages.
IF i_return-TYPE <> 'E'.
if sy-tfill = 0.
COMMIT WORK.
MESSAGE ID 'ZMIGO_EXCEPCIONES' TYPE 'S' NUMBER '006' WITH
l_materialdocument.
PERFORM reiniciarMovimiento.
endif.
ELSE.
CALL SCREEN 001 starting at 15 10 ENDING AT 70 15 .
ENDIF.
ENDIF.
ENDFORM.
|