生产工单BAPI过账(BAPI_GOODSMVT_CREATE)

*&---------------------------------------------------------------------*
*& Report  ZTESTBAPI
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ztestbapi.

TYPE-POOLS:slis, vrm.
TABLES: sscrfields.
TABLES:zmmr604.

DATA:  BEGIN  OF wa_tab  OCCURS 0,
  zrkno  LIKE zmmr604-zrkno,
   END  OF wa_tab.

  DATA:save_code  LIKE sy-ucomm,
     ok_code  LIKE sy-ucomm,
     loc_msg(50),
     gmnga  LIKE afru-gmnga,
     mtsnr  LIKE  rm07m-mtsnr,
     errflag.

DATA:message  type ZMESSAGE500.
data: itab  type  table  of zmms604  with  header line.

DATA:gmhead  LIKE bapi2017_gm_head_01.

DATA:  BEGIN  OF gmcode.
         INCLUDE  STRUCTURE bapi2017_gm_code.
DATA:  END  OF gmcode.

DATA:  BEGIN  OF mthead.
         INCLUDE  STRUCTURE bapi2017_gm_head_ret.
DATA:  END  OF mthead.

DATA:  BEGIN  OF errmsg  OCCURS  10.
         INCLUDE  STRUCTURE bapiret2.
DATA:  END  OF errmsg.

DATA: mat_doc  LIKE bapi2017_gm_head_ret-mat_doc.

DATA:  BEGIN  OF itab1  OCCURS  100.
         INCLUDE  STRUCTURE bapi2017_gm_item_create.
DATA:  END  OF itab1.

SELECTION-SCREEN  BEGIN  OF  BLOCK block1  WITH  FRAME  TITLE text-001.   "选择屏幕块
PARAMETERS: p_rkno  LIKE zmmr604-zrkno.
SELECTION-SCREEN  END  OF  BLOCK block1 .

AT SELECTION-SCREEN.

START-OF-SELECTION.
   PERFORM  createdata.


*&---------------------------------------------------------------------*
*&      Form  getdata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM createdata.


*    CALL FUNCTION 'Z_CPBARCODE_SELPROCESS'
*      EXPORTING
*        zrkno          = p_rkno
*      IMPORTING
*        message_exp    = message
*      TABLES
*        zmmt_tmpur_imp = itab.

  gmhead-pstng_date = sy-datum. "mkpf-bldat.
  gmhead-doc_date = sy-datum. "mkpf-budat.
  gmhead-pr_uname = sy-uname.

  gmcode-gm_code =  '02'.

select into corresponding  fields  of  table itab  from zmmr604  where zrkno = p_rkno.

   LOOP  AT itab.
*    write: message.
*   WRITE: itab-matnr, itab-zkbsl.
  itab1-material = itab-matnr.
  itab1-plant =  '1000'.
  itab1-stge_loc = itab-lgort.
  itab1-move_type =  '101'.
  itab1-spec_stock =  ''.
  itab1-mvt_ind    =  'F'.
  itab1-entry_qnt = itab-zkbsl.
  itab1-entry_uom = itab-meins.
  itab1-ORDERID = itab-aufnr.
  itab1-move_plant =  '1000'.
  itab1-QUANTITY = itab-zkbsl.
  itab1-BASE_UOM = itab-meins.
   append itab1.
  ENDLOOP.

     CALL  FUNCTION  'BAPI_GOODSMVT_CREATE'
     EXPORTING
      goodsmvt_header  = gmhead
      goodsmvt_code    = gmcode
     IMPORTING
      goodsmvt_headret = mthead
      materialdocument = mat_doc
     TABLES
      goodsmvt_item    = itab1
       return           = errmsg.

   LOOP  AT errmsg.
     CLEAR loc_msg.
     CONCATENATE  '过帐成功!' errmsg-message  INTO loc_msg.
     IF errmsg-type  EQ  'E'.
       MESSAGE errmsg-message  TYPE  'E'.
      errflag =  'X'.
    ELSE.
       MESSAGE loc_msg  TYPE  'S'.
    ENDIF.
  ENDLOOP.


   IF errflag  IS INITIAL.
     COMMIT  WORK  AND WAIT.
     CLEAR loc_msg.
     IF sy-subrc  NE  0.
       MESSAGE  '过帐操作出现错误,请稍后重试!'  TYPE  'E'.
      EXIT.
    ELSE.
       CONCATENATE  '物料凭证:' mat_doc  '已成功创建!'  INTO loc_msg.
       MESSAGE i000(znyj13)  WITH loc_msg.
      endif.
