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

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

中间加了段查询的代码,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.
时间: 2024-08-24 20:01:54

工单发料,退料等一些物料的移动的相关文章

工单发料态别(转)

在定义BOM的时候,我们需要设定,工单供货的方式(Supply Type).Push 推式发料,必须手工通过界面做发料,价格昂贵的,需严格控制数量,或者波动比较大的物料.推式组件根据需要可被直接发放至离散任务和重复性计划.虽然在制品管理系统会默认与组件关联的供应子库存,但您仍可以指定从中发放推式组件的子库存. Assembly Pull 拉式发料,装配件完工或报废时自动按标准消耗量触发 消耗比较稳定的物料.在在制品管理系统中完成装配件后,装配拉式组件即被发放至离散任务和重复性计划.这些组件是从分

懒得写了,直接复制代码了。。。跨公司发料到订单和退料

FORM frm_execute . CLEAR:gw_return, gt_return,gw_gb008,gw_gb008_i,gt_gb008,gt_gb008_i. PERFORM frm_check_input. PERFORM frm_get_basic_data. " LOOP AT gt_output INTO gw_output. CLEAR g_err_flag. IF p_fl EQ 'X'. PERFORM frm_create_sto_po. "创建STO采购

呐料涡料熊ia2kz22crzo918

沈策与绯羽焱之间的配合显然不是一天两天了.就在他施展第三魂技的同时,绯羽焱的第二.第三两个魂技也已经交替使用了出来.第二魂技是回馈炽虎自身的."周老师,班长不是要选举的么?"戴华斌突然说道.在王冬和萧萧的精神感知之中,立体图像中出现了一个明显有着浓郁魂力波动的存在.那是一道略微有些模糊的身影,刚刚进入到霍雨浩的精神探测共享范畴.似乎已经现了他们,正以惊人的度向他们这边赶来.在寒冷的北风吹拂下,他整个人被冻得全身通红,就像是煮熟的虾子一般.而其他五人呢?他们都是武魂系的核心弟子,武魂系的

具体解释EBS接口开发之WIP模块接口

整体说明 文档目的 本文档针对WIP模块业务功能和接口进行分析和研究,对採用并发请求方式和调用API方式分别进行介绍 内容 WIP模块经常使用标准表简单介绍 WIP事物处理组成 WIP相关业务流程 WIP相关API研究事例 (十)參考文档(七)採购相关的一些知识 (一)WIP模块经常使用标准表简单介绍 1.1   经常使用标准表 例如以下表中列出了与WIP导入相关的表和说明: 表名 说明 其它信息 BOM_STRUCTURES_B BOM头信息 BOM_COMPONENTS_B BOM组件信息

所有标准API

序号 系统版本 模块 应用场景 类型 API/接口 参数规格 样例代码 备注 登记者 登记时间 关键字 1 12.1.3 AP 付款核销 API ap_pay_invoice_pkg.ap_pay_invoice 赵杨 2013/3/30 付款/核销 2 12.1.3 AP 应付发票审批 API ap_approval_pkg.approval 赵杨 2013/3/30 发票/审批 3 12.1.3 AP 预付款核销 API ap_prepay_pkg.apply_prepay_fr_prepa

详解EBS接口开发之WIP模块接口

总体说明 文档目的 本文档针对WIP模块业务功能和接口进行分析和研究,对采用并发请求方式和调用API方式分别进行介绍 内容 WIP模块常用标准表简介 WIP事物处理组成 WIP相关业务流程 WIP相关API研究事例 (十)参考文档(七)采购相关的一些知识 (一)WIP模块常用标准表简介 1.1   常用标准表 如下表中列出了与WIP导入相关的表和说明: 表名 说明 其他信息 BOM_STRUCTURES_B BOM头信息 BOM_COMPONENTS_B BOM组件信息 BOM_OPERATIO

领料还是发料

根据是仓库人员还是生产人员发起流程又可分为领料制和发料制,根据领料单的所包括的内容可分配套领料.分仓领料.受托领料.合并领料.工序领料.其实,发料制与领料制对人员要求我觉得没有多大区别,对系统要求比较大,从领料制到发料制人员架构基本没变化.而在一般MRP模式下更多希望做到发料制,而在精益制造模式下更多是领料制. 主要区别如下: 一.领料:领料制是指由车间填写领料单,经过生产主管.计划总管及仓库总管人员的审核后,再由车间领料人员到仓库领料,仓库人员在收到领料单后,必须在规定的时间内,按领料单上所列

SAP 物料 移动类型

[转自 http://blog.sina.com.cn/s/blog_494f9a6b0102edf7.html] SAP 物料 移动类型 (2013-12-03 10:15:01) 转载▼   分类: SAP MvT 移动类型文本 含义 一般用途 T-code 101 GR 收货 直接收货 工单入库,购买成品入库 MIGO/CO11N 102 用于PO冲销的收货 冲销直接收货 冲销工单入库 MIGO/CO11N 103 进入冻结库存的收货 收入质检仓 送检单 MIGO 104 到冻结冲销的收货

EAM系统工单管理

     一.EAM系统工单管理目标 1)通过EAM管理系统的应用来规范整个业务流程: 2)记录日常维修相关的业务数据和信息: 3)按照缺陷处理.计划检修.预防性维修.预测性维修几种可能模式,以提高维修效率.降低总体维护成本为目标. 4)建立有效的工单管理系统,了解设备状况.通过预防性维护方案提高设备可靠性,通过设备的状态监控实时监测设备等手段来达到设备的科学化管理. 5)设备维修管理主要以工单的审批.执行为主线,通过最先进的计算机和网络技术,将工单中涉及到的工作流程.人力资源.物资(库存.采购