REPORT Yt2_errors_workplace NO STANDARD PAGE HEADING..
TYPE-POOLS: slis .
TABLES : qmel,qmfe,qmur,crhd,/rb04/yc5_invop,usr01.
CONSTANTS : g_c_x(1) VALUE 'X',
g_c_arbpl(5) VALUE 'ARBPL',
g_c_date(4) VALUE 'DATE',
g_c_anzmaterial(12) VALUE 'ANZMATERIAL1',
g_c_anzfehler(9) VALUE 'ANZFEHLER',
g_c_ppm_ratio(9) VALUE 'PPM_RATIO',
g_c_month(5) VALUE 'MONTH',
g_c_matnr(5) VALUE 'MATNR',
g_c_output_value(12) VALUE 'OUTPUT_VALUE',
g_c_ppm_value(9) VALUE 'PPM_VALUE',
g_c_avg_output_value(16) VALUE 'AVG_OUTPUT_VALUE',
g_c_avg_ppm_value(13) VALUE 'AVG_PPM_VALUE',
g_c_unit(4) VALUE 'UNIT'.
DATA: g_ty_proc(15) TYPE c,
g_v_dynp_prog TYPE sy-repid.
DATA: g_ty_dloc(15) TYPE c.
DATA: g_ty_code(15) TYPE c.
DATA: g_v_field1 TYPE help_info-dynprofld,
g_v_field2 TYPE help_info-dynprofld,
g_v_field3 TYPE help_info-dynprofld.
DATA: BEGIN OF it_crhd OCCURS 0,
arbpl LIKE crhd-arbpl,
objid LIKE crhd-objid,
werks LIKE crhd-werks,
ktext LIKE crtx-ktext,
END OF it_crhd.
DATA: g_v_qmgrp1(8),
g_v_qmgrp2(8),
g_v_qmcod1(4),
g_v_qmcod2(4),
g_v_otgrp1(8),
g_v_otgrp2(8),
g_v_oteil1(4),
g_v_oteil2(4),
g_v_urgrp1(8),
g_v_urgrp2(8),
g_v_urcod1(4),
g_v_urcod2(4),
g_v_workct(8),
g_v_so_prdte(50),
g_v_anzfehler_tot LIKE qmfe-anzfehler,
g_v_anz_total LIKE afru-gmnga.
DATA: g_v_sttxt LIKE bsvx-sttxt,
g_v_lang LIKE sy-langu.
DATA g_v_stsma LIKE jsto-stsma.
DATA : BEGIN OF g_t_qmel OCCURS 0 .
INCLUDE STRUCTURE qmel.
DATA : sttxt LIKE bsvx-sttxt,
yl4_arbpl TYPE arbpl,
stat LIKE jstat-stat,
END OF g_t_qmel.
DATA : BEGIN OF g_t_qmfe OCCURS 0 ,
qmnum LIKE qmfe-qmnum,
* fenum like qmfe-fenum,
* otgrp LIKE qmfe-otgrp,
* oteil LIKE qmfe-oteil,
fd1 LIKE qmfe-fd1,
anzfehler LIKE qmfe-anzfehler,
material_nr1 LIKE qmfe-material_nr1,
mnth LIKE /rb04/yc5_invop-invpe,
END OF g_t_qmfe.
DATA : g_t_qmur LIKE qmur OCCURS 0 WITH HEADER LINE.
DATA : g_t_afpo LIKE afpo OCCURS 0 WITH HEADER LINE.
DATA : BEGIN OF g_t_afru OCCURS 0 ,
ersda LIKE afru-ersda,
* arbid LIKE afru-arbid,
* werks LIKE afru-werks,
/rb04/txtmat LIKE afru-/rb04/txtmat,
gmnga LIKE afru-gmnga,
gmein LIKE afru-gmein,
mnth LIKE /rb04/yc5_invop-invpe,
END OF g_t_afru.
DATA : g_t_blpk LIKE blpk OCCURS 0 WITH HEADER LINE.
DATA : BEGIN OF g_t_sa OCCURS 0,
* prtnr LIKE /rb04/yl4_ls_sa-prtnr,
cpudt LIKE /rb04/yl4_ls_sa-cpudt,
matnr LIKE /rb04/yl4_ls_sa-matnr,
gsmng LIKE /rb04/yl4_ls_sa-gsmng,
meins LIKE /rb04/yl4_ls_sa-meins,
* UZEIT LIKE /rb04/yl4_ls_sa-UZEIT,
mnth LIKE /rb04/yc5_invop-invpe,
END OF g_t_sa.
DATA : g_t_ap_tar LIKE /rb04/yt2_ap_tar OCCURS 0 WITH HEADER LINE.
RANGES: ra_qmgrp FOR qmel-qmgrp,
ra_qmcod FOR qmel-qmcod.
RANGES: ra_otgrp FOR qmfe-otgrp,
ra_oteil FOR qmfe-oteil.
RANGES: ra_urgrp FOR qmur-urgrp,
ra_urcod FOR qmur-urcod.
RANGES: ra_date FOR qmfe-fd1.
TYPES: BEGIN OF g_ty_proc,
codegruppe LIKE qpcd-codegruppe,
code LIKE qpcd-code,
kurztext LIKE qpct-kurztext,
tproc LIKE g_ty_proc,
END OF g_ty_proc.
TYPES: BEGIN OF g_ty_proc1,
tproc TYPE qtxt_code,
kurztext LIKE qpct-kurztext,
END OF g_ty_proc1.
TYPES: BEGIN OF g_ty_dloc,
codegruppe LIKE qpcd-codegruppe,
code LIKE qpcd-code,
kurztext LIKE qpct-kurztext,
dloc LIKE g_ty_dloc,
END OF g_ty_dloc.
TYPES: BEGIN OF g_ty_dloc1,
dloc TYPE qtxt_code,
kurztext LIKE qpct-kurztext,
END OF g_ty_dloc1.
TYPES: BEGIN OF g_ty_code,
codegruppe LIKE qpcd-codegruppe,
code LIKE qpcd-code,
kurztext LIKE qpct-kurztext,
tcode LIKE g_ty_code,
END OF g_ty_code.
TYPES: BEGIN OF g_ty_code1,
tcode TYPE qtxt_code,
kurztext LIKE qpct-kurztext,
END OF g_ty_code1.
DATA: g_t_proc TYPE TABLE OF g_ty_proc,
g_wa_proc LIKE LINE OF g_t_proc.
DATA: g_t_proc1 TYPE TABLE OF g_ty_proc1,
g_wa_proc1 LIKE LINE OF g_t_proc1.
DATA: g_t_dloc TYPE TABLE OF g_ty_dloc,
g_wa_dloc LIKE LINE OF g_t_dloc.
DATA: g_t_dloc1 TYPE TABLE OF g_ty_dloc1,
g_wa_dloc1 LIKE LINE OF g_t_dloc1.
DATA: g_t_tcode TYPE TABLE OF g_ty_code,
g_wa_tcode LIKE LINE OF g_t_tcode.
DATA: g_t_tcode1 TYPE TABLE OF g_ty_code1,
g_wa_tcode1 LIKE LINE OF g_t_tcode1.
DATA : g_v_anzfehler_total LIKE qmfe-anzfehler,
g_v_anzmat_total LIKE afru-gmnga.
DATA : BEGIN OF g_t_final OCCURS 0,
select TYPE c,
arbpl LIKE crhd-arbpl,
date LIKE qmfe-fd1,
month LIKE /rb04/yc5_invop-invpe, "qmfe-fd1,
matnr LIKE qmel-matnr,
anzmaterial LIKE afru-gmnga,
unit LIKE afru-gmein,
anzfehler LIKE qmfe-anzfehler,
ppm_ratio LIKE qmfe-anzfehler,
output_value LIKE qmfe-anzfehler,
ppm_value LIKE qmfe-anzfehler,
avg_output_value LIKE qmfe-anzfehler,
avg_ppm_value LIKE qmfe-anzfehler,
* total_mat LIKE afru-gmnga,
* total_fehler LIKE qmfe-anzfehler,
* total_ppm LIKE qmfe-anzfehler,
anzmaterial1(13),
END OF g_t_final.
DATA: g_it_fieldcat TYPE slis_t_fieldcat_alv,
g_wa_fieldcat TYPE slis_fieldcat_alv,
g_layout TYPE slis_layout_alv,
g_it_events TYPE slis_t_event,
g_wa_events TYPE slis_alv_event,
g_v_repid LIKE sy-repid.
DATA g_v_datfm LIKE usr01-datfm.
*----------------------------------------------------------------------
* Macro definition for ALV
*----------------------------------------------------------------------
DEFINE fill_fieldcat.
g_wa_fieldcat-tabname = &1.
g_wa_fieldcat-fieldname = &2.
g_wa_fieldcat-ref_tabname = &3.
g_wa_fieldcat-ref_fieldname = &4.
append g_wa_fieldcat to g_it_fieldcat.
clear g_wa_fieldcat.
END-OF-DEFINITION.
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_mawerk LIKE qmel-mawerk.
PARAMETER : p_workct LIKE crhd-arbpl.
SELECT-OPTIONS: so_matnr FOR qmel-matnr .
SELECT-OPTIONS: so_date FOR qmfe-fd1." no-extension..
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN COMMENT 76(40) text-040.
SELECTION-SCREEN: END OF LINE.
SELECT-OPTIONS: so_month FOR /rb04/yc5_invop-invpe.
*qmfe-fd1 .
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
SELECT-OPTIONS: so_proc FOR g_ty_proc.
SELECT-OPTIONS: so_dloc FOR g_ty_dloc.
SELECT-OPTIONS: so_code FOR g_ty_code.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
SELECTION-SCREEN: BEGIN OF LINE.
PARAMETERS: p_aggday RADIOBUTTON GROUP rad1 DEFAULT 'X'
USER-COMMAND clck.
SELECTION-SCREEN: COMMENT (30) text-005 FOR FIELD p_aggday.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: BEGIN OF LINE.
PARAMETERS: p_aggmnt RADIOBUTTON GROUP rad1.
SELECTION-SCREEN: COMMENT (30) text-006 FOR FIELD p_aggmnt.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: BEGIN OF LINE.
PARAMETERS: p_aggmat RADIOBUTTON GROUP rad1.
SELECTION-SCREEN: COMMENT (30) text-007 FOR FIELD p_aggmat.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-004.
PARAMETERS: p_targ AS CHECKBOX,
p_avg AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b4.
SELECTION-SCREEN BEGIN OF BLOCK b5 WITH FRAME TITLE text-008.
PARAMETERS: p_fileop AS CHECKBOX USER-COMMAND clk.
PARAMETERS: p_fpath(80).
PARAMETERS: p_fname(80).
SELECTION-SCREEN END OF BLOCK b5.
* Selection-screen validation
AT SELECTION-SCREEN OUTPUT.
CLEAR : p_avg,p_targ.
LOOP AT SCREEN.
IF p_aggmnt EQ g_c_x AND
( screen-name EQ '%_SO_DATE_%_APP_%-TEXT' OR
screen-name EQ '%_SO_DATE_%_APP_%-OPTI_PUSH' OR
screen-name EQ 'SO_DATE-LOW' OR screen-name EQ 'SO_DATE-HIGH' OR
screen-name EQ '%_SO_DATE_%_APP_%-TO_TEXT' OR
screen-name EQ '%_SO_DATE_%_APP_%-VALU_PUSH' ).
screen-input = '0'.
REFRESH so_date.
ENDIF.
IF ( p_aggday EQ g_c_x OR p_aggmat EQ g_c_x ) AND
( screen-name EQ 'SO_MONTH-LOW' OR
screen-name EQ 'SO_MONTH-HIGH' OR
screen-name EQ '%_SO_MONTH_%_APP_%-TEXT' OR
screen-name EQ '%_SO_MONTH_%_APP_%-OPTI_PUSH' OR
screen-name EQ '%_SO_MONTH_%_APP_%-TO_TEXT' OR
screen-name EQ '%_SO_MONTH_%_APP_%-VALU_PUSH' ).
screen-input = '0'.
REFRESH so_month.
ENDIF.
IF ( screen-name EQ 'P_AVG' OR screen-name = 'P_TARG' ) AND
p_aggmnt EQ g_c_x .
screen-input = '1'.
* CLEAR p_targ.
p_avg = 'X'.
ENDIF.
IF ( screen-name EQ 'P_AVG' ) AND
( p_aggday EQ g_c_x OR p_aggmat EQ g_c_x ).
screen-input = '0'.
CLEAR : "P_TARG,
p_avg.
ENDIF.
IF ( screen-name EQ 'P_FNAME' OR screen-name EQ 'P_FPATH' ) AND
p_fileop NE g_c_x.
screen-input = '0'.
CLEAR : p_fname, p_fpath.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
AT SELECTION-SCREEN ON p_mawerk.
IF NOT p_mawerk IS INITIAL.
SELECT SINGLE * FROM qmel WHERE mawerk = p_mawerk.
IF sy-subrc NE 0.
MESSAGE e050(/rb04/yt2_iqis) WITH text-037 p_mawerk.
ENDIF.
ENDIF.
AT SELECTION-SCREEN ON p_workct.
IF NOT p_workct IS INITIAL.
SELECT SINGLE * FROM crhd WHERE arbpl = p_workct.
IF sy-subrc NE 0.
MESSAGE e050(/rb04/yt2_iqis) WITH text-038 p_workct.
ENDIF.
ENDIF.
AT SELECTION-SCREEN ON so_matnr.
IF NOT so_matnr IS INITIAL.
SELECT SINGLE * FROM qmel WHERE matnr IN so_matnr.
IF sy-subrc NE 0.
MESSAGE e050(/rb04/yt2_iqis) WITH text-039 so_matnr.
ENDIF.
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_proc-low.
REFRESH: g_t_proc,g_t_proc1.
CLEAR: g_wa_proc,g_wa_proc1.
g_v_field1 = 'SO_PROC-LOW'.
PERFORM helpview_typof_process.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_proc-high.
REFRESH: g_t_proc,g_t_proc1.
CLEAR: g_wa_proc,g_wa_proc1.
g_v_field1 = 'SO_PROC-HIGH'.
PERFORM helpview_typof_process.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_dloc-low.
REFRESH: g_t_dloc,g_t_dloc1.
CLEAR: g_wa_dloc,g_wa_dloc1.
g_v_field2 = 'SO_DLOC-LOW'.
PERFORM helpview_typof_dloc.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_dloc-high.
REFRESH: g_t_dloc,g_t_dloc1.
CLEAR: g_wa_dloc,g_wa_dloc1.
g_v_field2 = 'SO_DLOC-HIGH'.
PERFORM helpview_typof_dloc.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_code-low.
REFRESH: g_t_tcode,g_t_tcode1.
CLEAR: g_wa_tcode,g_wa_tcode1.
g_v_field3 = 'SO_TCODE-LOW'.
PERFORM helpview_typeof_code.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_code-high.
REFRESH: g_t_tcode,g_t_tcode1.
CLEAR: g_wa_tcode,g_wa_tcode1.
g_v_field3 = 'SO_TCODE-HIGH'.
PERFORM helpview_typeof_code.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_workct.
PERFORM helpview_work_center.
AT SELECTION-SCREEN.
IF sy-ucomm EQ 'SJOB' OR sy-ucomm EQ 'ONLI' OR sy-ucomm EQ ''.
IF p_mawerk IS INITIAL.
MESSAGE e050(/rb04/yt2_iqis) WITH text-017 .
ENDIF.
IF p_workct IS INITIAL.
MESSAGE e050(/rb04/yt2_iqis) WITH text-018.
ENDIF.
* if ( p_aggday eq g_c_x or p_aggmat eq g_c_x ) and so_date is
*initial.
* MESSAGE e050(/rb04/yt2_iqis) WITH text-011 .
* endif.
IF p_aggmnt EQ g_c_x AND p_avg NE g_c_x.
MESSAGE e050(/rb04/yt2_iqis) WITH text-014 .
ENDIF.
ENDIF.
IF sy-ucomm EQ 'SJOB'.
IF p_fileop EQ g_c_x AND p_fpath IS INITIAL .
MESSAGE e050(/rb04/yt2_iqis) WITH text-013 .
ENDIF.
IF p_fileop EQ g_c_x AND p_fname IS INITIAL .
MESSAGE e050(/rb04/yt2_iqis) WITH text-012 .
ENDIF.
ENDIF.
IF sy-ucomm NE 'SJOB' AND ( sy-ucomm EQ 'ONLI' OR sy-ucomm EQ '' ).
IF so_matnr IS INITIAL.
MESSAGE e050(/rb04/yt2_iqis) WITH text-010 .
ENDIF.
IF ( p_aggday EQ g_c_x OR p_aggmat EQ g_c_x ) AND so_date IS INITIAL
.
MESSAGE e050(/rb04/yt2_iqis) WITH text-011 .
ENDIF.
IF p_aggmnt EQ g_c_x AND so_month IS INITIAL.
MESSAGE e050(/rb04/yt2_iqis) WITH text-020 .
ENDIF.
ENDIF.
IF sy-ucomm EQ 'ONLI'.
IF p_fileop EQ g_c_x.
MESSAGE e050(/rb04/yt2_iqis) WITH text-019 .
* MESSAGE e004(zlocal) WITH text-019.
ENDIF.
ENDIF.
********************************************************************
START-OF-SELECTION.
PERFORM authority_check.
PERFORM split_data.
PERFORM select_data.
PERFORM display_data.
IF p_fileop EQ g_c_x.
PERFORM download_file.
ENDIF.
*&---------------------------------------------------------------------*
*& Form helpview_typof_process
*&---------------------------------------------------------------------*
* Help view for the type_of_process
*----------------------------------------------------------------------*
FORM helpview_typof_process.
SELECT codegruppe code kurztext FROM qpct
INTO CORRESPONDING FIELDS OF TABLE g_t_proc
WHERE katalogart = 'P'
AND sprache = sy-langu.
LOOP AT g_t_proc INTO g_wa_proc.
CONCATENATE g_wa_proc-codegruppe g_wa_proc-code
INTO g_wa_proc-tproc
SEPARATED BY '_'.
MODIFY g_t_proc FROM g_wa_proc TRANSPORTING tproc.
MOVE g_wa_proc-tproc TO g_wa_proc1-tproc.
MOVE g_wa_proc-kurztext TO g_wa_proc1-kurztext.
APPEND g_wa_proc1 TO g_t_proc1.
ENDLOOP.
g_v_dynp_prog = sy-repid.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'TPROC'
dynpprog = g_v_dynp_prog
dynpnr = sy-dynnr
dynprofield = g_v_field1
window_title = text-100
value_org = 'S'
TABLES
value_tab = g_t_proc1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " helpview_typof_process
*&---------------------------------------------------------------------*
*& Form helpview_typof_dloc
*&---------------------------------------------------------------------*
* Help view for type of defect location
*----------------------------------------------------------------------*
FORM helpview_typof_dloc.
SELECT codegruppe code kurztext FROM qpct
INTO CORRESPONDING FIELDS OF TABLE g_t_dloc
WHERE katalogart = 'E'
AND sprache = sy-langu.
LOOP AT g_t_dloc INTO g_wa_dloc.
CONCATENATE g_wa_dloc-codegruppe g_wa_dloc-code
INTO g_wa_dloc-dloc
SEPARATED BY '_'.
MODIFY g_t_dloc FROM g_wa_dloc TRANSPORTING dloc.
MOVE g_wa_dloc-dloc TO g_wa_dloc1-dloc.
MOVE g_wa_dloc-kurztext TO g_wa_dloc1-kurztext.
APPEND g_wa_dloc1 TO g_t_dloc1.
ENDLOOP.
g_v_dynp_prog = sy-repid.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'DLOC'
dynpprog = g_v_dynp_prog
dynpnr = sy-dynnr
dynprofield = g_v_field2
window_title = text-100
value_org = 'S'
TABLES
value_tab = g_t_dloc1.
ENDFORM. " helpview_typof_dloc
*&---------------------------------------------------------------------*
*& Form helpview_typeof_code
*&---------------------------------------------------------------------*
* Help view for type of code
*----------------------------------------------------------------------*
FORM helpview_typeof_code.
SELECT codegruppe code kurztext FROM qpct
INTO CORRESPONDING FIELDS OF TABLE g_t_tcode
WHERE katalogart = '5'
AND sprache = sy-langu.
LOOP AT g_t_tcode INTO g_wa_tcode.
CONCATENATE g_wa_tcode-codegruppe g_wa_tcode-code
INTO g_wa_tcode-tcode
SEPARATED BY '_'.
MODIFY g_t_tcode FROM g_wa_tcode TRANSPORTING tcode.
MOVE g_wa_tcode-tcode TO g_wa_tcode1-tcode.
MOVE g_wa_tcode-kurztext TO g_wa_tcode1-kurztext.
APPEND g_wa_tcode1 TO g_t_tcode1.
ENDLOOP.
g_v_dynp_prog = sy-repid.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'TCODE'
dynpprog = g_v_dynp_prog
dynpnr = sy-dynnr
dynprofield = g_v_field3
window_title = text-100
value_org = 'S'
TABLES
value_tab = g_t_tcode1.
ENDFORM. " helpview_typeof_code
*&---------------------------------------------------------------------*
*& Form helpview_work_center
*&---------------------------------------------------------------------*
FORM helpview_work_center.
DATA : BEGIN OF l_v_help OCCURS 0,
objid LIKE crhd-objid,
ktext LIKE crtx-ktext,
END OF l_v_help.
IF NOT p_mawerk IS INITIAL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_crhd FROM crhd
WHERE werks EQ p_mawerk.
ELSE.
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_crhd FROM crhd.
ENDIF.
IF NOT it_crhd[] IS INITIAL.
SELECT * FROM crtx INTO CORRESPONDING FIELDS OF TABLE l_v_help
FOR ALL ENTRIES IN it_crhd
WHERE objid = it_crhd-objid.
ENDIF.
LOOP AT it_crhd.
READ TABLE l_v_help WITH KEY objid = it_crhd-objid.
IF sy-subrc EQ 0.
it_crhd-ktext = l_v_help-ktext.
MODIFY it_crhd.
ENDIF.
ENDLOOP.
g_v_dynp_prog = sy-repid.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ARBPL'
dynpprog = g_v_dynp_prog
dynpnr = sy-dynnr
dynprofield = 'P_WORKCT'
window_title = text-015
value_org = 'S'
TABLES
value_tab = it_crhd.
ENDFORM. " helpview_work_center
*&---------------------------------------------------------------------*
*& Form authority_check
*&---------------------------------------------------------------------*
FORM authority_check.
AUTHORITY-CHECK OBJECT 'Q_QMEL'
ID 'QMART' FIELD text-042
ID 'TCD' FIELD text-041
ID 'WERKS' FIELD p_mawerk.
IF NOT sy-subrc IS INITIAL.
MESSAGE e050(/rb04/yt2_iqis) WITH text-036.
ENDIF.
ENDFORM. " authority_check
*&---------------------------------------------------------------------*
*& Form split_data
*&---------------- ----------------------------------------------------*
* split technical process data
*----------------------------------------------------------------------*
FORM split_data.
DATA l_v_date LIKE sy-datum.
DATA : l_v_date1 LIKE sy-datum,
l_v_date2 LIKE sy-datum,
l_v_date3 LIKE sy-datum.
DATA l_v_month(2).
IF NOT so_proc-low IS INITIAL AND so_proc-high IS INITIAL.
CLEAR: g_v_qmgrp1,g_v_qmcod1.
SPLIT so_proc-low AT '_' INTO g_v_qmgrp1 g_v_qmcod1.
ra_qmgrp-sign = 'I'.
ra_qmgrp-option = 'EQ'.
ra_qmgrp-low = g_v_qmgrp1.
APPEND ra_qmgrp.
ra_qmcod-sign = 'I'.
ra_qmcod-option = 'EQ'.
ra_qmcod-low = g_v_qmcod1.
APPEND ra_qmcod.
ELSEIF NOT so_proc-low IS INITIAL AND NOT so_proc-high IS INITIAL.
CLEAR: g_v_qmgrp1,g_v_qmcod1,g_v_qmgrp2,g_v_qmcod2.
SPLIT so_proc-low AT '_' INTO g_v_qmgrp1
g_v_qmcod1.
SPLIT so_proc-high AT '_' INTO g_v_qmgrp2
g_v_qmcod2.
ra_qmgrp-sign = 'I'.
ra_qmgrp-option = 'BT'.
ra_qmgrp-low = g_v_qmgrp1.
ra_qmgrp-high = g_v_qmgrp2.
APPEND ra_qmgrp.
ra_qmcod-sign = 'I'.
ra_qmcod-option = 'BT'.
ra_qmcod-low = g_v_qmcod1.
ra_qmcod-high = g_v_qmcod2.
APPEND ra_qmcod.
ELSEIF so_proc-low IS INITIAL AND NOT so_proc-high IS INITIAL.
CLEAR: g_v_qmgrp1,g_v_qmcod1,g_v_qmgrp2,g_v_qmcod2.
g_v_qmgrp1 = '0'.
g_v_qmcod1 = '0'.
SPLIT so_proc-high AT '_' INTO g_v_qmgrp2
g_v_qmcod2.
ra_qmgrp-sign = 'I'.
ra_qmgrp-option = 'BT'.
ra_qmgrp-low = g_v_qmgrp1.
ra_qmgrp-high = g_v_qmgrp2.
APPEND ra_qmgrp.
ra_qmcod-sign = 'I'.
ra_qmcod-option = 'BT'.
ra_qmcod-low = g_v_qmcod1.
ra_qmcod-high = g_v_qmcod2.
APPEND ra_qmcod.
ENDIF.
IF NOT so_dloc-low IS INITIAL AND so_dloc-high IS INITIAL.
CLEAR: g_v_otgrp1,g_v_oteil1.
SPLIT so_dloc-low AT '_' INTO g_v_otgrp1
g_v_oteil1.
ra_otgrp-sign = 'I'.
ra_otgrp-option = 'EQ'.
ra_otgrp-low = g_v_otgrp1.
APPEND ra_otgrp.
ra_oteil-sign = 'I'.
ra_oteil-option = 'EQ'.
ra_oteil-low = g_v_oteil1.
APPEND ra_oteil.
ELSEIF NOT so_dloc-low IS INITIAL AND NOT so_dloc-high IS INITIAL..
CLEAR: g_v_otgrp1,g_v_otgrp2,g_v_oteil1,g_v_oteil2.
SPLIT so_dloc-low AT '_' INTO g_v_otgrp1
g_v_oteil1.
SPLIT so_dloc-high AT '_' INTO g_v_otgrp2
g_v_oteil2.
ra_otgrp-sign = 'I'.
ra_otgrp-option = 'BT'.
ra_otgrp-low = g_v_otgrp1.
ra_otgrp-high = g_v_otgrp2.
APPEND ra_otgrp.
ra_oteil-sign = 'I'.
ra_oteil-option = 'BT'.
ra_oteil-low = g_v_oteil1.
ra_oteil-high = g_v_oteil2.
APPEND ra_oteil.
ELSEIF so_dloc-low IS INITIAL AND NOT so_dloc-high IS INITIAL.
CLEAR: g_v_otgrp1,g_v_otgrp2,g_v_oteil1,g_v_oteil2.
g_v_otgrp1 = '0' .
g_v_oteil1 = '0' .
SPLIT so_dloc-high AT '_' INTO g_v_otgrp2
g_v_oteil2.
ra_otgrp-sign = 'I'.
ra_otgrp-option = 'BT'.
ra_otgrp-low = g_v_otgrp1.
ra_otgrp-high = g_v_otgrp2.
APPEND ra_otgrp.
ra_oteil-sign = 'I'.
ra_oteil-option = 'BT'.
ra_oteil-low = g_v_oteil1.
ra_oteil-high = g_v_oteil2.
APPEND ra_oteil.
ENDIF.
IF NOT so_code-low IS INITIAL AND so_code-high IS INITIAL.
CLEAR: g_v_urgrp1,g_v_urcod1.
SPLIT so_proc-low AT '_' INTO g_v_urgrp1
g_v_urcod1.
ra_urgrp-sign = 'I'.
ra_urgrp-option = 'EQ'.
ra_urgrp-low = g_v_urgrp1.
APPEND ra_urgrp.
ra_urcod-sign = 'I'.
ra_urcod-option = 'EQ'.
ra_urcod-low = g_v_urcod1.
APPEND ra_urcod.
ELSEIF NOT so_code-low IS INITIAL AND NOT so_code-high IS INITIAL.
CLEAR: g_v_urgrp1,g_v_urgrp2,g_v_urcod1,g_v_urcod2.
SPLIT so_proc-low AT '_' INTO g_v_urgrp1
g_v_urcod1.
SPLIT so_proc-high AT '_' INTO g_v_urgrp2
g_v_urcod2.
ra_urgrp-sign = 'I'.
ra_urgrp-option = 'EQ'.
ra_urgrp-low = g_v_urgrp1.
ra_urgrp-high = g_v_urgrp2.
APPEND ra_urgrp.
ra_urcod-sign = 'I'.
ra_urcod-option = 'EQ'.
ra_urcod-low = g_v_urcod1.
ra_urcod-high = g_v_urcod2.
APPEND ra_urcod.
ELSEIF so_code-low IS INITIAL AND NOT so_code-high IS INITIAL.
CLEAR: g_v_urgrp1,g_v_urgrp2,g_v_urcod1,g_v_urcod2.
g_v_urgrp1 = '0'.
g_v_urcod1 = '0'.
SPLIT so_proc-high AT '_' INTO g_v_urgrp2
g_v_urcod2.
ra_urgrp-sign = 'I'.
ra_urgrp-option = 'EQ'.
ra_urgrp-low = g_v_urgrp1.
ra_urgrp-high = g_v_urgrp2.
APPEND ra_urgrp.
ra_urcod-sign = 'I'.
ra_urcod-option = 'EQ'.
ra_urcod-low = g_v_urcod1.
ra_urcod-high = g_v_urcod2.
APPEND ra_urcod.
ENDIF.
CLEAR ra_date.
LOOP AT so_date.
IF NOT so_date-low IS INITIAL AND NOT so_date-high IS INITIAL.
l_v_date = so_date-high - so_date-low.
IF l_v_date > 7.
ra_date-high = so_date-low + 6.
ELSE.
ra_date-high = so_date-high.
ENDIF.
ra_date-sign = 'I'.
ra_date-option = 'BT'.
ra_date-low = so_date-low.
APPEND ra_date.
ELSEIF NOT so_date-low IS INITIAL AND so_date-high IS INITIAL.
ra_date-sign = 'I'.
ra_date-option = 'BT'.
ra_date-high = so_date-low.
ra_date-low = so_date-low - 6.
APPEND ra_date.
ELSEIF so_date-low IS INITIAL AND NOT so_date-high IS INITIAL.
ra_date-sign = 'I'.
ra_date-option = 'BT'.
ra_date-low = so_date-high - 6.
ra_date-high = so_date-high.
APPEND ra_date.
ENDIF.
ENDLOOP.
IF NOT so_month-low IS INITIAL.
CONCATENATE so_month-low '01' INTO l_v_date1.
ENDIF.
IF NOT so_month-high IS INITIAL.
CONCATENATE so_month-high '01' INTO l_v_date2.
PERFORM get_last_date USING l_v_date2
CHANGING l_v_date3.
ENDIF.
IF NOT so_month-low IS INITIAL AND so_month-high IS INITIAL.
ra_date-sign = 'I'.
ra_date-option = 'BT'.
ra_date-low = l_v_date1.
PERFORM get_last_date USING l_v_date1
CHANGING l_v_date.
ra_date-high = l_v_date.
APPEND ra_date.
ELSEIF NOT so_month-low IS INITIAL AND NOT so_month-high IS INITIAL.
ra_date-sign = 'I'.
ra_date-option = 'BT'.
ra_date-low = l_v_date1.
ra_date-high = l_v_date3.
APPEND ra_date.
ELSEIF so_month-low IS INITIAL AND NOT so_month-high IS INITIAL.
ra_date-sign = 'I'.
ra_date-option = 'BT'.
ra_date-low = 0.
ra_date-high = l_v_date3.
APPEND ra_date.
ENDIF.
ENDFORM. " split_data
*&---------------------------------------------------------------------*
*& Form select_data
*&---------------------------------------------------------------------*
* data fetching
*----------------------------------------------------------------------*
FORM select_data.
DATA : l_it_qmfe LIKE g_t_qmfe OCCURS 0 WITH HEADER LINE,
l_it_afru LIKE g_t_afru OCCURS 0 WITH HEADER LINE,
l_it_sa LIKE g_t_sa OCCURS 0 WITH HEADER LINE..
DATA : BEGIN OF l_v_date OCCURS 0,
date LIKE sy-datum,
END OF l_v_date.
DATA l_t_status LIKE jstat OCCURS 0 WITH HEADER LINE.
g_v_anzfehler_total = 0.
g_v_lang = sy-langu.
SELECT SINGLE * FROM crhd WHERE arbpl = p_workct.
IF sy-subrc EQ 0.
SELECT * FROM qmel INTO TABLE g_t_qmel
WHERE mawerk EQ p_mawerk AND
* arbpl EQ crhd-objid AND 20080516
matnr IN so_matnr AND
qmart EQ 'ZD' AND
kzloesch NE g_c_x.
* qmgrp IN ra_qmgrp AND 20080516
* qmcod IN ra_qmcod.
ENDIF.
LOOP AT g_t_qmel.
CALL FUNCTION 'STATUS_READ'
EXPORTING
* CLIENT = SY-MANDT
objnr = g_t_qmel-objnr
only_active = 'X'
IMPORTING
* OBTYP =
stsma = g_v_stsma
* STONR =
TABLES
status = l_t_status
EXCEPTIONS
object_not_found = 1
OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF g_v_stsma EQ 'QM_ZDRM1'.
READ TABLE l_t_status WITH KEY stat = 'E0003'
inact = ''.
IF sy-subrc EQ 0.
g_t_qmel-stat = l_t_status-stat.
MODIFY g_t_qmel.
ENDIF.
ENDIF.
ENDLOOP.
CLEAR g_t_qmel.
DELETE g_t_qmel WHERE stat NE 'E0003'.
* if sy-langu eq 'EN'.
* DELETE g_t_qmel WHERE sttxt NE 'DANO'.
* else.
* DELETE g_t_qmel WHERE sttxt NE 'DAME'.
* endif.
IF NOT g_t_qmel[] IS INITIAL.
SELECT * FROM qmfe INTO CORRESPONDING FIELDS OF TABLE g_t_qmfe
FOR ALL ENTRIES IN g_t_qmel
WHERE qmnum EQ g_t_qmel-qmnum AND
fd1 IN ra_date AND
kzloesch NE g_c_x AND
otgrp IN ra_otgrp AND
oteil IN ra_oteil AND
arbpl EQ crhd-objid AND "20080516
codegrp IN ra_qmgrp AND "20080516
code IN ra_qmcod. "20080516
SORT g_t_qmfe BY qmnum.
LOOP AT g_t_qmfe.
IF p_aggday EQ g_c_x OR p_aggmnt EQ g_c_x.
MOVE-CORRESPONDING g_t_qmfe TO l_it_qmfe.
CLEAR l_it_qmfe-material_nr1.
IF p_aggmnt EQ g_c_x.
l_it_qmfe-mnth(4) = g_t_qmfe-fd1(4).
l_it_qmfe-mnth+4(2) = g_t_qmfe-fd1+4(2).
CLEAR l_it_qmfe-fd1.
ENDIF.
COLLECT l_it_qmfe."g_t_qmfe INTO l_it_qmfe.
CLEAR l_it_qmfe.
ELSE.
CLEAR g_t_qmfe-fd1.
COLLECT g_t_qmfe INTO l_it_qmfe.
CLEAR l_it_qmfe.
ENDIF.
ENDLOOP.
REFRESH g_t_qmfe.
CLEAR g_t_qmfe.
g_t_qmfe[] = l_it_qmfe[].
IF NOT g_t_qmfe[] IS INITIAL.
*order- production quantity
SELECT * FROM afpo INTO TABLE g_t_afpo WHERE matnr IN so_matnr.
IF NOT g_t_afpo[] IS INITIAL.
SELECT * FROM afru INTO CORRESPONDING FIELDS OF TABLE g_t_afru
FOR ALL ENTRIES IN g_t_afpo
WHERE arbid EQ crhd-objid AND
ersda IN ra_date AND
werks EQ p_mawerk AND
stokz NE g_c_x AND
aufnr EQ g_t_afpo-aufnr AND
stzhl EQ '' ."0.
ENDIF.
LOOP AT g_t_afru.
IF p_aggday EQ g_c_x OR p_aggmnt EQ g_c_x.
MOVE-CORRESPONDING g_t_afru TO l_it_afru.
CLEAR l_it_afru-/rb04/txtmat.
IF p_aggmnt EQ g_c_x.
l_it_afru-mnth(4) = g_t_afru-ersda(4).
l_it_afru-mnth+4(2) = g_t_afru-ersda+4(2).
CLEAR l_it_afru-ersda.
ENDIF.
COLLECT l_it_afru.
CLEAR l_it_afru.
ELSE.
CLEAR g_t_afru-ersda .
COLLECT g_t_afru INTO l_it_afru.
CLEAR l_it_afru.
ENDIF.
ENDLOOP.
REFRESH g_t_afru.
CLEAR g_t_afru.
g_t_afru[] = l_it_afru[].
*serial production quantity
SELECT * FROM blpk INTO TABLE g_t_blpk
WHERE matnr IN so_matnr AND
werks EQ p_mawerk AND
/rb04/yl4_arbpl EQ p_workct AND
"g_t_qmel-yl4_arbpl AND
datum IN ra_date.
IF NOT g_t_blpk[] IS INITIAL.
SELECT * FROM /rb04/yl4_ls_sa
INTO CORRESPONDING FIELDS OF TABLE g_t_sa
FOR ALL ENTRIES IN g_t_blpk
WHERE prtnr EQ g_t_blpk-prtnr.
ENDIF.
LOOP AT g_t_sa.
IF p_aggday EQ g_c_x OR p_aggmnt EQ g_c_x.
MOVE g_t_sa-gsmng TO l_it_sa-gsmng.
MOVE g_t_sa-meins TO l_it_sa-meins.
MOVE g_t_sa-cpudt TO l_it_sa-cpudt.
IF p_aggmnt EQ g_c_x.
l_it_sa-mnth(4) = l_it_sa-cpudt(4).
l_it_sa-mnth+4(2) = l_it_sa-cpudt+4(2).
CLEAR l_it_sa-cpudt.
ENDIF.
COLLECT l_it_sa.
CLEAR l_it_sa.
ELSE.
MOVE g_t_sa-gsmng TO l_it_sa-gsmng.
MOVE g_t_sa-matnr TO l_it_sa-matnr.
COLLECT l_it_sa.
CLEAR l_it_sa.
ENDIF.
ENDLOOP.
REFRESH g_t_sa.
CLEAR g_t_sa.
g_t_sa[] = l_it_sa[].
*adding serial and order production quantity
LOOP AT g_t_afru.
MOVE g_t_afru-ersda TO g_t_sa-cpudt .
MOVE g_t_afru-/rb04/txtmat TO g_t_sa-matnr .
MOVE g_t_afru-gmnga TO g_t_sa-gsmng .
MOVE g_t_afru-gmein TO g_t_sa-meins .
MOVE g_t_afru-mnth TO g_t_sa-mnth .
COLLECT g_t_sa.
CLEAR g_t_sa.
ENDLOOP.
*fetch data from table /rb04/yt2_ap_tar
SELECT * FROM /rb04/yt2_ap_tar INTO TABLE g_t_ap_tar
WHERE arbplwerk EQ p_mawerk AND
arbpl EQ crhd-arbpl.
LOOP AT g_t_sa.
MOVE g_t_sa-cpudt TO g_t_final-date.
MOVE g_t_sa-mnth TO g_t_final-month.
MOVE g_t_sa-gsmng TO g_t_final-anzmaterial.
MOVE g_t_sa-meins TO g_t_final-unit.
* MOVE g_t_sa-matnr TO g_t_final-matnr.
MOVE p_workct TO g_t_final-arbpl.
READ TABLE g_t_qmel WITH KEY mawerk = p_mawerk.
IF sy-subrc EQ 0.
g_t_final-matnr = g_t_qmel-matnr.
ENDIF.
* if aggregation for one day is selected
IF p_aggday EQ g_c_x.
READ TABLE g_t_qmfe WITH KEY fd1 = g_t_sa-cpudt.
IF sy-subrc EQ 0.
MOVE g_t_qmfe-anzfehler TO g_t_final-anzfehler.
ENDIF.
* if aggregation for one day is selected
ELSEIF p_aggmnt EQ g_c_x.
READ TABLE g_t_qmfe WITH KEY fd1 = g_t_sa-mnth.
IF sy-subrc EQ 0.
MOVE g_t_qmfe-anzfehler TO g_t_final-anzfehler.
ENDIF.
ELSE.
* if aggregation for material is selected.
READ TABLE g_t_qmfe WITH KEY material_nr1 = g_t_sa-matnr.
IF sy-subrc EQ 0.
MOVE g_t_qmfe-anzfehler TO g_t_final-anzfehler.
ENDIF.
ENDIF.
g_t_final-ppm_ratio =
( g_t_final-anzfehler * 1000000 ) / g_t_final-anzmaterial.
READ TABLE g_t_ap_tar WITH KEY arbplwerk = p_mawerk
arbpl = crhd-arbpl.
IF sy-subrc EQ 0.
g_t_final-output_value = g_t_ap_tar-target_output.
g_t_final-ppm_value = g_t_ap_tar-target_ppm.
g_t_final-avg_output_value = g_t_ap_tar-target_output.
g_t_final-avg_ppm_value = g_t_ap_tar-target_ppm.
ENDIF.
* to rmove decimal seperator from anzmaterial value
PERFORM truncate_anzmaterial.
APPEND g_t_final.
CLEAR g_t_final.
ENDLOOP.
ENDIF.
ENDIF.
IF g_t_final[] IS INITIAL.
MESSAGE i050(/rb04/yt2_iqis) WITH text-043.
STOP.
ENDIF.
ENDFORM. " select_data
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
FORM display_data.
SORT g_t_final.
g_v_repid = sy-repid.
fill_fieldcat : 'G_T_FINAL' g_c_arbpl 'QMEL' g_c_arbpl,
'G_T_FINAL' g_c_date 'QMFE' 'FD1',
'G_T_FINAL' g_c_month '' '',
'G_T_FINAL' g_c_matnr 'QMEL' g_c_matnr,
'G_T_FINAL' g_c_anzmaterial 'AFRU' 'GMNGA',
'G_T_FINAL' g_c_unit 'AFRU' 'GMEIN',
'G_T_FINAL' g_c_anzfehler 'QMFE' g_c_anzfehler,
'G_T_FINAL' g_c_ppm_ratio 'QMFE' g_c_anzfehler,
'G_T_FINAL' g_c_output_value '' '',
'G_T_FINAL' g_c_ppm_value '' '',
'G_T_FINAL' g_c_avg_output_value '' '',
'G_T_FINAL' g_c_avg_ppm_value '' ''.
LOOP AT g_it_fieldcat INTO g_wa_fieldcat.
CASE g_wa_fieldcat-fieldname.
WHEN g_c_date.
g_wa_fieldcat-seltext_m = text-024.
g_wa_fieldcat-outputlen = '8'.
g_wa_fieldcat-ddictxt = 'M'.
IF p_aggmnt EQ g_c_x OR p_aggmat EQ g_c_x.
g_wa_fieldcat-no_out = g_c_x.
ENDIF.
WHEN g_c_matnr.
g_wa_fieldcat-outputlen = '18'.
IF p_aggmnt EQ g_c_x OR p_aggday EQ g_c_x.
g_wa_fieldcat-no_out = g_c_x.
ENDIF.
WHEN g_c_month.
g_wa_fieldcat-seltext_m = text-028.
g_wa_fieldcat-outputlen = '8'.
g_wa_fieldcat-ddictxt = 'M'.
IF p_aggmat EQ g_c_x OR p_aggday EQ g_c_x.
g_wa_fieldcat-no_out = g_c_x.
ENDIF.
WHEN g_c_anzmaterial.
g_wa_fieldcat-seltext_m = text-025.
g_wa_fieldcat-outputlen = '20'.
g_wa_fieldcat-ddictxt = 'M'.
WHEN g_c_unit.
g_wa_fieldcat-seltext_m = text-044.
g_wa_fieldcat-outputlen = '5'.
g_wa_fieldcat-ddictxt = 'M'.
WHEN g_c_anzfehler.
g_wa_fieldcat-do_sum = g_c_x.
g_wa_fieldcat-seltext_m = text-026.
g_wa_fieldcat-outputlen = '10'.
g_wa_fieldcat-ddictxt = 'M'.
WHEN g_c_ppm_ratio.
g_wa_fieldcat-seltext_m = text-027.
g_wa_fieldcat-outputlen = '10'.
g_wa_fieldcat-ddictxt = 'M'.
g_wa_fieldcat-do_sum = g_c_x.
WHEN g_c_output_value.
g_wa_fieldcat-seltext_m = text-032.
g_wa_fieldcat-outputlen = '10'.
g_wa_fieldcat-ddictxt = 'M'.
IF p_targ NE g_c_x .
g_wa_fieldcat-no_out = g_c_x.
ENDIF.
WHEN g_c_ppm_value.
g_wa_fieldcat-seltext_m = text-029.
g_wa_fieldcat-outputlen = '10'.
g_wa_fieldcat-ddictxt = 'M'.
g_wa_fieldcat-do_sum = g_c_x.
IF p_targ NE g_c_x .
g_wa_fieldcat-no_out = g_c_x.
ENDIF.
WHEN g_c_avg_output_value.
g_wa_fieldcat-seltext_l = text-030.
g_wa_fieldcat-outputlen = '10'.
g_wa_fieldcat-ddictxt = 'L'.
g_wa_fieldcat-do_sum = g_c_x.
IF p_avg NE g_c_x .
g_wa_fieldcat-no_out = g_c_x.
ENDIF.
WHEN g_c_avg_ppm_value.
g_wa_fieldcat-seltext_m = text-031.
g_wa_fieldcat-outputlen = '10'.
g_wa_fieldcat-ddictxt = 'M'.
g_wa_fieldcat-do_sum = g_c_x.
IF p_avg NE g_c_x .
g_wa_fieldcat-no_out = g_c_x.
ENDIF.
ENDCASE.
MODIFY g_it_fieldcat FROM g_wa_fieldcat INDEX sy-tabix.
ENDLOOP.
g_layout-zebra = g_c_x.
g_layout-box_fieldname = 'SELECT'.
g_layout-get_selinfos = 'X'.
REFRESH g_it_events.
MOVE 'TOP_OF_PAGE' TO g_wa_events-name.
MOVE 'TOP_OF_PAGE' TO g_wa_events-form.
APPEND g_wa_events TO g_it_events.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_v_repid
is_layout = g_layout
i_callback_pf_status_set = 'PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
it_fieldcat = g_it_fieldcat
* IT_SORT =
it_events = g_it_events
TABLES
t_outtab = g_t_final
EXCEPTIONS
program_error = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " display_data
*----------------------------------------------------------------------*
* Form TOP_OF_PAGE *
*----------------------------------------------------------------------*
FORM top_of_page.
DATA: l_wa_header TYPE slis_listheader,
l_t_list_top_of_page TYPE slis_t_listheader WITH HEADER LINE.
DATA : l_v_text(30).
DATA l_v_date LIKE sy-datum.
DATA l_v_month LIKE /rb04/yc5_invop-invpe.
DATA l_v_date1(10).
DATA l_v_mnth1(8).
SELECT SINGLE * FROM usr01
WHERE bname EQ sy-uname.
REFRESH l_t_list_top_of_page.
* Line 1 - header
IF p_aggday EQ g_c_x.
l_t_list_top_of_page-info = text-005.
ELSEIF p_aggmnt EQ g_c_x.
l_t_list_top_of_page-info = text-006.
ELSEIF p_aggmat EQ g_c_x.
l_t_list_top_of_page-info = text-007.
ENDIF.
l_t_list_top_of_page-typ = 'H'.
APPEND l_t_list_top_of_page.
CLEAR l_t_list_top_of_page.
* Line 2 -
IF NOT p_mawerk IS INITIAL.
l_t_list_top_of_page-key = text-021.
l_t_list_top_of_page-info = p_mawerk.
l_t_list_top_of_page-typ = 'S'.
APPEND l_t_list_top_of_page.
CLEAR l_t_list_top_of_page.
ENDIF.
IF NOT p_workct IS INITIAL.
l_t_list_top_of_page-key = text-022.
l_t_list_top_of_page-info = p_workct.
l_t_list_top_of_page-typ = 'S'.
APPEND l_t_list_top_of_page.
CLEAR l_t_list_top_of_page.
ENDIF.
IF NOT so_date-low IS INITIAL AND NOT so_date-high IS INITIAL.
l_v_date = so_date-high - so_date-low.
IF l_v_date > 7.
so_date-high = so_date-low + 6.
ENDIF.
ELSEIF NOT so_date-low IS INITIAL AND so_date-high IS INITIAL.
so_date-high = so_date-low.
so_date-low = so_date-low - 6.
ELSEIF so_date-low IS INITIAL AND NOT so_date-high IS INITIAL.
so_date-low = so_date-high - 6.
ENDIF.
IF NOT so_date-low IS INITIAL.
l_v_date+4(4) = so_date-low(4).
l_v_date+2(2) = so_date-low+4(2).
l_v_date(2) = so_date-low+6(2).
PERFORM set_date_format USING usr01-datfm l_v_date
CHANGING l_v_date1.
CONCATENATE text-033 l_v_date1 INTO
l_t_list_top_of_page-info
SEPARATED BY space.
IF NOT so_date-high IS INITIAL.
CLEAR l_v_date.
l_v_date+4(4) = so_date-high(4).
l_v_date+2(2) = so_date-high+4(2).
l_v_date(2) = so_date-high+6(2).
PERFORM set_date_format USING usr01-datfm l_v_date
CHANGING l_v_date1.
CONCATENATE l_t_list_top_of_page-info text-034 l_v_date1
INTO l_t_list_top_of_page-info
SEPARATED BY space.
ENDIF.
l_t_list_top_of_page-key = text-023.
* l_t_list_top_of_page-info = l_v_date.
l_t_list_top_of_page-typ = 'S'.
APPEND l_t_list_top_of_page.
CLEAR l_t_list_top_of_page.
ENDIF.
IF NOT so_month-low IS INITIAL.
l_v_month+2(4) = so_month-low(4).
l_v_month(2) = so_month-low+4(2).
PERFORM set_format USING usr01-datfm l_v_month
CHANGING l_v_mnth1.
ELSE.
l_v_mnth1 = 0.
ENDIF.
CONCATENATE text-033 l_v_mnth1 INTO
l_t_list_top_of_page-info
SEPARATED BY space.
IF NOT so_month-high IS INITIAL.
CLEAR l_v_month.
l_v_month+2(4) = so_month-high(4).
l_v_month(2) = so_month-high+4(2).
PERFORM set_format USING usr01-datfm l_v_month
CHANGING l_v_mnth1.
CONCATENATE l_t_list_top_of_page-info text-034 l_v_mnth1
INTO l_t_list_top_of_page-info
SEPARATED BY space.
ENDIF.
l_t_list_top_of_page-key = text-035.
l_t_list_top_of_page-typ = 'S'.
APPEND l_t_list_top_of_page.
CLEAR l_t_list_top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = l_t_list_top_of_page[].
ENDFORM.
*&---------------------------------------------------------------------*
*& Form download_file
*&---------------------------------------------------------------------*
FORM download_file.
DATA : l_v_fname TYPE string.
CONCATENATE p_fpath p_fname sy-datum sy-uzeit'.' 'XLS' INTO l_v_fname.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = l_v_fname
filetype = 'ASC'
* IMPORTING
* FILELENGTH =
TABLES
data_tab = g_t_final
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " download_file
*&---------------------------------------------------------------------*
*& Form set_format
*&---------------------------------------------------------------------*
* -->P_L_V_DATFM text
*----------------------------------------------------------------------*
FORM set_format USING p_l_v_datfm
l_v_month
CHANGING l_v_month1.
CASE p_l_v_datfm.
WHEN 1.
CONCATENATE l_v_month(2) '.' l_v_month+2(4) INTO l_v_month1.
WHEN 2.
CONCATENATE l_v_month(2) '/' l_v_month+2(4) INTO l_v_month1.
WHEN 3.
CONCATENATE l_v_month(2) '-' l_v_month+2(4) INTO l_v_month1.
WHEN 4.
CONCATENATE l_v_month+2(4) '.' l_v_month(2) INTO l_v_month1.
WHEN 5.
CONCATENATE l_v_month+2(4) '/' l_v_month(2) INTO l_v_month1.
WHEN 6.
CONCATENATE l_v_month+2(4) '-' l_v_month(2) INTO l_v_month1.
ENDCASE.
ENDFORM. " set_format
*&---------------------------------------------------------------------*
*& Form set_date_format
*&---------------------------------------------------------------------*
FORM set_date_format USING p_l_v_datfm
l_v_date
CHANGING l_v_date1.
CASE p_l_v_datfm.
WHEN 1.
CONCATENATE l_v_date(2) '.' l_v_date+2(2) '.' l_v_date+4(4)
INTO l_v_date1.
WHEN 2.
CONCATENATE l_v_date+2(2) '/' l_v_date(2) '/' l_v_date+4(4)
INTO l_v_date1.
WHEN 3.
CONCATENATE l_v_date+2(2) '-' l_v_date(2) '-' l_v_date+4(4)
INTO l_v_date1.
WHEN 4.
CONCATENATE l_v_date+4(4) '.' l_v_date+2(2) '.' l_v_date(2)
INTO l_v_date1.
WHEN 5.
CONCATENATE l_v_date+4(4) '/' l_v_date+2(2) '/' l_v_date(2)
INTO l_v_date1.
WHEN 6.
CONCATENATE l_v_date+4(4) '-' l_v_date+2(2) '-' l_v_date(2)
INTO l_v_date1.
ENDCASE.
ENDFORM. " set_date_format
*---------------------------------------------------------------------*
* FORM pf_status *
*---------------------------------------------------------------------*
FORM pf_status USING ex_tab TYPE slis_t_extab.
SET PF-STATUS '/RB04/YT2_ERRORSWORK'.
ENDFORM.
*---------------------------------------------------------------------*
* FORM usr_command *
*---------------------------------------------------------------------*
* --> R_UCOMM *
* --> PS_SELFIELD *
*---------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
ps_selfield TYPE slis_selfield.
DATA : wa_final LIKE g_t_final.
DATA : m_id TYPE c,
flag TYPE c.
DATA: l_v_date LIKE sy-datum,
l_v_date1 LIKE sy-datum.
CASE r_ucomm.
WHEN 'LINE_DTLS'.
CLEAR so_matnr.
REFRESH so_matnr.
REFRESH ra_date.
CLEAR ra_date.
CLEAR g_t_final.
IF p_aggmnt EQ g_c_x.
flag = 'X'.
EXPORT flag TO MEMORY ID m_id.
ELSE.
CLEAR flag.
ENDIF.
LOOP AT g_t_final WHERE select = g_c_x.
wa_final = g_t_final.
IF p_aggday EQ g_c_x OR p_aggmat EQ g_c_x.
ra_date-sign = 'I'.
ra_date-option = 'BT'.
ra_date-low = g_t_final-date.
ra_date-high = g_t_final-date.
APPEND ra_date.
CLEAR ra_date.
ELSEIF p_aggmnt EQ g_c_x.
ra_date-sign = 'I'.
ra_date-option = 'BT'.
CONCATENATE g_t_final-month '01' INTO l_v_date.
ra_date-low = l_v_date.
PERFORM get_last_date USING l_v_date
CHANGING l_v_date1.
ra_date-high = l_v_date1.
APPEND ra_date.
CLEAR ra_date.
ENDIF.
so_matnr-sign = 'I'.
so_matnr-option = 'BT'.
so_matnr-low = g_t_final-matnr.
APPEND so_matnr.
CLEAR so_matnr.
AT LAST.
IF p_aggmnt EQ g_c_x.
ra_date-sign = 'I'.
ra_date-option = 'BT'.
CONCATENATE wa_final-month '01' INTO l_v_date.
PERFORM get_last_date USING l_v_date
CHANGING l_v_date1.
ra_date-low = l_v_date.
ra_date-high = l_v_date1.
APPEND ra_date.
CLEAR ra_date.
ENDIF.
ENDAT.
ENDLOOP.
IF sy-subrc EQ 0.
SUBMIT /rb04/yt2_qm_pareto_analysis
WITH p_mawerk = p_mawerk
WITH p_workct = p_workct
WITH so_matnr IN so_matnr
WITH so_prdte IN ra_date
AND RETURN.
ELSE.
MESSAGE i050(/rb04/yt2_iqis) WITH text-045.
ENDIF.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_last_date
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
* -->P_L_V_DATE text
* <--P_L_V_DATE1 text
*----------------------------------------------------------------------*
FORM get_last_date USING l_v_date
CHANGING l_v_date1.
CALL FUNCTION 'SG_PS_GET_LAST_DAY_OF_MONTH'
EXPORTING
day_in = l_v_date
IMPORTING
last_day_of_month = l_v_date1
EXCEPTIONS
day_in_not_valid = 1
OTHERS = 2.
ENDFORM. " get_last_date
*&---------------------------------------------------------------------*
*& Form truncate_anzmaterial
*&---------------------------------------------------------------------*
FORM truncate_anzmaterial.
DATA : l_v_mat(17),
l_v_mat1(13),
l_v_mat2(3).
l_v_mat = g_t_final-anzmaterial.
*case usr01-dcpfm.
*when g_c_x.
SPLIT l_v_mat AT '.' INTO l_v_mat1 l_v_mat2.
g_t_final-anzmaterial1 = l_v_mat1.
*when others.
*split l_v_mat at ',' into l_v_mat1 l_v_mat2.
*g_t_final-anzmaterial1 = l_v_mat1.
*endcase.
ENDFORM. " truncate_anzmaterial