Monday, November 24, 2008

Auto-Refreshed ALV Report

REPORT z_alv_auto_refresh.
*---------------------------------------------------------------------*
* This report displays User's info (SM04) using the FM : *
* REUSE_ALV_LIST_DISPLAY *
* The list is auto-refreshed (refresh time : 5 seconds) *
*---------------------------------------------------------------------*
TYPE-POOLS: slis. " ALV Global Types

DATA : gt_user LIKE uinfo OCCURS 0 WITH HEADER LINE. " User info in SM04

START-OF-SELECTION.

PERFORM f_read_data.

PERFORM f_display_data.

*---------------------------------------------------------------------*
* Form F_LIRE_DATA
*---------------------------------------------------------------------*
FORM f_read_data.

REFRESH gt_user.

* Get User's info
CALL FUNCTION 'THUSRINFO'
TABLES
usr_tabl = gt_user.

* Wait in a task
PERFORM f_call_rfc_wait.

ENDFORM. " F_READ_DATA


*---------------------------------------------------------------------*
* Form F_DISPLAY_DATA
*---------------------------------------------------------------------*
FORM f_display_data.

DEFINE m_sort.
add 1 to ls_sort-spos.
ls_sort-fieldname = &1.
append ls_sort to lt_sort.
END-OF-DEFINITION.

DEFINE m_event_exit.
clear ls_event_exit.
ls_event_exit-ucomm = &1.
ls_event_exit-after = 'X'.
append ls_event_exit to lt_event_exit.
END-OF-DEFINITION.

DATA :
ls_layout TYPE slis_layout_alv,
lt_sort TYPE slis_t_sortinfo_alv,
ls_sort TYPE slis_sortinfo_alv,
lt_event_exit TYPE slis_t_event_exit,
ls_event_exit TYPE slis_event_exit.

* Build Sort Table
m_sort 'ZEIT'.

* Build Event Exit Table
m_event_exit '&NTE'. " Refresh

ls_layout-zebra = 'X'.
ls_layout-colwidth_optimize = 'X'.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = sy-cprog
i_callback_user_command = 'USER_COMMAND'
is_layout = ls_layout
i_structure_name = 'UINFO'
it_sort = lt_sort
it_event_exit = lt_event_exit
TABLES
t_outtab = gt_user.

ENDFORM. " F_DISPLAY_DATA


*---------------------------------------------------------------------*
* FORM USER_COMMAND *
*---------------------------------------------------------------------*
FORM user_command USING i_ucomm TYPE syucomm
is_selfield TYPE slis_selfield. "#EC CALLED

CASE i_ucomm.
WHEN '&NTE'.
PERFORM f_read_data.
is_selfield-refresh = 'X'.
SET USER-COMMAND '&OPT'. " Optimize columns width
ENDCASE.

ENDFORM. " USER_COMMAND


*---------------------------------------------------------------------*
* Form F_CALL_RFC_WAIT
*---------------------------------------------------------------------*
FORM f_call_rfc_wait.

DATA lv_mssg(80). "#EC NEEDED

* Wait in a task
CALL FUNCTION 'RFC_PING_AND_WAIT' STARTING NEW TASK '001'
PERFORMING f_task_end ON END OF TASK
EXPORTING
seconds = 5 " Refresh time
busy_waiting = space
EXCEPTIONS
RESOURCE_FAILURE = 1
communication_failure = 2 MESSAGE lv_mssg
system_failure = 3 MESSAGE lv_mssg
OTHERS = 4.

ENDFORM. " F_CALL_RFC_WAIT


*---------------------------------------------------------------------*
* Form F_TASK_END
*---------------------------------------------------------------------*
FORM f_task_end USING u_taskname.
DATA lv_mssg(80). "#EC NEEDED

* Receiving task results
RECEIVE RESULTS FROM FUNCTION 'RFC_PING_AND_WAIT'
EXCEPTIONS
RESOURCE_FAILURE = 1
communication_failure = 2 MESSAGE lv_mssg
system_failure = 3 MESSAGE lv_mssg
OTHERS = 4.

CHECK sy-subrc EQ 0.
SET USER-COMMAND '&NTE'. " Refresh

ENDFORM. " F_TASK_END

Thursday, September 18, 2008

ALV Grid in 3 Steps without Screen Painter

DATA: l_alv TYPE REF TO cl_gui_alv_grid,
lt_sflight TYPE TABLE OF sflight.
SELECTION-SCREEN BEGIN OF SCREEN 1001 .
SELECTION-SCREEN END OF SCREEN 1001.
SELECT * FROM sflight INTO TABLE lt_sflight.
* Creation of the ALV object, when we use cl_gui_container=>screen0 as
*parent, the ALVGrid control will
* automatically use the full screen to display the grid, NO CONTAINER
*DEFINITION IS REQUIRED !
CREATE OBJECT l_alv EXPORTING i_parent = cl_gui_container=>screen0.
* calling the display of the grid, the system will automatically create
*the fieldcatalog based
* on the table name you pass in parameter
CALL METHOD l_alv->set_table_for_first_display
EXPORTING i_structure_name = 'SFLIGHT'
CHANGING it_outtab = lt_sflight.
DATA p_text(5) TYPE c." LENGTH 5.
DO 2 TIMES.
WAIT UP TO '0.5' SECONDS.
p_text(3) = sy-index.
p_text+3 = '%'.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = sy-index
text = p_text.
ENDDO.
CALL SELECTION-SCREEN 1001." STARTING AT 8 8 ENDING AT 85 22.

Showing a progress bar in ABAP(Timer Clock)

REPORT zdany_progress_bar.
DATA p_text(5) TYPE c." LENGTH 5.
DO 3 TIMES.
WAIT UP TO '0.5' SECONDS.
p_text(3) = sy-index.
p_text+3 = '%'.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = sy-index
text = p_text.
ENDDO.

ALV Output as E-Mail

