ABAP 上传EXCEL到SAP

TEXT_CONVERT_XLS_TO_SAP函数(未用):

1、如果数量、金额小于1,则导入时被自动放大1000或100倍(如果数据为3位小数,则放大1000倍,如果数据为2位小数,则放大100倍)。例如:0.500 吨的数量 上载后被此函数自动转换为500吨,被放大了1000倍;0.98 CNY的金额,上载后被此函数自动转换为98 CNY,被放大了100倍。


处理:方法一

将上载数据EXCEL中的数量、金额,全部转换为文本(不是只将单元格设置为文本),必须转换为EXCEL单元中左上角为绿色小三角形的文本单元格。设置后再上载此数据,则解决此问题。

处理:方法二

修改程序,把上载后内表:数量、金额字段 全部设置为 字符型 ,上载后,使用 replace 命令去除千分位豆号(建议每个数据执行3-5次),然后将相同的数据 赋值 到另一个内表表(字段相同,只是:数量为数量型、金额为金额型).设置后再上载此数据,则解决此问题。

2、单元格文本不能超过256个字符。

ALSM_EXCEL_TO_INTERNAL_TABLE函数(未用):

单元格文本不能超过50个字符,一是每个CELL只能导入前50个字符,二是如果超过9999行。

ZALSM_EXCEL_TO_INTERNAL_TABLE函数(当前使用):

这个函数问题少,比较好用,可以按内部数据结构,自动填充内表。当然excel列的顺序要和内表字段顺序一样。

FUNCTION ZALSM_EXCEL_TO_INTERNAL_TABLE.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(FILENAME) LIKE  RLGRAP-FILENAME
*"     VALUE(I_BEGIN_COL) TYPE  I
*"     VALUE(I_BEGIN_ROW) TYPE  I
*"     VALUE(I_END_COL) TYPE  I
*"     VALUE(I_END_ROW) TYPE  I
*"     VALUE(SHEET_NAME) TYPE  ALSMEX_TABLINE-VALUE OPTIONAL
*"  TABLES
*"      INTERN OPTIONAL
*"  EXCEPTIONS
*"      INCONSISTENT_PARAMETERS
*"      UPLOAD_OLE
*"----------------------------------------------------------------------
*"james_lx 2021.8.30 copy

* value of excel-cell
* Global data declarations

  TYPES: TY_D_ITABVALUE             TYPE ALSMEX_TABLINE-VALUE,
* internal table containing the excel data
         TY_T_ITAB                  TYPE ALSMEX_TABLINE   OCCURS 0,

* line type of sender table
         BEGIN OF TY_S_SENDERLINE,
           LINE(4096)               TYPE C,
         END OF TY_S_SENDERLINE,
* sender table
         TY_T_SENDER                TYPE TY_S_SENDERLINE  OCCURS 0.

  DATA: EXCEL_TAB     TYPE  TY_T_SENDER.
  DATA: LD_SEPARATOR  TYPE  C.
  DATA: APPLICATION   TYPE  OLE2_OBJECT,
        WORKBOOK      TYPE  OLE2_OBJECT,
        RANGE         TYPE  OLE2_OBJECT,
        WORKSHEET     TYPE  OLE2_OBJECT.
  DATA: H_CELL        TYPE  OLE2_OBJECT,
        H_CELL1       TYPE  OLE2_OBJECT.
  DATA:
    LD_RC             TYPE I.
* Rückgabewert der Methode "clipboard_export "

* Makro für Fehlerbehandlung der Methods
  DEFINE M_MESSAGE.
    case sy-subrc.
      when 0.
      when 1.
        message id sy-msgid type sy-msgty number sy-msgno
                with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      when others. raise upload_ole.
    endcase.
  END-OF-DEFINITION.


* check parameters
  IF I_BEGIN_ROW > I_END_ROW. RAISE INCONSISTENT_PARAMETERS. ENDIF.
  IF I_BEGIN_COL > I_END_COL. RAISE INCONSISTENT_PARAMETERS. ENDIF.

* Get TAB-sign for separation of fields
  CLASS CL_ABAP_CHAR_UTILITIES DEFINITION LOAD.
  LD_SEPARATOR = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.

