CATCH_ILLEGAL_STATE

2020-08-19 03:44发布

         点击此处--->   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)

         点击此处--->   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条回答
绿领巾童鞋
1楼 · 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已经提出的建议
spaceman01
2楼-- · 2020-08-19 04:10

Mukesh Radhakishan Jadhav 基于ABAP文档,这很可能不是问题:" itab的第一列必须具有数据类型s或i,第二列必须具有数据类型x。" stxl-custr(2- 字节整数)。否则,我也可能会遇到一般错误,而不仅仅是在"最后一个循环"中。

Cikesha
3楼-- · 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。
太Q了
4楼-- · 2020-08-19 04:22

不能使用标准功能模块READ_MULTIPLE_TEXTS吗? (由注释2261311添加)

hongfeng1314
5楼-- · 2020-08-19 04:13

文森特布洛姆再次,您不想吗 为了使用READ_MULTIPLE_TEXTS简化代码?

闻人可可
6楼-- · 2020-08-19 04:06

文森特·布洛姆,请继续关注 悬而未决的问题。

  • 评论答案或您的问题(如果仍有未解决的问题)。
  • 否则,如果可以帮助您解决问题,则将答案标记为已接受
  • ,如果您自己找到了另一个有用的解决方案,则发布自己的答案,并接受它
  • 或将您的问题重定向到另一个相关且对解决您的问题有用的问题
  • 最后,关闭您的问题
Doze时光
7楼-- · 2020-08-19 04:19

嗨,迈克尔 ,

我像您说的那样进行了代码更改,并成功了! :-)

我们发现了导致运行时错误的BP。

问题出在BP的数据中,文本长1748页! 充满了奇怪的字符。...所以我们清除了数据,现在不再转储了。

感谢您的帮助!

KR

Vincent

一周热门 更多>