Copy table dynamically

Copy table dynamically

This program permits to create or update lines from source table to target table with create internal tables dynamically.
**----------------------------------------------------------------------
** Program name.: ZSELECT_DYNAMIC from version 4.6
* This program permits to create or update lines from source table
* to target table with create internal tables dynamically.
* If we have also the possibilities to include conditions for selecting
* data with where dynamic and with syntax-check of this conditions .
*-------------------------------
* parameters for this program :
*-------------------------------
*        Source table                      Z?????
*        Target table                      Z?????
*   _ client speciifed
*
*        Code line1 for where dynamic
*             line2 for where dynamic
*             line3 for where dynamic
*             line4 for where dynamic
*-----------------------------------------------------------------------
REPORT zselect_dynamic  LINE-SIZE 132
                        LINE-COUNT 65(1)
                        NO STANDARD PAGE HEADING
                        MESSAGE-ID z1.
TYPES ztab LIKE dcobjdef-name .
PARAMETERS: tab_name TYPE ztab   DEFAULT 'Z?????' ,
            tab_nam2 TYPE ztab   DEFAULT 'Z?????' ,
            pclient AS CHECKBOX .
SELECTION-SCREEN SKIP .
PARAMETERS: where1(80) ,
            where2(80) ,
            where3(80) ,
            where4(80) .
*
DATA : lcode(72),
       prog_tab

    Requires Free Membership to View

    When you register, you will start receiving targeted emails from my award-winning team of editorial writers. Our goal is to keep you informed on the hottest topics and biggest challenges faced by SAP professionals today.

    Hannah Smalltree, Editorial Director

    By submitting your registration information to SearchSAP.com you agree to receive email communications from TechTarget and TechTarget partners. We encourage you to read our Privacy Policy which contains important disclosures about how we collect and use your registration and other information. If you reside outside of the United States, by submitting this registration information you consent to having your personal data transferred to and processed in the United States. Your use of SearchSAP.com is governed by our Terms of Use. You may contact us at webmaster@TechTarget.com.

LIKE lcode OCCURS 0 WITH HEADER LINE . DEFINE append_line. append &1 to prog_tab. END-OF-DEFINITION. DATA: BEGIN OF nametab OCCURS 0. INCLUDE STRUCTURE dntab. DATA: END OF nametab. DATA: BEGIN OF twhere OCCURS 20, line(80), END OF twhere. DATA: zprogram LIKE sy-cprog, no_line TYPE i, zmessage(150) , count_commit TYPE i . DATA: d_ref TYPE REF TO data, d_ref2 TYPE REF TO data , lt_alv_cat TYPE TABLE OF lvc_s_fcat, ls_alv_cat LIKE LINE OF lt_alv_cat. FIELD-SYMBOLS : TYPE table, , ,"TYPE ANY , , . **----------------------------------------------------- ** Main program. **----------------------------------------------------- START-OF-SELECTION. END-OF-SELECTION. **----------------------------------------------------- ** Main program. **----------------------------------------------------- PERFORM z_define_itab . *&---------------------------------------------------------------------* *& Form z_define_itab *&---------------------------------------------------------------------* FORM z_define_itab . CHECK ( tab_name(01) = 'Z' OR tab_name(01) = 'Y' ) * if you want treat tables with your namespace, insert here your code AND ( tab_nam2(01) = 'Z' OR tab_nam2(01) = 'Y' ) . REFRESH nametab. CALL FUNCTION 'NAMETAB_GET' EXPORTING langu = sy-langu tabname = tab_name TABLES nametab = nametab EXCEPTIONS no_texts_found = 1. LOOP AT nametab . ls_alv_cat-fieldname = nametab-fieldname . ls_alv_cat-ref_table = tab_name. ls_alv_cat-ref_field = nametab-fieldname . APPEND ls_alv_cat TO lt_alv_cat. ENDLOOP. * internal table build CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = lt_alv_cat IMPORTING ep_table = d_ref . ASSIGN d_ref->* TO . IF where1 IS INITIAL AND where2 IS INITIAL AND where3 IS INITIAL AND where4 IS INITIAL . SELECT * FROM (tab_name) INTO TABLE . * ORDER BY PRIMARY KEY. ELSE . PERFORM select_with_where . ENDIF . DESCRIBE TABLE LINES sy-tfill . IF sy-tfill = 0 . MESSAGE i000 WITH 'Data not selected, verify the tables or conditions ! ' . STOP . ELSE . MESSAGE s000 WITH 'You have successfully treated yours tables.'. ENDIF . CREATE DATA d_ref2 TYPE (tab_nam2). ASSIGN d_ref2->* TO . LOOP AT ASSIGNING . CLEAR . LOOP AT nametab . ASSIGN COMPONENT nametab-fieldname OF STRUCTURE TO . IF sy-subrc <> 0. EXIT. ENDIF. ASSIGN COMPONENT nametab-fieldname OF STRUCTURE TO . IF sy-subrc = 0. = . ENDIF. ENDLOOP . CHECK sy-subrc = 0. INSERT INTO (tab_nam2) VALUES . IF sy-subrc NE 0 . UPDATE (tab_nam2) FROM . ENDIF . ADD 1 TO count_commit . IF count_commit = '10000' . COMMIT WORK . count_commit = 0 . ENDIF . WRITE : . ENDLOOP . ENDFORM. " z_define_itab *&---------------------------------------------------------------------* *& Form select_with_where *&---------------------------------------------------------------------* FORM select_with_where. IF NOT where1 IS INITIAL . twhere-line = where1 . APPEND twhere . ENDIF . IF NOT where2 IS INITIAL . twhere-line = where2 . APPEND twhere . ENDIF . IF NOT where3 IS INITIAL . twhere-line = where3 . APPEND twhere . ENDIF . IF NOT where4 IS INITIAL . twhere-line = where4 . APPEND twhere . ENDIF . REFRESH prog_tab. append_line 'REPORT ZGEN .'. append_line 'TABLES:'. append_line tab_name. append_line '.'. append_line 'DATA: ITAB LIKE'. append_line tab_name. append_line 'OCCURS 0 WITH HEADER LINE.'. append_line 'FORM SELECT_TABLE.'. append_line 'SELECT * FROM'. append_line tab_name. IF pclient = 'X'. append_line 'CLIENT SPECIFIED'. ENDIF. append_line 'INTO TABLE ITAB'. append_line 'WHERE '. LOOP AT twhere. append_line twhere. ENDLOOP. append_line ' . '. append_line 'ENDFORM.'. PERFORM generate_form . ENDFORM. " select_with_where *&---------------------------------------------------------------------* *& Form generate_form *&---------------------------------------------------------------------* FORM generate_form . GENERATE SUBROUTINE POOL prog_tab NAME zprogram MESSAGE zmessage LINE no_line . IF sy-subrc NE 0. WRITE: / 'Syntax error : ', zmessage, / 'in line', no_line . STOP. ENDIF. SELECT * FROM (tab_name) INTO TABLE WHERE (twhere) . ENDFORM. " generate_form

This was first published in November 2001

Disclaimer: Our Tips Exchange is a forum for you to share technical advice and expertise with your peers and to learn from other enterprise IT professionals. TechTarget provides the infrastructure to facilitate this sharing of information. However, we cannot guarantee the accuracy or validity of the material submitted. You agree that your use of the Ask The Expert services and your reliance on any questions, answers, information or other materials received through this Web site is at your own risk.