- 做程序优化的时候发现在循环里面读取长文本,用(READ_TEXT\类的方法)读取太消耗性能了,于是用读取底表的方法去取。
DATA lt_stxl_raw TYPE TABLE OF ty_stxl_raw.DATA ls_stxl_raw TYPE ty_stxl_raw.DATA lt_tline TYPE TABLE OF tline.DATA ls_tline TYPE tline.DATA lt_text TYPE TABLE OF ty_text .DATA ls_text TYPE ty_text.RANGES lr_tdname FOR stxl-tdname." 把内表中的VBELN 放入到ranges里面( )LOOP AT t_data INTO DATA(ls_data).lr_tdname = VALUE #( sign = 'I' option = 'EQ' low = ls_data-vbeln ).COLLECT lr_tdname.ENDLOOP." 获取销售订单文本SELECT stxl~tdobject,stxl~tdid,stxl~tdname,stxl~clustr,stxl~clustdFROM stxlWHERE stxl~tdobject = 'VBBK'AND stxl~tdname IN @lr_tdnameAND ( stxl~tdid = '0001' ORstxl~tdid = 'Z120' )AND stxl~tdspras = @sy-languINTO TABLE @DATA(lt_stxl)." 解压长文本LOOP AT lt_stxl INTO DATA(ls_stxl).CLEAR:ls_text,ls_stxl_raw,lt_stxl_raw[],ls_tline,lt_tline[].ls_stxl_raw-clustr = ls_stxl-clustr.ls_stxl_raw-clustd = ls_stxl-clustd.APPEND ls_stxl_raw TO lt_stxl_raw.IMPORT tline = lt_tline FROM INTERNAL TABLE lt_stxl_raw.LOOP AT lt_tline INTO ls_tline.ls_text-tdline = ls_text-tdline && ls_tline-tdline.ENDLOOP.ls_text-tdobject = ls_stxl-tdobject.ls_text-tdid = ls_stxl-tdid.ls_text-tdname = ls_stxl-tdname.IF ls_text-tdline NE space.INSERT ls_text INTO TABLE lt_text.ENDIF.ENDLOOP.SORT lt_text BY tdobject tdid tdname ."排序为二分法做准备DELETE ADJACENT DUPLICATES FROM lt_text COMPARING tdobject tdid tdname.LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<fs_data>).READ TABLE lt_text INTO ls_text WITH KEY tdobject = 'VBBK' tdid = '0001' tdname = <fs_data>-vbeln BINARY SEARCH.IF sy-subrc = 0.<fs_data>-zxsbz = ls_text-tdline. "销售备注ENDIF.READ TABLE lt_text INTO ls_text WITH KEY tdobject = 'VBBK' tdid = 'Z120' tdname = <fs_data>-vbeln BINARY SEARCH.IF sy-subrc = 0.<fs_data>-zshwb = ls_text-tdline. "送货文本ENDIF. ENDLOOP.