This tip has been copied from SearchSap.com
Tip submitted by: Eric Moise

* 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 .

Code

**———————————————————————-
** Program name.: ZSELECT_DYNAMIC – MOSHEG – 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 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