*--------------------------------------------------------------------
*& Report ZTESTMAIL *
*& *
*&------------------------------------------------------
*& *
*& *
*&---------------------------------------------------------------------
REPORT ZTESTMAIL .
tables: ekko.
parameters: p_email type somlreci1-receiver ."default
*'kesava.perumal@gmail.com'.
types: begin of t_ekpo,
ebeln type ekpo-ebeln,
ebelp type ekpo-ebelp,
aedat type ekpo-aedat,
matnr type ekpo-matnr,
end of t_ekpo.
data: it_ekpo type standard table of t_ekpo initial size 0,
wa_ekpo type t_ekpo.
types: begin of t_charekpo,
ebeln(10) type c,
ebelp(5) type c,
aedat(8) type c,
matnr(18) type c,
end of t_charekpo.
data: wa_charekpo type t_charekpo.
data: it_message type standard table of solisti1 initial size 0
with header line.
data: it_attach type standard table of solisti1 initial size 0
with header line.

data: t_packing_list like sopcklsti1 occurs 0 with header line,
t_contents like solisti1 occurs 0 with header line,
t_receivers like somlreci1 occurs 0 with header line,
t_attachment like solisti1 occurs 0 with header line,
t_object_header like solisti1 occurs 0 with header line,
w_cnt type i,
w_sent_all(1) type c,
w_doc_data like sodocchgi1,
gd_error type sy-subrc,
gd_reciever type sy-subrc.
t_object_header = 'Text.xls'. append t_object_header.
************************************************************************
*START_OF_SELECTION
start-of-selection.

*Retrieve sample data from table ekpo
perform data_retrieval.

*Populate table with detaisl to be entered into .xls file
perform build_xls_data_table.
************************************************************************
*END-OF-SELECTION
end-of-selection.

*Populate message body text
perform populate_email_message_body.

*Send file by email as .xls speadsheet
perform send_file_as_email_attachment
tables it_message
it_attach
using p_email
'Example .xls documnet attachment'
'XLS'
'filename'
' '
' '
' '
changing gd_error
gd_reciever.

*Instructs mail send program for SAPCONNECT to send email(rsconn01)
perform initiate_mail_execute_program.
*&---------------------------------------------------------------------
*& Form DATA_RETRIEVAL
*&---------------------------------------------------------------------

*Retrieve data form EKPO table and populate itab it_ekko
*----------------------------------------------------------------------
form data_retrieval.
select ebeln ebelp aedat matnr
up to 10 rows
from ekpo
into table it_ekpo.
endform. " DATA_RETRIEVAL
*&---------------------------------------------------------------------
*& Form BUILD_XLS_DATA_TABLE
*&---------------------------------------------------------------------

*Build data table fo,r .xls document
*----------------------------------------------------------------------
form build_xls_data_table.
CONSTANTS: con_cret TYPE x VALUE '0D', "OK for non Unicode
con_tab TYPE x VALUE '09'. "OK for non Unicode
*If you have Unicode check active in program attributes thnen you will
*need to declare constants as follows
*class cl_abap_char_utilities definition load.
*constants:
*con_tab type c value cl_abap_char_utilities=>horizontal_tab,
*con_cret type c value cl_abap_char_utilities=>cr_lf.
concatenate 'EBELN' 'EBELP' 'AEDAT' 'MATNR' into it_attach separated by
con_tab.
concatenate con_cret it_attach into it_attach.
append it_attach.
loop at it_ekpo into wa_charekpo.
concatenate wa_charekpo-ebeln wa_charekpo-ebelp
wa_charekpo-aedat wa_charekpo-matnr into it_attach separated by con_tab.
concatenate con_cret it_attach into it_attach.
append it_attach.
endloop.
endform. " BUILD_XLS_DATA_TABLE

*&---------------------------------------------------------------------
*& Form SEND_FILE_AS_EMAIL_ATTACHMENT
*&---------------------------------------------------------------------

*Send email
*----------------------------------------------------------------------
form send_file_as_email_attachment tables pit_message
pit_attach
using p_email
p_mtitle
p_format
p_filename
p_attdescription
p_sender_address
p_sender_addres_type
changing p_error
p_reciever.
data: ld_error type sy-subrc,
ld_reciever type sy-subrc,
ld_mtitle like sodocchgi1-obj_descr,
ld_email like somlreci1-receiver,
ld_format type so_obj_tp ,
ld_attdescription type so_obj_nam ,
ld_attfilename type so_obj_des ,
ld_sender_address like soextreci1-receiver,
ld_sender_address_type like soextreci1-adr_typ,
ld_receiver like sy-subrc.
ld_email = p_email.
ld_mtitle = p_mtitle.
ld_format = p_format.
ld_attdescription = p_attdescription.
ld_attfilename = p_filename.
ld_sender_address = p_sender_address.
ld_sender_address_type = p_sender_addres_type.


*Fill the document data.
w_doc_data-doc_size = 1.

*Populate the subject/generic message attributes
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = ld_mtitle .
w_doc_data-sensitivty = 'F'.

*Fill the document data and get size of attachment
clear w_doc_data.
read table it_attach index w_cnt.
w_doc_data-doc_size =
( w_cnt - 1 ) * 255 + strlen( it_attach ).
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = ld_mtitle.
w_doc_data-sensitivty = 'F'.
clear t_attachment.
refresh t_attachment.
*t_attachment = pit_attach.
t_attachment[] = pit_attach[].
*Describe the body of the message
clear t_packing_list.
refresh t_packing_list.
t_packing_list-transf_bin = space.
t_packing_list-head_start = 1.
t_packing_list-head_num = 0.
t_packing_list-body_start = 1.
describe table it_message lines t_packing_list-body_num.
t_packing_list-doc_type = 'RAW'.
append t_packing_list.