* open file in Excel
  IF APPLICATION-HEADER = SPACE OR APPLICATION-HANDLE = -1.
    CREATE OBJECT APPLICATION 'Excel.Application'.
    M_MESSAGE.
  ENDIF.
  CALL METHOD OF APPLICATION 'Workbooks' = WORKBOOK.
  M_MESSAGE.
  CALL METHOD OF WORKBOOK 'Open' EXPORTING #1 = FILENAME.
  M_MESSAGE.
* set property of application 'Visible' = 1.
* m_message.
* GET PROPERTY OF APPLICATION 'ACTIVESHEET' = WORKSHEET.
* M_MESSAGE.
*----------------------------------------------------------------------*
* Add by XieSW 2015-3-17
  IF SHEET_NAME = SPACE."用默认模式
    GET PROPERTY OF  APPLICATION 'ACTIVESHEET' = WORKSHEET.
    M_MESSAGE.
  ELSE.
*-->可以实现读取多个sheet
    CALL METHOD OF APPLICATION 'WORKSHEETS' = WORKSHEET
      EXPORTING
        #1 = SHEET_NAME.

    CALL METHOD OF WORKSHEET 'Activate'.
    M_MESSAGE.
  ENDIF.
*----------------------------------------------------------------------*
* mark whole spread sheet
  CALL METHOD OF WORKSHEET 'Cells' = H_CELL
      EXPORTING #1 = I_BEGIN_ROW #2 = I_BEGIN_COL.
  M_MESSAGE.
  CALL METHOD OF WORKSHEET 'Cells' = H_CELL1
      EXPORTING #1 = I_END_ROW #2 = I_END_COL.
  M_MESSAGE.

  CALL METHOD  OF WORKSHEET 'RANGE' = RANGE
                 EXPORTING #1 = H_CELL #2 = H_CELL1.
  M_MESSAGE.
  CALL METHOD OF RANGE 'SELECT'.
  M_MESSAGE.

* copy marked area (whole spread sheet) into Clippboard
  CALL METHOD OF RANGE 'COPY'.
  M_MESSAGE.

* read clipboard into ABAP
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_IMPORT
    IMPORTING
      DATA       = EXCEL_TAB
    EXCEPTIONS
      CNTL_ERROR = 1
* ERROR_NO_GUI = 2
* NOT_SUPPORTED_BY_GUI = 3
      OTHERS     = 4.
  IF SY-SUBRC <> 0.
    MESSAGE A037(ALSMEX).
  ENDIF.

  "PERFORM separated_to_intern_convert TABLES excel_tab intern  USING  ld_separator.    注意:标准函数调用这个FORM转换内表数据,使用麻烦
************ BEGIN 修改为以下的代码:*********************
  FIELD-SYMBOLS:<DYN_FIELD>.
  DATA: F_WA LIKE LINE OF EXCEL_TAB,
              IT_DATA TYPE STRING OCCURS 0 WITH HEADER LINE.

  LOOP AT EXCEL_TAB INTO F_WA.
    SPLIT F_WA  AT LD_SEPARATOR INTO TABLE IT_DATA .
    LOOP AT IT_DATA .
      CONDENSE IT_DATA.
      ASSIGN COMPONENT SY-TABIX OF STRUCTURE  INTERN  TO <DYN_FIELD>.
      <DYN_FIELD> = IT_DATA.
    ENDLOOP.
    IF INTERN IS NOT INITIAL.
      APPEND INTERN.
      CLEAR INTERN.
    ENDIF.
  ENDLOOP.
************ END 修改为以下的代码:*********************

* clear clipboard
  REFRESH EXCEL_TAB.
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_EXPORT
    IMPORTING
      DATA       = EXCEL_TAB
    CHANGING
      RC         = LD_RC
    EXCEPTIONS
      CNTL_ERROR = 1
* ERROR_NO_GUI = 2
* NOT_SUPPORTED_BY_GUI = 3
      OTHERS     = 4.

* quit Excel and free ABAP Object - unfortunately, this does not kill
* the Excel process
  CALL METHOD OF APPLICATION 'QUIT'.
  M_MESSAGE.

