Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 746|回复: 0

[问题解决]大数据量上载excel文件数据到SAP系统[ALSM_EXCEL_TO_INTERNAL_TABLE]

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-7-20 11:46:43 | 显示全部楼层 |阅读模式

    1, 问题描述

    用excel上载大数据量的BOM数据到SAP系统中,一次上载的数量级别在10万条左右,这时用ALSM_EXCEL_TO_INTERNAL_TABLE上载时会dump,查看了代码发现ALSM_EXCEL_TO_INTERNAL_TABLE中是将数据先保存到剪贴板( Clippboard )上,然后在保存到内表中,很不幸剪贴板大小有限制,超过就会dump。

    2017-02-15_15-44-00

    2, 问题解决

    解决方法比较简单,就是在循环中调用ALSM_EXCEL_TO_INTERNAL_TABLE,将一次上载的内容分成多次,以便减少保存到剪贴板中的内容。

    代码如下:

    下面代码中,每次上载40000条数据,循环10次,最多可以上载40万,当然循环次数还可以按需求扩大。

    REPORT ztest_upload_excel.
    
    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_upload,
            werks       TYPE ymoe_compalloc-werks,       "Plant
            root        TYPE ymoe_compalloc-root,        "Root material
            maktxr      TYPE makt-maktx,                 "Description ( R )
            parent      TYPE ymoe_compalloc-parent,      "Parent
            maktxp      TYPE makt-maktx,                 "Description ( P )
            beskz       TYPE marc-beskz,                 "Procurement Type
            sobsl       TYPE marc-sobsl,                 "Special Procurement Type
            component   TYPE ymoe_compalloc-component,   "Component
            maktxc      TYPE makt-maktx,                 "Description ( C )
            prodline    TYPE ymoe_compalloc-prodline,    "Production Line
            workstation TYPE ymoe_compalloc-workstation, "Work Station
          END OF ty_upload.
    DATA:git_upload TYPE STANDARD TABLE OF ty_upload,
         gwa_upload LIKE LINE OF git_upload.
    
    PARAMETERS:p_file   TYPE rlgrap-filename
                   DEFAULT 'C:\temp\upload.xlsx' OBLIGATORY. "File Name
    
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
      PERFORM frm_get_filename.
    
    *----------------------------------------------------------------------*
    * Start-of-Selection
    *----------------------------------------------------------------------*
    START-OF-SELECTION.
    
      g_begin_row = 2.
      g_end_row = g_begin_row + 40000.
    
      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               = '11'
            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 gwa_upload.
            ENDAT.
            CASE gwa_temp-col.
              WHEN '1'.
                gwa_upload-werks = gwa_temp-value.
              WHEN '2'.
                gwa_upload-root = gwa_temp-value.
              WHEN '3'.
                gwa_upload-maktxr = gwa_temp-value.
              WHEN '4'.
                gwa_upload-parent = gwa_temp-value.
              WHEN '5'.
                gwa_upload-maktxp = gwa_temp-value.
              WHEN '6'.
                gwa_upload-beskz = gwa_temp-value.
              WHEN '7'.
                gwa_upload-sobsl = gwa_temp-value.
              WHEN '8'.
                gwa_upload-component = gwa_temp-value.
              WHEN '9'.
                gwa_upload-maktxc = gwa_temp-value.
              WHEN '10'.
                gwa_upload-prodline = gwa_temp-value.
              WHEN '11'.
                gwa_upload-workstation = gwa_temp-value.
            ENDCASE.
            AT END OF row.
              APPEND gwa_upload TO git_upload.
            ENDAT.
          ENDLOOP.
          g_begin_row = g_end_row + 1.
          g_end_row   = g_begin_row + 40000.
        ENDIF.
    
      ENDDO.
    
    *&---------------------------------------------------------------------*
    *&      Form  FRM_GET_FILENAME
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM frm_get_filename .
    
      DATA:l_filter TYPE string,
           lit_file TYPE STANDARD TABLE OF file_table,
           lwa_file LIKE LINE OF lit_file,
           l_rc     TYPE i.
    
      CLEAR:p_file.
      l_filter = 'Microsoft Excel Files (*.XLS;*.XLSX;*.XLSM)|*.XLS;*.XLSX;*.XLSM|'.
    
      CALL METHOD cl_gui_frontend_services=>file_open_dialog
        EXPORTING
    *     window_title            =
          default_extension       = '.xlsx'
    *     default_filename        =
          file_filter             = l_filter
    *     with_encoding           =
    *     initial_directory       =
    *     multiselection          =
        CHANGING
          file_table              = lit_file
          rc                      = l_rc
    *     user_action             =
    *     file_encoding           =
        EXCEPTIONS
          file_open_dialog_failed = 1
          cntl_error              = 2
          error_no_gui            = 3
          not_supported_by_gui    = 4
          OTHERS                  = 5.
      IF sy-subrc = 0.
        READ TABLE lit_file INTO lwa_file INDEX 1.
        IF sy-subrc = 0.
          p_file = lwa_file-filename.
        ENDIF.
      ENDIF.
    
    ENDFORM.

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-25 15:12 , Processed in 0.122503 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表