By
Published: 26 Nov 2001
* 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 .
**----------------------------------------------------------------------
** 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
Dig Deeper on SAP development and programming languages