Eva's ApplesEva's Apples

Friends

REPORT zrsr. *TABLES: rsrvariant. TYPE-POOLS : slis. "",truxs. PARAMETERS:p_qid TYPE rszcompid OBLIGATORY, ""sysuuid_25 OBLIGATORY, p_qvar TYPE rsrvari OBLIGATORY, p_file TYPE localfile OBLIGATORY, ""rlgrap-filename, p_delete AS CHECKBOX. TYPES: BEGIN OF gty_file, vari TYPE rsrvariant-vari, vnam TYPE rsrvariant-vnam, low TYPE rsrvariant-low, high TYPE rsrvariant-high, END OF gty_file, gtt_file TYPE STANDARD TABLE OF gty_file. TYPES: BEGIN OF gty_final, vari TYPE rsrvariant-vari, vnam TYPE rsrvariant-vnam, low TYPE rsrvariant-low, high TYPE rsrvariant-high, status TYPE string, END OF gty_final, gtt_final TYPE STANDARD TABLE OF gty_final. DATA: gt_file TYPE gtt_file, gs_file TYPE gty_file, gt_fieldcat TYPE slis_t_fieldcat_alv. ""gt_type TYPE truxs_t_text_data,. DATA: gs_final TYPE gty_final, gt_final TYPE TABLE OF gty_final, gt_file1 TYPE gtt_file, gs_file1 TYPE gty_file. DATA: gs_rsr TYPE rsrvariant, gt_rsr TYPE TABLE OF rsrvariant, gv_tot TYPE i, gv_del TYPE i, gv_chg TYPE i, gv_ins TYPE i, gs_rsr1 TYPE rsrvariant, gv_compid TYPE sysuuid_25. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. PERFORM f4_get_file CHANGING p_file. START-OF-SELECTION. **--Upload CSV PERFORM upload_file ""USING gt_type CHANGING gt_file. **Get COMPUID from Query id (Assumption: there will be only one active record with below key) SELECT SINGLE compuid FROM v_compdir_compic INTO gv_compid WHERE objvers = 'A' AND compid = p_qid. if sy-subrc <> 0. MESSAGE 'View entry not maintained in v_compdir_compic' TYPE 'I' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. endif. IF gt_file IS NOT INITIAL. gt_file1 = gt_file. SORT: gt_file BY vari, gt_file1 BY vnam. SELECT * FROM rsrvariant INTO TABLE gt_rsr FOR ALL ENTRIES IN gt_file WHERE compuid = gv_compid AND vari = gt_file-vari. SELECT * FROM rsrvariant APPENDING TABLE gt_rsr WHERE compuid = gv_compid AND vari = p_qvar. IF gt_rsr IS NOT INITIAL. SORT gt_rsr BY compuid vari. ELSE. MESSAGE 'No data found' TYPE 'I' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. ENDIF. ELSE. MESSAGE 'CSV not uploaded successfully' TYPE 'I' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. ENDIF. DESCRIBE TABLE gt_file LINES gv_tot. **&&--IF DELETION FLAG ON IF p_delete = 'X'. LOOP AT gt_file INTO gs_file. DELETE FROM rsrvariant WHERE compuid = gv_compid AND vari = gs_file-vari. IF sy-subrc = 0. COMMIT WORK AND WAIT. gv_del = gv_del + 1. gs_final-vari = gs_file-vari. gs_final-vnam = gs_file-vnam. gs_final-low = gs_file-low. gs_final-high = gs_file-high. gs_final-status = 'Deleted Successfully'. APPEND gs_final TO gt_final. ELSE. ROLLBACK WORK. gs_final-vari = gs_file-vari. gs_final-vnam = gs_file-vnam. gs_final-low = gs_file-low. gs_final-high = gs_file-high. gs_final-status = 'Could not been Deleted'. APPEND gs_final TO gt_final. ENDIF. ENDLOOP. ELSE. LOOP AT gt_rsr INTO gs_rsr. """gt_file INTO gs_file. READ TABLE gt_file INTO gs_file WITH KEY vari = gs_rsr-vari BINARY SEARCH. "" gt_rsr INTO gs_rsr WITH KEY compuid = gv_compid vari = gs_file-vari BINARY SEARCH. gs_final-vari = gs_file-vari. gs_final-vnam = gs_file-vnam. gs_final-low = gs_file-low. gs_final-high = gs_file-high. IF sy-subrc = 0. ""if record exist in RSR table then change it from CSV record gs_rsr-vnam = gs_file-vnam. gs_rsr-low = gs_file-low. IF gs_file-high IS INITIAL. CLEAR:gs_rsr-high. gs_rsr-sign = 'I'. gs_rsr-opt = 'EQ'. ELSE. gs_rsr-high = gs_file-high. gs_rsr-sign = 'I'. gs_rsr-opt = 'BT'. ENDIF. MODIFY rsrvariant FROM gs_rsr. IF sy-subrc = 0. COMMIT WORK AND WAIT. gs_final-status = 'Record altered successfully'. gv_chg = gv_chg + 1. ELSE. gs_final-status = 'Record could not been altered'. ROLLBACK WORK. ENDIF. APPEND gs_final TO gt_final. ELSE. ""if record does not exist then copy CSV record to RSR table * READ TABLE gt_rsr INTO gs_rsr1 WITH KEY compuid = gv_compid vari = p_qvar BINARY SEARCH. LOOP AT gt_file INTO gs_file1. IF gs_rsr-vnam = gs_file1-vnam. gs_rsr1 = gs_rsr. gs_rsr1-vari = gs_file1-vari. gs_rsr1-low = gs_file1-low. gs_final-vari = gs_rsr1-vari. gs_final-vnam = gs_rsr1-vnam. gs_final-low = gs_rsr1-low. gs_final-high = gs_rsr1-high. IF gs_file1-high IS INITIAL. CLEAR:gs_rsr1-high. gs_rsr1-sign = 'I'. gs_rsr1-opt = 'EQ'. ELSE. gs_rsr1-high = gs_file1-high. gs_rsr-sign = 'I'. gs_rsr-opt = 'BT'. ENDIF. ELSE. gs_rsr1 = gs_rsr. gs_rsr1-vari = gs_file1-vari. gs_final-vari = gs_rsr1-vari. gs_final-vnam = gs_rsr1-vnam. gs_final-low = gs_rsr1-low. gs_final-high = gs_rsr1-high. ENDIF. INSERT rsrvariant FROM gs_rsr1. IF sy-subrc = 0. COMMIT WORK AND WAIT. gs_final-status = 'Record inserted successfully'. gv_ins = gv_ins + 1. ELSE. gs_final-status = 'Record could not been inserted'. ROLLBACK WORK. ENDIF. APPEND gs_final TO gt_final. ENDLOOP. ENDIF. CLEAR: gs_rsr, gs_rsr1, gs_file, gs_file1. ENDLOOP . ENDIF. END-OF-SELECTION. IF gt_final IS NOT INITIAL. * Build the fieldcatelog PERFORM get_fieldcat CHANGING gt_fieldcat. * Display the ALV PERFORM display_alv USING gt_fieldcat gt_final. ENDIF. *&---------------------------------------------------------------------* *& Form upload_file *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_GT_TYPE text * <--P_GT_FILE text *----------------------------------------------------------------------* FORM upload_file ""USING p_gt_type TYPE truxs_t_text_data CHANGING p_gt_file TYPE gtt_file. DATA lv_fname TYPE string. lv_fname = p_file. TYPES: BEGIN OF t_data, line(255) TYPE c, END OF t_data. DATA: i_datatab TYPE TABLE OF t_data. DATA: x_datatab LIKE LINE OF i_datatab. CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = lv_fname ""p_file filetype = 'ASC' TABLES data_tab = i_datatab """p_gt_file EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 OTHERS = 17 . IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. DELETE i_datatab INDEX 1. LOOP AT i_datatab INTO x_datatab. SPLIT x_datatab AT ',' INTO gs_file-vari gs_file-vnam gs_file-low gs_file-high. APPEND gs_file TO p_gt_file. CLEAR gs_file. ENDLOOP. ENDFORM. " UPLOAD_FILE *&---------------------------------------------------------------------* *& Form f4_get_file *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * <--P_P_FILE text *----------------------------------------------------------------------* FORM f4_get_file CHANGING p_p_file TYPE rlgrap-filename. DATA: ifile TYPE filetable. DATA: xfile LIKE LINE OF ifile. DATA: rc TYPE i. CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING initial_directory = 'C:' * MULTISELECTION = CHANGING file_table = ifile rc = rc EXCEPTIONS file_open_dialog_failed = 1 cntl_error = 2 error_no_gui = 3 not_supported_by_gui = 4 OTHERS = 5. READ TABLE ifile INTO xfile INDEX 1. IF sy-subrc = 0. p_p_file = xfile-filename. ENDIF. ENDFORM. " F4_GET_FILE *&---------------------------------------------------------------------* *& Form get_fieldcat *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * <--P_GT_FIELDCAT text *----------------------------------------------------------------------* FORM get_fieldcat CHANGING p_gt_fieldcat TYPE slis_t_fieldcat_alv. PERFORM fill_fieldcat USING: 1 'VARI' 'Variant Id' CHANGING p_gt_fieldcat, 2 'VNAM' 'Variant Name' CHANGING p_gt_fieldcat, 3 'LOW' 'Low value' CHANGING p_gt_fieldcat, 4 'HIGH' 'High Value' CHANGING p_gt_fieldcat, 5 'STATUS' 'Message' CHANGING p_gt_fieldcat. ENDFORM. "get_fieldcat *&---------------------------------------------------------------------* *& Form fill_fieldcat *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->VALUE(P_SNO) text * -->VALUE(P_FIELD) text * -->VALUE(P_TEXT) text * <--P1_GT_FIELDCAT text *----------------------------------------------------------------------* FORM fill_fieldcat USING value(p_sno) value(p_field) value(p_text) CHANGING p1_gt_fieldcat TYPE slis_t_fieldcat_alv. DATA:lwa_fieldcat TYPE slis_fieldcat_alv. CLEAR lwa_fieldcat. lwa_fieldcat-col_pos = p_sno. lwa_fieldcat-fieldname = p_field. lwa_fieldcat-tabname = 'GT_FINAL'. lwa_fieldcat-seltext_l = p_text. APPEND lwa_fieldcat TO p1_gt_fieldcat. ENDFORM. " FILL_FIELDCAT *&---------------------------------------------------------------------* *& Form display_alv *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_GT_FIELDCAT text * -->P_GT_FINAL text *----------------------------------------------------------------------* FORM display_alv USING p_gt_fieldcat TYPE slis_t_fieldcat_alv p_gt_final TYPE gtt_final. DATA: lv_repid TYPE sy-repid, lwa_layout TYPE slis_layout_alv. lv_repid = sy-repid. lwa_layout-colwidth_optimize = 'X'. * ALV Grid Display CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = lv_repid i_callback_user_command = 'USER_COMMAND' i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE' is_layout = lwa_layout it_fieldcat = p_gt_fieldcat i_save = 'A' TABLES t_outtab = p_gt_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_ALV *&---------------------------------------------------------------------* *& Form html_top_of_page *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->TOP text *----------------------------------------------------------------------* FORM html_top_of_page USING top TYPE REF TO cl_dd_document. "#EC CALLED DATA: lv_text(255) TYPE c, lv_cnt(4) TYPE c, lv_dat(10) TYPE c, lv_tim(8) TYPE c. CALL METHOD top->add_text EXPORTING text = 'Change Variant ID'(001) sap_style = 'heading'. CALL METHOD top->add_gap EXPORTING width = 100. CALL METHOD top->new_line( ). MOVE gv_tot TO lv_cnt. CONCATENATE 'Total Number of records (in CSV) :'(002) lv_cnt INTO lv_text. CALL METHOD top->add_text EXPORTING text = lv_text. CLEAR: lv_text. CALL METHOD top->new_line( ). MOVE gv_del TO lv_cnt. CONCATENATE 'No of records deleted:'(003) lv_cnt INTO lv_text. CALL METHOD top->add_text EXPORTING text = lv_text. CALL METHOD top->add_gap EXPORTING width = 100. CALL METHOD top->new_line( ). MOVE gv_chg TO lv_cnt. CONCATENATE 'No of records altered:'(004) lv_cnt INTO lv_text. CALL METHOD top->add_text EXPORTING text = lv_text. CALL METHOD top->add_gap EXPORTING width = 100. CALL METHOD top->new_line( ). MOVE gv_ins TO lv_cnt. CONCATENATE 'No of records newly inserted:'(004) lv_cnt INTO lv_text. CALL METHOD top->add_text EXPORTING text = lv_text. ENDFORM. "html_top_of_page