*Create attachment notification
t_packing_list-transf_bin = 'X'.
t_packing_list-head_start = 1.
t_packing_list-head_num = 1.
t_packing_list-body_start = 1.
describe table t_attachment lines t_packing_list-body_num.
t_packing_list-doc_type = ld_format.
t_packing_list-obj_descr = ld_attdescription.
t_packing_list-obj_name = ld_attfilename.
t_packing_list-doc_size = t_packing_list-body_num * 255.
append t_packing_list.

*Add the recipients email address
clear t_receivers.
refresh t_receivers.
t_receivers-receiver = ld_email.
t_receivers-rec_type = 'U'.
t_receivers-com_type = 'INT'.
t_receivers-notif_del = 'X'.
t_receivers-notif_ndel = 'X'.
append t_receivers.
call function 'SO_DOCUMENT_SEND_API1'
exporting
document_data = w_doc_data
put_in_outbox = 'X'
sender_address = ld_sender_address
sender_address_type = ld_sender_address_type
commit_work = 'X'
importing
sent_to_all = w_sent_all
tables
object_header = t_object_header
packing_list = t_packing_list
contents_bin = t_attachment
contents_txt = it_message
receivers = t_receivers
exceptions
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
others = 8.

*Populate zerror return code
ld_error = sy-subrc.

*Populate zreceiver return code
loop at t_receivers.
ld_receiver = t_receivers-retrn_code.
endloop.
endform.
*&---------------------------------------------------------------------
*& Form INITIATE_MAIL_EXECUTE_PROGRAM
*&---------------------------------------------------------------------

*Instructs mail send program for SAPCONNECT to send email.
*----------------------------------------------------------------------
form initiate_mail_execute_program.
wait up to 2 seconds.
submit rsconn01 with mode = 'INT'
with output = 'X'
and return.
endform. " INITIATE_MAIL_EXECUTE_PROGRAM
*&---------------------------------------------------------------------
*& Form POPULATE_EMAIL_MESSAGE_BODY
*&---------------------------------------------------------------------

*Populate message body text
*----------------------------------------------------------------------
form populate_email_message_body.
refresh it_message.
it_message = 'Please find attached a list test ekpo records'.
append it_message.
endform. " POPULATE_EMAIL_MESSAGE_BODY

Thursday, September 11, 2008

To Delete Selectedrows in ALV Container

CASE sy-ucomm.
WHEN 'EXIT' OR 'CANC'.
LEAVE TO SCREEN 0 .
WHEN 'DEL'.
DATA: t_row_no TYPE lvc_t_roid,
w_row_no TYPE lvc_s_roid.
DATA flag TYPE c.
DATA n TYPE c VALUE '1'.
*=== To Delete the selected rows in the ALV Grid
CALL METHOD grid1->get_selected_rows IMPORTING et_row_no = t_row_no.
IF NOT t_row_no IS INITIAL.
SORT t_row_no BY row_id.
flag = 0.
LOOP AT t_row_no INTO w_row_no.
IF flag = 0.
DELETE it_final_l INDEX w_row_no-row_id.
flag = 1.
ELSEIF flag = 1.
n = w_row_no-row_id - 1.
DELETE it_final_l INDEX n.
ENDIF.
ENDLOOP.
EXPORT it_final_l TO MEMORY ID m_id.
CALL METHOD grid1->refresh_table_display.
ENDIF.
ENDCASE.

Wednesday, August 6, 2008

Popup_Debug(Drag & Drop)

save the below code as .txt format.

[Function]
COMMAND = /H
Title = Debugger
Type = systemcommand

Upload Values to the Table From Flat File

TABLES: /RB04/YT2_URLHLP.
TYPES: g_ty_line(1500) TYPE c.
DATA : g_t_urlhlp LIKE /RB04/YT2_URLHLP OCCURS 0.DATA : g_wa_urlhlp TYPE /RB04/YT2_URLHLP.
DATA : g_t_tot TYPE TABLE OF g_ty_line, g_wa_tot TYPE g_ty_line.
DATA : l_f_row_pos(10), l_f_col_pos(10).

* SELECTION SCREEN ELEMENTS
PARAMETER g_f_name LIKE rlgrap-filename.
* AT SELECTION-SCREEN EVENT
AT SELECTION-SCREEN ON VALUE-REQUEST FOR g_f_name.
PERFORM get_file_name CHANGING g_f_name.
START-OF-SELECTION.
DELETE FROM /RB04/YT2_URLHLP CLIENT SPECIFIED WHERE mandt = sy-mandt.
PERFORM upload_to_itab TABLES g_t_tot USING g_f_name.
IF NOT g_t_tot IS INITIAL.
LOOP AT g_t_tot INTO g_wa_tot.

SPLIT g_wa_tot AT ''
INTO g_wa_urlhlp-mandt
g_wa_urlhlp-NAVID
g_wa_urlhlp-spras
g_wa_urlhlp-URL.
APPEND g_wa_urlhlp TO g_t_urlhlp.
ENDLOOP.

ELSE.
MESSAGE s000(38) WITH 'No data gets uploaded'. ENDIF.
LOOP AT g_t_urlhlp INTO g_wa_urlhlp.

* insert /RB04/YT2_FCATXT FROM TABLE gt_fcatxt.
move-corresponding g_wa_urlhlp to /RB04/YT2_URLHLP. INSERT /RB04/YT2_URLHLP.
MESSAGE s000(38) WITH 'Record uploaded'.
ENDLOOP.

FORM get_file_name CHANGING pf_name.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
field_name = 'RLGRAP-FILENAME'
IMPORTING file_name = pf_name.
ENDFORM. " get_file_name

FORM upload_to_itab TABLES pt_tot STRUCTURE /RB04/YT2_URLHLP USING pf_name. CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = pf_name
filetype = 'ASC'
TABLES
data_tab = pt_tot
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_type = 4
no_batch = 5
unknown_error = 6
invalid_table_width = 7
gui_refuse_filetransfer = 8
customer_error = 9
OTHERS = 10.
ENDFORM. " upload_from_loc_to_itab

