SAP CO11N/CO15工单报工发料校验

1.需求

  • 生产订单报工的比例不能大于发料的最小比例

2.增强点

  • 增强对象:CONFPP02 PP定单确认:客户特殊输入检查1
  • 增强出口:EXIT_SAPLCORF_102
    0
    1

3.增强代码

  DATA: BEGIN OF LT_RESB OCCURS 0,
          AUFNR LIKE RESB-AUFNR,        "订单号
          MATNR LIKE RESB-MATNR,        "物料号
          BDMNG LIKE RESB-BDMNG,        "发料总需求数量
          ENMNG LIKE RESB-ENMNG,        "已发料数量
          XLOEK LIKE RESB-XLOEK,        "删除标记
          FLBL  TYPE P DECIMALS 8,      "单个成品需物料数量
          FLSL  TYPE P DECIMALS 8,      "已发料数量/单个成品需物料数量 = 可制造成品数量
        END OF LT_RESB.

  DATA: LV_NUM   TYPE P DECIMALS 0,
        LV_LMNGA TYPE AFRU-LMNGA,
        LV_XMNGA TYPE AFRU-XMNGA.

  IF ( SY-TCODE = 'CO11N'AND AFRUD_IMP-VORNR = '0010' ) OR SY-TCODE = 'CO15'.		"检查工序0010,以后工序标准程序会检查前置工序允许后置工序报工的数量
    CASE SY-TCODE.
      WHEN 'CO11N'.                          "工序报工,根据工序报工数量限制
        SELECT SUM( LMNGA )
          FROM AFRU
          INTO @LV_LMNGA                      "已报工数量
          WHERE AUFNR = @CAUFVD_IMP-AUFNR      "订单
          AND VORNR = @AFRUD_IMP-VORNR        "工序
          AND STOKZ = @SPACE                  "排除已被冲销和被取消的确认行
          AND STZHL = @SPACE.

        SELECT SUM( XMNGA )
          FROM AFRU
          INTO @LV_XMNGA                      "已报废数量
          WHERE AUFNR = @CAUFVD_IMP-AUFNR      "订单
          AND VORNR = @AFRUD_IMP-VORNR        "工序
          AND STOKZ = @SPACE                  "排除已被冲销和被取消的确认行
          AND STZHL = @SPACE.

      WHEN 'CO15'.                            "整体报工,根据订单报工数量限制
        SELECT SUM( LMNGA )                   "已报工数量
          FROM AFRU
          INTO @LV_LMNGA
          WHERE AUFNR = @CAUFVD_IMP-AUFNR
          AND STOKZ = @SPACE
          AND STZHL = @SPACE.

        SELECT SUM( XMNGA )                   "已报废数量
          FROM AFRU
          INTO @LV_XMNGA
          WHERE AUFNR = @CAUFVD_IMP-AUFNR
          AND STOKZ = @SPACE
          AND STZHL = @SPACE.
      WHEN OTHERS.
    ENDCASE.

    SELECT SINGLE GAMNG                      "订单数量
         INTO @DATA(LV_GAMNG)
         FROM AFKO
        WHERE AUFNR = @CAUFVD_IMP-AUFNR.

    SELECT AUFNR MATNR ENMNG BDMNG XLOEK     "预留排除反冲、删除、虚拟键
          INTO CORRESPONDING FIELDS OF TABLE LT_RESB FROM RESB
          WHERE AUFNR = CAUFVD_IMP-AUFNR      "订单
          AND RGEKZ = SPACE
          AND XLOEK = SPACE
          AND DUMPS = SPACE.

    LOOP AT LT_RESB.
      LT_RESB-FLBL = LT_RESB-BDMNG / LV_GAMNG.          "单个成品需物料数量 = 发料总需求数量(制造订单数量成品) / 订单数量
      LT_RESB-FLSL = LT_RESB-ENMNG / LT_RESB-FLBL.      "已发料数量/单个成品需物料数量 = 可制造成品数量
      MODIFY LT_RESB.
    ENDLOOP.

    SORT LT_RESB[] BY FLSL ASCENDING.
    CLEAR LT_RESB.
    READ TABLE LT_RESB[] INTO LT_RESB INDEX 1.           "按照

    LV_NUM = FLOOR( LT_RESB-FLSL - LV_LMNGA - LV_XMNGA )."可报工数量,向下取整  预留发料可制造数量 - 已报工数量 - 已报废数量
    IF AFRUD_IMP-LMNGA + AFRUD_IMP-XMNGA  > LV_NUM.      "正常报工数量 + 报废数量 > 可报工数量(大于错误)
      MESSAGE E000(ZPP01) WITH LV_NUM.
    ENDIF.

  ENDIF.

2

猜你喜欢

转载自blog.csdn.net/qq_30797051/article/details/120504334
SAP