TYPE-POOLS: slis.
TABLES: qmel,qmfe,qmur, crhd, afru , crtx,usr01 .
*=== Data Declaration
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_sttxt LIKE bsvx-sttxt,
g_v_spars LIKE sy-langu,
g_v_stsma LIKE jsto-stsma.
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 g_ty_crhd OCCURS 0,
arbpl LIKE crhd-arbpl,
objid LIKE crhd-objid,
werks LIKE crhd-werks,
ktext LIKE crtx-ktext,
END OF g_ty_crhd.
DATA l_t_status LIKE jstat OCCURS 0 WITH HEADER LINE.
*---------------------------------------------------------------------*
* Types Begin with G_TY_ *
*---------------------------------------------------------------------*
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.
*=== internal tables, into which all output data are stored
TYPES: BEGIN OF g_ty_final,
anzfehler LIKE qmfe-anzfehler,
urcod LIKE qmur-urcod,
urtxt LIKE qmur-urtxt,
ppm_ratio LIKE qmfe-anzfehler,
ppm_percentage LIKE qmfe-anzfehler,
anz_total LIKE afru-gmnga,
slno(10),
END OF g_ty_final.
*=== Table fields from qmel
TYPES: BEGIN OF g_ty_qmel,
qmnum LIKE qmel-qmnum,
mawerk LIKE qmel-mawerk,
arbpl LIKE qmel-arbpl,
matnr LIKE qmel-matnr,
qmgrp LIKE qmel-qmgrp,
qmcod LIKE qmel-qmcod,
objnr LIKE qmel-objnr,
g_v_sttxt LIKE bsvx-sttxt,
anzfehler LIKE qmfe-anzfehler,
urcod LIKE qmur-urcod,
urtxt LIKE qmur-urtxt,
arbpl1 LIKE crhd-arbpl,
stat LIKE jstat-stat,
END OF g_ty_qmel.
*=== Table fields from qmfe
TYPES: BEGIN OF g_ty_qmfe,
qmnum LIKE qmfe-qmnum,
otgrp LIKE qmfe-otgrp,
oteil LIKE qmfe-oteil,
fd1 LIKE qmfe-fd1,
anzfehler LIKE qmfe-anzfehler,
fenum LIKE qmfe-fenum,
END OF g_ty_qmfe.
*=== Table fields from qmur
TYPES: BEGIN OF g_ty_qmur,
qmnum LIKE qmur-qmnum,
urgrp LIKE qmur-urgrp,
urcod LIKE qmur-urcod,
urtxt LIKE qmur-urtxt,
kzmla LIKE qmur-kzmla,
fenum LIKE qmur-fenum,
END OF g_ty_qmur.
*=== Table fields from crhd
TYPES: BEGIN OF g_ty_crhd,
arbpl LIKE crhd-arbpl,
objid LIKE crhd-objid,
werks LIKE crhd-werks,
ktext LIKE crtx-ktext,
END OF g_ty_crhd.
*=== Table fields from afru
TYPES: BEGIN OF g_ty_afru,
ersda LIKE afru-ersda,
arbid LIKE afru-arbid,
werks LIKE afru-werks,
/rb04/txtmat LIKE afru-/rb04/txtmat,
gmnga LIKE afru-gmnga,
END OF g_ty_afru.
*=== Table fields from blpk
TYPES: BEGIN OF g_ty_blpk,
prtnr LIKE blpk-prtnr,
matnr LIKE blpk-matnr,
werks LIKE blpk-werks,
datum LIKE blpk-datum,
END OF g_ty_blpk.
*=== Table fields from /rb04/yl4_ls_sa
TYPES: BEGIN OF g_ty_rb_sa,
prtnr LIKE /rb04/yl4_ls_sa-prtnr,
matnr LIKE /rb04/yl4_ls_sa-matnr,
gsmng LIKE /rb04/yl4_ls_sa-gsmng,
END OF g_ty_rb_sa.
*---------------------------------------------------------------------*
* Data Declaration *
*---------------------------------------------------------------------*
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_t_qmel TYPE TABLE OF g_ty_qmel," WITH HEADER LINE,
l_wa_qmel LIKE LINE OF g_t_qmel.
DATA: g_t_qmfe TYPE TABLE OF g_ty_qmfe,
l_wa_qmfe LIKE LINE OF g_t_qmfe.
DATA: g_t_qmur TYPE TABLE OF g_ty_qmur,
l_wa_qmur LIKE LINE OF g_t_qmur.
DATA: g_t_afru TYPE TABLE OF g_ty_afru,
l_wa_afru LIKE LINE OF g_t_afru.
DATA: g_t_blpk TYPE TABLE OF g_ty_blpk,
l_wa_blpk LIKE LINE OF g_t_blpk.
DATA: g_t_rb_sa TYPE TABLE OF g_ty_rb_sa,
l_wa_rb_sa LIKE LINE OF g_t_rb_sa.
DATA: g_t_crhd TYPE TABLE OF g_ty_crhd WITH HEADER LINE,
l_wa_crhd LIKE LINE OF g_t_crhd.
DATA: g_t_final TYPE TABLE OF g_ty_final,
l_wa_final LIKE LINE OF g_t_final.
DATA : BEGIN OF g_ty_help OCCURS 0,
objid LIKE crhd-objid,
ktext LIKE crtx-ktext,
END OF g_ty_help.
DATA : BEGIN OF l_v_date OCCURS 0,
date LIKE sy-datum,
END OF l_v_date.
DATA : g_t_afpo LIKE afpo OCCURS 0 WITH HEADER LINE.
*=== data declaration for variables.
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_urcod(10) ,
g_v_anzfehler_tot(10),
g_v_anz_total(13),
g_v_ppm_total(10).
*=== Ranges
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_prdte FOR qmfe-fd1.
*=== Constants
CONSTANTS: g_c_x(1) VALUE 'X',
l_c_zd(2) VALUE 'ZD' ,
l_c_zd_txt(5) VALUE 'E0003',
l_c_proc_txt(2) VALUE 'P',
l_c_dlco_txt(2) VALUE 'E',
l_c_code_txt(2) VALUE '5',
l_c_slno(2) VALUE '10',
l_c_urtxt(2) VALUE '50',
l_c_urcod(2) VALUE '5',
l_c_anz(2) VALUE '8',
l_c_ratio(2) VALUE '9',
l_c_perc(2) VALUE '10',
l_tcode(30) VALUE '/RB04/YT2_REP_ERR_PA' .
*=== ALV data declarations
DATA : g_t_fieldcat TYPE TABLE OF slis_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv,
g_layout TYPE slis_layout_alv.
DATA: g_t_event TYPE slis_t_event.
DATA: g_v_repid LIKE sy-repid .
*---------------------------------------------------------------------*
* Select Options / Parameters : *
*---------------------------------------------------------------------*
*=== display the selection screen for user to input data
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_mawerk LIKE qmel-mawerk .
PARAMETERS: p_workct LIKE crhd-arbpl.
SELECT-OPTIONS: so_matnr FOR qmel-matnr." OBLIGATORY.
SELECT-OPTIONS: so_prdte FOR qmfe-fd1 ."OBLIGATORY.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 59(79) text-022.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
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 SKIP.
PARAMETERS: p_fileop AS CHECKBOX USER-COMMAND clk.
PARAMETERS: p_fname(80).
PARAMETERS: p_fpath(80).
SELECTION-SCREEN END OF BLOCK b1.
*---------------------------------------------------------------------*
* AT SELECTION-SCREEN *
* Selection-screen validation *
*---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*=== screen validation for program runs in background
IF sy-batch EQ 'X'.
LOOP AT SCREEN.
IF screen-name EQ 'SO_PRDTE-LOW' .
screen-required = 0.
MODIFY SCREEN.
ELSEIF screen-name EQ 'SO_PRDTE-HIGH'.
screen-required = 0.
MODIFY SCREEN.
ELSEIF screen-name EQ 'SO_MATNR-LOW'.
screen-required = 0.
MODIFY SCREEN.
ELSEIF screen-name EQ 'SO_MATNR-HIGH' .
screen-required = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ELSE.
*=== screen validation for program runs in foreground
LOOP AT SCREEN.
IF ( screen-name EQ 'P_FNAME' OR screen-name EQ 'P_FPATH' ) AND
p_fileop NE 'X'.
screen-input = '0'.
CLEAR : p_fname , p_fpath.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
*=== Screen validation for plant
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.
*=== Screen validation for workcenter
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.
*=== Screen validation for material
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.
*=== helpview_Type of Process
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.
*=== helpview_Type of defectlocation
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.
*=== helpview_Type of code
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.
*=== helpview_for_workcenter
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_workct.
PERFORM helpview_work_center.
AT SELECTION-SCREEN.
*=== Screen validation for plant
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.
ENDIF.
*=== Screen validation for filename & filepath
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.
*=== Screen validation for material
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.
*=== Screen validation for date
IF so_prdte IS INITIAL.
MESSAGE e050(/rb04/yt2_iqis) WITH text-060 .
ENDIF.
ENDIF.
IF sy-ucomm EQ 'ONLI'.
IF p_fileop EQ g_c_x.
MESSAGE e050(/rb04/yt2_iqis) WITH text-019 .
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form helpview_Type of_Process
*&---------------------------------------------------------------------*
FORM helpview_typof_process.
SELECT codegruppe code kurztext FROM qpct
INTO CORRESPONDING FIELDS OF TABLE g_t_proc
WHERE katalogart = l_c_proc_txt
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-006
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
*&---------------------------------------------------------------------*
FORM helpview_typof_dloc.
SELECT codegruppe code kurztext FROM qpct
INTO CORRESPONDING FIELDS OF TABLE g_t_dloc
WHERE katalogart = l_c_dlco_txt
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-007
value_org = 'S'
TABLES
value_tab = g_t_dloc1.
ENDFORM. " helpview_typof_dloc
*&---------------------------------------------------------------------*
*& Form helpview_typeof_code
*&---------------------------------------------------------------------*
FORM helpview_typeof_code.
SELECT codegruppe code kurztext FROM qpct
INTO CORRESPONDING FIELDS OF TABLE g_t_tcode
WHERE katalogart = l_c_code_txt
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-008
value_org = 'S'
TABLES
value_tab = g_t_tcode1.
ENDFORM. " helpview_typeof_code
*&---------------------------------------------------------------------*
*& Form helpview_work_center
*&---------------------------------------------------------------------*
FORM helpview_work_center.
*=== Helpview for workcenter based on plant entered
IF NOT p_mawerk IS INITIAL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE g_ty_crhd FROM crhd
WHERE werks EQ p_mawerk.
ELSE.
SELECT * INTO CORRESPONDING FIELDS OF TABLE g_ty_crhd FROM crhd.
ENDIF.
IF NOT g_ty_crhd[] IS INITIAL.
SELECT * FROM crtx INTO CORRESPONDING FIELDS OF TABLE g_ty_help
FOR ALL ENTRIES IN g_ty_crhd
WHERE objid = g_ty_crhd-objid.
ENDIF.
LOOP AT g_ty_crhd.
READ TABLE g_ty_help WITH KEY objid = g_ty_crhd-objid.
IF sy-subrc EQ 0.
g_ty_crhd-ktext = g_ty_help-ktext.
MODIFY g_ty_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-009
value_org = 'S'
TABLES
value_tab = g_ty_crhd.
ENDFORM. "helpview_Work_Center
*---------------------------------------------------------------------*
* START-OF-SELECTION. *
*---------------------------------------------------------------------*
START-OF-SELECTION.
*=== authority check for the object 'Q_QMEL'.
PERFORM authority_check.
*=== splitting values for Type of process , dloc & code.
PERFORM split_value.
*=== selecting values.
PERFORM select_value.
*=== fieldcatlog for output
PERFORM build_fieldcat.
*=== display data in ALV Grid format.
IF NOT g_t_final IS INITIAL.
PERFORM displaydata.
ELSE.
MESSAGE s050(/rb04/yt2_iqis) WITH text-043.
ENDIF.
*=== download file
IF p_fileop EQ g_c_x ."AND p_fname NE ' ' AND p_fpath NE ' '.
PERFORM download.
ENDIF.
*&---------------------------------------------------------------------*
*& Form displaydata
*&---------------------------------------------------------------------*
FORM displaydata .
g_v_repid = sy-repid .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_v_repid
i_callback_html_end_of_list = 'END_OF_LIST_HTML'
i_callback_html_top_of_page = 'TOP_OF_PAGE'
it_fieldcat = g_t_fieldcat[]
i_default = 'X'
i_save = 'A'
* is_variant = w_variant
it_events = g_t_event[]
* is_print = wa_print
TABLES
t_outtab = g_t_final
.
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. " displaydata
*&---------------------------------------------------------------------*
*& Form build_fieldcat
*&---------------------------------------------------------------------*
FORM build_fieldcat .
*=== Serial No
wa_fieldcat-col_pos = 1.
wa_fieldcat-fieldname = 'SLNO'.
wa_fieldcat-seltext_l = text-050.
wa_fieldcat-outputlen = l_c_slno.
APPEND wa_fieldcat TO g_t_fieldcat.
CLEAR wa_fieldcat.
*=== Cause Text
wa_fieldcat-col_pos = 2.
wa_fieldcat-fieldname = 'URTXT'.
wa_fieldcat-seltext_l = text-051.
wa_fieldcat-outputlen = l_c_urtxt.
APPEND wa_fieldcat TO g_t_fieldcat.
CLEAR wa_fieldcat.
*=== Cause Code
wa_fieldcat-col_pos = 3.
wa_fieldcat-fieldname = 'URCOD'.
wa_fieldcat-seltext_l = text-052.
wa_fieldcat-outputlen = l_c_urcod.
APPEND wa_fieldcat TO g_t_fieldcat.
CLEAR wa_fieldcat.
*=== Number of Defects Found
wa_fieldcat-col_pos = 4.
wa_fieldcat-fieldname = 'ANZFEHLER'.
wa_fieldcat-seltext_l = text-053.
wa_fieldcat-outputlen = l_c_anz.
APPEND wa_fieldcat TO g_t_fieldcat.
CLEAR wa_fieldcat.
*=== PPM Ratio
wa_fieldcat-col_pos = 5.
wa_fieldcat-fieldname = 'PPM_RATIO'.
wa_fieldcat-seltext_l = text-054.
wa_fieldcat-outputlen = l_c_ratio.
wa_fieldcat-do_sum = g_c_x.
APPEND wa_fieldcat TO g_t_fieldcat.
CLEAR wa_fieldcat.
*=== PPM Percentage
wa_fieldcat-col_pos = 6.
wa_fieldcat-fieldname = 'PPM_PERCENTAGE'.
wa_fieldcat-seltext_l = text-055.
wa_fieldcat-outputlen = l_c_perc.
wa_fieldcat-do_sum = g_c_x.
APPEND wa_fieldcat TO g_t_fieldcat.
CLEAR wa_fieldcat.
ENDFORM. "build_fieldcat
*&---------------------------------------------------------------------*
*& Form DOWNLOAD
*&---------------------------------------------------------------------*
FORM download.
DATA l_v_path_name TYPE string.
CONCATENATE p_fpath p_fname sy-datum sy-uzeit'.' 'XLS' INTO
l_v_path_name.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = l_v_path_name
filetype = 'ASC'
TABLES
data_tab = g_t_final.
ENDFORM. " DOWNLOAD
*&---------------------------------------------------------------------*
*& Form f001_authority_check
*&---------------------------------------------------------------------*
FORM authority_check .
AUTHORITY-CHECK OBJECT 'Q_QMEL'
ID 'QMART' FIELD l_c_zd
ID 'TCD' FIELD l_tcode
ID 'WERKS' FIELD p_mawerk.
IF NOT sy-subrc IS INITIAL.
MESSAGE e050(/rb04/yt2_iqis) WITH text-036.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SPLIT_VALUE
*&---------------------------------------------------------------------*
FORM split_value.
*=== spliting values for Types of process
DATA l_v_date LIKE sy-datum.
DATA : l_v_date1 LIKE sy-datum,
l_v_date2 LIKE sy-datum.
DATA m_id TYPE c.
DATA flag TYPE c.
*=== spliting values for Types of process if field value is initial
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.
*=== spliting values for Types of process if field value is not initial
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.
*=== spliting values for Types of process if field value high is initial
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.
* === spliting values for Types of defectloc fieldvalue is initial
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.
* === spliting values for Types of defectloc fieldvalue is not initial
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.
* === spliting values for Types of defectloc fieldvalue high initial
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.
*=== spliting values for Types of code fieldvalue is initial
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.
*=== spliting values for Types of code fieldvalue is not initial
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.
*=== spliting values for Types of code fieldvalue high is initial
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.
*=== Export Values p_aggmnt from report workplace
CLEAR ra_prdte.
IMPORT flag FROM MEMORY ID m_id.
IF flag = 'X'.
LOOP AT so_prdte.
ra_prdte-sign = 'I'.
ra_prdte-option = 'BT'.
ra_prdte-low = so_prdte-low.
ra_prdte-high = so_prdte-high.
APPEND ra_prdte.
ENDLOOP.
FREE MEMORY ID m_id.
ELSE.
*=== Calculating Date is Max 7 days in the past
LOOP AT so_prdte.
IF NOT so_prdte-low IS INITIAL AND NOT so_prdte-high IS INITIAL.
l_v_date = so_prdte-high - so_prdte-low.
IF l_v_date > 7.
ra_prdte-high = so_prdte-low + 6.
ELSE.
ra_prdte-high = so_prdte-high.
ENDIF.
ra_prdte-sign = 'I'.
ra_prdte-option = 'BT'.
ra_prdte-low = so_prdte-low.
APPEND ra_prdte.
ELSEIF NOT so_prdte-low IS INITIAL AND so_prdte-high IS INITIAL.
ra_prdte-sign = 'I'.
ra_prdte-option = 'BT'.
ra_prdte-high = so_prdte-low.
ra_prdte-low = so_prdte-low - 6.
APPEND ra_prdte.
ELSEIF so_prdte-low IS INITIAL AND NOT so_prdte-high IS INITIAL.
ra_prdte-sign = 'I'.
ra_prdte-option = 'BT'.
ra_prdte-low = so_prdte-high - 6.
ra_prdte-high = so_prdte-high.
APPEND ra_prdte.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " SPLIT_VALUE
*&---------------------------------------------------------------------*
*& Form SELECT_VALUE
*&---------------------------------------------------------------------*
FORM select_value.
*=== select values for the given workcenter
SELECT SINGLE * FROM crhd WHERE arbpl = p_workct.
g_v_workct = crhd-objid.
*=== Reading data with Notification type ZD & with user status DAME.
IF sy-subrc = 0.
SELECT * INTO CORRESPONDING FIELDS OF TABLE g_t_qmel
FROM qmel WHERE mawerk = p_mawerk AND
* arbplwerk = p_mawerk AND
* arbpl = g_v_workct AND
matnr IN so_matnr AND
qmart = l_c_zd AND
kzloesch NE g_c_x ."AND
* qmgrp IN ra_qmgrp AND
* qmcod IN ra_qmcod.
ENDIF.
*=== reading the status of objnr.
LOOP AT g_t_qmel INTO l_wa_qmel.
CALL FUNCTION 'STATUS_READ'
EXPORTING
objnr = l_wa_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.
l_wa_qmel-stat = l_t_status-stat.
l_wa_qmel-arbpl1 = p_workct.
MODIFY g_t_qmel FROM l_wa_qmel.
ENDIF.
ENDIF.
ENDLOOP.
CLEAR l_wa_qmel.
*=== deleting status other then 'E0003'
DELETE g_t_qmel WHERE stat NE l_c_zd_txt.
*=== if the header table qmel is initial
IF NOT g_t_qmel[] IS INITIAL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE g_t_qmfe FROM
qmfe FOR ALL ENTRIES IN g_t_qmel
WHERE qmnum EQ g_t_qmel-qmnum AND
fd1 IN ra_prdte AND
kzloesch NE g_c_x AND
otgrp IN ra_otgrp AND
oteil IN ra_oteil AND
arbpl EQ g_v_workct AND
codegrp IN ra_qmgrp AND
code IN ra_qmcod.
ENDIF.
*=== if the item table qmfe is initial
IF NOT g_t_qmfe[] IS INITIAL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE g_t_qmur FROM
qmur FOR ALL ENTRIES IN g_t_qmfe
WHERE qmnum = g_t_qmfe-qmnum AND
fenum = g_t_qmfe-fenum AND
kzloesch NE g_c_x AND
urgrp IN ra_urgrp AND
urcod IN ra_urcod.
ENDIF.
*=== calculating quantity of order prod
PERFORM calc_qty_order_prod.
*=== calculating quantity of serial prod
PERFORM calc_qnty_serial_prod.
*=== reading cause code & causetext
PERFORM read_urcod.
*=== calculating ppmratio & percentage
PERFORM calc_ppm_ratio_percentage.
ENDFORM. " SELECT_VALUE
*---------------------------------------------------------------------*
* FORM end_of_list_html *
*---------------------------------------------------------------------*
* --> Display data in Footer
*---------------------------------------------------------------------*
FORM end_of_list_html USING end TYPE REF TO cl_dd_document.
DATA: ls_text TYPE sdydo_text_element,
ls_text1 TYPE sdydo_text_element,
l_grid TYPE REF TO cl_gui_alv_grid,
f(14) TYPE c VALUE 'SET_ROW_HEIGHT',
l_v_anz_tot(17) TYPE c,
l_v_anz1(13),
l_v_anz2(3).
CONCATENATE text-t36 ' ' INTO ls_text.
l_v_anz_tot = g_v_anz_total.
*=== to remove decimal seperator from anzmaterial total
SPLIT l_v_anz_tot AT '.' INTO l_v_anz1 l_v_anz2.
CONCATENATE ' ' l_v_anz1 INTO ls_text1.
*=== adds test (via variable)
CALL METHOD end->add_text
EXPORTING
text = ls_text
sap_emphasis = 'STRONG'.
CALL METHOD end->add_text
EXPORTING
text = ls_text1
sap_emphasis = 'LARGE'.
*=== adds new line (start new line)
CALL METHOD end->new_line.
CONCATENATE text-t35 ' ' INTO ls_text.
CONCATENATE ' ' g_v_anzfehler_tot INTO ls_text1.
*=== display text
CALL METHOD end->add_text
EXPORTING
text = ls_text
sap_emphasis = 'STRONG'.
CALL METHOD end->add_text
EXPORTING
text = ls_text1
sap_emphasis = 'LARGE'.
*=== adds new line (start new line)
CALL METHOD end->new_line.
CONCATENATE text-t37 ' ' INTO ls_text.
CONCATENATE ' ' g_v_ppm_total INTO ls_text1.
*=== display text(normal)
CALL METHOD end->add_text
EXPORTING
text = ls_text
sap_emphasis = 'STRONG'.
CALL METHOD end->add_text
EXPORTING
text = ls_text1
sap_emphasis = 'LARGE'.
*=== set height of this section
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = l_grid.
CALL METHOD l_grid->parent->parent->(f)
EXPORTING
id = 3
height = 12.
ENDFORM. "end_of_list_html.
*---------------------------------------------------------------------*
* FORM TOP_OF_PAGE *
*---------------------------------------------------------------------*
* --> Display data in Header
*---------------------------------------------------------------------*
FORM top_of_page USING cl_dd TYPE REF TO cl_dd_document.
DATA: lv_per(255),
lv_per1(255).
DATA l_v_date LIKE sy-datum.
DATA l_v_date1(10).
SELECT SINGLE * FROM usr01
WHERE bname EQ sy-uname.
*=== for space
CALL METHOD cl_dd->add_gap
EXPORTING
width = 7.
*=== to add text in heading
CALL METHOD cl_dd->add_text
EXPORTING
text = text-030
sap_style = cl_dd_document=>heading
sap_fontsize = cl_dd_document=>small
sap_emphasis = cl_dd_document=>strong.
*=== for new line
CALL METHOD cl_dd->new_line
EXPORTING
repeat = 0.
CALL METHOD cl_dd->add_gap
EXPORTING
width = 7.
*=== To add text in heading
CALL METHOD cl_dd->add_text
EXPORTING
text = text-031
sap_fontsize = cl_dd_document=>large
sap_emphasis = cl_dd_document=>strong
style_class = space.
WRITE p_workct TO lv_per.
CALL METHOD cl_dd->add_text
EXPORTING
text = lv_per
sap_fontsize = cl_dd_document=>large.
*=== for new line
CALL METHOD cl_dd->new_line
EXPORTING
repeat = 0.
*=== for space
CALL METHOD cl_dd->add_gap
EXPORTING
width = 7.
*=== To add text in heading
CALL METHOD cl_dd->add_text
EXPORTING
text = text-032
sap_fontsize = cl_dd_document=>large
sap_emphasis = cl_dd_document=>strong.
*=== concatenate date.
* CONCATENATE text-t39 ra_prdte-low+6(2) '/' ra_prdte-low+4(2) '/'
* ra_prdte-low+0(4) ' ' ' ' text-t03
* ra_prdte-high+6(2) '/'
* ra_prdte-high+4(2) '/'
* ra_prdte-high+0(4) INTO lv_per.
SORT ra_prdte.
READ TABLE ra_prdte INDEX 1.
l_v_date+4(4) = ra_prdte-low(4).
l_v_date+2(2) = ra_prdte-low+4(2).
l_v_date(2) = ra_prdte-low+6(2).
PERFORM set_date_format USING usr01-datfm l_v_date
CHANGING l_v_date1.
SORT ra_prdte DESCENDING.
READ TABLE ra_prdte INDEX 1.
CONCATENATE text-t39 l_v_date1 INTO lv_per SEPARATED BY space.
CLEAR: l_v_date, l_v_date1.
l_v_date+4(4) = ra_prdte-high(4).
l_v_date+2(2) = ra_prdte-high+4(2).
l_v_date(2) = ra_prdte-high+6(2).
PERFORM set_date_format USING usr01-datfm l_v_date
CHANGING l_v_date1.
CONCATENATE lv_per text-t03 l_v_date1 INTO lv_per SEPARATED BY space.
CALL METHOD cl_dd->add_text
EXPORTING
text = lv_per
*=== fontsize should be defined for large
sap_fontsize = cl_dd_document=>large.
*=== for new line
CALL METHOD cl_dd->new_line
EXPORTING
repeat = 0.
*=== for space
CALL METHOD cl_dd->add_gap
EXPORTING
width = 7.
*=== To add text in heading
CALL METHOD cl_dd->add_text
EXPORTING
text = text-040
sap_fontsize = cl_dd_document=>large
sap_emphasis = cl_dd_document=>strong.
CONCATENATE text-t06 ' ' INTO lv_per.
CALL METHOD cl_dd->add_text
EXPORTING
text = lv_per
sap_fontsize = cl_dd_document=>large.
ENDFORM. "top_of_page
*&---------------------------------------------------------------------*
*& Form calc_qty_order_prod
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM calc_qty_order_prod.
*=== Calculating quantity for order-production:
IF NOT g_t_qmur[] IS INITIAL.
*=== selecting values for the given material
SELECT * FROM afpo INTO TABLE g_t_afpo WHERE matnr IN so_matnr.
*=== based on ordernumber selecting values from afru.
SELECT * FROM afru INTO CORRESPONDING FIELDS OF TABLE g_t_afru
FOR ALL ENTRIES IN g_t_afpo
WHERE arbid EQ g_v_workct AND
ersda IN ra_prdte AND
werks EQ p_mawerk AND
stokz NE g_c_x AND
aufnr EQ g_t_afpo-aufnr AND
stzhl EQ '' ."0.
*=== Populate the data
*=== summing the value anztotal
LOOP AT g_t_afru INTO l_wa_afru.
SUM.
EXIT.
ENDLOOP.
CLEAR g_v_anz_total.
g_v_anz_total = l_wa_afru-gmnga.
ENDIF.
ENDFORM. " calc_qty_order_prod
*&---------------------------------------------------------------------*
*& Form calc_qnty_serial_prod
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM calc_qnty_serial_prod.
*=== Calculating quantity for serial-production:
IF NOT g_t_qmur[] IS INITIAL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE g_t_blpk FROM
blpk WHERE /rb04/yl4_arbpl = g_v_workct
AND werks EQ p_mawerk
AND matnr IN so_matnr
AND datum IN ra_prdte.
ENDIF.
IF NOT g_t_blpk[] IS INITIAL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE g_t_rb_sa FROM
/rb04/yl4_ls_sa FOR ALL ENTRIES IN g_t_blpk
WHERE prtnr EQ g_t_blpk-prtnr.
SORT g_t_rb_sa BY prtnr.
LOOP AT g_t_rb_sa INTO l_wa_rb_sa.
SUM.
EXIT.
ENDLOOP.
g_v_anz_total = g_v_anz_total + l_wa_rb_sa-gsmng.
ENDIF.
ENDFORM. " calc_qnty_serial_prod
*&---------------------------------------------------------------------*
*& Form read_urcod
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM read_urcod.
*=== Calculating urcod.
IF NOT g_v_anz_total = 0.
SORT g_t_qmur BY urtxt ASCENDING." qmnum fenum.
LOOP AT g_t_qmur INTO l_wa_qmur.
CLEAR l_wa_final.
* l_wa_final-arbpl1 = p_workct.
SORT g_t_qmfe BY fenum ASCENDING.
READ TABLE g_t_qmfe INTO l_wa_qmfe WITH KEY qmnum = l_wa_qmur-qmnum
fenum = l_wa_qmur-fenum.
IF sy-subrc = 0.
l_wa_final-anzfehler = l_wa_qmfe-anzfehler.
l_wa_final-urcod = l_wa_qmur-urcod.
g_v_anzfehler_tot = g_v_anzfehler_tot + l_wa_qmfe-anzfehler.
SELECT SINGLE urtxt INTO l_wa_final-urtxt FROM qmur WHERE
urcod = l_wa_qmur-urcod
AND kzmla = sy-langu.
ENDIF.
APPEND l_wa_final TO g_t_final.
ENDLOOP.
ENDIF.
ENDFORM. " calc_urcod
*&---------------------------------------------------------------------*
*& Form calc_ppm_ratio_percentage
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM calc_ppm_ratio_percentage.
*=== Calculating Ppm_Ratio & Ppm_Percentage:
CLEAR l_wa_qmel.
SORT g_t_final BY anzfehler DESCENDING.
IF NOT g_t_qmur[] IS INITIAL.
LOOP AT g_t_final INTO l_wa_final.
*=== calculating ppm ratio
IF g_v_anz_total = 0.
l_wa_final-ppm_ratio = g_v_anz_total.
ELSE.
l_wa_final-ppm_ratio = l_wa_final-anzfehler * 1000000 /
g_v_anz_total.
ENDIF.
*=== calculating ppm percentage
IF g_v_anzfehler_tot = 0." is initial.
l_wa_final-ppm_percentage = g_v_anzfehler_tot.
ELSE.
l_wa_final-ppm_percentage = l_wa_final-anzfehler /
g_v_anzfehler_tot * 100.
ENDIF.
*=== serial no
l_wa_final-slno = sy-tabix.
g_v_ppm_total = g_v_ppm_total + l_wa_final-ppm_ratio.
MODIFY g_t_final FROM l_wa_final TRANSPORTING ppm_ratio
ppm_percentage slno.
ENDLOOP.
ENDIF.
ENDFORM. " calc_ppm_ratio_percentage
*&---------------------------------------------------------------------*
*& 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
No comments:
Post a Comment