Wednesday, June 25, 2008

Event Handler/Doubleclick/Hotspot/Select/Deselect all

program zzz_simple_editable_grid.
include .
data grid1 type ref to cl_gui_alv_grid.
data: es_row_no type lvc_s_roid,
ls_row_id type lvc_s_row,
ls_col_id type lvc_s_col,
ls_row type i,
ls_value type c,
ls_col type i,
ls_row_no type lvc_s_roid.
types: row_table type table of lvc_s_roid.
data t_rows type row_table.
data: begin of wa_rows,
row_id type int4,
sub_row_id type int4,
end of wa_rows.
data: t_index type int4.
data: t_size type int4.
*----------------------------------------------------------------------*
* CLASS lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class lcl_event_handler definition .
public section .
methods:
**Hot spot Handler
handle_hotspot_click for event hotspot_click of cl_gui_alv_grid
importing e_row_id e_column_id es_row_no,
**Double Click Handler
handle_double_click for event double_click of cl_gui_alv_grid
importing e_row e_column es_row_no,
** Toolbar handler.
handle_toolbar
for event toolbar of cl_gui_alv_grid
importing e_object e_interactive,
* button press
handle_user_command
for event user_command of cl_gui_alv_grid
importing e_ucomm,
* data changed
handle_data_changed
for event data_changed of cl_gui_alv_grid
importing er_data_changed,
*data changed finished
handle_data_changed_finished
for event data_changed of cl_gui_alv_grid.

endclass. "lcl_event_handler DEFINITION

*----------------------------------------------------------------------*
* CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class lcl_event_handler implementation.
*Handle Hotspot Click
method handle_hotspot_click .
perform mouse_click
using e_row_id
e_column_id.
call method grid1->get_current_cell
importing
e_row = ls_row
e_value = ls_value
e_col = ls_col
es_row_id = ls_row_id
es_col_id = ls_col_id
es_row_no = es_row_no.

call method grid1->refresh_table_display.
call method grid1->set_current_cell_via_id
exporting
is_column_id = e_column_id
is_row_no = es_row_no.


endmethod. "lcl_event_handler
*Handle Double Click
method handle_double_click.
perform double_click
using e_row
e_column.
call method grid1->get_current_cell
importing
e_row = ls_row
e_value = ls_value
e_col = ls_col
es_row_id = ls_row_id
es_col_id = ls_col_id
es_row_no = es_row_no.
call method grid1->refresh_table_display.
call method grid1->set_current_cell_via_id
exporting
is_column_id = ls_col_id
is_row_no = es_row_no.


endmethod. "handle_double_click
method handle_toolbar.
data: ls_toolbar type stb_button.
* append a separator to normal toolbar
clear ls_toolbar.
move 3 to ls_toolbar-butn_type.
append ls_toolbar to e_object->mt_toolbar.
* append an icon for your function
clear ls_toolbar.
move 'FUNC' to ls_toolbar-function.
move icon_railway to ls_toolbar-icon.
move 'Your Function' to ls_toolbar-quickinfo.
move 'Your user function' to ls_toolbar-text.
move ' ' to ls_toolbar-disabled.
append ls_toolbar to e_object->mt_toolbar.
* Select All Rows
move 'SELE' to ls_toolbar-function.
move icon_select_all to ls_toolbar-icon.
move 'Select all' to ls_toolbar-quickinfo.
move 'Select entire Grid' to ls_toolbar-text.
move ' ' to ls_toolbar-disabled.
append ls_toolbar to e_object->mt_toolbar.
* Deselect all Rows.
move 'DSEL' to ls_toolbar-function.
move icon_deselect_all to ls_toolbar-icon.
move 'Deselect all' to ls_toolbar-quickinfo.
move 'Deselect entire Grid' to ls_toolbar-text.
move ' ' to ls_toolbar-disabled.
append ls_toolbar to e_object->mt_toolbar.
endmethod. "handle_toolbar
method handle_user_command.
break-point 1.
case e_ucomm.
when 'FUNC'. "Your button
* Perform what you need to do.
when 'SELE'.
perform select_all_rows.
when 'DSEL'.
perform deselect_all_rows.
when others.
endcase.
endmethod. "handle_user_command
method handle_data_changed.
perform data_changed using er_data_changed.
endmethod. "data_changed
method handle_data_changed_finished.
perform data_changed_finished.
endmethod. "data_changed_finished
endclass. "lcl_event_handler IMPLEMENTATION
* Define any structure
types: begin of s_elements,
vbeln type vapma-vbeln,
posnr type vapma-posnr,
matnr type vapma-matnr,
kunnr type vapma-kunnr,
werks type vapma-werks,
vkorg type vapma-vkorg,
vkbur type vapma-vkbur,
status type c,
end of s_elements.
* end of your structure
data:wa_elements type s_elements.
data: ord_nr type vapma-vbeln,
mat_nr type vapma-matnr,
cus_nr type vapma-kunnr.

data lr_rtti_struc type ref to cl_abap_structdescr .
data:
zog like line of lr_rtti_struc->components .
data:
zogt like table of zog,
wa_it_fldcat type lvc_s_fcat,
it_fldcat type lvc_t_fcat ,
dy_line type ref to data,
dy_table type ref to data.