* >>>>> Begin of change note 575877
* to kill the Excel process it's necessary to free all used objects
  FREE OBJECT H_CELL.       M_MESSAGE.
  FREE OBJECT H_CELL1.      M_MESSAGE.
  FREE OBJECT RANGE.        M_MESSAGE.
  FREE OBJECT WORKSHEET.    M_MESSAGE.
  FREE OBJECT WORKBOOK.     M_MESSAGE.
  FREE OBJECT APPLICATION.  M_MESSAGE.
* <<<<< End of change note 575877



ENDFUNCTION.

SE37图 

使用ZALSM_EXCEL_TO_INTERNAL_TABLE的例子:

*&---------------------------------------------------------------------*
*& report zsde0006
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
report zsde0006.
tables ztsd0026.


data gs_ztsd0026 like ztsd0026.
data gt_ztsd0026 like table of ztsd0026.



"ecxel数据定义
types :
        begin of gs_t_excel,
            doc_type    like  ztsd0026-doc_type,
            sales_org   like  ztsd0026-sales_org,
            distr_chan  like  ztsd0026-distr_chan,
            division    like  ztsd0026-division,
            req_date_h  like  ztsd0026-req_date_h,
            partn_numb  like  ztsd0026-partn_numb,
            name        like  ztsd0026-name,
            material    like  ztsd0026-material,
            maktx       like  ztsd0026-maktx,
            xmlx        like  ztsd0026-xmlx,
            pmnttrms    like  ztsd0026-pmnttrms,
            plant       like  ztsd0026-plant,
            ship_point  like  ztsd0026-ship_point,
            req_qty     like  ztsd0026-req_qty,
            zmodel      like  ztsd0026-zmodel,
            zcolor      like  ztsd0026-zcolor,
            zinterior   like  ztsd0026-zinterior,
            zoptpack    like  ztsd0026-zoptpack,
            text        like  ztsd0026-text,
            excelid     like  ztsd0026-excelid,

        end of gs_t_excel.

  data gs_excel  type   gs_t_excel.
  data gs_excel_check  type   gs_t_excel.
  data gs_excel_temp  type   gs_t_excel.


  data gt_excel  type  table  of gs_t_excel.
  data gt_excel_check  type  table  of gs_t_excel.

  "备注文本text零时表定义
  types :
        begin of gs_t_bztxt,
            text      like  ztsd0026-text,
            posnr     TYPE posnr,

        end of gs_t_bztxt.

  data gs_bztxt  type   gs_t_bztxt.
  data gt_bztxt  type  table  of gs_t_bztxt.


"检查用

types :
        begin of gs_t_field6,
            doc_type    like  ztsd0026-doc_type,
            sales_org   like  ztsd0026-sales_org,
            distr_chan  like  ztsd0026-distr_chan,
            division    like  ztsd0026-division,
            req_date_h  like  ztsd0026-req_date_h,
        end of gs_t_field6.

data gs_field6  type   gs_t_field6.
data gt_field6  type  table  of gs_t_field6.

"BAPI  数据定义
  DATA gs_header TYPE bapisdhd1.
  DATA gt_partner TYPE TABLE OF bapiparnr.
  DATA gs_partner TYPE bapiparnr.

  DATA gv_posnr TYPE posnr. " 订单Item号
  DATA gv_charact_cfgid TYPE cux_cfg_id.
  DATA gv_charact_insid TYPE cu_inst_id.

  DATA gt_item TYPE TABLE OF bapisditm.
  DATA gs_item TYPE bapisditm.

  DATA gv_etenr TYPE etenr. " 订单Schedule Line号
  DATA gt_sl TYPE TABLE OF bapischdl.
  DATA gs_sl TYPE bapischdl.

  DATA gt_cfgins TYPE TABLE OF bapicuins.
  DATA gs_cfgins TYPE bapicuins.

  DATA gt_cfgref TYPE TABLE OF bapicucfg.
  DATA gs_cfgref TYPE bapicucfg.

  DATA gv_class TYPE cuib_objkey.

  DATA gt_cfgval TYPE TABLE OF bapicuval.
  DATA gs_cfgval TYPE bapicuval.


  DATA gs_cha TYPE char70.
  DATA gt_cha TYPE TABLE OF char70.

  DATA gv_char50 TYPE  char50.

  DATA gv_vbeln TYPE vbeln. " SO凭证号

  DATA gt_rc TYPE TABLE OF bapiret2.
  DATA gs_rc TYPE bapiret2.
  DATA gv_err_flag TYPE xfeld.

  DATA ls_header TYPE thead.
  data gt_line type table of tline.
  data wa_line like  tline.