endif.

ENDFORM.                    "getdata





BAPI实例之003--使用BAPI函数做工单入库

REPORT  Y1009.
DATA:GOODSMVT_HEADER  LIKE  BAPI2017_GM_HEAD_01,
    GOODSMVT_CODE  LIKE  BAPI2017_GM_CODE,
     GOODSMVT_HEADRET LIKE  BAPI2017_GM_HEAD_RET,
     MATERIALDOCUMENTTYPE  BAPI2017_GM_HEAD_RET-MAT_DOC,
     MATDOCUMENTYEAR  TYPE  BAPI2017_GM_HEAD_RET-DOC_YEAR,
     GOODSMVT_ITEM TYPE STANDARD TABLEOF  BAPI2017_GM_ITEM_CREATE,
     W_GOODSMVT_ITEM TYPE BAPI2017_GM_ITEM_CREATE,
     RETURN TYPE STANDARD TABLE OF  BAPIRET2,
     W_RETURN TYPE BAPIRET2.

MOVE SY-DATUM TO GOODSMVT_HEADER-PSTNG_DATE.
MOVE SY-DATUM TO GOODSMVT_HEADER-DOC_DATE.
MOVE '02' TO GOODSMVT_CODE.

CLEAR: GOODSMVT_HEADRET,MATERIALDOCUMENT,MATDOCUMENTYEAR,RETURN.

*MOVE 'DY10'      TO W_GOODSMVT_ITEM-PLANT.
MOVE '0001'      TO W_GOODSMVT_ITEM-STGE_LOC.
MOVE '101'       TO W_GOODSMVT_ITEM-MOVE_TYPE.
MOVE '1'         TO W_GOODSMVT_ITEM-ENTRY_QNT.
MOVE '000001009073'   TO W_GOODSMVT_ITEM-ORDERID.
MOVE 'F'         TO W_GOODSMVT_ITEM-MVT_IND.
APPEND W_GOODSMVT_ITEM TO GOODSMVT_ITEM.

CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
  EXPORTING
    GOODSMVT_HEADER              = GOODSMVT_HEADER
    GOODSMVT_CODE                = GOODSMVT_CODE
*   TESTRUN                      = ' '
*   GOODSMVT_REF_EWM             =
  IMPORTING
    GOODSMVT_HEADRET             = GOODSMVT_HEADRET
    MATERIALDOCUMENT             = MATERIALDOCUMENT
    MATDOCUMENTYEAR              = MATDOCUMENTYEAR
  TABLES
    GOODSMVT_ITEM                = GOODSMVT_ITEM
*   GOODSMVT_SERIALNUMBER         =
    RETURN                       = RETURN
*   GOODSMVT_SERV_PART_DATA       =
*   EXTENSIONIN                  =
          .
IF MATERIALDOCUMENT IS NOT INITIAL.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*   EXPORTING
*     WAIT          =
*   IMPORTING
*     RETURN        =
            .
  WRITE:/ MATERIALDOCUMENT.
ELSE.
  LOOP AT RETURN INTO W_RETURN.
    WRITE:/ W_RETURN-TYPE,
            W_RETURN-ID,
            W_RETURN-NUMBER,
            W_RETURN-MESSAGE.
  ENDLOOP.
ENDIF.

 


你可能感兴趣的:(SAP)