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条回答
绿领巾童鞋
2020-08-19 04:05 .采纳回答

文森特·布洛姆,花了我一些时间,但是使用以下代码,您应该可以阅读 ST22转储。 它不是"漂亮"的,但可以工作,因为SAP捕获ST22转储的系统变量。 但不是所有程序变量,都是"神奇地"选择的,它们在系统上似乎很重要(而且到目前为止,您的伙伴,又名 -tdname,显然不值得)。

数据:l_cp 键入tcp00-cpcodepage。

  "这样,您将'PARTNER'放入变量SY-MSGV1中用于转储的系统变量中
  sy-msgv1 =  -tdname。
  从内部表t_stxl_raw导入tline = t_tline
     "接受截断"也可以尝试对IMPORT语句进行这些添加
     CODE PAGE INTO l_cp",因为这是标准FM READ_MULTIPLE_TEXTS调用它的方式
     忽略转换错误。  ",否则,您可以尝试FM,例如Sandra已经提出的建议

一周热门 更多>