将返回类型定义为方法的压缩数字
Define returning type as packed number for method
我正在学习 ABAP 对象。我想要一个返回压缩数字类型的对象方法。我终于成功了,但我不知道这是否是正确的方法,我需要一些我在网上找不到的进一步解释。
对于整数,它工作正常:
METHODS: getamount RETURNING VALUE(r) TYPE i,
对于压缩号码,它没有:
METHODS: getamount RETURNING VALUE(r) TYPE p,
Error: The type of RETURNING parameter must be fully specified
METHODS: getamount RETURNING VALUE(r) TYPE p LENGTH 10 DECIMALS 3,
Error: The type of RETURNING parameter must be fully specified
(1) 有没有办法让它与 p
类型一起工作?
我使用 dec5_2
:
让它工作
getamount RETURNING VALUE(r) TYPE dec5_2
(2) 这是正确的选择吗?有类似类型的列表吗?
此外,我找到了 this solution,但它对我不起作用:
CLASS lcl_rowinvoice DEFINITION.
PUBLIC SECTION.
METHODS:
getamount RETURNING VALUE(r) TYPE typeprice,
PRIVATE SECTION.
TYPES:
typeprice TYPE p LENGTH 10 DECIMALS 2,
Unknown type "TYPEPRICE".
(3) 有没有办法使这个解决方案起作用?
你在这里提出的问题很有趣。
It is common rule 在 ABAP 中,声明类型和对象仅在声明它们的行中有效:
The defined data type can be viewed within the current context from this position.
但是!但是这里我们与 ABAP 对象发生了有趣的碰撞 class definition syntax
CLASS class DEFINITION [class_options].
[PUBLIC SECTION.
[components]]
[PROTECTED SECTION.
[components]]
[PRIVATE SECTION.
[components]]
ENDCLASS.
定义时可见区域的相互位置是固定的,不能随意更改。
虽然它并不与 ABAP 可见性概念相矛盾,但从技术上讲,不可能在私有部分声明类型并在 public 中使用它。此类型的声明位置将在 public 部分下方,因此实际上对其不可见。
但是如果你改变 declaration/use 部分的顺序,所有的都可以正常编译。
CLASS lcl_rowinvoice DEFINITION.
PUBLIC SECTION.
TYPES: typeprice TYPE p LENGTH 10 DECIMALS 2.
PRIVATE SECTION.
METHODS: getamount RETURNING VALUE(r) TYPE typeprice.
ENDCLASS.
返回参数必须完全类型化,p 是泛型类型,因此您有以下三种选择:
- 使用数据字典中的预定义数据元素(SE11 => 数据
元素)
METHODS getamount RETURNING value(r) TYPE netwr.
- 使用在本地 class
的 PUBLIC 部分中定义的类型
TYPES: lty_p TYPE p LENGTH 15 DECIMALS 2.
METHODS getamount RETURNING value(r) TYPE lty_p.
- 使用完全预定义的类型(decfloat16 或 decfloat34)
METHODS getamount RETURNING value(r) TYPE decfloat16.
我正在学习 ABAP 对象。我想要一个返回压缩数字类型的对象方法。我终于成功了,但我不知道这是否是正确的方法,我需要一些我在网上找不到的进一步解释。
对于整数,它工作正常:
METHODS: getamount RETURNING VALUE(r) TYPE i,
对于压缩号码,它没有:
METHODS: getamount RETURNING VALUE(r) TYPE p,
Error: The type of RETURNING parameter must be fully specified
METHODS: getamount RETURNING VALUE(r) TYPE p LENGTH 10 DECIMALS 3,
Error: The type of RETURNING parameter must be fully specified
(1) 有没有办法让它与 p
类型一起工作?
我使用 dec5_2
:
getamount RETURNING VALUE(r) TYPE dec5_2
(2) 这是正确的选择吗?有类似类型的列表吗?
此外,我找到了 this solution,但它对我不起作用:
CLASS lcl_rowinvoice DEFINITION.
PUBLIC SECTION.
METHODS:
getamount RETURNING VALUE(r) TYPE typeprice,
PRIVATE SECTION.
TYPES:
typeprice TYPE p LENGTH 10 DECIMALS 2,
Unknown type "TYPEPRICE".
(3) 有没有办法使这个解决方案起作用?
你在这里提出的问题很有趣。
It is common rule 在 ABAP 中,声明类型和对象仅在声明它们的行中有效:
The defined data type can be viewed within the current context from this position.
但是!但是这里我们与 ABAP 对象发生了有趣的碰撞 class definition syntax
CLASS class DEFINITION [class_options].
[PUBLIC SECTION.
[components]]
[PROTECTED SECTION.
[components]]
[PRIVATE SECTION.
[components]]
ENDCLASS.
定义时可见区域的相互位置是固定的,不能随意更改。
虽然它并不与 ABAP 可见性概念相矛盾,但从技术上讲,不可能在私有部分声明类型并在 public 中使用它。此类型的声明位置将在 public 部分下方,因此实际上对其不可见。
但是如果你改变 declaration/use 部分的顺序,所有的都可以正常编译。
CLASS lcl_rowinvoice DEFINITION.
PUBLIC SECTION.
TYPES: typeprice TYPE p LENGTH 10 DECIMALS 2.
PRIVATE SECTION.
METHODS: getamount RETURNING VALUE(r) TYPE typeprice.
ENDCLASS.
返回参数必须完全类型化,p 是泛型类型,因此您有以下三种选择:
- 使用数据字典中的预定义数据元素(SE11 => 数据 元素)
METHODS getamount RETURNING value(r) TYPE netwr.
- 使用在本地 class 的 PUBLIC 部分中定义的类型
TYPES: lty_p TYPE p LENGTH 15 DECIMALS 2.
METHODS getamount RETURNING value(r) TYPE lty_p.
- 使用完全预定义的类型(decfloat16 或 decfloat34)
METHODS getamount RETURNING value(r) TYPE decfloat16.