Определите возвращаемый тип как упакованный номер для метода
Я изучаю объекты ABAP. Я хотел бы иметь метод объекта, возвращающий упакованный тип числа. Я наконец-то заработал, но я не знаю, правильный ли это путь, и мне нужны дальнейшие объяснения, которые я не могу найти в Интернете.
Для целых чисел, это прекрасно работает:
METHODS: getamount RETURNING VALUE(r) TYPE i,
Для упакованного номера это не так:
METHODS: getamount RETURNING VALUE(r) TYPE p,
Ошибка: тип параметра RETURNING должен быть полностью указан
METHODS: getamount RETURNING VALUE(r) TYPE p LENGTH 10 DECIMALS 3,
Ошибка: тип параметра RETURNING должен быть полностью указан
(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,
Неизвестный тип "TYPEPRICE".
(3) Есть ли способ заставить это решение работать?
2 ответа
Возвращаемые параметры должны быть полностью напечатаны, p является универсальным типом, поэтому у вас есть три варианта:
- Используйте предварительно определенный элемент данных из словаря данных (SE11 => Элементы данных)
METHODS getamount RETURNING value(r) TYPE netwr.
- Используйте тип, который определен в разделе 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 распространено правило, что объявление типов и объектов действует только со строки, в которой они были объявлены:
Определенный тип данных можно просматривать в текущем контексте с этой позиции.
Но! Но здесь у нас есть интересное столкновение с синтаксисом определения класса ABAP Objects
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.