data: dref type ref to data.
field-symbols: type any,
type standard table,
.
data grid_container1 type ref to cl_gui_custom_container .
data grid_container2 type ref to cl_gui_custom_container.
data: g_handler type ref to lcl_event_handler. "handler
data: ok_code type sy-ucomm.
data: struct_grid_lset type lvc_s_layo.
start-of-selection.
*build the field catalog for dynamic table
* First get your data structure into a field symbol
create data dref type s_elements.
assign dref->* to .
lr_rtti_struc ?= cl_abap_structdescr=>describe_by_data( ).
* Now get the structure details into a table.
* table zogt[] contains the structure details
* From which we can build the field catalog
zogt[] = lr_rtti_struc->components.
loop at zogt into zog.
clear wa_it_fldcat.
wa_it_fldcat-fieldname = zog-name .
wa_it_fldcat-datatype = zog-type_kind.
wa_it_fldcat-inttype = zog-type_kind.
wa_it_fldcat-intlen = zog-length.
wa_it_fldcat-decimals = zog-decimals.
wa_it_fldcat-coltext = zog-name.
wa_it_fldcat-lowercase = 'X'.
if wa_it_fldcat-fieldname = 'VBELN'.
wa_it_fldcat-hotspot = 'X'.
endif.
append wa_it_fldcat to it_fldcat.
endloop.
*
* You can perform any modifications / additions to your field catalog
* here such as your own column names etc.
* Now using the field catalog created above we can
* build a dynamic table
* and populate it
* First build the dynamic table
* the table will contain entries for
* our structure defined at the start of the program
call method cl_alv_table_create=>create_dynamic_table
exporting
it_fieldcatalog = it_fldcat
importing
ep_table = dy_table.

assign dy_table->* to .
create data dy_line like line of .
assign dy_line->* to .
* Now fill our table with data
select vbeln posnr matnr kunnr werks vkorg vkbur
up to 200 rows
from vapma
into corresponding fields of table .
* Call the screen to display the grid
call screen 200.

*&---------------------------------------------------------------------*
*& Form select_all_rows
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form select_all_rows.
describe table lines t_size.
t_index = 1.
while t_index le t_size.
clear wa_rows.
wa_rows-row_id = t_index.
append wa_rows to t_rows.
t_index = t_index + 1.
endwhile.
call method grid1->set_selected_rows
exporting
it_row_no = t_rows.
endform. "select_all_rows

*&---------------------------------------------------------------------*
*& Form deselect_all_rows
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form deselect_all_rows.
describe table lines t_size.
t_index = 1.
refresh t_rows.
clear wa_rows.
wa_rows-row_id = t_index.
append wa_rows to t_rows.
call method grid1->set_selected_rows
exporting
it_row_no = t_rows.
endform. "deselect_all_rows

*&---------------------------------------------------------------------*
*& Form double_click
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->E_ROW text
* -->E_COLUMN text
*----------------------------------------------------------------------*
form double_click
using e_row type lvc_s_row
e_column type lvc_s_col.
read table index e_row into wa_elements.
case e_column-fieldname.
when 'MATNR'.
mat_nr = wa_elements-matnr.
set parameter id 'MAT' field mat_nr.
call transaction 'MM03' and skip first screen.
when 'KUNNR'.
cus_nr = wa_elements-kunnr.
set parameter id 'KUN' field cus_nr.
call transaction 'XD03' and skip first screen.
when others.
endcase.
wa_elements-status = 'V'.
modify from wa_elements index e_row.
endform. "double_click
*&---------------------------------------------------------------------*
*& Form mouse_click
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->E_ROW text
* -->E_COLUMN_ID text
*----------------------------------------------------------------------*
form mouse_click
using e_row type lvc_s_row
e_column_id type lvc_s_col.
read table index e_row into wa_elements.

ord_nr = wa_elements-vbeln.
set parameter id 'AUN' field ord_nr.
call transaction 'VA03' and skip first screen.
wa_elements-status = 'V'.
modify from wa_elements index e_row.
endform. "mouse_click
*&---------------------------------------------------------------------*
*& Form data_changed
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->ER_DATA_CHANGED text
*----------------------------------------------------------------------*
form data_changed
using er_data_changed.
break-point 1.
endform. "data_changed
*&---------------------------------------------------------------------*
*& Form data_changed_finished
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form data_changed_finished.

break-point 1.
endform. "data_changed_finished

*&---------------------------------------------------------------------*
*& Form instantiate_grid
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->GRID_CONTAINER text
* -->CLASS_OBJECT text
* -->CONTAINER_NAME text
*----------------------------------------------------------------------*
form instantiate_grid
using grid_container type ref to cl_gui_custom_container
class_object type ref to cl_gui_alv_grid
container_name type scrfname.
data: lt_exclude type ui_functions,
ls_exclude type ui_func.

create object grid_container
exporting
container_name = container_name.
create object class_object
exporting
i_parent = grid_container.
struct_grid_lset-sel_mode = 'D'.

ls_exclude = cl_gui_alv_grid=>mc_fc_sum.
append ls_exclude to lt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
*APPEND ls_exclude TO lt_exclude.
*ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
*APPEND ls_exclude TO lt_exclude.
*ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
*APPEND ls_exclude TO lt_exclude.
*ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
*APPEND ls_exclude TO lt_exclude.
*ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
*APPEND ls_exclude TO lt_exclude.
*ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
*APPEND ls_exclude TO lt_exclude.
*ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
*APPEND ls_exclude TO lt_exclude.
*ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
*APPEND ls_exclude TO lt_exclude.
*ls_exclude = cl_gui_alv_grid=>mc_fc_check.
*APPEND ls_exclude TO lt_exclude.
*ls_exclude = cl_gui_alv_grid=>mc_fc_refresh.
*APPEND ls_exclude TO lt_exclude.
*ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
*APPEND ls_exclude TO lt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_print.
APPEND ls_exclude TO lt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_sum.
APPEND ls_exclude TO lt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_mb_sum.
APPEND ls_exclude TO lt_exclude.
*ls_exclude = cl_gui_alv_grid=>mc_fc_subtot.
*APPEND ls_exclude TO lt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_info.
APPEND ls_exclude TO lt_exclude.
*ls_exclude = cl_gui_alv_grid=>mc_fc_sort.
*APPEND ls_exclude TO lt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_delete_filter.
APPEND ls_exclude TO lt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_excl_all.
APPEND ls_exclude TO lt_exclude.
*
* struct_grid_lset-edit = 'X'.
create object g_handler.
set handler g_handler->handle_double_click for class_object.
set handler g_handler->handle_hotspot_click for class_object.
set handler g_handler->handle_toolbar for class_object.
set handler g_handler->handle_user_command for class_object.
set handler g_handler->handle_data_changed for class_object.
set handler g_handler->handle_data_changed_finished for class_object.
call method class_object->register_edit_event
exporting
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
call method class_object->set_table_for_first_display
exporting
is_layout = struct_grid_lset
it_toolbar_excluding = lt_exclude
changing
it_outtab =
it_fieldcatalog = it_fldcat.
endform. "instantiate_grid

