生产工单缺料报表

51 篇文章 2 订阅

*&---------------------------------------------------------------------*
*& Report  ZRPT_PP_GDQL
*&
*&---------------------------------------------------------------------*
*& author    20180719
*& 工单缺料报表
*& 排除技术已完成的订单
*&---------------------------------------------------------------------*

REPORT ZRPT_PP_GDQL.

TYPE-POOLS: slis.
TABLES: AFKO,CAUFV,AFVC,CRHD,CRCO,RESB,MARC,MARD,MAKT,T001,T001L,ZCRHD_PLAN,JEST,TJ02T,AFPO,MKAL,CRTX.

TYPES:BEGIN OF I_ITAB,
  AUFNR LIKE CAUFV-AUFNR,       "工单号
  OBJNR LIKE CAUFV-OBJNR,       "对象号
  ARBPL LIKE CRHD-ARBPL,       "生产中心
  "VORNR like AFVC-VORNR,       "工序
  ARBID like AFVC-ARBID,
  AUFPL like caufv-AUFPL,       "工艺路线
  POSNR LIKE RESB-POSNR,        "bom项目
  KTEXT LIKE CRTX-KTEXT,       "生产中心描述
  MATNR LIKE RESB-MATNR,        "组件物料号
  MAKTX LIKE MAKT-MAKTX,        "物料描述
  ENMNG LIKE RESB-ENMNG,        "提货数量
  MEINS LIKE MARA-MEINS,        "计量单位
  BDMNG LIKE RESB-BDMNG,        "工单需求量
  LGORT0 LIKE RESB-LGORT,       "当前库存地 生产中心
  PPLGMNG LIKE RESB-ENMNG,      "生产中心库存数量
  MUNSG LIKE RESB-ENMNG,        "待补充数量
  WERKS LIKE marc-werks,        "供应工厂
  LGORT LIKE RESB-LGORT,        "库存地代码 供应库位
  LGPBE LIKE MARD-LGPBE,        "库存仓位
  LGMNG LIKE RESB-ENMNG,        "供应库位库存数量
  SFMNG LIKE RESB-ENMNG,        "实发数量
END OF I_ITAB.

DATA:ITAB TYPE TABLE OF I_ITAB WITH HEADER LINE.
DATA:ITAB1 TYPE TABLE OF I_ITAB WITH HEADER LINE.
*一列描述
DATA:wa_alv_filed TYPE slis_fieldcat_alv.
*列描述内表,列清单
DATA:wa_alv_filedcat TYPE slis_t_fieldcat_alv.
DATA:SDT_F LIKE sy-datum.


*******生产订单状态表******
DATA:  BEGIN OF L_TAB OCCURS 0,
  STAT LIKE JEST-STAT,
END OF L_TAB.

*******供货信息******
DATA:  BEGIN OF tb_mard OCCURS 0,
  matnr LIKE mard-matnr,
  werks LIKE mard-werks,
  lgort LIKE mard-lgort,
  lgpbe LIKE mard-lgpbe,
  LGMNG LIKE RESB-ENMNG,        "供应库位库存数量
END OF tb_mard.

*----------------------------------------------------------------------*
* 数据声明 - 结束
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* DESC:选择屏幕
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME TITLE TEXT1.
PARAMETERS: P_WERKS LIKE CAUFV-WERKS DEFAULT '2100' OBLIGATORY.      "工厂

SELECT-OPTIONS:
S_GSTRP FOR CAUFV-GSTRP,
S_AUFNR FOR AFKO-AUFNR,                        "订单号                    "物料代码
S_ARBPL FOR CRHD-ARBPL,                  "工作中心
S_BUKRS FOR T001-BUKRS,        "供货公司
S_WERKS FOR MARC-WERKS OBLIGATORY,        "供货工厂
S_LGORT FOR T001L-LGORT OBLIGATORY,  "供货库存地点
S_LGPBE FOR MARD-LGPBE,               "供货库存仓位  选择了物料就定了
S_MATNR FOR RESB-MATNR.     "组件代码
PARAMETERS:T_CHECK1 LIKE ZAS_HALT-LVORM, "是否包含满足库存物料
T_CHECK2 LIKE ZAS_HALT-LVORM."供货库位 数量为0的不显示
SELECTION-SCREEN END OF BLOCK BLOCK1.

