• 工单发料,退料等一些物料的移动


    今天遇到个小问题,引以为戒。。。就复制代码过来吧

    中间加了段查询的代码,RSART在BOM设置为中止,后继相关的时候会设置个值。。。这个值在过账的时候就很重要了。。。

    吃一堑长一智

    *&---------------------------------------------------------------------*
    *&      Form  PRM_POST
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM PRM_POST .
      DATA: LV_LINE_ID TYPE I.
      DATA:GV_ERROR(1) TYPE C.
      DATA:LV_RSNUM TYPE RESB-RSNUM.
      DATA:LV_RSART TYPE RESB-RSART."add by ly 20161101 fro 中止后继物料
    
      IF MAT_DOC IS NOT INITIAL.
        MESSAGE '请不要重复过账!' TYPE 'S' DISPLAY LIKE 'E'.
        EXIT.
      ENDIF.
    
      CLEAR:LV_LINE_ID,GMHEAD,GOODSMVT_ITEM[],GOODSMVT_SERIALNUMBER[],LT_ERRMSG[],GMCODE,MTHEAD,GT_MESSAGE[],GT_ZMMT001[].
    
      CASE GV_ZRENO+0(1).
        WHEN 'A' OR 'B'."生产领退料
          GMCODE-GM_CODE = '03'.
        WHEN 'D' OR 'E'."反冲发退料
          GMCODE-GM_CODE = '04'.
        WHEN 'C' OR 'F'."超领
          GMCODE-GM_CODE = '03'.
        WHEN 'G'."大工单领料
          GMCODE-GM_CODE = '03'.
        WHEN OTHERS.
      ENDCASE.
    
    
      GMHEAD-PSTNG_DATE = SY-DATUM."mkpf-bldat.
      GMHEAD-DOC_DATE = SY-DATUM."mkpf-budat.
      GMHEAD-PR_UNAME = SY-UNAME.
      GMHEAD-REF_DOC_NO = GV_ZRENO.
      GMHEAD-BILL_OF_LADING = GV_ZRENO.
    
      SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_ZMMT001 FROM ZMMT001 WHERE ZRENO = GV_ZRENO AND STATU = ''.
    
      LOOP AT GT_TABLE INTO GW_TABLE.
        IF GW_TABLE-ZSHLT = 0.
          CONTINUE.
        ENDIF.
        ADD 1 TO LV_LINE_ID.
        GOODSMVT_ITEM-LINE_ID = LV_LINE_ID.
        GOODSMVT_ITEM-MATERIAL = GW_TABLE-MATNR.
        IF GV_ZRENO+0(1) = 'A'.
          GOODSMVT_ITEM-PLANT  = GW_TABLE-WERKZ.
        ELSE.
          GOODSMVT_ITEM-PLANT  = GW_TABLE-WERKS.
        ENDIF.
    
        GOODSMVT_ITEM-BATCH    = GW_TABLE-CHARG.
        GOODSMVT_ITEM-STGE_LOC = GW_TABLE-FROM_LGORT.
        CLEAR:LV_RSNUM,LV_RSART.
    
        CASE GW_TABLE-ZRENO+0(1).
          WHEN 'A'."订单发料
            GOODSMVT_ITEM-MOVE_TYPE  = '261'.
            GOODSMVT_ITEM-RESERV_NO    =  GW_TABLE-RSNUM.
            GOODSMVT_ITEM-RES_ITEM    =  GW_TABLE-RSPOS.
            SELECT SINGLE RSNUM RSART  INTO (LV_RSNUM,LV_RSART)
              FROM RESB WHERE RSNUM = GW_TABLE-RSNUM
              AND RSPOS = GW_TABLE-RSPOS
              AND   MATNR = GW_TABLE-MATNR.
            IF LV_RSNUM IS INITIAL.
              GV_ERROR = 'X'.
              GS_MESSAGE-MSGID = 'ZMSG'.
              GS_MESSAGE-MSGTY = 'E'.
              GS_MESSAGE-MSGNO = '000'.
              GS_MESSAGE-MSGV1 = GW_TABLE-ZPOSN.
              GS_MESSAGE-MSGV2 = '该行订单物料已变更,不允许发料!'.
              APPEND GS_MESSAGE TO GT_MESSAGE.
            ENDIF.
            GOODSMVT_ITEM-RES_TYPE = LV_RSART.
    
          WHEN 'B'."订单退料
            GOODSMVT_ITEM-MOVE_TYPE  = '261'.
            GOODSMVT_ITEM-RESERV_NO    =  GW_TABLE-RSNUM.
            GOODSMVT_ITEM-RES_ITEM    =  GW_TABLE-RSPOS.
            GOODSMVT_ITEM-ITEM_TEXT    =  GW_TABLE-SGTXT.
            GOODSMVT_ITEM-XSTOB    = 'X'. "使用冲销移动类型标识符
            SELECT SINGLE RSNUM RSART INTO (LV_RSNUM,LV_RSART)
              FROM RESB WHERE RSNUM = GW_TABLE-RSNUM
              AND RSPOS = GW_TABLE-RSPOS
              AND   MATNR = GW_TABLE-MATNR.
            IF LV_RSNUM IS INITIAL.
              GV_ERROR = 'X'.
              GS_MESSAGE-MSGID = 'ZMSG'.
              GS_MESSAGE-MSGTY = 'E'.
              GS_MESSAGE-MSGNO = '000'.
              GS_MESSAGE-MSGV1 = GW_TABLE-ZPOSN.
              GS_MESSAGE-MSGV2 = '该行订单物料已变更,不允许发料!'.
              APPEND GS_MESSAGE TO GT_MESSAGE.
            ENDIF.
            GOODSMVT_ITEM-RES_TYPE = LV_RSART.
    
          WHEN 'C'."超领发料
            GOODSMVT_ITEM-MOVE_TYPE  = '261'.
            GOODSMVT_ITEM-ORDERID    =  GW_TABLE-AUFNR.
          WHEN 'D'."反冲发料
            GOODSMVT_ITEM-MOVE_TYPE  = '311'.
            GOODSMVT_ITEM-MOVE_STLOC = GW_TABLE-LGORT.
          WHEN 'E'."反冲退料
            GOODSMVT_ITEM-MOVE_TYPE  = '311'.
            GOODSMVT_ITEM-MOVE_STLOC = GW_TABLE-LGORT.
          WHEN 'F'."超领退料
            GOODSMVT_ITEM-MOVE_TYPE  = '261'.
            GOODSMVT_ITEM-ORDERID    =  GW_TABLE-AUFNR.
          WHEN 'G'."大工单领料
            GOODSMVT_ITEM-MOVE_TYPE  = '261'.
            GOODSMVT_ITEM-ORDERID    =  GW_TABLE-AUFNR.
          WHEN OTHERS.
        ENDCASE.
    
        IF GW_TABLE-ZSHLT < 0.
          GOODSMVT_ITEM-MOVE_TYPE  = '531'.
          GW_TABLE-ZSHLT = GW_TABLE-ZSHLT * -1.
        ENDIF.
    
    
    
        GOODSMVT_ITEM-ENTRY_QNT  = GW_TABLE-ZSHLT.  "结余数量.
        GOODSMVT_ITEM-ENTRY_UOM  = GW_TABLE-MEINS.  "
        IF GW_TABLE-ZSHLT > GW_TABLE-ZJHLT AND ( GW_TABLE-ZRENO+0(1) = 'A' OR GW_TABLE-ZRENO+0(1) = 'B' ) AND GW_TABLE-ZJHLT > 0.
          GV_ERROR = 'X'.
          MESSAGE '普通领料不能超量发料' TYPE 'S' DISPLAY LIKE 'E'.
          EXIT.
        ENDIF.
    
        IF GW_TABLE-LGORT = '' AND GOODSMVT_ITEM-MOVE_TYPE = '311' AND GW_TABLE-AUFNR <> ''.
          GV_ERROR = 'X'.
          MESSAGE '超领/退料单需要有接收库位的工单' TYPE 'S' DISPLAY LIKE 'E'.
          EXIT.
        ENDIF.
    
        APPEND GOODSMVT_ITEM.
    
        LOOP AT GT_SEA INTO GW_SEA WHERE ZRENO = GW_TABLE-ZRENO AND ZPOSN = GW_TABLE-ZPOSN.
          GOODSMVT_SERIALNUMBER-MATDOC_ITM = LV_LINE_ID.
          IF GW_SEA-SERNR IS INITIAL.
            GV_ERROR = 'X'.
            MESSAGE '请输入所有的序列号!' TYPE 'S' DISPLAY LIKE 'E'.
            EXIT.
          ENDIF.
          GOODSMVT_SERIALNUMBER-SERIALNO = GW_SEA-SERNR.
          APPEND GOODSMVT_SERIALNUMBER.
        ENDLOOP.
      ENDLOOP.
    
      IF GOODSMVT_ITEM[] IS NOT INITIAL AND GV_ERROR = ''.
        CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
          EXPORTING
            GOODSMVT_HEADER       = GMHEAD
            GOODSMVT_CODE         = GMCODE
          IMPORTING
            GOODSMVT_HEADRET      = MTHEAD
            MATERIALDOCUMENT      = MAT_DOC
          TABLES
            GOODSMVT_ITEM         = GOODSMVT_ITEM
            GOODSMVT_SERIALNUMBER = GOODSMVT_SERIALNUMBER
            RETURN                = LT_ERRMSG.
    
        IF MAT_DOC IS NOT INITIAL.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              WAIT = 'X'.
    
          LOOP AT GT_ZMMT001 INTO GW_ZMMT001.
            LOOP AT GT_TABLE INTO GW_TABLE WHERE ZRENO = GW_ZMMT001-ZRENO AND ZPOSN = GW_ZMMT001-ZPOSN.
              GW_ZMMT001-ZJHLT = GW_TABLE-ZJHLT.
              GW_ZMMT001-ZSHLT = GW_TABLE-ZSHLT.
    *          IF GW_ZMMT001-ZJHLT = 0.
              GW_ZMMT001-STATU = 'C'.
              GW_ZMMT001-ZNAME = SY-UNAME.
              GW_ZMMT001-ZDATE = SY-DATUM.
              GW_ZMMT001-ZTIME = SY-UZEIT.
    *            UPDATE ZMMT001 SET ZSHLT = GW_TABLE-ZSHLT STATU = 'C' WHERE ZRENO = GW_TABLE-ZRENO AND ZPOSN = GW_TABLE-ZPOSN.
    *          ENDIF.
            ENDLOOP.
            MODIFY GT_ZMMT001 FROM GW_ZMMT001.
          ENDLOOP.
    
          MODIFY ZMMT001 FROM TABLE GT_ZMMT001.
    *      COMMIT WORK.
    
    *      MESSAGE MAT_DOC TYPE 'S'.
          GS_MESSAGE-MSGID = 'ZMSG'.
          GS_MESSAGE-MSGTY = 'S'.
          GS_MESSAGE-MSGNO = '000'.
          GS_MESSAGE-MSGV1 = '已生成物料凭证'.
          GS_MESSAGE-MSGV2 = MAT_DOC.
          APPEND GS_MESSAGE TO GT_MESSAGE.
        ELSE.
          LOOP AT LT_ERRMSG.
            GS_MESSAGE-MSGID = LT_ERRMSG-ID.
            GS_MESSAGE-MSGTY = LT_ERRMSG-TYPE.
            GS_MESSAGE-MSGNO = LT_ERRMSG-NUMBER.
            GS_MESSAGE-MSGV1 = LT_ERRMSG-MESSAGE_V1.
            GS_MESSAGE-MSGV2 = LT_ERRMSG-MESSAGE_V2.
            GS_MESSAGE-MSGV3 = LT_ERRMSG-MESSAGE_V3.
            GS_MESSAGE-MSGV4 = LT_ERRMSG-MESSAGE_V4.
            APPEND GS_MESSAGE TO GT_MESSAGE.
          ENDLOOP.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        ENDIF.
      ENDIF.
    
      IF GT_MESSAGE[] IS NOT INITIAL.
        CALL FUNCTION 'USMD_MESSAGE_POPUP'
          EXPORTING
            IT_MESSAGE        = GT_MESSAGE[]
            IF_SAVE_NECESSARY = GV_NECESSARY.
      ENDIF.
    
    ENDFORM.
  • 相关阅读:
    数据库实验2
    jsp 配置MySQL服务器 以及数据的插入和读取
    利用JSP编程技术实现一个简单的购物车程序
    【servlet3.0新特性】Annotation注解配置
    用Servlet实现聊天室设计
    PHP fopen和fwrite函数实现创建html页面
    Django框架 之 view视图
    Django框架 之 URLconf
    Django框架 之 模板语言
    Django框架 之 ORM 常用字段和参数
  • 原文地址:https://www.cnblogs.com/sapSB/p/6018208.html
Copyright © 2020-2023  润新知