Problem solve Get help with specific problems with your technologies, process and projects.

Create dynamic table with conditions

This program permits to create or update lines from source table

* 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

Start the conversation

Send me notifications when other members comment.

Please create a username to comment.

-ADS BY GOOGLE

SearchERP

SearchOracle

SearchDataManagement

SearchAWS

SearchBusinessAnalytics

SearchContentManagement

SearchHRSoftware

Close