* PBO module
module status_0200 output.
if grid_container1 is initial.
perform instantiate_grid
using grid_container1
grid1
'ALV_CONTAINER'.
endif.

* SET PF-STATUS '001'.
* SET TITLEBAR '000'.
endmodule. "status_0100 OUTPUT
* PAI module
module user_command_0200 input.
case sy-ucomm.
when 'BACK'.
leave program.
when 'EXIT'.
leave program.
when 'RETURN'.
leave program.
when others.
endcase.
endmodule. "user_command_0100 INPUT

Thursday, June 12, 2008

To Remove SY-Ucomm(Ok-Code) in Subscreen

module user_command_103 input.
data: gv_ucomm_0809 like sy-ucomm.
constants: c_ucomm like sy-ucomm value 'P003'.
data: l_f_okcode like sy-ucomm.
perform get_ok_code_bom1 changing l_f_okcode.
case l_f_okcode.
when 'SRC'.
clear sy-ucomm.
*=== select all QC notifs with same VID
select * from qmel into table gt_qmel where
qmart eq c_qc and
qmnum ne viqmel-qmnum and
kfz_ident_nr eq viqmel-kfz_ident_nr.
if sy-subrc = 0.
* call VID display scrn
call screen 809 starting at 8 8 ending at 76 22.
else.
* no same VID exists
message w050(/rb04/yt2_iqis) with text-116.
endif.
* remove customer fcode/ucomm in sapliqs0
* customer fcode is invalid for sap and error arises!!!
field-symbols: .
field_name = '(SAPLIQS0)OK-CODE'.
assign (field_name) to .
= c_ucomm.
* clear g_activetab.
field_name = '(SAPLXQQM)SY-UCOMM'.
assign (field_name) to .
clear .
endcase.
endmodule. " USER_COMMAND_0809


*&---------------------------------------------------------------------*
*& Form get_ok_code_bom1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form get_ok_code_bom1 changing l_okcode.
field-symbols: .
data: field_name(40) type c.
field_name = '(SAPLIQS0)OK-CODE'.
assign (field_name) to .
l_okcode = .
endform. " get_ok_code_bom1

ALV Pop-up With Double Click Functionality

Report ZALV.
*=== class handler for ALV POPUP
CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA: gt_qmel TYPE TABLE OF qmel,
l_r_qmel TYPE qmel,
g_repid LIKE sy-repid,
gs_layout1 TYPE lvc_s_layo,
gt_fieldcat1 TYPE lvc_t_fcat WITH HEADER LINE,
cont_on_main TYPE scrfname VALUE 'ALV_CONTAINER',
grid2 TYPE REF TO cl_gui_alv_grid,
*=== references to custom container: neccessary to bind ALV Control
custom_container1 TYPE REF TO cl_gui_custom_container,
event_receiver TYPE REF TO lcl_event_receiver.

DATA: l_it_fieldcat TYPE lvc_t_fcat, l_wa_fieldcat TYPE lvc_s_fcat.

*&---------------------------------------------------------------------*
*CLASS lcl_event_receiver for double click
*----------------------------------------------------------------------
*=== class definition to Handle Double click
class lcl_event_receiver definition.
public section. methods:
handle_double_click for event double_click of cl_gui_alv_grid
importing e_row e_column. private section.
endclass.
*---------------------------------------------------------------------*
* CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
class lcl_event_receiver implementation.
method handle_double_click.
data: ls_qmel like line of gt_qmel.
*=== e_row contains the selected row index value
Read table gt_qmel index e_row-index into ls_qmel.
*=== notification which is selectd needs to be displayed
set parameter id 'IQM' field ls_qmel-qmnum.
call transaction 'QM03' and skip first screen .
endmethod. "handle_double_clickendclass.
*&---------------------------------------------------------------------*
*& Module STATUS_0809 OUTPUT
*&---------------------------------------------------------------------*
module status_0809 output.
*== set status set pf-status '0809'.
data: l_text(80) type c. g_repid = sy-repid.
* set the container for ALV if custom_container1 is initial.
create object custom_container1
exporting
container_name = cont_on_main
exceptions
cntl_error = 1 cntl_system_error = 2.
*=== create an instance of alv control
create object grid2 exporting i_parent = custom_container1.
*=== change title
concatenate text-111 ':' viqmel-kfz_ident_nr into l_text.
gs_layout-grid_title = l_text.
*=== adjust field catalog*=== to suppress the output of already displayed key fields of qmel perform field_catalog_103.
call method grid2->set_table_for_first_display
exporting
is_layout = gs_layout
changing
it_fieldcatalog = l_it_fieldcat[]
it_outtab = gt_qmel.
*=== Event for Double click
create object event_receiver.
set handler event_receiver->handle_double_click for grid2.
call method cl_gui_control=>set_focus exporting control = grid2.
call method cl_gui_cfw=>flush.
else.
call method grid2->refresh_table_display.
endif. "IF grid2 IS INITIAL.
endmodule. " STATUS_0809 OUTPUT
*&---------------------------------------------------------------------*
*& Form field_catalog.
*&---------------------------------------------------------------------*
form field_catalog_103.
call function 'LVC_FIELDCATALOG_MERGE'
exporting
i_structure_name = 'QMEL'
changing
ct_fieldcat = l_it_fieldcat[].
perform delete_feildcat_103.
endform. " mask_columns
*&---------------------------------------------------------------------*
*& Form delete_feildcat
*&---------------------------------------------------------------------*
form delete_feildcat_103.
*=== delete fieldcatalog other then the fieldname
delete l_it_fieldcat where ( fieldname ne 'MATNR' and fieldname ne 'SPART' and fieldname ne 'KUNUM' and fieldname ne 'QMNUM' ).
endform. " delete_feildcat

