BAPI_GOODSMVT_CREATE工单超领发料程式

原文地址:http://blog.sina.com.cn/s/blog_50e6797e01009fth.html

 

由于工厂需要这样的需求,所以我通过对BAPI_GOODSMVT_CREATE的分析,了解到了工单超领发料动作在这个bapi是怎么实现的了.下面我实现的过程,拿出来和大家一起分享,如果大家还有其他的建议,请告知我,谢谢:

* GMCODE Table T158G - 01 - MB01 - Goods Receipts for Purchase Order
                     02 - MB31 - Goods Receipts for Prod Order
                     03 - MB1A - Goods Issue
                     04 - MB1B - Transfer Posting
                     05 - MB1C - Enter Other Goods Receipt
                     06 - MB11
*
* Domain: KZBEW - Movement Indicator
     Goods movement w/o reference
B - Goods movement for purchase order
F - Goods movement for production order
L - Goods movement for delivery note
K - Goods movement for kanban requirement (WM - internal only)
O - Subsequent adjustment of "material-provided" consumption
W - Subsequent adjustment of proportion/product unit material

*&---------------------------------------------------------------------*
*& Report  ZCNRPP0018                                                  *
*& description: AKMC WO 超领物料自动过帐                              *
*& author  : tom.bai                                                   *
*& date: 20080309                                                      *
*&---------------------------------------------------------------------*

REPORT  ZCNRPP0018                              .

TABLES: RESB,
        RLGRAP,
        AFKO.
* FLAG
DATA: FLAG(4).


DATA:BEGIN OF LT_ITEM OCCURS 0,
      AUFNR LIKE AFKO-AUFNR,
      MATNR LIKE RESB-MATNR,
      ERFMG LIKE RESB-ERFMG.
DATA:END OF LT_ITEM.

*Material Document Header Data

DATA: LT_GM_HEAD TYPE STANDARD TABLE OF BAPI2017_GM_HEAD_01,
      L_GM_HEAD  LIKE BAPI2017_GM_HEAD_01,

* New Key Assignment GM_CODE to Transaction of Inv. Mgmt
      LT_GM_CODE TYPE STANDARD TABLE OF BAPI2017_GM_CODE,
      L_GM_CODE  LIKE BAPI2017_GM_CODE,

      LT_MAT_DOC TYPE STANDARD TABLE OF BAPI2017_GM_HEAD_RET,
      L_MAT_DOC LIKE BAPI2017_GM_HEAD_RET,


      LT_GM_ITEM TYPE STANDARD TABLE OF BAPI2017_GM_ITEM_CREATE,
      L_GM_ITEM LIKE BAPI2017_GM_ITEM_CREATE,

 

      LT_RETURN TYPE STANDARD TABLE OF BAPIRET2,
      L_RETURN  TYPE BAPIRET2,

      L_ERRFLAG(1) TYPE C.
*以发料小于需求量,
DATA: LT_GM_ITEM1 TYPE STANDARD TABLE OF BAPI2017_GM_ITEM_CREATE,
      L_GM_ITEM1 LIKE BAPI2017_GM_ITEM_CREATE.

 

 


SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_FILE LIKE RLGRAP-FILENAME DEFAULT 'C:/WOexcess.TXT'.
PARAMETERS: P_INDEX AS CHECKBOX .
SELECTION-SCREEN END OF BLOCK B1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
  PERFORM GET_FILE_NAME CHANGING P_FILE.

INITIALIZATION.
  PERFORM INITIAL_ITAB.

START-OF-SELECTION.
  PERFORM GET_DATA.
  PERFORM PROCESS_DATA.
  PERFORM CALL_BAPI_PROCESS.

*&---------------------------------------------------------------------*
*&      Form  GET_FILE_NAME
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
     <--P_P_FILE  text
*----------------------------------------------------------------------*
FORM GET_FILE_NAME  CHANGING P_FILE.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      MASK             = '*.txt.'
      MODE             = '0'
      TITLE            = '选取数据文件路径'
    IMPORTING
      FILENAME         = P_FILE
    EXCEPTIONS
      INV_WINSYS       = 1
      NO_BATCH         = 2
      SELECTION_CANCEL = 3
      SELECTION_ERROR  = 4
      OTHERS           = 5.