*----------------------------------------------------------------------*
* DESC:INITIALIZATION事件
*----------------------------------------------------------------------*
INITIALIZATION.
  TEXT1 = '请输入选择条件'.

  CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
    EXPORTING
      DATE      = SY-DATUM
      MONTHS    = 0
      YEARS     = 0
      DAYS      = 7
      SIGNUM    = '+'"取值为‘+’或‘-’
    IMPORTING
      CALC_DATE = S_GSTRP-HIGH.

  CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
    EXPORTING
      DATE      = SY-DATUM
      MONTHS    = 0
      YEARS     = 0
      DAYS      = 60
      SIGNUM    = '-'"取值为‘+’或‘-’
    IMPORTING
      CALC_DATE = S_GSTRP-LOW.

  S_GSTRP-SIGN = 'I'.
  S_GSTRP-OPTION = 'BT'.
  APPEND S_GSTRP.

*----------------------------------------------------------------------*
* DESC:start-of-selection事件
*----------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM GETDATA."获取数据
  PERFORM alv_grid.

END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  ALV_GRID
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ALV_GRID .
  PERFORM fieldcat_init.
  PERFORM grid_display.
ENDFORM.                    "ALV_GRID

*----------------------------------------------------------
*取数
*
*
*----------------------------------------------------------
FORM GETDATA.
  SELECT
  RESB~MATNR        "组件物料号
  MAKT~MAKTX        "物料描述
  SUM( RESB~BDMNG ) as BDMNG      "需求量
  SUM( RESB~ENMNG ) as ENMNG     "提货数
  RESB~MEINS        "基本单位
  RESB~LGORT        "库存地代码
 " CRHD~ARBPL         "工作中心
 " CRTX~KTEXT        "工作中心描述
  CAUFV~OBJNR       " 工单状态用
  CAUFV~AUFPL
  "AFVC~VORNR
  resb~POSNR        "bom项目
  " INTO (ITAB-AUFNR,ITAB-MATNR,ITAB-MAKTX,ITAB-BDMNG,ITAB-ENMNG,ITAB-MEINS,ITAB-LGORT0,ITAB-ARBPL,ITAB-KTEXT,ITAB-OBJNR ITAB-VORNR)
  INTO (ITAB-MATNR,ITAB-MAKTX,ITAB-BDMNG,ITAB-ENMNG,ITAB-MEINS,ITAB-LGORT0,"ITAB-ARBPL,ITAB-KTEXT,
    ITAB-OBJNR,ITAB-AUFPL,ITAB-POSNR)
  FROM CAUFV
  INNER JOIN AFPO ON AFPO~AUFNR = CAUFV~AUFNR
  INNER JOIN RESB ON RESB~RSNUM = CAUFV~RSNUM AND RESB~AUFNR = CAUFV~AUFNR AND RESB~XLOEK <> 'X'
  INNER JOIN MAKT ON MAKT~MATNR = RESB~MATNR AND SPRAS = '1'
 " INNER JOIN AFVC ON AFVC~AUFPL = CAUFV~AUFPL "and  AFVC~APLZL = '1'
 " INNER JOIN CRHD ON CRHD~OBJID = AFVC~ARBID
 " INNER JOIN CRTX ON CRTX~OBJID = CRHD~OBJID
  WHERE   CAUFV~AUFNR IN S_AUFNR AND  "订单号
  CAUFV~LOEKZ = '' AND        "删除标识
  CAUFV~AUTYP = '10'     AND  "订单类型
  CAUFV~GSTRP IN S_GSTRP AND "                 CAUFV~GLTRP GE '20130401' AND "
  RESB~DUMPS = '' AND         "虚拟组件标志
  RESB~WERKS = P_WERKS AND
  RESB~MATNR IN S_MATNR "AND
  "AFVC~VORNR IN  S_VORNR AND
 " CRHD~ARBPL IN S_ARBPL
  group by RESB~MATNR MAKT~MAKTX RESB~MEINS RESB~LGORT CAUFV~AUFPL CAUFV~OBJNR resb~POSNR.      "工作中心
    "状态表 TJ02T
    "排除TECO的数据

    SELECT JEST~STAT
    INTO  CORRESPONDING FIELDS OF TABLE  L_TAB
    FROM JEST
    WHERE JEST~OBJNR = ITAB-OBJNR AND
    JEST~INACT = '' AND            "状态未激活
    JEST~STAT IN  ('I0045') ."排除 TECO 状态的

    IF SY-SUBRC NE 0.
      ITAB-OBJNR = ''.
      COLLECT ITAB.
    ENDIF.
  ENDSELECT.

  DATA:lmara like mara OCCURS 0  WITH HEADER LINE.

  LOOP AT ITAB.
    SELECT * into lmara  FROM MARA
      WHERE MARA~MATNR = ITAB-MATNR AND MARA~MTART  IN ('Z041','Z042').
      ENDSELECT.
    IF SY-SUBRC = 0.
      DELETE ITAB INDEX SY-TABIX.
      CONTINUE.
    ENDIF.

    SELECT DISTINCT AFVC~ARBID INTO ITAB-ARBID   FROM AFVC
    WHERE AFVC~AUFPL =  ITAB-AUFPL.
      IF ITAB-ARBID IS INITIAL.
        DELETE ITAB INDEX SY-TABIX.
      ELSE.
        SELECT CRHD~ARBPL CRTX~KTEXT INTO (ITAB-ARBPL,ITAB-KTEXT)  FROM CRHD
        JOIN CRTX ON CRTX~OBJID = CRHD~OBJID
        WHERE CRHD~OBJID = ITAB-ARBID.
          IF S_ARBPL IS NOT INITIAL AND ITAB-ARBPL NOT IN S_ARBPL.
            DELETE ITAB INDEX SY-TABIX.
          ELSE.
            MODIFY ITAB INDEX SY-TABIX.
          ENDIF.
        ENDSELECT.
      ENDIF.
    ENDSELECT.
  ENDLOOP.

  SORT ITAB BY AUFNR ARBPL  MATNR POSNR.

  LOOP AT ITAB.
    "零件库存地 零件仓位过滤
    SELECT matnr werks lgort lgpbe  INTO  (tb_MARD-matnr,tb_mard-werks,tb_mard-lgort,tb_mard-lgpbe ) FROM MARD
    WHERE MATNR = ITAB-MATNR AND
    WERKS IN S_WERKS AND
    LGORT IN S_LGORT AND
    LGPBE IN S_LGPBE.

      MOVE-CORRESPONDING ITAB TO ITAB1.
      ITAB1-AUFNR = ''.       "工单号
      ITAB1-OBJNR = ''.   "对象号
      ITAB1-ARBID = ''.
      ITAB1-AUFPL = ''.      "工艺路线
      ITAB1-POSNR = ''.          "bom项目
      ITAB1-LGORT = TB_MARD-LGORT.
      ITAB1-LGPBE = TB_MARD-LGPBE.
      ITAB1-WERKS = TB_MARD-WERKS.
      ITAB1-MUNSG =  ITAB-MUNSG.

      COLLECT ITAB1.
    ENDSELECT.

    IF SY-SUBRC NE 0.
      MOVE-CORRESPONDING ITAB TO ITAB1.
      COLLECT ITAB1.
    ENDIF.
  ENDLOOP.

  LOOP AT ITAB1.
    "当前工作中心库存量
    SELECT LABST INTO  ITAB1-PPLGMNG FROM MARD
    WHERE LGORT = ITAB1-LGORT0 AND MATNR = ITAB1-MATNR AND WERKS = P_WERKS.
    ENDSELECT.
    "待补充物料数量
    ITAB1-MUNSG = ITAB1-BDMNG - ITAB1-ENMNG - ITAB1-PPLGMNG.
    IF ITAB1-MUNSG <= 0.
      ITAB1-MUNSG = 0.
      "是否包含满足库存物料
      IF t_check1 NE 'X'.
        DELETE ITAB1.
        CONTINUE.
      ENDIF.
    ENDIF.

    SELECT SINGLE LABST INTO ITAB1-LGMNG FROM MARD
    WHERE MATNR = ITAB1-MATNR AND
    WERKS EQ ITAB1-WERKS AND
    LGORT EQ ITAB1-LGORT AND
    MARD~MANDT EQ '800'.
