ABAP非READ_TEXT读取长文本

日常读取生产订单、采购订单、销售订单等长文本时

最经常使用的就是系统标准函数READ_TEXT

这个函数确实很方便,但是因为是LOOP里面,频繁的访问数据库

会造成程序运行很慢,但是又找不到很好的办法

各位可以试下使用以下方法,能大幅度的提高运行效率,适用于各种长文本

 以下为代码原文。

* 批量读取长文本,以物料批次特性为例子
TYPES: BEGIN OF ty_stxl, "项目
         tdobject TYPE stxl-tdobject,
         tdid     TYPE stxl-tdid,
         tdname   TYPE stxl-tdname,
         clustr   TYPE stxl-clustr,
         clustd   TYPE stxl-clustd,
       END OF ty_stxl.

TYPES: BEGIN OF ty_stxl_raw, "压缩的文本
         clustr TYPE stxl-clustr,
         clustd TYPE stxl-clustd,
       END OF ty_stxl_raw.

TYPES:BEGIN OF ty_text, "解压的文本
        tdobject TYPE stxl-tdobject,
        tdid     TYPE stxl-tdid,
        tdname   TYPE stxl-tdname,
        tdline   TYPE string,
        matnr    TYPE matnr,
        charg    TYPE charg_d,
      END OF ty_text.

DATA:
  gt_stxh     TYPE TABLE OF stxh WITH HEADER LINE, "抬头
  gt_stxl     TYPE  TABLE OF ty_stxl WITH HEADER LINE, "项目
  gt_stxl_raw TYPE TABLE OF ty_stxl_raw WITH HEADER LINE,
  gt_tline    TYPE STANDARD TABLE OF tline WITH HEADER LINE,
  gt_text     TYPE TABLE OF ty_text WITH HEADER LINE.

”主要就是取出表中加密的文本
  LOOP AT  lt_out INTO DATA(ls_out) .
      gt_stxh-tdname = ls_out-matnr.
      gt_stxh-tdname+44(10) = ls_out-charg.
      APPEND gt_stxh.
      CLEAR gt_stxh.
    ENDLOOP.
    FREE gt_stxl.
    IF  gt_stxh[]  IS NOT INITIAL .
      SELECT tdobject tdid tdname clustr clustd
      INTO CORRESPONDING FIELDS OF TABLE gt_stxl
      FROM stxl
      FOR ALL ENTRIES IN gt_stxh "WITH APPLICATION DATA AND TDNAME
      WHERE relid  = 'TX'          "standard text
      AND tdobject = 'CHARGE'
      AND tdname   = gt_stxh-tdname
      AND tdid     = 'VERM'
      AND tdspras  = sy-langu.
    ENDIF.

    LOOP AT gt_stxl.
      CLEAR:gt_stxl_raw,gt_stxl_raw[], gt_tline,gt_tline[],gt_text.
      gt_stxl_raw-clustr = gt_stxl-clustr.
      gt_stxl_raw-clustd = gt_stxl-clustd.
      APPEND gt_stxl_raw.
"使用系统标准函数READ_TEXT中的代码,将文本解析出来
      IMPORT tline = gt_tline FROM INTERNAL TABLE gt_stxl_raw.

      LOOP AT gt_tline.
        gt_text-tdline = gt_text-tdline && gt_tline-tdline.
      ENDLOOP.
      gt_text-tdobject = gt_stxl-tdobject.
      gt_text-tdid = gt_stxl-tdid.
      gt_text-tdname = gt_stxl-tdname.
      gt_text-matnr = gt_stxl-tdname.
      gt_text-charg = gt_stxl-tdname+44(10).
      APPEND gt_text.
    ENDLOOP.

    SORT gt_text BY  tdname.

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

两年半的ABAPer

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值