selection-screen begin of block bk with frame title text-b02.
parameter:p_path like rlgrap-filename modif id md1.
selection-screen end of block bk.





DATA: functxt TYPE smp_dyntxt.
TABLES: sscrfields.
SELECTION-SCREEN: FUNCTION KEY 1,FUNCTION KEY 2."download template.


initialization.


  functxt-icon_id       = icon_xxl.
  functxt-icon_text     = text-002.
  sscrfields-functxt_01 = functxt.

  functxt-icon_id       = ICON_SPOOL_REQUEST.
  functxt-icon_text     = text-003.
  sscrfields-functxt_02 = functxt.


  AT SELECTION-SCREEN.

  CASE sscrfields-ucomm.
    WHEN 'FC01'.
      PERFORM frm_template_down.
    WHEN 'FC02'.
      SUBMIT ZSDR0026 VIA SELECTION-SCREEN.


  ENDCASE.




at selection-screen on value-request for p_path.
  perform frm_sel_file changing p_path.


start-of-selection.
  perform frm_excel_import.





FORM frm_template_down .
  DATA: lv_filename    TYPE string,
         lv_path        TYPE string,
         lv_fullpath    TYPE string,
         lv_user_action TYPE i,
         lv_destination TYPE rlgrap-filename,
         ls_objdata     TYPE wwwdatatab,
         lv_objid       TYPE wwwdatatab-objid,
         lv_rc          TYPE sy-subrc.

  lv_filename = 'Template Download'.

  CONCATENATE sy-datum '-' sy-uzeit '-' lv_filename INTO lv_filename.

  IF lv_user_action <> 9.
    SELECT SINGLE relid objid
      FROM wwwdata
      INTO CORRESPONDING FIELDS OF  ls_objdata
      WHERE srtf2 = 0
      AND   objid = 'ZSDE0006'
      AND   relid = 'MI'.
    IF sy-subrc = 0.
      CLEAR lv_rc.
      CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
        EXPORTING
          key               = ls_objdata
          destination       = lv_destination
        IMPORTING
          rc                = lv_rc
*    CHANGING
*      TEMP              =
                .
      IF lv_rc EQ 0 .
        MESSAGE  'Template download sucessful.' TYPE 'S'.
      ELSE.
        MESSAGE  'The template is not exit.' TYPE 'S' DISPLAY LIKE 'E'.
      ENDIF.
    ELSE.
      MESSAGE  'The template is not exit.' TYPE 'S' DISPLAY LIKE 'E'.
    ENDIF.
  ENDIF.
ENDFORM.                    " FRM_TEMPLATE_DOWN.











*&---------------------------------------------------------------------*
*&      form  frm_sel_file
*&---------------------------------------------------------------------*
*       text 选择文件
*----------------------------------------------------------------------*
form frm_sel_file changing po_path.
  data:
    lt_filetable    type   filetable,
    ls_filetable    type   file_table,
    lv_rc           type   sy-subrc,
    lv_filename     type   string,
    lv_initial_path type   string value 'c:\'.

  clear lv_filename.
  lv_filename = p_path.
  call method cl_gui_frontend_services=>file_open_dialog
    exporting
      default_filename        = lv_filename
      initial_directory       = lv_initial_path
    changing
      file_table              = lt_filetable
      rc                      = lv_rc
    exceptions
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 4.

  if sy-subrc ne 0 or lv_rc lt 0.
    message '上传文件选择失败' TYPE 'I'."上传文件选择失败
  else.
    if lv_rc = 1.
      read table lt_filetable into ls_filetable index 1.
      po_path = ls_filetable-filename.
    else.
      exit.
    endif.
  endif.
endform.

*&---------------------------------------------------------------------*
*&      form   frm_excel_import
*&---------------------------------------------------------------------*
*       text 读取excel文件
*----------------------------------------------------------------------*
form frm_excel_import.
  data cl_ex type ref to cx_root.
  check p_path is not initial.


try .

      call function 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
        exporting
          filename                = p_path
          i_begin_col             = 1
          i_begin_row             = 3
          i_end_col               = 21
          i_end_row               = 5000
