
*&---------------------------------------------------------------------*
*& 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