*    供货库位数量为0不显示
    IF T_CHECK2 EQ 'X' AND ITAB1-LGMNG EQ 0.
      DELETE ITAB1.
      CONTINUE.
    ENDIF.

    MODIFY ITAB1.
  ENDLOOP.

  SORT ITAB1 BY MATNR.
ENDFORM.                    "getdata


*&---------------------------------------------------------------------*
*&      Form  FIELDCAT_INIT
*&---------------------------------------------------------------------*
*       text  定义字段
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FIELDCAT_INIT .
*定义字段

*  wa_alv_filed-col_pos = 1.
*  wa_alv_filed-fieldname = 'AUFNR'.
*  wa_alv_filed-seltext_m = '生产工单'.
*  wa_alv_filed-no_zero = 'X'.
*  wa_alv_filed-just = 'R'.
*  append wa_alv_filed to wa_alv_filedcat.
*  clear wa_alv_filed.

  wa_alv_filed-col_pos = 1.
  wa_alv_filed-fieldname = 'ARBPL'.
  wa_alv_filed-seltext_m = '工作中心'.
  wa_alv_filed-no_zero = 'X'.
  wa_alv_filed-just = 'R'.
  APPEND wa_alv_filed TO wa_alv_filedcat.
  CLEAR wa_alv_filed.

  wa_alv_filed-col_pos = 2.
  wa_alv_filed-fieldname = 'KTEXT'.
  wa_alv_filed-seltext_m = '工作中心描述'.
  wa_alv_filed-no_zero = 'X'.
  wa_alv_filed-just = 'R'.
  APPEND wa_alv_filed TO wa_alv_filedcat.
  CLEAR wa_alv_filed.