BDC Call Transaction

REPORT zz_mae_bdc NO STANDARD PAGE HEADING LINE-SIZE 255.
TYPE-POOLS truxs.
DATA it_raw TYPE truxs_t_text_data.
DATA: w_textout LIKE t100-text.


*Used to stores error information from CALL TRANSACTION Function Module
DATA: BEGIN OF messtab OCCURS 0.
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF messtab.

*=== data declaration for internal table
DATA: BEGIN OF it_bdc OCCURS 0,
title_medi LIKE sza1_d0100-title_medi,
name1 LIKE addr1_data-name1,
name2 LIKE addr1_data-name2,
name4 LIKE addr1_data-name4,
sort1 LIKE addr1_data-sort1,
street LIKE addr1_data-street,
post_code1 LIKE addr1_data-post_code1,
city1 LIKE addr1_data-city1,
country LIKE addr1_data-country,
region LIKE addr1_data-region,
po_box LIKE addr1_data-po_box,
post_code2 LIKE addr1_data-post_code2,
langu LIKE addr1_data-langu,
tel_number LIKE sza1_d0100-tel_number,
fax_number LIKE sza1_d0100-fax_number,
smtp_addr LIKE sza1_d0100-smtp_addr,
END OF it_bdc.
DATA: BEGIN OF ty_error,
err_msg(73) TYPE c,
title_medi LIKE sza1_d0100-title_medi,
name1 LIKE addr1_data-name1,
name2 LIKE addr1_data-name2,
name4 LIKE addr1_data-name4,
sort1 LIKE addr1_data-sort1,
street LIKE addr1_data-street,
post_code1 LIKE addr1_data-post_code1,
city1 LIKE addr1_data-city1,
country LIKE addr1_data-country,
region LIKE addr1_data-region,
po_box LIKE addr1_data-po_box,
post_code2 LIKE addr1_data-post_code2,
langu LIKE addr1_data-langu,
tel_number LIKE sza1_d0100-tel_number,
fax_number LIKE sza1_d0100-fax_number,
smtp_addr LIKE sza1_d0100-smtp_addr,
END OF ty_error.


DATA it_final LIKE TABLE OF it_bdc WITH HEADER LINE.
DATA bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: it_error LIKE TABLE OF ty_error WITH HEADER LINE.
*=== selection screen for input
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE tit.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_file TYPE rlgrap-filename.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN: END OF BLOCK b1.
*=== initilization
INITIALIZATION.
MOVE 'FILE NAME' TO tit.
*=== selection screen for F4 help
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
field_name = 'P_FILE'
IMPORTING
file_name = p_file.

START-OF-SELECTION.
*=== To convert XLS to SAP
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR = 'X'
* I_LINE_HEADER = 'X'
i_tab_raw_data = it_raw
i_filename = p_file
TABLES
i_tab_converted_data = it_final.
* EXCEPTIONS
* CONVERSION_FAILED = 1
* OTHERS = 2


LOOP AT it_final.
PERFORM bdc_dynpro USING 'SAPLSZA1' '0101'.
PERFORM bdc_field USING 'BDC_CURSOR'
'ADDR1_DATA-COUNTRY'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SAVE'.
PERFORM bdc_field USING 'SZA1_D0100-TITLE_MEDI'
it_final-title_medi.
PERFORM bdc_field USING 'ADDR1_DATA-NAME1'
it_final-name1.
PERFORM bdc_field USING 'ADDR1_DATA-NAME2'
it_final-name2.
PERFORM bdc_field USING 'ADDR1_DATA-NAME4'
it_final-name4.
PERFORM bdc_field USING 'ADDR1_DATA-SORT1'
it_final-sort1.
PERFORM bdc_field USING 'ADDR1_DATA-STREET'
it_final-street.
PERFORM bdc_field USING 'ADDR1_DATA-POST_CODE1'
it_final-post_code1.
PERFORM bdc_field USING 'ADDR1_DATA-CITY1'
it_final-city1.
PERFORM bdc_field USING 'ADDR1_DATA-COUNTRY'
it_final-country.
PERFORM bdc_field USING 'ADDR1_DATA-REGION'
it_final-region.
PERFORM bdc_field USING 'ADDR1_DATA-PO_BOX'
it_final-po_box.
PERFORM bdc_field USING 'ADDR1_DATA-POST_CODE2'
it_final-post_code2.
PERFORM bdc_field USING 'ADDR1_DATA-LANGU'
it_final-langu.
PERFORM bdc_field USING 'SZA1_D0100-TEL_NUMBER'
it_final-tel_number.
PERFORM bdc_field USING 'SZA1_D0100-FAX_NUMBER'
it_final-fax_number.
PERFORM bdc_field USING 'SZA1_D0100-SMTP_ADDR'
it_final-smtp_addr.
*call transaction to update customer instalment text
CALL TRANSACTION 'ZZ_MAE_TEST' USING bdcdata MODE 'N' UPDATE 'S'
MESSAGES INTO messtab.
*
IF sy-subrc NE 0.
*Retrieve error messages displayed during BDC update
LOOP AT messtab WHERE msgtyp = 'E'.
*Builds actual message based on info returned from Call transaction
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = messtab-msgid
msgnr = messtab-msgnr
msgv1 = messtab-msgv1
msgv2 = messtab-msgv2
msgv3 = messtab-msgv3
msgv4 = messtab-msgv4
IMPORTING
message_text_output = w_textout.
ENDLOOP.