ENDFORM.                    " GET_FILE_NAME
*&---------------------------------------------------------------------*
*&      Form  INITIAL_ITAB
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
-->  p1        text
<--  p2        text
*----------------------------------------------------------------------*
FORM INITIAL_ITAB .
  CLEAR:LT_ITEM,L_GM_HEAD,L_GM_CODE,L_MAT_DOC,L_GM_ITEM,L_RETURN.
  REFRESH: LT_ITEM,LT_GM_HEAD, LT_GM_CODE, LT_MAT_DOC ,LT_GM_ITEM, LT_RETURN.
  FLAG = 'YES'.
ENDFORM.                    " INITIAL_ITAB
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
-->  p1        text
<--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .
  CALL FUNCTION 'WS_UPLOAD'
    EXPORTING
      FILENAME     = P_FILE
      FILETYPE     = 'DAT'
    TABLES
      DATA_TAB     = LT_ITEM.
  IF SY-SUBRC NE 0.
    EXIT.
  ELSE.
    LOOP AT LT_ITEM.
      CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
        EXPORTING
          INPUT      = LT_ITEM-MATNR
        IMPORTING
          OUTPUT     = LT_ITEM-MATNR.
      MODIFY LT_ITEM.
    ENDLOOP.
  ENDIF.

ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  PROCESS_DATA
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
-->  p1        text
<--  p2        text
*----------------------------------------------------------------------*
FORM PROCESS_DATA .
  LOOP AT LT_ITEM.
    SELECT SINGLE RSNUM INTO AFKO-RSNUM   "得到预留单号
      FROM AFKO
      WHERE AUFNR = LT_ITEM-AUFNR.
    L_GM_ITEM-RESERV_NO = AFKO-RSNUM.
    L_GM_ITEM-MATERIAL  = LT_ITEM-MATNR.
    L_GM_ITEM-ORDERID   = LT_ITEM-AUFNR.
    L_GM_ITEM-ENTRY_QNT = LT_ITEM-ERFMG.
    APPEND L_GM_ITEM TO LT_GM_ITEM.
    CLEAR :L_GM_ITEM,LT_ITEM.
  ENDLOOP.

  LOOP AT LT_GM_ITEM INTO L_GM_ITEM.
    SELECT SINGLE RSPOS WERKS LGORT ENMNG BDMNG
      INTO (RESB-RSPOS,RESB-WERKS,RESB-LGORT,RESB-ENMNG,RESB-BDMNG) "得到预留单项号,工厂,库位
      FROM RESB
      WHERE RSNUM = L_GM_ITEM-RESERV_NO
        AND MATNR = L_GM_ITEM-MATERIAL.
    IF RESB-ENMNG >= RESB-BDMNG.
      L_GM_ITEM-RES_ITEM = RESB-RSPOS.
      L_GM_ITEM-PLANT = RESB-WERKS.
      L_GM_ITEM-STGE_LOC = RESB-LGORT.
      L_GM_ITEM-MOVE_TYPE  = '261'.
      L_GM_ITEM-ENTRY_UOM  = 'ST'.
      L_GM_ITEM-IND_PROPOSE_QUANX = 'X'.
      MODIFY LT_GM_ITEM FROM L_GM_ITEM.
    ELSEIF RESB-ENMNG < RESB-BDMNG.
      L_GM_ITEM1-ORDERID   = L_GM_ITEM-ORDERID.
      L_GM_ITEM1-MATERIAL  = L_GM_ITEM-MATERIAL.
      L_GM_ITEM1-ENTRY_QNT = L_GM_ITEM-ENTRY_QNT.
      APPEND L_GM_ITEM1 TO LT_GM_ITEM1.
      CLEAR L_GM_ITEM1.
    ENDIF.
  ENDLOOP.
  IF P_INDEX = 'X'.
    LOOP AT LT_GM_ITEM INTO L_GM_ITEM.
      WRITE:/ L_GM_ITEM-ORDERID ,L_GM_ITEM-MATERIAL,L_GM_ITEM-RESERV_NO,L_GM_ITEM-RES_ITEM,L_GM_ITEM-ENTRY_QNT.
    ENDLOOP.

  ENDIF.
ENDFORM.                    " PROCESS_DATA
*&---------------------------------------------------------------------*
*&      Form  CALL_BAPI_PROCESS
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
-->  p1        text
<--  p2        text
*----------------------------------------------------------------------*
FORM CALL_BAPI_PROCESS .