*  wa_alv_filed-col_pos = 3.
*  wa_alv_filed-fieldname = 'POSNR'.
*  wa_alv_filed-seltext_m = 'BOM项目'.
*  wa_alv_filed-just = 'R'.
*  APPEND wa_alv_filed TO wa_alv_filedcat.
*  CLEAR wa_alv_filed.

  wa_alv_filed-col_pos = 4.
  wa_alv_filed-fieldname = 'MATNR'.
  wa_alv_filed-seltext_m = '组件物料代码'.
  wa_alv_filed-no_zero = 'X'.
  APPEND wa_alv_filed TO wa_alv_filedcat.
  CLEAR wa_alv_filed.

  wa_alv_filed-col_pos = 5.
  wa_alv_filed-fieldname = 'MAKTX'.
  wa_alv_filed-seltext_m = '组件物料描述'.
  wa_alv_filed-outputlen = 38.
  APPEND wa_alv_filed TO wa_alv_filedcat.
  CLEAR wa_alv_filed.

  wa_alv_filed-col_pos = 6.
  wa_alv_filed-fieldname = 'BDMNG'.
  wa_alv_filed-seltext_m = '需求量'.
*  wa_alv_filed-decimals_out = '0'.
  wa_alv_filed-just = 'C'.
  wa_alv_filed-outputlen = 8.
  APPEND wa_alv_filed TO wa_alv_filedcat.
  CLEAR wa_alv_filed.

  wa_alv_filed-col_pos = 7.
  wa_alv_filed-fieldname = 'ENMNG'.
  wa_alv_filed-seltext_m = '提货量'.
