CATCH_ILLEGAL_STATE

2020-08-19 03:44发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家们, 我们的系统出现问题。...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我们的系统出现问题。

这段代码生成ST22 abap运行时错误:

CATCH_ILLEGAL_STATE

这是代码:

数据:
       tdname_range tdname的TYPE RANGE,
       tdobject_range tdobname的TYPE RANGE,
       spras_range语言的TYPE RANGE。


     数据:lt_svo类型zbpt_gwe_svo_id。

     循环到it_ids INTO DATA(ls_id)。
       将初始行追加到tdname_range ASSIGNING FIELD-SYMBOL()。
        -sign ='I'。
        -option ='EQ'。
        -low = ls_id-id。
     结局。


     从stxh到表@DATA(lt_stxh)中选择tdname,tdobject,tdid,tdspras,tdname在@tdname_range中且tdid ='Z001'和tdobject ='BUT000'。


     循环到lt_stxh INTO DATA(ls_stxh)。
       将初始行添加到tdobject_range ASSIGNING FIELD-SYMBOL()。
        -sign ='I'。
        -option ='EQ'。
        -low = ls_stxh-tdname。
     结局。


     spras_range = VALUE#((符号='I'选项='EQ'低='N')(符号='I'选项='EQ'低='E'))。

     SELECT tdname,clustr,clustd
             插入表@DATA(lt_stxl)
             从stxl
             Relid ='TX'"标准文字
               AND tdobject ='BUT000'
               AND tdname输入@tdobject_range
               AND tdid ='Z001'
               和@spras_range中的tdspras。

 *没有文本名称的压缩文本数据
     类型:开始于ty_stxl_raw,
              clustr TYPE stxl-clustr,
              clustd TYPE stxl-clustd,
            结束于ty_stxl_raw。
     数据:ty_stxl_raw的t_stxl_raw类型标准表。
     数据:w_stxl_raw类型ty_stxl_raw。
 *解压缩的文本
     数据:tline的t_tline类型标准表。
     字段符号: TYPE tline。
     数据:w_stxh TYPE stxh。


     在lt_stxl分配字段符号()处循环播放。
 *解压文本
       清除:t_stxl_raw [],t_tline []。
       w_stxl_raw-clustr =  -clustr。
       w_stxl_raw-clustd =  -clustd。
       将w_stxl_raw附加到t_stxl_raw。
       从内部表t_stxl_raw导入tline = t_tline。


 *访问文本行以进行进一步处理
       在t_tline ASSIGNING 处循环播放。
         尝试。
             IF  -tdline CP iv_filter。
               在lt_svo ASSIGNING FIELD-SYMBOL()上附加初始行。
                -id = CONV bu_partner( -tdname)。
             万一。
 *抓住cx_sy_itab_line_not_found。
           捕获cx_root。
         ENDTRY。
       结局。
     结局。


     排序lt_svo升序。
     从lt_svo比较所有字段中删除相邻的重复项。


     rt_ids = lt_svo。
 

此代码根据iv_filter的值过滤文本。

在最后一个循环中出错:

我认为,问题是由以下代码行引起的:

导入tline =来自内部表t_stxl_raw的t_tline。

有人可以说出问题是什么吗?

dump.jpg (59.7 kB)
7条回答
Cikesha
2020-08-19 04:19

例如,当IMPORT FROM INTERNAL TABLE语句出现时,错误CATCH_ILLEGAL_STATE就会发生 您的字段CLUSTR或CLUSTD为空/初始或当它们包含损坏的信息时,这不会导致从数据集群中有效提取数据。

  • 因此至少检查一下两个值是否均为 不为空,在调用IMPORT FROM INTERNAL TABLE语句之前
  • 然后尝试标识发生转储时在t_stxl_raw中传递的值(例如,您是哪个伙伴) d查看您是否可以清理该数据或相应地修改程序
  • 很显然,您的报告旨在查找不需要或特殊格式的业务合作伙伴文本,如果有某种手动数据,我不会感到惊讶 在您的系统或数据源所在的系统中转储的案例中涉及的删除/操作
 LOOP AT lt_stxl ASSIGNING FIELD-SYMBOL()。
   检查: -clustr不是INITIAL,"至少检查这些不是初始的
           -clustd不是初始的。
   
   清除:t_stxl_raw [],t_tline []。
   w_stxl_raw-clustr =  -clustr。
   w_stxl_raw-clustd =  -clustd。
   将w_stxl_raw附加到t_stxl_raw。
   从内部表t_stxl_raw导入tline = t_tline。

    循环...。
      " ...
    结局。
 ENDLOOP。

一周热门 更多>