* *Copyright (C) 2006 Krapinskij (krapinskij@yahoo.it) * *This program is free software; you can redistribute it and/or *modify it under the terms of the GNU General Public License *as published by the Free Software Foundation; either version 2 *of the License, or (at your option) any later version. * *This program is distributed in the hope that it will be useful, *but WITHOUT ANY WARRANTY; without even the implied warranty of *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *GNU General Public License for more details. * *You should have received a copy of the GNU General Public License *along with this program; if not, write to the Free Software *Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *REPORT z_trv_2_cr . TABLES: t777d, pcl1. PARAMETERS: wbtrkorr TYPE trkorr. *Here put the pernr concateneted with the trip number SELECT-OPTIONS: cidreinr FOR pcl1-srtfd. DATA uname TYPE sy-uname. INITIALIZATION. uname = sy-uname. AT SELECTION-SCREEN ON VALUE-REQUEST FOR wbtrkorr. PERFORM select_tr_korr USING uname 'SYST' CHANGING wbtrkorr. *---------------------------------------------------------------------* * CLASS lcl_tabu_k_2_trkorr_writer DEFINITION *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* CLASS lcl_tabu_k_2_trkorr_writer DEFINITION. PUBLIC SECTION. * gets the name of the receiver given the temse file type. METHODS: init IMPORTING p_trkorr TYPE trkorr p_wb_trkorr TYPE trkorr p_tabname TYPE tabname CHANGING p_error TYPE i. METHODS: write_to_trkorr CHANGING p_error TYPE i. METHODS: add_line_key IMPORTING p_line TYPE any CHANGING p_error TYPE i . METHODS: add_object IMPORTING pgmid TYPE pgmid object TYPE trobjtype obj_name TYPE trobj_name p_trkorr TYPE trkorr CHANGING p_error TYPE i . METHODS: add_star_key CHANGING p_error TYPE i . METHODS: get_metahead CHANGING p_error TYPE i. PRIVATE SECTION. DATA: a_trkorr TYPE trkorr. DATA: a_wb_trkorr TYPE trkorr. DATA: as_obj TYPE LINE OF tredt_objects. DATA: as_metahead TYPE x030l. DATA: a_tabname TYPE tabname. DATA: ar_typedescr TYPE REF TO cl_abap_typedescr. DATA: ar_tableline TYPE REF TO data. DATA: at_key TYPE tredt_keys. ENDCLASS. "DEFINITION *---------------------------------------------------------------------* * CLASS lcl_tabu_k_2_trkorr_writer IMPLEMENTATION *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* CLASS lcl_tabu_k_2_trkorr_writer IMPLEMENTATION. METHOD: init. CLEAR: as_obj, as_metahead, ar_typedescr, ar_tableline, a_tabname, at_key. FREE at_key. a_trkorr = p_trkorr. a_wb_trkorr = p_wb_trkorr. a_tabname = p_tabname. CALL METHOD get_metahead CHANGING p_error = p_error. ENDMETHOD. METHOD: add_object. * IMPORTING pgmid TYPE pgmid * object type TROBJTYPE * obj_name type TROBJ_NAME * p_trkorr type trkorr * CHANGING p_error TYPE i . as_obj-trkorr = p_trkorr. as_obj-pgmid = pgmid. as_obj-object = object. as_obj-obj_name = obj_name. as_obj-objfunc = space. ENDMETHOD. METHOD: add_star_key. * MAKE TABU * DATA: ls_key TYPE LINE OF tredt_keys. * Transport object as_obj-trkorr = a_trkorr. as_obj-pgmid = 'R3TR'. as_obj-object = 'TABU'. as_obj-obj_name = as_metahead-tabname. as_obj-objfunc = 'K'. * Initialize entry for table key transport MOVE-CORRESPONDING as_obj TO ls_key. ls_key-objname = as_obj-obj_name. ls_key-objfunc = space. ls_key-mastername = as_obj-obj_name. ls_key-mastertype = as_obj-object. ls_key-tabkey = '*'. * Insert key of tableline into transport request INSERT ls_key INTO TABLE at_key. ENDMETHOD. METHOD: add_line_key. *MAKE TABU K FIELD-SYMBOLS: TYPE ANY, TYPE x, TYPE x. DATA: ls_key TYPE LINE OF tredt_keys. *4.7 Only * Get metadata of the linetype of the given table * lo_typedescr = cl_abap_typedescr=>describe_by_data( * p_data = line ). * CALL METHOD lo_typedescr->get_ddic_header * RECEIVING * p_header = ls_metahead * EXCEPTIONS * OTHERS = 1. * IF sy-subrc <> 0. * pv_error = 1. * EXIT. * ENDIF. * Transport object as_obj-trkorr = a_trkorr. as_obj-pgmid = 'R3TR'. as_obj-object = 'TABU'. as_obj-obj_name = as_metahead-tabname. as_obj-objfunc = 'K'. * Initialize entry for table key transport MOVE-CORRESPONDING as_obj TO ls_key. ls_key-objname = as_obj-obj_name. ls_key-objfunc = space. ls_key-mastername = as_obj-obj_name. ls_key-mastertype = as_obj-object. * Extract tablekey CLEAR ls_key-tabkey. ASSIGN ls_key-tabkey TO CASTING. * If table has fields of type STRING or RAWSTRING, casting to type * 'X' is not possible -> generic solution unknown -> indiv. handling CASE as_metahead-tabname. WHEN 'PCL2' OR 'PCL1'. DATA l_key(46) TYPE c. l_key+0(45) = p_line. l_key+45(1) = '*'. ASSIGN l_key TO CASTING. (46) = (46). INSERT ls_key INTO TABLE at_key. EXIT. WHEN OTHERS. ASSIGN p_line TO CASTING. ENDCASE. * Copy key prefix (as_metahead-keylen) = . * Insert key of tableline into transport request INSERT ls_key INTO TABLE at_key. ENDMETHOD. METHOD: write_to_trkorr. DATA lt_ko200 TYPE TABLE OF ko200. DATA ls_e071 TYPE e071. IF as_obj IS INITIAL. EXIT. ENDIF. IF as_obj-objfunc = 'K' AND at_key IS INITIAL. EXIT. ENDIF. APPEND as_obj TO lt_ko200. ** Check data for transport request * Add data to transport request CALL FUNCTION 'TR_OBJECTS_CHECK' TABLES wt_ko200 = lt_ko200 wt_e071k = at_key EXCEPTIONS OTHERS = 1. *This one swallows correction requests too CALL FUNCTION 'TR_EDIT_CHECK_OBJECTS_KEYS' EXPORTING wi_order = a_trkorr wi_with_dialog = 'X' "'D' wi_send_message = 'X' "' ' * iv_no_show_option = iv_no_show_option * iv_no_standard_editor = iv_no_standard_editor * iv_externalps = iv_externalps * iv_externalid = iv_externalid * iv_no_ps = iv_no_ps IMPORTING we_order = a_trkorr * we_task = we_task TABLES wt_e071 = lt_ko200 wt_e071k = at_key * wt_tadir = tt_tadir EXCEPTIONS show_only_user_after_error = 1 cancel_edit_user_after_error = 2 OTHERS = 2. IF sy-subrc NE 0. CALL FUNCTION 'TR_EDIT_CHECK_OBJECTS_KEYS' EXPORTING wi_order = a_wb_trkorr wi_with_dialog = 'X' wi_send_message = 'X' * iv_no_show_option = iv_no_show_option * iv_no_standard_editor = iv_no_standard_editor * iv_externalps = iv_externalps * iv_externalid = iv_externalid * iv_no_ps = iv_no_ps IMPORTING we_order = a_wb_trkorr * we_task = we_task TABLES wt_e071 = lt_ko200 wt_e071k = at_key * wt_tadir = tt_tadir EXCEPTIONS show_only_user_after_error = 1 cancel_edit_user_after_error = 2 OTHERS = 2. IF sy-subrc NE 0. WRITE:/ 'Errore scrittura trkorr tabella', a_tabname. ENDIF. ENDIF. CLEAR: as_obj, as_metahead, ar_typedescr, ar_tableline, a_tabname, at_key. REFRESH at_key. ENDMETHOD. METHOD: get_metahead. * call dictionary interface CALL FUNCTION 'DDIF_NAMETAB_GET' EXPORTING tabname = a_tabname all_types = 'X' * LFIELDNAME = ' ' * GROUP_NAMES = ' ' * UCLEN = IMPORTING x030l_wa = as_metahead * DTELINFO_WA = * TTYPINFO_WA = * DDOBJTYPE = * DFIES_WA = * LINES_DESCR = * TABLES * X031L_TAB = * DFIES_TAB = EXCEPTIONS not_found = 1 OTHERS = 2 . IF sy-subrc <> 0. p_error = 1. ENDIF. ENDMETHOD. ENDCLASS. "lcl_tabu_k_2_trkorr_writer IMPLEMENTATION START-OF-SELECTION. DATA l_cnt TYPE i. DATA l_cnt_cid TYPE i. CLEAR l_cnt. CLEAR l_cnt_cid. DATA lt_pcl1 TYPE TABLE OF pcl1. DATA ls_pcl1 TYPE pcl1. DATA lt_perio TYPE TABLE OF ptrv_perio. DATA lt_head TYPE TABLE OF ptrv_head. DATA ls_head TYPE ptrv_head. DATA lt_tperio TYPE TABLE OF ptrv_perio. DATA ls_perio TYPE ptrv_perio. DATA l_error TYPE i. DATA l_tabname1 TYPE tabname VALUE 'PCL1'. DATA lr_trkk TYPE REF TO lcl_tabu_k_2_trkorr_writer . IF lr_trkk IS INITIAL. CREATE OBJECT lr_trkk. ENDIF. LOOP AT cidreinr. cidreinr-low+18(1) = '%'. SELECT * FROM pcl1 APPENDING TABLE lt_pcl1 WHERE relid = 'TE' AND srtfd LIKE cidreinr-low. l_cnt = l_cnt + sy-dbcnt. SELECT * FROM ptrv_perio APPENDING TABLE lt_perio WHERE pernr = cidreinr-low+0(8) AND reinr = cidreinr-low+8(10). SELECT * FROM ptrv_head APPENDING TABLE lt_head WHERE pernr = cidreinr-low+0(8) AND reinr = cidreinr-low+8(10). ENDLOOP. lt_tperio = lt_perio. SORT lt_tperio BY pernr. DELETE ADJACENT DUPLICATES FROM lt_tperio COMPARING pernr. DESCRIBE TABLE lt_tperio LINES l_cnt_cid. l_tabname1 = 'PCL1'. CALL METHOD lr_trkk->init EXPORTING p_trkorr = wbtrkorr p_wb_trkorr = wbtrkorr p_tabname = l_tabname1 CHANGING p_error = l_error. LOOP AT lt_pcl1 INTO ls_pcl1. CALL METHOD lr_trkk->add_line_key EXPORTING p_line = ls_pcl1 CHANGING p_error = l_error . ENDLOOP. IF sy-subrc EQ 0. CALL METHOD lr_trkk->write_to_trkorr CHANGING p_error = l_error. COMMIT WORK. ENDIF. l_tabname1 = 'PTRV_PERIO'. CALL METHOD lr_trkk->init EXPORTING p_trkorr = wbtrkorr p_wb_trkorr = wbtrkorr p_tabname = l_tabname1 CHANGING p_error = l_error. LOOP AT lt_perio INTO ls_perio. CALL METHOD lr_trkk->add_line_key EXPORTING p_line = ls_perio CHANGING p_error = l_error . ENDLOOP. IF sy-subrc EQ 0. CALL METHOD lr_trkk->write_to_trkorr CHANGING p_error = l_error. COMMIT WORK. ENDIF. l_tabname1 = 'PTRV_HEAD'. CALL METHOD lr_trkk->init EXPORTING p_trkorr = wbtrkorr p_wb_trkorr = wbtrkorr p_tabname = l_tabname1 CHANGING p_error = l_error. LOOP AT lt_head INTO ls_head. CALL METHOD lr_trkk->add_line_key EXPORTING p_line = ls_head CHANGING p_error = l_error . ENDLOOP. IF sy-subrc EQ 0. CALL METHOD lr_trkk->write_to_trkorr CHANGING p_error = l_error. COMMIT WORK. ENDIF. END-OF-SELECTION. WRITE: / 'Elaborate', l_cnt, 'TRASFERTE'. WRITE: / 'Elaborati', l_cnt_cid, 'CID'. *---------------------------------------------------------------------* * FORM select_tr_korr * *---------------------------------------------------------------------* FORM select_tr_korr USING p_uname p_type CHANGING p_korr. DATA lv_user TYPE trexreqhd-author. DATA ls_sel_korr TYPE trexreqhd. DATA lv_selected_index TYPE sy-tabix. DATA lt_rem_trkorr_list TYPE STANDARD TABLE OF trexreqhd. lv_user = p_uname. * IF uname = sy-uname. ** Korrekturauftrag für Transportobjekte auswählen * CALL FUNCTION 'TR_ORDER_CHOICE_CORRECTION' * EXPORTING * iv_category = p_type * iv_cli_dep = ' ' * IMPORTING * ev_order = p_korr ** ev_task = we_task * EXCEPTIONS * invalid_category = 1 * no_correction_selected = 2 * OTHERS = 3. * * IF sy-subrc NE 0. * MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno * WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. * ENDIF. * ELSE. CALL FUNCTION 'TR_F4_REQUESTS' EXPORTING iv_username = uname * IV_TRKORR_PATTERN = * IV_TRFUNCTIONS = * IV_TRSTATUS = * IV_FROM_DATE = * IV_TO_DATE = * IV_CLIENT = * IV_PROJECT = * IV_TITLE = * IV_VIA_SELECTION_SCREEN = 'X' * IV_COMPLETE_REQUESTS = 'X' IMPORTING ev_selected_request = p_korr * ES_SELECTED_REQUEST = . * ENDIF. ENDFORM. " SELECT_TR_KORR