*  wa_alv_filed-decimals_out = '0'.
  wa_alv_filed-just = 'C'.
  wa_alv_filed-outputlen = 8.
  APPEND wa_alv_filed TO wa_alv_filedcat.
  CLEAR wa_alv_filed.

  wa_alv_filed-col_pos = 8.
  wa_alv_filed-fieldname = 'LGORT0'.
  wa_alv_filed-seltext_m = '当前库存地'.
*  wa_alv_filed-decimals_out = '0'.
  wa_alv_filed-just = 'C'.
  wa_alv_filed-outputlen = 8.
  APPEND wa_alv_filed TO wa_alv_filedcat.
  CLEAR wa_alv_filed.


  wa_alv_filed-col_pos = 9.
  wa_alv_filed-fieldname = 'PPLGMNG'.
  wa_alv_filed-seltext_m = '当前库存量'.
*  wa_alv_filed-decimals_out = '0'.
  wa_alv_filed-just = 'C'.
  wa_alv_filed-outputlen = 8.
  APPEND wa_alv_filed TO wa_alv_filedcat.
  CLEAR wa_alv_filed.


  wa_alv_filed-col_pos = 10.
  wa_alv_filed-fieldname = 'MUNSG'.
  wa_alv_filed-seltext_m = '待补充物料数量'.
*  wa_alv_filed-decimals_out = '0'.
  wa_alv_filed-just = 'C'.
  wa_alv_filed-outputlen = 8.
  APPEND wa_alv_filed TO wa_alv_filedcat.
  CLEAR wa_alv_filed.

  wa_alv_filed-col_pos = 11.
  wa_alv_filed-fieldname = 'WERKS'.
  wa_alv_filed-seltext_m = '供应工厂'.
  wa_alv_filed-just = 'R'.
  wa_alv_filed-outputlen = 15.
  APPEND wa_alv_filed TO wa_alv_filedcat.
  CLEAR wa_alv_filed.

  wa_alv_filed-col_pos = 12.
  wa_alv_filed-fieldname = 'LGORT'.
  wa_alv_filed-seltext_m = '供应库位'.
  wa_alv_filed-just = 'R'.
  wa_alv_filed-outputlen = 15.
  APPEND wa_alv_filed TO wa_alv_filedcat.
  CLEAR wa_alv_filed.

  wa_alv_filed-col_pos = 13.
  wa_alv_filed-fieldname = 'LGPBE'.
  wa_alv_filed-seltext_m = '供应仓位'.
  wa_alv_filed-just = 'R'.
  wa_alv_filed-outputlen = 15.
  APPEND wa_alv_filed TO wa_alv_filedcat.
  CLEAR wa_alv_filed.

  wa_alv_filed-col_pos = 14.
  wa_alv_filed-fieldname = 'LGMNG'.
  wa_alv_filed-seltext_m = '库存仓位数量'.
  wa_alv_filed-just = 'R'.
  wa_alv_filed-outputlen = 15.
  APPEND wa_alv_filed TO wa_alv_filedcat.
  CLEAR wa_alv_filed.

  wa_alv_filed-col_pos = 15.
  wa_alv_filed-fieldname = 'SFMNG'.
  wa_alv_filed-seltext_m = '实发数量'.
  wa_alv_filed-just = 'R'.
  wa_alv_filed-no_zero = 'X'.
  wa_alv_filed-outputlen = 15.
  APPEND wa_alv_filed TO wa_alv_filedcat.
  CLEAR wa_alv_filed.

ENDFORM.                    " FIELDCAT_INIT
*&---------------------------------------------------------------------*
*&      Form  GRID_DISPLAY
*&---------------------------------------------------------------------*
*       text 调用ALV显示表单数据
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GRID_DISPLAY .
*调用ALV显示表单数据
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      it_fieldcat   = wa_alv_filedcat
    TABLES
      t_outtab      = itab1[]
    EXCEPTIONS
      program_error = 1
      OTHERS        = 2.
  IF SY-SUBRC <> 0.
  ENDIF.
ENDFORM.                    " GRID_DISPLAY

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gavin_gxh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值