Skip to Content
avatar image
Former Member

Uploading Custom Table data?

Once I have data in a spreadsheet. Is there an SAP transaction for uploading the data into a custom table? Else, I'll write a utility to do this. Anybody have a generic ABAP utility for this?

Thanks.

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

2 Answers

  • Best Answer
    Aug 17, 2007 at 01:18 PM

    I have,

    give ten points for the code !

    ************************************************************************
    * ABAP name : ZBTA0001                                                 *
    *                                                                      *
    * Created by : Frédéric GIROD / Sébastien COLLOMB                      *
    *                                                                      *
    * Date : 14/03/2005                                                    *
    *                                                                      *
    * Description : BCxxxx Chargement / Dechargement de tables             *
    * transparentes SAP.                                                   *
    *                                                                      *
    *                                                                      *
    ************************************************************************
    * MODIFICATIONS                                                        *
    ************************************************************************
    * Date * Author * Marking code * Description                           *
    ************************************************************************
    * * * *                                                                *
    ************************************************************************
    REPORT ZBC_SAUVEGARDE_TABLE
           NO STANDARD PAGE HEADING.
    
    
    
    
    
    
    
    *------------------------------- TABLES -------------------------------*
    TABLES : dd02t.
    
    
    
    
    
    
    
    *-------------------------------- DATA --------------------------------*
    DATA : wt_fieldcat TYPE lvc_t_fcat ,
           ws_fieldcat TYPE lvc_s_fcat ,
    
    BEGIN OF wt_tablist OCCURS 0 ,
      tabname TYPE tabname ,
      ddtext TYPE as4text ,
    END OF wt_tablist .
    
    
    
    
    
    
    
    FIELD-SYMBOLS : <wfv_structname> TYPE typename , " Nom de la table
                    <wft_table>      TYPE table , " Table interne dyn
                    <wfs_structure>  TYPE ANY . " Structure de la table
    
    
    
    
    
    
    
    
    
    *-------------------------- SELECTION SCREEN --------------------------*
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
    PARAMETERS p_table TYPE tabname.
    SELECTION-SCREEN END OF BLOCK b1.
    
    SELECTION-SCREEN SKIP 1.
    
    SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t02.
    PARAMETERS : p_imp RADIOBUTTON GROUP ra1 ,
                 p_exp RADIOBUTTON GROUP ra1
                       DEFAULT 'X' ,
                 p_clear AS CHECKBOX .
    SELECTION-SCREEN END OF BLOCK b2.
    
    SELECTION-SCREEN SKIP 1.
    
    SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-t03.
    PARAMETERS : p_file TYPE localfile
                        OBLIGATORY .
    SELECTION-SCREEN SKIP 1.
    PARAMETERS : p_excl RADIOBUTTON GROUP ra2 ,
                 p_flat RADIOBUTTON GROUP ra2 .
    SELECTION-SCREEN END OF BLOCK b3.
    
    
    
    
    
    
    
    
    
    
    
    
    
    *-------------------------------- MAIN --------------------------------*
    START-OF-SELECTION.
    
    * Vérification des options de sélection.
      PERFORM p_check.
    
    * Déchargement de la table.
      IF p_exp EQ 'X'.
        PERFORM p_dechargement.
    
    * Chargement de la table.
      ELSE.
        PERFORM p_chargement.
    
      ENDIF.
    
    
    
    END-OF-SELECTION.
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    *----------------------------------------------------------------------*
    * Form P_CHECK.                                                        *
    *----------------------------------------------------------------------*
    *----------------------------------------------------------------------*
    FORM p_check.
    
    
    
      DATA : wlv_tabname TYPE tabname.
    
    
    * Verifie que la table existe.
      SELECT tabname
             UP TO 1 ROWS
             INTO wlv_tabname
             FROM dd02t
             WHERE tabname EQ p_table
             AND as4local EQ 'A'.
      ENDSELECT.
    
      IF sy-subrc NE space.
        WRITE : /3 text-001.
        STOP.
      ENDIF.
    
    * On ne traite que le chargement des tables Z*.
      IF p_imp EQ 'X' AND p_table+0(1) NE 'Z'.
        WRITE : /1 text-007.
        STOP.
      ENDIF.
    
    
    ENDFORM. " P_CHECK.
    
    
    
    
    
    
    
    *----------------------------------------------------------------------*
    * Form P_DECHARGEMENT.                                                 *
    *----------------------------------------------------------------------*
    * Déchargement de la table.                                            *
    *----------------------------------------------------------------------*
    FORM p_dechargement.
    
    
    * Création de la table interne dynamique du type de la table.
      PERFORM p_create_dyntable
              USING p_table.
    
    * Lecture de la table ( et oui un joli select * ! )
      SELECT *
             INTO TABLE <wft_table>
             FROM (p_table).
    
    * Si déchargen en format Excel.
      IF p_excl EQ 'X'.
        CALL FUNCTION 'SAP_CONVERT_TO_XLS_FORMAT'
          EXPORTING
            i_filename        = p_file
          TABLES
            i_tab_sap_data    = <wft_table>
          EXCEPTIONS
            conversion_failed = 1
            OTHERS            = 2.
        IF sy-subrc NE space.
          WRITE : /3 text-003.
        ENDIF.
    
    * Si fichier plat.
      ELSEIF p_flat EQ 'X'.
    
        CALL FUNCTION 'WS_DOWNLOAD'
          EXPORTING
            filename = p_file
            filetype = 'DAT'
          TABLES
            data_tab = <wft_table>
          EXCEPTIONS
            OTHERS   = 10.
        IF sy-subrc NE space.
          WRITE : /3 text-003.
        ENDIF.
    
      ENDIF.
    
    ENDFORM. " P_DECHARGEMENT.
    
    
    
    
    
    
    
    
    
    *----------------------------------------------------------------------*
    * Form P_CHARGEMENT.                                                   *
    *----------------------------------------------------------------------*
    * Chargement.                                                          *
    *----------------------------------------------------------------------*
    FORM p_chargement.
    
    
      DATA : wlv_count_col TYPE i ,
             wlv_flag_row TYPE kcd_ex_row_n ,
             wlt_file TYPE TABLE OF alsmex_tabline
                      WITH HEADER LINE ,
             wlv_char1 TYPE char1.
    
      FIELD-SYMBOLS : <wlfv_field> TYPE ANY.
    
    
    * Création de la table interne dynamique du type de la table.
      PERFORM p_create_dyntable
              USING p_table.
    
    * Lecture du fichier.
    * Si déchargen en format Excel.
      IF p_excl EQ 'X'.
    
    *   Seek number of column.
        DESCRIBE TABLE wt_fieldcat LINES wlv_count_col.
    
    *   Function to read the Microsoft Excel file.
        CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
          EXPORTING
            filename                = p_file
            i_begin_col             = '1'
            i_begin_row             = '1'
            i_end_col               = wlv_count_col
            i_end_row               = '10000'
          TABLES
            intern                  = wlt_file
          EXCEPTIONS
            inconsistent_parameters = 1
            upload_ole              = 2
            OTHERS                  = 3.
        IF sy-subrc NE space.
          WRITE : /3 text-003.
          STOP.
        ENDIF.
    
    *   Set data.
        LOOP AT wlt_file.
    
          IF wlt_file-row NE wlv_flag_row.
            MOVE wlt_file-row TO wlv_flag_row.
            IF wlt_file-row NE 1.
              APPEND <wfs_structure> TO <wft_table>.
              CLEAR <wfs_structure>.
            ENDIF.
          ENDIF.
    
          READ TABLE wt_fieldcat
               INTO ws_fieldcat
               INDEX wlt_file-col.
    
          CHECK sy-subrc EQ space.
          ASSIGN COMPONENT ws_fieldcat-fieldname
                 OF STRUCTURE <wfs_structure>
                 TO <wlfv_field>.
          CATCH SYSTEM-EXCEPTIONS conversion_errors = 1.
            MOVE wlt_file-value TO <wlfv_field>.
          ENDCATCH.
    
          IF sy-subrc EQ 1.
            " A FAIRE
          ENDIF.
    
        ENDLOOP.
    
    *   Append last time.
        APPEND <wfs_structure> TO <wft_table>.
    
    
    * Si fichier plat.
      ELSEIF p_flat EQ 'X'.
    
        CALL FUNCTION 'WS_UPLOAD'
          EXPORTING
            filename = p_file
            filetype = 'DAT'
          TABLES
            data_tab = <wft_table>
          EXCEPTIONS
            OTHERS   = 10.
    
        IF sy-subrc NE space.
          WRITE : /3 text-003.
          STOP.
        ENDIF.
    
      ENDIF.
    
    
    
    
    
    * Si vide la table avant.
      IF p_clear EQ 'X'.
    
    *   Verification avant la suppression de la table.
        CALL FUNCTION 'POPUP_TO_CONFIRM'
          EXPORTING
            titlebar       = text-004
            text_question  = text-005
          IMPORTING
            answer         = wlv_char1
          EXCEPTIONS
            text_not_found = 1
            OTHERS         = 2.
        IF wlv_char1 EQ '2'.
          STOP.
        ENDIF.
    
    *   On supprime tout.
        DELETE FROM (p_table) CLIENT SPECIFIED
               WHERE mandt EQ sy-mandt.
    
        IF sy-subrc NE space.
          WRITE : /3 text-003.
          STOP.
        ENDIF.
    
      ENDIF.
    
    
    
    * Chargement de la base.
      MODIFY (p_table) FROM TABLE <wft_table>.
      IF sy-subrc NE space.
        WRITE : /3 text-003.
        STOP.
      ENDIF.
    
    
    
    ENDFORM. " P_CHARGEMENT.
    
    
    
    
    
    
    
    
    
    *----------------------------------------------------------------------*
    * Form P_CREATE_DYNTABLE.                                              *
    *----------------------------------------------------------------------*
    *----------------------------------------------------------------------*
    FORM p_create_dyntable
         USING wpv_tabname TYPE tabname.
    
    
      DATA : wlt_table TYPE REF TO data ,
             wls_table TYPE REF TO data .
    
    
    * On assigne le nom de la table.
      IF <wfv_structname> IS ASSIGNED.
        UNASSIGN <wfv_structname>.
      ENDIF.
      ASSIGN wpv_tabname TO <wfv_structname>.
    
    
    * Recherche de la description du dictionnaire.
      REFRESH wt_fieldcat.
    
      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
        EXPORTING
          i_structure_name       = <wfv_structname>
          i_bypassing_buffer     = 'X'
        CHANGING
          ct_fieldcat            = wt_fieldcat
        EXCEPTIONS
          inconsistent_interface = 1
          program_error          = 2
          OTHERS                 = 3.
    
      IF sy-subrc NE space.
        WRITE : /1 text-003.
        STOP.
      ENDIF.
    
    
    
    * Création de la table interne dynamique.
      IF <wft_table> IS ASSIGNED.
        UNASSIGN <wft_table>.
      ENDIF.
    
      CALL METHOD cl_alv_table_create=>create_dynamic_table
        EXPORTING
          it_fieldcatalog = wt_fieldcat
        IMPORTING
          ep_table        = wlt_table.
    
      ASSIGN wlt_table->* TO <wft_table>.
    
    
    
    * Création de la structure du type de la table.
      IF <wfs_structure> IS ASSIGNED.
        UNASSIGN <wfs_structure>.
      ENDIF.
      CREATE DATA wls_table LIKE LINE OF <wft_table>.
      ASSIGN wls_table->* TO <wfs_structure>.
    
    
    ENDFORM. " P_CREATE_DYNTABLE.
    
    
    
    
    
    
    *------------------------------- EVENTS -------------------------------*
    * Au démarage de l'application.
    INITIALIZATION.
    
    * On desactive la zone vider la table, elle n'est active que pour
    * le chargement.
      LOOP AT SCREEN.
        IF screen-name EQ 'P_CLEAR'.
          MOVE '0' TO screen-active.
          MODIFY SCREEN.
        ENDIF.
      ENDLOOP.
    
    * A l'événement rafraichissement de l'écran.
    AT SELECTION-SCREEN OUTPUT.
    
      LOOP AT SCREEN.
    * Si on charge alors on active la zone P_CLEAR.
        IF p_imp EQ 'X'.
          IF screen-name EQ 'P_CLEAR'.
            MOVE '1' TO screen-active.
            MODIFY SCREEN.
          ENDIF.
        ELSE.
          IF screen-name EQ 'P_CLEAR'.
            MOVE '0' TO screen-active.
            MODIFY SCREEN.
          ENDIF.
        ENDIF.
      ENDLOOP.
    
    * Evenement F4 sur P_FILE.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
      CALL FUNCTION 'F4_FILENAME'
        IMPORTING
          file_name = p_file.

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Aug 17, 2007 at 01:38 PM

    ALSM_EXCEL_TO_INTERNAL_TABLE

    use this FM to upload from excel to internal table...

    Add comment
    10|10000 characters needed characters exceeded