首页 > 其他分享 >关于 ABAP 的运行时错误 ITAB_ILLEGAL_ORDER

关于 ABAP 的运行时错误 ITAB_ILLEGAL_ORDER

时间:2023-01-10 23:55:06浏览次数:52  
标签:MARD MD ITAB BINARY READ ILLEGAL SEARCH ABAP

一个朋友在我的知识星球里提问:

Jerry 您好!请教一个问题,在生成物料凭证的时候,有个比较奇怪的问题,在函数MARD_MD_ARRAY_READ,第154行的时候会提示运行时错误:ITAB_ILLEGAL_ORDER,内表中的排序不正确;
跟着查看是在132行的时候读取v_mard_md的数据未排序,然后后面按照取出来的数据插入到内表MARD_TAB_MD之后,也是未排序的,然后在154行的时候就提示报错了。但是同样的数据有时候就能过,请问一下这种问题我应该怎么去入手进行解决.

以下是ST22的部分内容:

短文本

Incorrect sorting of the rows in an internal table.

发生了什么?

Error in the ABAP application program.

The current ABAP program "SAPLMG26" had to be terminated because it found a
statement that could not be executed.

错误分析

In the ABAP Debugger, the switch for monitoring the sorting of internal
tables before statements with the form "READ ... BINARY SEARCH" was
activated.

In this case, rows 5 and 6 in table "\FUNCTION=MARD_MD_ARRAY_READ\DATA=???"
 are not sorted
according to the key specified for the READ statement.

The "READ ... BINARY SEARCH" statement works on the assumption that the
table is correctly sorted. An incorrect entry will normally be
localized.

我们逐一分析。

In the ABAP Debugger, the switch for monitoring the sorting of internal
tables before statements with the form "READ ... BINARY SEARCH" was
activated.

在 ABAP 调试器里,有个菜单 Change Debugger Profile/ Settings:

在 Specific Settings 选项区域,有个 Check Sorting Before BINARY SEARCH:

如果勾上这个选项,在 ABAP 调试器里单步调试到 READ TABLE BINARY SEARCH 关键字时,如果 READ TABLE 操作的 内表,没有提前进行排序,比如不是一个 sorted table,就会出现运行时异常 ITAB_ILLEGAL_ORDER.

但是同样的数据有时候就能过,请问一下这种问题我应该怎么去入手进行解决.

代码第 154 行的语义是:从有序表 MARD_TAB_MD 里采用二分查找的方式,检查 TMARD 指定的 key 对应的数据是否存在。如果不存在,将这个 key 对应的记录,通过 APPEND,添加到 MARD_TAB_MD 的尾部。注意第 154 行是在 DO 循环里执行的。如果当前 APPEND 操作执行后,破坏了 MARD_TAB_MD 里的有序状态,则 DO 下一次循环时,READ TABLE BINARY SEARCH 就会出错。

SAP ABAP 帮助文档里,对于使用 APPEND 添加记录到 sorted table 里的行为是这样描述的:

Lines are appended to sorted tables only if they match the sort order and do not create duplicate entries if the primary table key is unique.

仅当行与排序顺序匹配时,它们才会附加到已排序的表中,并且如果表的主键是唯一的话,则不会创建重复的条目。

也就是说,APPEND 后面指定的待插入的 TMARD 内容,插入到 MARD_TAB_MD 之后,必须保证整张表仍然有序。

标签:MARD,MD,ITAB,BINARY,READ,ILLEGAL,SEARCH,ABAP
From: https://www.cnblogs.com/sap-jerry/p/17041717.html

相关文章

  • ABAP include structure 的一个具体用法
    在客户系统中使用appendstructure增强SAP结构或SAP表,这种行为并不构成修改(modification)。这一点在SAP官网得到确认。为客户系统中的SAP对象创建的附加结构,......
  • 如何手动通过增强的方式,给 SAP ABAP 数据库表增添新的字段
    有个朋友向我咨询关于SAP产品增强字段扩展(FieldExtensibility)的问题:Jerry,你好。看过你写的SAP产品增强FieldExtensibility文章,对扩展字段在物理数据库的结构还不......
  • ABAP-MIGO的BAPI添加CODE
    在MIGO创建的BAPI(BAPI_GOODSMVT_CREATE)中需要输入一个货物移动分配事务代码只取在表T158G中添加MIGO的事务码,在使用BAPI时就可以传入这个值,不用去判断哪个值......
  • ABAP 写入批次特征值以及更新批次特征值
    需求SAP启用了批次,需要在特征值中写入物料类型,区分该物料批次是用于研发的亦或是量产的,关于研发和量产标识我是坐在采购订单行项目增强中了,这里就不多赘述采购订单行项目......
  • 什么是 SAP ABAP 的 include structure
    结构(注意structure并不是数据库表或视图)可以作为包含结构(includestructures)包含在数据库表中。只有当一个结构的组件满足所有的表字段先决条件时,该结构才能包含在表......
  • SAP ABAP Append structure 介绍
    Appendstructure(附加结构)是ABAP字典中附加到另一个结构或数据库表并将其组件附加到它们的结构。Appendstructure可以添加到SAP在客户系统中提供的结构和数据库表......
  • SAP ABAP DDIC 结构字段的一些技术限制条件
    SAPABAP表字段是数据库表结构的组成部分,描述了数据库表字段的名称、数据类型和任何语义属性。下图这些高亮区域就是ABAP表字段的一些例子。表字段是表的结构化数据......
  • ABAP基础一:ALV样例
    REPORTzly_report.*********ReportDemo*****************************************本程序主要将普通的ALV报表做拆分讲解*一个简单的ALV包括以下一个部分*1.数据定......
  • resin报错:java.lang.IllegalStateException: block Block
    java.lang.IllegalStateException:blockBlock启动resin时报错主要的提示信息就是下面这个java.lang.IllegalStateException:blockBlock[Table[mnode:2,d:\XXXX\resi......
  • ABAP 常用BAPI
    记录ABAP开发的日常——常用的BAPI前言:在开发的过程中经常用到一些BAPI函数,为了便于查找,于是在这里记录下。如果有广大朋友使用的BAPI在这里没有记录到,欢迎评论补充。SD模......