*         sheet_name              =
        tables
          intern                  = gt_excel
        exceptions
          inconsistent_parameters = 1
          upload_ole              = 2
          others                  = 3.


 catch cx_root into cl_ex.
      message  cl_ex->get_text( )  TYPE 'I'  .

 endtry.



*gs_excel-PARTN_NUMB. "客户编码
*gs_excel-MATERIAL.   "物料
*gs_excel-ZMODEL.     "基本车型
*gs_excel-ZCOLOR.     "外饰
*gs_excel-ZINTERIOR.  "内饰
*gs_excel-ZOPTPACK.   "选装包




sort gt_excel by PARTN_NUMB .

DATA n type i VALUE 0.

"按表头字段检查,分类
gt_excel_check = gt_excel .

 loop at gt_excel_check into gs_excel_check.


        gs_field6-doc_type    = gs_excel_check-doc_type.  " 订单类型
        gs_field6-sales_org   = gs_excel_check-sales_org.  " 销售组织
        gs_field6-distr_chan  = gs_excel_check-distr_chan.  " 分销渠道
        gs_field6-division    = gs_excel_check-division.    " 产品组
        gs_field6-REQ_DATE_H  = gs_excel_check-REQ_DATE_H. "请求交货日期
        APPEND gs_field6 TO gt_field6.

   AT END OF PARTN_NUMB.


      DELETE ADJACENT DUPLICATES FROM gt_field6.

      DESCRIBE TABLE gt_field6 LINES n.

      IF n <> 1.

        write :/ gs_excel_check-PARTN_NUMB && ' 多行表头数据必须相同!'.
        RETURN.

      ENDIF.

     ENDAT.


 endloop.








      "行项目号初始化
        gv_posnr = '000000'.
        gv_etenr = '0000'.
        gv_charact_cfgid = '000000'.
        gv_charact_insid = '00000001'.





  loop at gt_excel into gs_excel.



        "so header
        gs_header-doc_type    = gs_excel-doc_type.  " 订单类型
        gs_header-sales_org   = gs_excel-sales_org.  " 销售组织
        gs_header-distr_chan  = gs_excel-distr_chan.  " 分销渠道
        gs_header-division    = gs_excel-division.    " 产品组
        gs_header-REQ_DATE_H  = gs_excel-REQ_DATE_H. "请求交货日期


        "so partner
        gs_partner-partn_numb = gs_excel-PARTN_NUMB.

           CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
               EXPORTING
                 INPUT         = gs_partner-partn_numb
              IMPORTING
                 OUTPUT        = gs_partner-partn_numb.  "'0011000001'.

        gs_partner-partn_role = 'AG'.
        APPEND gs_partner TO gt_partner.


        "so item

        gv_posnr = gv_posnr + 10.


        gs_item-itm_number  = gv_posnr.
        gs_item-material    = gs_excel-material . "物料
        gs_item-plant       = gs_excel-plant.     "工厂
        gs_item-ship_point  = gs_excel-ship_point. "装运点、接收点
        gs_item-pmnttrms    = gs_excel-pmnttrms.
        gs_item-po_itm_no   = gv_posnr.       "注意这个参数,有增强需要这个参数
        append gs_item to gt_item.


        "so Schedule Lines

        gv_etenr = gv_etenr + 1.
        gs_sl-itm_number = gv_posnr.
        gs_sl-req_qty = gs_excel-REQ_QTY. "数量
        gs_sl-sched_line = gv_etenr.
        APPEND gs_sl TO gt_sl.


        "bztxt 先存起来
        gs_bztxt-text  = gs_excel-text.
        gs_bztxt-posnr = gv_posnr.
        APPEND gs_bztxt TO gt_bztxt.


        " Step2.2. Characteristic - Reference
