赛跑网

 找回密码
 注册
查看: 5568|回复: 2

[ABAP问题] 关于使用FOR ALL ENTRIES IN 关联,簇表字段多过三个就报错的问题

[复制链接]
发表于 2013-6-25 21:40:27 | 显示全部楼层 |阅读模式
5赛跑币
本帖最后由 ronnieshuai 于 2013-6-25 21:42 编辑

错误信息如下:
Runtime Errors         DBIF_RSQL_INVALID_RSQL
Except.                CX_SY_OPEN_SQL_DB
Date and Time          2013.06.25 23:36:07



Short text
     Error in module RSQL of the database interface.



What happened?
     Error in the ABAP Application Program

     The current ABAP program "ZSYJ0622TEST" had to be terminated because it has
     come across a statement that unfortunately cannot be executed.



Error analysis
     An exception occurred that is explained in detail below.
     The exception, which is assigned to class 'CX_SY_OPEN_SQL_DB', was not caught
      and
     therefore caused a runtime error.
     The reason for the exception is:
     In a SELECT access, the read file could not be placed in the target
     field provided.
     Either the conversion is not supported for the type of the target field,
     the target field is too small to include the value, or the data does not
     have the format required for the target field.
代码如下:

TABLES: BSEG,BSID,BSAD .



TYPES: BEGIN OF TY_TAB_KEY,
       BUKRS TYPE BSEG-BUKRS,
       BELNR TYPE BSEG-BELNR,
       GJAHR TYPE BSEG-GJAHR,
       BUZEI TYPE BSEG-BUZEI,
  END OF TY_TAB_KEY.

  DATA TAB_KEY TYPE STANDARD TABLE OF TY_TAB_KEY.
  DATA GS_KEY TYPE TY_TAB_KEY.

  TYPES: BEGIN OF TY_TAB_BSEG,
UMSKZ TYPE BSEG ,
ZLSPR  TYPE BSEG,
    GSBER TYPE BSEG,
    HKONT TYPE BSEG,
END OF TY_TAB_BSEG.

DATA TAB_BSEG TYPE STANDARD TABLE OF TY_TAB_BSEG.
DATA GS_TAB_BSEG TYPE TY_TAB_BSEG.


SELECT
BUKRS "公司代码
BELNR "财务凭证编号
GJAHR "会计年度
BUZEI "会计凭证中的行项目
FROM BSID
INTO TABLE TAB_KEY UP TO 10 ROWS "存放主键项目的内部表
WHERE VBEL2 = ''"销售凭证编号
AND POSN2 = ''. " 销售凭证明细编号



*2)再根据销售凭证编号和明细编号,从BSAD中检索出已清帐明细行项目。
SELECT
BUKRS "公司代码
BELNR "财务凭证编号
GJAHR "会计年度
BUZEI " 会计凭证中的行项目
FROM BSAD
APPENDING TABLE TAB_KEY UP TO 10 ROWS"存放主键项目的内部表
WHERE VBEL2 = '' " 销售凭证编号
AND POSN2 = ''. "销售凭证明细编号
*3)然后再根据上面检索出的主键列表,从BSEG中检索出相应的明细行项目。
SELECT
UMSKZ
ZLSPR
GSBER
HKONT
FROM BSEG
INTO TABLE TAB_BSEG"存放检索结果的内部表
FOR ALL ENTRIES IN TAB_KEY " 存放主键项目的内部表
WHERE BSEG~BUKRS = TAB_KEY-BUKRS " 公司代码
AND BSEG~GJAHR = TAB_KEY-GJAHR " 财务凭证编号
AND BSEG~BELNR = TAB_KEY-BELNR " 会计年度
AND BSEG~BUZEI = TAB_KEY-BUZEI. " 会计凭证中的行项目


有谁知道这是什么原因吗?怎么解决?

最佳答案

查看完整内容

程序中,类型TY_TAB_BSEG没有定义好。 改成下面这段定义代码就ok。 TYPES: BEGIN OF TY_TAB_BSEG, UMSKZ TYPE BSEG-UMSKZ , ZLSPR TYPE BSEG-ZLSPR, GSBER TYPE BSEG-GSBER, HKONT TYPE BSEG-HKONT, END OF TY_TAB_BSEG. 另,在使用FOR ALL ENTRIES IN的时候,应该首先判断关联表是否为空,然后排序。




上一篇:公司代码货币和总账货币有什么区别?
下一篇:如何在BSEG表中选择显示字段
本楼点评(0) 收起
发表于 2013-6-25 21:40:28 | 显示全部楼层
程序中,类型TY_TAB_BSEG没有定义好。
改成下面这段定义代码就ok。
  TYPES: BEGIN OF TY_TAB_BSEG,
    UMSKZ TYPE BSEG-UMSKZ ,
    ZLSPR TYPE BSEG-ZLSPR,
    GSBER TYPE BSEG-GSBER,
    HKONT TYPE BSEG-HKONT,
END OF TY_TAB_BSEG.

另,在使用FOR ALL ENTRIES IN的时候,应该首先判断关联表是否为空,然后排序。
本楼点评(0) 收起
回复

使用道具 举报

发表于 2013-6-26 16:09:44 | 显示全部楼层
。。。 不懂ABAP 看不懂啊   
本楼点评(0) 收起
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|联系我们|赛跑网 ( 苏ICP备14021163号-4QQfsq

GMT+8, 2026-8-3 19:46 , Processed in 0.248817 second(s), 32 queries .

Powered by 91SAP X3.4

© 2001-2023 91sap Team.

快速回复 返回顶部 返回列表