SapMaterial.com
Create dynamic table with conditions

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
All of the  product names here are trademarks of their respective companies.  The site
www.allsaplinks.com no way affiliated with SAP AG. We have made every effort for the content
integrity.  Information used on this site is at your own risk.
ABAP TECHNICAL

SAP Introduction

sap abap faq

sap Tables

SAP Transaction codes

Internal tables

data dictionary

performance tuning

transports & Requests

Sap scripts

Smartforms

lsmw

reports

sap Workflow

module pool/ dialog
programming

table control

user exits

sap memory

abap memory

alv reports

ABAP ADVANCED

IDOC

ALE

BAPI

BADI

RFC


FUNCTIONAL SIDE

Materials Management

FICO

Human Resources

BIW / BW / SEM


Free Documentation
Abap Material

Ale Material

BAPI Material

BC Material

IDOC Material

R/3 Database Management

SAP material

RFC

Transport

Sales & Distribution Material

Basic Data and Function
Material

Basis (BC) Material

Billing Material

CA Material

CATT : Computer Aided Test
Tool

Capacity Evaluation and
leveling Material

Capacity Planning Material

Cross Application Material

Countries

Customer Service Material

Enterpise  Material

Financial / Controlling (FICO)

Internet Time Sheet

Inspection Material

HR Material

Material Management
Material

Payments Material

Payroll Material

Pension Fund

Production Planning and
Control

Plant Maintenance

Quality Management Material

Real Estate Material

SAP material

Wage Types