将返回类型定义为方法的打包编号



我正在学习ABAP对象。我想要一个返回打包数字类型的对象方法。我终于让它工作了,但我不知道这是否是正确的方法,我需要一些我在网上找不到的进一步解释。

对于整数,它可以正常工作:

METHODS: getamount RETURNING VALUE(r) TYPE i,

对于包装号码,它不会:

METHODS: getamount RETURNING VALUE(r) TYPE p,

错误:必须完全指定返回参数的类型

METHODS: getamount RETURNING VALUE(r) TYPE p LENGTH 10 DECIMALS 3,

错误:必须完全指定返回参数的类型

(1(有没有办法让它与p类型一起工作?

我通过使用dec5_2使其工作:

getamount RETURNING VALUE(r) TYPE dec5_2

(2(它是正确的替代方案吗?是否有类似类型的列表?

另外,我找到了这个解决方案,但它对我不起作用:

CLASS lcl_rowinvoice DEFINITION.
PUBLIC SECTION.
METHODS:
getamount RETURNING VALUE(r) TYPE typeprice,  
PRIVATE SECTION.
TYPES:
typeprice TYPE p LENGTH 10 DECIMALS 2,

未知类型"类型价格"。

(3(有没有办法使这个解决方案起作用?

返回的参数必须是完全类型的,p 是泛型类型,因此您有三个选项:

  1. 使用数据字典中的预定义数据元素 (SE11 => 数据 元素(

METHODS getamount RETURNING value(r) TYPE netwr.
  1. 使用在本地类的 PUBLIC 部分中定义的类型

TYPES: lty_p TYPE p LENGTH 15 DECIMALS 2.
METHODS getamount RETURNING value(r) TYPE lty_p.
  1. 使用完全预定义的类型(decfloat16 或 decfloat34(

METHODS getamount RETURNING value(r) TYPE decfloat16.

这是你在这里提出的一个非常有趣的问题。

ABAP 中的常见规则是,声明类型和对象仅从已声明的行开始有效:

可以从此位置在当前上下文中查看定义的数据类型。

但!但是在这里,我们与ABAP对象类定义语法发生了有趣的冲突。

CLASS class DEFINITION [class_options]. 
[PUBLIC SECTION. 
[components]] 
[PROTECTED SECTION. 
[components]] 
[PRIVATE SECTION. 
[components]] 
ENDCLASS. 

定义期间可见性区域的相互位置是固定的,您无法根据需要更改它们。

虽然它与ABAP可见性概念并不矛盾,但从技术上讲,不可能在私有部分中声明类型并在公共场合使用它。这种类型的声明位置将在公共部分下方,因此实际上对它不可见。

但是,如果您更改声明/使用部分的顺序,则所有部分都将编译良好。

CLASS lcl_rowinvoice DEFINITION.
PUBLIC SECTION.
TYPES: typeprice TYPE p LENGTH 10 DECIMALS 2.
PRIVATE SECTION.
METHODS: getamount RETURNING VALUE(r) TYPE typeprice.
ENDCLASS.  

最新更新