abap 超大数据量上传至内表

每次上传9999,循环十次99990数据量,根据实际需求设置循环次数。

REPORT ztest22.

TYPE-POOLS:slis.
DATA:BEGIN OF it_fname OCCURS 0,
  name TYPE char255,
END OF it_fname.

DATA:g_begin_row TYPE i,
      g_end_row   TYPE i.
DATA:git_temp TYPE TABLE OF alsmex_tabline,
      gwa_temp TYPE alsmex_tabline.

TYPES:BEGIN OF ty_tab,
  aufnr TYPE aufnr,       "工单
  jx_matnr TYPE matnr,    "机型
  wl_matnr TYPE matnr,    "物料
  mng01 TYPE i,       "数量
  podate  TYPE string,    "日期
END OF ty_tab.

DATA:gt_itab TYPE TABLE OF ty_tab WITH NON-UNIQUE KEY aufnr jx_matnr,
      wa_itab TYPE  ty_tab.

SELECTION-SCREEN BEGIN OF BLOCK blk_001 WITH FRAME TITLE text-001 . "选择文件路径
PARAMETERS:p_file LIKE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK blk_001.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file  .
  PERFORM open_file.

START-OF-SELECTION.
  PERFORM upload_file.      "上传数据

*&---------------------------------------------------------------------*
*&      Form  open_file
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM open_file.
  CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
    EXPORTING
      program_name  = syst-repid
      dynpro_number = syst-dynnr
      mask          = '*.xlsx,*.xls'
      static        = 'X'
    CHANGING
      file_name     = p_file.
ENDFORM.                    "vq_fn

*&---------------------------------------------------------------------*
*&      Form  upload_file
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM upload_file .
  g_begin_row = 2.                 "从第几行开始
  g_end_row = g_begin_row + 10000. "列数

  DO 10 TIMES.
    REFRESH:git_temp.
*   Get EXCEL-Sheet in internal table
    CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
      EXPORTING
        filename                = p_file
        i_begin_col             = '1'
        i_begin_row             = g_begin_row
        i_end_col               = 10
        i_end_row               = g_end_row
      TABLES
        intern                  = git_temp
      EXCEPTIONS
        inconsistent_parameters = 1
        upload_ole              = 2
        OTHERS                  = 3.
    IF git_temp[] IS INITIAL.
      EXIT.
    ELSE.
      LOOP AT git_temp INTO gwa_temp.
        AT NEW row.
          CLEAR wa_itab.
        ENDAT.
        CASE gwa_temp-col.
          WHEN '1'.
            wa_itab-aufnr = gwa_temp-value.
          WHEN '2'.
            wa_itab-jx_matnr = gwa_temp-value.
          WHEN '3'.
            wa_itab-wl_matnr = gwa_temp-value.
          WHEN '4'.
            wa_itab-mng01 = gwa_temp-value.
          WHEN '5'.
            wa_itab-podate = gwa_temp-value.
        ENDCASE.
        AT END OF row.
          APPEND wa_itab TO gt_itab.
        ENDAT.
      ENDLOOP.
      g_begin_row = g_end_row + 1.
      g_end_row   = g_begin_row + 10000.
    ENDIF.
  ENDDO.
ENDFORM.                    " UPLOAD_FILE
*&---------------------------------------------------------------------*
*&      Form  append_filename
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_NAME     text
*----------------------------------------------------------------------*
FORM append_filename USING p_name .
  it_fname-name = p_name.
  APPEND it_fname.
  CLEAR it_fname.
ENDFORM.                    "append_filename

猜你喜欢

转载自www.cnblogs.com/freeandeasy/p/12216846.html