* Build error table ready for output
it_error-err_msg = w_textout.
it_error-title_medi = it_final-title_medi.
it_error-name1 = it_final-name1.
it_error-name2 = it_final-name2.
it_error-name4 = it_final-name4.
it_error-sort1 = it_final-sort1.
it_error-street = it_final-street.
it_error-post_code1 = it_final-post_code1.
it_error-city1 = it_final-city1.
it_error-country = it_final-country.
it_error-region = it_final-region.
it_error-po_box = it_final-po_box.
it_error-post_code2 = it_final-post_code2.
it_error-langu = it_final-langu.
it_error-tel_number = it_final-tel_number.
it_error-fax_number = it_final-fax_number.
it_error-smtp_addr = it_final-smtp_addr.
APPEND it_error.
CLEAR it_error.
ENDIF.

SELECT SINGLE * FROM adrc
WHERE name1 = it_final-name1
AND name2 = it_final-name2
AND addr_group = 'Z_P1'
AND chckstatus <> 'D'.
IF sy-subrc = 0.
* Partnernummer generieren und im Feld ADRESS_ID speichern
PERFORM gen_adrnr
USING '*Y'
it_final-name1
lc_maint_mode
adrc-addrnumber
CHANGING adrc-address_id.
adrc-address_id = adrc-address_id.
UPDATE adrc.
ENDIF.
* Clear bdc data table
CLEAR: bdcdata.
REFRESH: bdcdata.
ENDLOOP.
*=== download error files in destop
PERFORM download.
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "bdc_dynpro
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
* if fval <> nodata.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
* endif.
ENDFORM. "bdc_field


*&---------------------------------------------------------------------*
*& Form DOWNLOAD
*&---------------------------------------------------------------------*
FORM download.
DATA l_v_path_name TYPE string.
DATA file_path(5) TYPE c VALUE 'C:\'.
CONCATENATE file_path sy-datum sy-uzeit'.' 'TXT' INTO
l_v_path_name.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = l_v_path_name
filetype = 'ASC'
TABLES
data_tab = it_error.
ENDFORM.

BDC Session Method

REPORT zz_mae_bdc NO STANDARD PAGE HEADING LINE-SIZE 255.
TYPE-POOLS truxs.
DATA it_raw TYPE truxs_t_text_data.
*=== data declaration for internal table
DATA: BEGIN OF it_bdc OCCURS 0,
title_medi LIKE sza1_d0100-title_medi,
name1 LIKE addr1_data-name1,
sort1 LIKE addr1_data-sort1,
street LIKE addr1_data-street,
city2 LIKE addr1_data-city2,
post_code1 LIKE addr1_data-post_code1,
country LIKE addr1_data-country,
region LIKE addr1_data-region,
po_box LIKE addr1_data-po_box,
post_code2 LIKE addr1_data-post_code2,
langu LIKE addr1_data-langu,
tel_number LIKE sza1_d0100-tel_number,
fax_number LIKE sza1_d0100-fax_number,
smtp_addr LIKE sza1_d0100-smtp_addr,
END OF it_bdc.

DATA it_final LIKE TABLE OF it_bdc WITH HEADER LINE.
DATA bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
*=== selection screen for input
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE tit.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_file TYPE rlgrap-filename.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN: END OF BLOCK b1.
*=== initilization
INITIALIZATION.
MOVE 'FILE NAME' TO tit.
*=== selection screen for F4 help
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
field_name = 'P_FILE'
IMPORTING
file_name = p_file.

START-OF-SELECTION.
*=== To convert XLS to SAP
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR = 'X'
* I_LINE_HEADER = 'X'
i_tab_raw_data = it_raw
i_filename = p_file
TABLES
i_tab_converted_data = it_final.
* EXCEPTIONS
* CONVERSION_FAILED = 1
* OTHERS = 2


CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
* DEST = FILLER8
group = 'ZQM_TEST_MAE'
* HOLDDATE = FILLER8
keep = 'X'
user = sy-uname.

LOOP AT it_final.
PERFORM bdc_dynpro USING 'SAPLSZA1' '0101'.
PERFORM bdc_field USING 'BDC_CURSOR'
'ADDR1_DATA-COUNTRY'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SAVE'.
PERFORM bdc_field USING 'SZA1_D0100-TITLE_MEDI'
it_final-title_medi.
PERFORM bdc_field USING 'ADDR1_DATA-NAME1'
it_final-name1.
PERFORM bdc_field USING 'ADDR1_DATA-SORT1'
it_final-sort1.
PERFORM bdc_field USING 'ADDR1_DATA-STREET'
it_final-street.
PERFORM bdc_field USING 'ADDR1_DATA-CITY2'
it_final-city2.
PERFORM bdc_field USING 'ADDR1_DATA-POST_CODE1'
it_final-post_code1.
PERFORM bdc_field USING 'ADDR1_DATA-COUNTRY'
it_final-country.
PERFORM bdc_field USING 'ADDR1_DATA-REGION'
it_final-region.
PERFORM bdc_field USING 'ADDR1_DATA-PO_BOX'
it_final-po_box.
PERFORM bdc_field USING 'ADDR1_DATA-POST_CODE2'
it_final-post_code2.
PERFORM bdc_field USING 'ADDR1_DATA-LANGU'
it_final-langu.
PERFORM bdc_field USING 'SZA1_D0100-TEL_NUMBER'
it_final-tel_number.
PERFORM bdc_field USING 'SZA1_D0100-FAX_NUMBER'
it_final-fax_number.
PERFORM bdc_field USING 'SZA1_D0100-SMTP_ADDR'
it_final-smtp_addr.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = 'ZZ_MAE_TEST'
TABLES
dynprotab = bdcdata
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
REFRESH bdcdata.
ENDLOOP.
CALL FUNCTION 'BDC_CLOSE_GROUP'
* EXCEPTIONS
* NOT_OPEN = 1
* QUEUE_ERROR = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM.
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
* if fval <> nodata.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
* endif.
ENDFORM.

ALV Program

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

ALV Program

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
Powered By Blogger