*SET BAPI HEAD
  L_GM_HEAD-PSTNG_DATE = SY-DATUM.
  L_GM_HEAD-DOC_DATE    = SY-DATUM.
  L_GM_HEAD-PR_UNAME    = SY-UNAME.


  IF P_INDEX = 'X'.
    CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
      EXPORTING
        GOODSMVT_HEADER = L_GM_HEAD
        GOODSMVT_CODE   = '03'
        TESTRUN         = P_INDEX
      IMPORTING
        GOODSMVT_HEADRET  = L_MAT_DOC
      TABLES
        GOODSMVT_ITEM     = LT_GM_ITEM
        RETURN            = LT_RETURN.
     LOOP AT LT_RETURN INTO L_RETURN .
       IF L_RETURN-TYPE = 'E'.
         IF SY-TABIX = 1.
           SKIP.
         ENDIF.
         WRITE:/ L_RETURN-TYPE, L_RETURN-ID,L_RETURN-MESSAGE.
         CLEAR L_RETURN.
       ENDIF.
     ENDLOOP.
   ELSEIF P_INDEX NE 'X'.
     CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          GOODSMVT_HEADER = L_GM_HEAD
          GOODSMVT_CODE   = '03'
         TESTRUN         = P_INDEX
        IMPORTING
          GOODSMVT_HEADRET  = L_MAT_DOC
        TABLES
          GOODSMVT_ITEM     = LT_GM_ITEM
          RETURN            = LT_RETURN.
         
         
     LOOP AT LT_RETURN INTO L_RETURN .
       IF L_RETURN-TYPE = 'E'.
         FLAG = 'NO'.
       ENDIF.
     ENDLOOP.
     IF FLAG = 'YES'.
       CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            WAIT = 'X'.
        WRITE:/ L_MAT_DOC-MAT_DOC,L_MAT_DOC-DOC_YEAR.
     ELSEIF FLAG = 'NO'.
       MESSAGE I005(YMESS) WITH 'ERROR'.
     ENDIF.
   ENDIF.
ENDFORM.                    " CALL_BAPI_PROCESS

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BAPI_GOODSMVT_CREATE是一个用于生成物料凭证的BAPI。它有多个参数需要提供值,其中包括goodsmvt_headergoodsmvt_code和gt_good等。\[2\]在调用该BAPI时,需要将这些参数赋予相应的值。goodsmvt_header用于存储过账日期、操作者和抬头文本等抬头数据,goodsmvt_code用于指定使用的过账事务码。gt_good是一个重要的表,用于存储要进行货物移动的物料、数量等信息。调用BAPI后,可以通过返回参数goodsmvt_headret获取物料凭证编号和年份。\[2\] 以下是一个示例代码,展示了如何使用BAPI_GOODSMVT_CREATE进行物料凭证的生成: ```ABAP DATA: goodsmvt_header TYPE bapi2017_gm_head_01, goodsmvt_code TYPE bapi2017_gm_code, gt_good TYPE TABLE OF bapi2017_gm_item_create, gw_good TYPE bapi2017_gm_item_create, goodsmvt_headret TYPE bapi2017_gm_head_ret, return LIKE TABLE OF bapiret2 WITH HEADER LINE, materialdocument TYPE bapi2017_gm_head_ret-mat_doc, matdocumentyear TYPE bapi2017_gm_head_ret-doc_year, ev_msgty TYPE BAPI_MTYPE, ev_mestx TYPE BAPI_MSG. "设置好goodsmvt_headergoodsmvt_code和gt_good的值 CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = goodsmvt_header goodsmvt_code = goodsmvt_code TABLES goodsmvt_item = gt_good IMPORTING goodsmvt_headret = goodsmvt_headret materialdocument = materialdocument matdocumentyear = matdocumentyear return = return. "处理返回的日志消息 LOOP AT return WHERE type = 'A' OR type = 'E'. ev_msgty = 'E'. ev_mestx = return-message. EXIT. ENDLOOP. ``` 以上是一个示例代码,展示了如何使用BAPI_GOODSMVT_CREATE进行物料凭证的生成。你可以根据自己的需求,设置相应的参数值,并根据返回的日志消息进行处理。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [金色传说:SAP-BAPI-BAPI_GOODSMVT_CREATE创建物料凭证bapi的使用及参数值讲解](https://blog.csdn.net/weixin_43675474/article/details/122258115)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值