*        IF ls_ibp_prod-zmodel IS NOT INITIAL. " 如果是VC物料
          gv_charact_cfgid = gv_charact_cfgid + 1.
          gs_cfgref-posex = gv_posnr.
          gs_cfgref-config_id = gv_charact_cfgid.
          gs_cfgref-root_id = gv_charact_insid.
          APPEND gs_cfgref TO gt_cfgref.

          " Step2.3. Characteristic - Instance
          gs_cfgins-config_id = gv_charact_cfgid.
          gs_cfgins-inst_id = gv_charact_insid.
          gs_cfgins-obj_type = 'MARA'.
          gs_cfgins-class_type = '300'.
          gs_cfgins-obj_key = gv_class.
          APPEND gs_cfgins TO gt_cfgins.



          gv_char50 = gs_excel-material.


          " Step2.4. Characteristic - Values

            PERFORM _frm_charact_values USING gs_excel-ZMODEL     gv_charact_cfgid
                                              gv_charact_insid      gv_char50
                                              'ZDP_0001_MODEL'
                                     CHANGING gs_cfgval.
            APPEND gs_cfgval TO gt_cfgval.




            PERFORM _frm_charact_values USING gs_excel-ZCOLOR     gv_charact_cfgid
                                              gv_charact_insid     gv_char50
                                              'ZDP_0001_COLOR'
                                     CHANGING gs_cfgval.
            APPEND gs_cfgval TO gt_cfgval.




            PERFORM _frm_charact_values USING gs_excel-ZINTERIOR  gv_charact_cfgid
                                              gv_charact_insid    gv_char50
                                              'ZDP_0001_INTERI'
                                     CHANGING gs_cfgval.
            APPEND gs_cfgval TO gt_cfgval.




            SPLIT gs_excel-ZOPTPACK AT '_' INTO TABLE gt_cha.

            LOOP AT gt_cha INTO gs_cha.
              PERFORM _frm_charact_values USING gs_cha                 gv_charact_cfgid
                                                gv_charact_insid       gv_char50
                                                'ZDP_0001_OPTPAC'
                                       CHANGING gs_cfgval.
              APPEND gs_cfgval TO gt_cfgval.
            ENDLOOP.



  gs_excel_temp = gs_excel. "后面AT END OF 会把工作区的字符变成*,这里要先缓存一下


  AT END OF PARTN_NUMB. "如果后面的数据有变化了,现在执行这些行项目产生SO


      CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
        EXPORTING

          order_header_in    = gs_header
        IMPORTING
          salesdocument      = gv_vbeln
        TABLES
          return             = gt_rc
          order_items_in     = gt_item
          order_partners     = gt_partner
          order_schedules_in = gt_sl
          order_cfgs_ref     = gt_cfgref
          order_cfgs_inst    = gt_cfgins
          order_cfgs_value   = gt_cfgval.




        LOOP AT gt_rc INTO gs_rc WHERE type CA 'EA'.

          gv_err_flag = abap_on.

        ENDLOOP.





    IF gv_err_flag IS INITIAL. " Success


        call function 'BAPI_TRANSACTION_COMMIT'
          exporting
            wait = 'X'.
        commit work .


        loop at gt_bztxt into gs_bztxt.



            ls_header-tdobject = 'VBBP'.
            ls_header-tdid     = '0001'.
            ls_header-tdspras  = 'E'. "英语!
            ls_header-tdname   = gv_vbeln && gs_bztxt-posnr. "采购订单号加行项目号,应该是后台有配置



            wa_line-tdline = gs_bztxt-TEXT.
            wa_line-tdformat = '*'.

            append wa_line to gt_line.

                  "先删除!
                  CALL FUNCTION 'DELETE_TEXT'
                    EXPORTING
                      id                    = ls_header-tdid
                      language              = sy-langu
                      NAME                  = ls_header-tdname
                      OBJECT                = ls_header-tdobject
                    EXCEPTIONS
                      NOT_FOUND             = 1
                      OTHERS                = 2.

                  CALL FUNCTION 'DELETE_TEXT'
                    EXPORTING
                      id                    = ls_header-tdid
                      language              = 'E' "英语!
                      NAME                  = ls_header-tdname
                      OBJECT                = ls_header-tdobject
                    EXCEPTIONS
                      NOT_FOUND             = 1
                      OTHERS                = 2.

                  "再save
                  CALL FUNCTION 'SAVE_TEXT'
                    EXPORTING
                      header          = ls_header
                      savemode_direct = 'X'
                    TABLES
                      lines           = gt_line
                    EXCEPTIONS
                      id              = 1
                      language        = 2
                      name            = 3
                      object          = 4
                      OTHERS          = 5.


             clear gt_line[].

          endloop.





        data ss like bapiret2-message.
        data gv_long(200) type c.
        loop at gt_rc into gs_rc.

            call function 'MESSAGE_TEXT_BUILD'
             exporting
               msgid               = gs_rc-id
               msgnr               = gs_rc-number
               msgv1               = gs_rc-message_v1
               msgv2               = gs_rc-message_v2
               msgv3               = gs_rc-message_v3
               msgv4               = gs_rc-message_v4
             importing
               message_text_output = ss.

              gv_long = gv_long && '(' && sy-tabix && ')' &&  '[' && gs_rc-type && ']' && ss .

         endloop.

               write:/ gv_long.




     "得到一个uuid为主键,保证每一条数据主键不同,可以从内表写入到透明表
     gs_ztsd0026-uuid  = cl_uuid_factory=>create_system_uuid( )->create_uuid_c32( ).


      gs_ztsd0026-ADNAM = sy-uname. "用户名
      gs_ztsd0026-ADDAT = sy-datum. "日期
      gs_ztsd0026-ADTIM = sy-uzeit. "时间

      gs_ztsd0026-excelid     =	gs_excel_temp-excelid.
      gs_ztsd0026-DOC_TYPE    =	gs_excel_temp-DOC_TYPE.
      gs_ztsd0026-SALES_ORG	  = gs_excel_temp-SALES_ORG.
      gs_ztsd0026-DISTR_CHAN  = gs_excel_temp-DISTR_CHAN.
      gs_ztsd0026-DIVISION    = gs_excel_temp-DIVISION.
      gs_ztsd0026-REQ_DATE_H  = gs_excel_temp-REQ_DATE_H.
      gs_ztsd0026-PARTN_NUMB  = gs_excel_temp-PARTN_NUMB.
      gs_ztsd0026-NAME        = gs_excel_temp-NAME.
      gs_ztsd0026-MATERIAL    = gs_excel_temp-MATERIAL.
      gs_ztsd0026-MAKTX	      = gs_excel_temp-MAKTX.
      gs_ztsd0026-XMLX        = gs_excel_temp-XMLX.
      gs_ztsd0026-PMNTTRMS    = gs_excel_temp-PMNTTRMS.
      gs_ztsd0026-PLANT	      = gs_excel_temp-PLANT.
      gs_ztsd0026-SHIP_POINT  = gs_excel_temp-SHIP_POINT.
      gs_ztsd0026-REQ_QTY	    = gs_excel_temp-REQ_QTY.
      gs_ztsd0026-ZMODEL      = gs_excel_temp-ZMODEL.
      gs_ztsd0026-ZCOLOR      = gs_excel_temp-ZCOLOR.
      gs_ztsd0026-ZINTERIOR	  = gs_excel_temp-ZINTERIOR.
      gs_ztsd0026-ZOPTPACK    = gs_excel_temp-ZOPTPACK.
      gs_ztsd0026-TEXT        = gs_excel_temp-TEXT.
      gs_ztsd0026-VBELN        = gv_vbeln.

      gs_ztsd0026-STATUS = 'S'.


      gs_ztsd0026-message  = gv_long.


    modify ztsd0026 from gs_ztsd0026.


    CLEAR: gv_err_flag,gs_rc.
    clear: gv_long,gs_excel,gs_ztsd0026, gs_header,gv_vbeln,gt_rc[],gt_item[],gt_partner[],gt_sl[],gt_cfgref[],gt_cfgins[],gt_cfgval[],gt_line[],
            gt_bztxt[],gs_bztxt.


          "行项目号初始化
        gv_posnr = '000000'.
        gv_etenr = '0000'.
        gv_charact_cfgid = '000000'.
        gv_charact_insid = '00000001'.







     ELSE. "Fail


        loop at gt_rc into gs_rc.

            call function 'MESSAGE_TEXT_BUILD'
             exporting
               msgid               = gs_rc-id
               msgnr               = gs_rc-number
               msgv1               = gs_rc-message_v1
               msgv2               = gs_rc-message_v2
               msgv3               = gs_rc-message_v3
               msgv4               = gs_rc-message_v4
             importing
               message_text_output = ss.

              gv_long = gv_long && '(' && sy-tabix && ')' &&  '[' && gs_rc-type && ']' && ss .

         endloop.

               write:/ gv_long.



     "得到一个uuid为主键,保证每一条数据主键不同,可以从内表写入到透明表
     gs_ztsd0026-uuid  = cl_uuid_factory=>create_system_uuid( )->create_uuid_c32( ).


      gs_ztsd0026-ADNAM = sy-uname. "用户名
      gs_ztsd0026-ADDAT = sy-datum. "日期
      gs_ztsd0026-ADTIM = sy-uzeit. "时间

      gs_ztsd0026-excelid     =	gs_excel_temp-excelid.
      gs_ztsd0026-DOC_TYPE    =	gs_excel_temp-DOC_TYPE.
      gs_ztsd0026-SALES_ORG	  = gs_excel_temp-SALES_ORG.
      gs_ztsd0026-DISTR_CHAN  = gs_excel_temp-DISTR_CHAN.
      gs_ztsd0026-DIVISION    = gs_excel_temp-DIVISION.
      gs_ztsd0026-REQ_DATE_H  = gs_excel_temp-REQ_DATE_H.
      gs_ztsd0026-PARTN_NUMB  = gs_excel_temp-PARTN_NUMB.
      gs_ztsd0026-NAME        = gs_excel_temp-NAME.
      gs_ztsd0026-MATERIAL    = gs_excel_temp-MATERIAL.
      gs_ztsd0026-MAKTX	      = gs_excel_temp-MAKTX.
      gs_ztsd0026-XMLX        = gs_excel_temp-XMLX.
      gs_ztsd0026-PMNTTRMS    = gs_excel_temp-PMNTTRMS.
      gs_ztsd0026-PLANT	      = gs_excel_temp-PLANT.
      gs_ztsd0026-SHIP_POINT  = gs_excel_temp-SHIP_POINT.
      gs_ztsd0026-REQ_QTY	    = gs_excel_temp-REQ_QTY.
      gs_ztsd0026-ZMODEL      = gs_excel_temp-ZMODEL.
      gs_ztsd0026-ZCOLOR      = gs_excel_temp-ZCOLOR.
      gs_ztsd0026-ZINTERIOR	  = gs_excel_temp-ZINTERIOR.
      gs_ztsd0026-ZOPTPACK    = gs_excel_temp-ZOPTPACK.
      gs_ztsd0026-TEXT        = gs_excel_temp-TEXT.
      gs_ztsd0026-VBELN        = gv_vbeln.

      gs_ztsd0026-STATUS = 'E'.


      gs_ztsd0026-message  = gv_long.


    modify ztsd0026 from gs_ztsd0026.


    CLEAR: gv_err_flag,gs_rc.
    clear: gv_long,gs_excel,gs_ztsd0026, gs_header,gv_vbeln,gt_rc[],gt_item[],gt_partner[],gt_sl[],gt_cfgref[],gt_cfgins[],gt_cfgval[],gt_line[],
            gt_bztxt[],gs_bztxt.

      "行项目号初始化
    gv_posnr = '000000'.
    gv_etenr = '0000'.
    gv_charact_cfgid = '000000'.
    gv_charact_insid = '00000001'.

    ENDIF.




  ENDAT.


  endloop.




 SUBMIT ZSDR0026 .


  ENDFORM.








FORM _frm_charact_values USING iv_charact_value TYPE char70
                               iv_charact_cfgid TYPE cux_cfg_id
                               iv_charact_insid TYPE cu_inst_id
                               iv_prodcut TYPE cuib_objkey
                               iv_zdp_00001 TYPE zz_config_key
                      CHANGING is_cfgval TYPE bapicuval.
  CLEAR is_cfgval.
  DATA iv_data TYPE char32.
  CALL METHOD zcl_ca_tools=>get_hc_single
    EXPORTING
      iv_config_key = iv_zdp_00001
    IMPORTING
      ev_single     = iv_data
    EXCEPTIONS
      dynamic_error = 1
      OTHERS        = 2.
  IF sy-subrc <> 0.
    " .......
  ENDIF.
  is_cfgval-config_id = iv_charact_cfgid.
  is_cfgval-inst_id = iv_charact_insid.
  is_cfgval-value = iv_charact_value.
  CONCATENATE iv_prodcut '_' iv_data INTO is_cfgval-charc.

ENDFORM.

 

 

未完。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘欣的博客

你将成为第一个打赏博主的人!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值