INCLUDE ztop1.
TABLES:marc,mvke,pbim,pbed,mard,zzj_pp_001.
TYPES:BEGIN OF ty_alv_itab.
INCLUDE STRuCTURE zzj_pp_001.
TYPES:lv(4),
END OF ty_alv_itab.
TYPES:BEGIN OF ty_pbim,
matnr like pbim-matnr,
werks like pbim-werks,
plnmg like pbed-plnmg,
END OF ty_pbim.
TYPES:BEGIN OF ty_matnr,
matnr TYPE marc-matnr,
werks TYPE marc-werks,
plifz TYPE marc-plifz,
END OF ty_matnr.
DATA:g_itab_fieldcat_lvc TYPE lvc_t_fcat,
g_itab_sort_lvc TYPE lvc_t_sort.
DATA:ok_code_9000 LIKE sy-datum.
DATA:save_ok LIKE sy-datum.
DATA:g_ischange,
g_tabnm(30) TYPE c VALUE 'ZZJ_PP_001',
GS_variant TYPE disvariant,
gs_alv_itab TYPE ty_alv_itab,
gt_alv_itab TYPE TABLE OF ty_alv_itab WITH HEADER LINE,
gt_type_dec TYPE TABLE OF dd07t WITH HEADER LINE,
gt_fieldcat TYPE lvc_t_fcat,
gs_layout TYPE lvc_s_layo,
gt_exclude TYPE ui_functions,
wcl_container TYPE REF TO cl_gui_docking_container,
wcl_alv TYPE REF TO cl_gui_alv_grid.
INCLUDE zs01.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t1.
SELECT-OPTIONS:s_werks FOR marc-werks OBLIGATORY MODIF ID zwk,
s_matnr FOR marc-matnr.
PARAMETERS:p_budat LIKE marc-mmstd DEFAULT sy-datum.
SELECTION-SCREEN END OF BLOCK b1.
INCLUDE ze01.
INITIALIZATION.
t1 = '数据库选择'.
at SELECTION-SCREEN .
START-OF-SELECTION.
IF p_budat = sy-datum.
PERFORM frm_get_data.
ELSE.
MESSAGE e000(zzj_001) WITH '请输入正确的日期'.
ENDIF.
PERFORM dispay_data.
PERFORM display_data.
INCLUDE zf01.
FORM frm_get_data.
CLEAR:gt_alv_itab,gt_alv_itab[].
DATA:lt_mard TYPE TABLE OF mard WITH HEADER LINE,
lt_pbim TYPE TABLE OF ty_pbim WITH HEADER LINE,
lt_vbap TYPE TABLE OF vbap WITH HEADER LINE,
lt_pp TYPE TABLE OF zzj_pp_001 WITH HEADER LINE,
lt_marc TYPE TABLE OF marc WITH HEADER LINE,
lt_matnr TYPE TABLE OF ty_matnr WITH HEADER LINE.
SELECT
t01~matnr
t01~werks
t02~maktx
FROM marc AS t01
INNER JOIN makt AS t02 on t01~matnr = t02~matnr AND t02~spras = '1'
INNER JOIN t001w as t03 on t01~werks = t03~werks
INNER JOIN mara as t04 on t01~matnr = t04~matnr
INto CORRESPONDING FIELDS OF TABLE gt_alv_itab
WHERE t01~werks IN s_werks
AND t01~matnr IN s_matnr
AND t04~mtart = 'FERT'.
SELECT
matnr
werks
plifz
FROM marc
into CORRESPONDING FIELDS OF TABLE lt_matnr
WHERE matnr IN s_matnr
AND werks IN s_werks.
SELECT
matnr
werks
sum( plnmg ) AS plnmg
FROM pbim AS t01
INNER JOIN pbed AS t02 ON t01~bdzei = t02~bdzei
into CORRESPONDING FIELDS OF TABLE lt_pbim
WHERE werks IN s_werks
AND matnr IN s_matnr
AND versb = '00'
AND t01~loevr = ''
AND t02~loevr = ''
GROUP BY matnr werks
.
SELECT
matnr
werks
lgort
labst
FROM mard
INTO CORRESPONDING FIELDS OF TABLE lt_mard
WHERE werks IN s_werks
AND matnr IN s_matnr.
SELECT
matnr
werks
bstmi
FROM marc
INTO CORRESPONDING FIELDS OF TABLE lt_marc
WHERE werks IN s_werks
AND matnr IN s_matnr.
LOOP AT gt_alv_itab.
READ TABLE lt_pbim WITH KEY werks = gt_alv_itab-werks
matnr = gt_alv_itab-matnr.
IF sy-subrc = 0.
gt_alv_itab-plnmg = lt_pbim-plnmg."计划数量
ENDIF.
* 读取库存数量
READ TABLE lt_mard WITH KEY werks = gt_alv_itab-werks matnr = gt_alv_itab-matnr.
IF sy-subrc = 0.
gt_alv_itab-labst = lt_mard-labst."库存数量
ENDIF.
* 读取最小批量
READ TABLE lt_marc WITH KEY werks = gt_alv_itab-werks matnr = gt_alv_itab-matnr.
IF sy-subrc = 0.
gt_alv_itab-bstmi = lt_marc-bstmi."最小批量
ENDIF.
* 要求到货时间 = 当前日期 + 采购周期
READ TABLE lt_matnr WITH KEY werks = gt_alv_itab-werks matnr = gt_alv_itab-matnr.
IF sy-subrc = 0.
gt_alv_itab-zyqdh = sy-datum + lt_matnr-plifz."要求到货时间
ENDIF.
READ TABLE lt_pp WITH KEY werks = gt_alv_itab-werks matnr = gt_alv_itab-matnr.
IF SY-SUBRC = 0.
gt_alv_itab-zdjs = lt_pp-zdjs.
gt_alv_itab-zwqcgdd = lt_pp-zwqcgdd.
gt_alv_itab-zjxq = lt_pp-zjxq.
* gt_alv_itab-bstmi = lt_pp-bstmi.
gt_alv_itab-ztzsl = lt_pp-ztzsl.
gt_alv_itab-zcgxdsl = lt_pp-zcgxdsl.
* gt_alv_itab-zyqdh = lt_pp-zyqdh.
gt_alv_itab-zyjdh = lt_pp-zyjdh.
ENDIF.
MODIFY gt_alv_itab.
CLEAR gt_alv_itab.
ENDLOOP.
ENDform.
*&---------------------------------------------------------------------*
*& Form DISPAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPAY_DATA .
gs_layout-zebra = 'X'.
gs_layout-cwidth_opt = 'X'.
PERFORM frm_pre_fieldcat.
ENDFORM. " DISPAY_DATA
*&---------------------------------------------------------------------*
*& Form FRM_PRE_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_PRE_FIELDCAT .
PERFORM sub_fill_alv_fieldcat USING 'WERKS' '工厂' space space 'X' space.
PERFORM sub_fill_alv_fieldcat USING 'MATNR' '物料号' space 'X' space space.
PERFORM sub_fill_alv_fieldcat USING 'MAKTX' '物料描述' space space space space.
PERFORM sub_fill_alv_fieldcat USING 'PLNMG' '需求' space 'X' space 'X'.
PERFORM sub_fill_alv_fieldcat USING 'LABST' '库存数量' space 'X' space space.
PERFORM sub_fill_alv_fieldcat USING 'ZDJS' '待检数' space 'X' space space.
PERFORM sub_fill_alv_fieldcat USING 'ZWQCGDD' '未清采购订单数(在途)' space 'X' space space.
PERFORM sub_fill_alv_fieldcat USING 'ZJXQ' '净需求'space 'X' space space.
PERFORM sub_fill_alv_fieldcat USING 'BSTMI' '最小批量' space 'X' space space.
PERFORM sub_fill_alv_fieldcat USING 'ZTZSL' '调整数量' space 'X' space space.
PERFORM sub_fill_alv_fieldcat USING 'ZCGXDSL' '采购下单数量' space 'X' space space.
PERFORM sub_fill_alv_fieldcat USING 'ZYQDH' '要求到货时间' space space space space.
PERFORM sub_fill_alv_fieldcat USING 'ZYJDH' '预计到货时间' 'X'space space space.
ENDFORM. " FRM_PRE_FIELDCAT
*&---------------------------------------------------------------------*
*& Form SUB_FILL_ALV_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0363 text
* -->P_0364 text
* -->P_SPACE text
* -->P_SPACE text
* -->P_0367 text
* -->P_SPACE text
*----------------------------------------------------------------------*
FORM SUB_FILL_ALV_FIELDCAT USING p_fieldname "TYPE slis_fieldname
p_reptext_ddic "LIKE dd03p-reptext
P_edit" TYPE slis_edit_mask
p_zero" TYPE c
p_hotspot
p_sum.
DATA:l_fieldcat_lvc TYPE lvc_s_fcat.
l_fieldcat_lvc-fieldname = p_fieldname.
l_fieldcat_lvc-reptext = p_reptext_ddic.
l_fieldcat_lvc-edit = p_edit.
l_fieldcat_lvc-no_zero = p_zero.
l_fieldcat_lvc-hotspot = p_hotspot.
l_fieldcat_lvc-do_sum = p_sum.
APPEND l_fieldcat_lvc to g_itab_fieldcat_lvc.
ENDFORM. " SUB_FILL_ALV_FIELDCAT
*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPLAY_DATA .
DATA:gs_repid LIKE sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
I_CALLBACK_PROGRAM = GS_REPID
* I_CALLBACK_PF_STATUS_SET = 'STATUS9000'
* I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
* I_CALLBACK_TOP_OF_PAGE = '世上最好看的报表'
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
I_GRID_TITLE = '最好看的报表'
* I_GRID_SETTINGS =
IS_LAYOUT_LVC = GS_LAYOUT
IT_FIELDCAT_LVC = g_itab_fieldcat_lvc
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS_LVC =
* IT_SORT_LVC =
* IT_FILTER_LVC =
* IT_HYPERLINK =
* IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = 'A'
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT_LVC =
* IS_REPREP_ID_LVC =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP =
* I_HTML_HEIGHT_END =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO_LVC =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = gt_alv_itab
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " DISPLAY_DATA
*FORM USER_COMMAND USING r_ucomm LIKE sy-ucomm
* rs_selfield TYPE slis_selfield.
*
* CASE R_UCOMM.
* WHEN 'BACK'.
* LEAVE TO SCREEN 0.
* ENDCASE.
*ENDFORM.
*
*form STATUS9000 using extab type slis_t_extab. "#EC CALLED
* set pf-status 'STATUS9000' excluding extab.
*endform.