[英]CX_SY_CONVERSION_NO_NUMBER during a calculation
我正在嘗試遵循 SAP Press 書籍 ABAP Basics 中的代碼。 我使用的是書中完全相同的代碼,但無法理解為什么它會失敗。 當我執行程序時,我遇到了運行時錯誤。 我試圖調試代碼,發現我的代碼在 l_total_amount 計算的 ELSE 部分失敗。 請讓我知道我做錯了什么?
發生了異常,下面將對其進行更詳細的解釋。 未捕獲分配給“CX_SY_CONVERSION_NO_NUMBER”類的異常。
代碼在這一行失敗: l_total_amount = <l_credit_amount> + l_vat_amount.
REPORT ZGULLA_SALES_ORDER_DYNAMIC.
PARAMETERS:
*Article Data
p_ano(10) TYPE n OBLIGATORY,
p_aname(40) TYPE c OBLIGATORY,
p_aprice TYPE p DECIMALS 2 OBLIGATORY,
p_curr TYPE currencysap OBLIGATORY DEFAULT 'EUR',
p_aquant TYPE i OBLIGATORY DEFAULT 1,
*Tax
p_tax TYPE p DECIMALS 2 DEFAULT '16' OBLIGATORY,
*Terms of payment
p_cash TYPE c RADIOBUTTON GROUP 0001 DEFAULT 'X',
p_credit TYPE c RADIOBUTTON GROUP 0001,
p_months TYPE i OBLIGATORY DEFAULT '24'.
CONSTANTS:
*Interest per year in percent
con_annual_interest TYPE p DECIMALS 2 VALUE '6.75'.
DATA:
*Temporary data
l_net_amount TYPE p DECIMALS 2,
l_tax_factor TYPE f,
*l_credit_amount TYPE p DECIMALS 2,
*l_monthly_interest_factor TYPE f,
*Result data
* l_monthly_vat_amount TYPE p DECIMALS 2,
* l_monthly_amount TYPE p DECIMALS 2,
l_vat_amount TYPE p DECIMALS 2,
l_total_amount LIKE l_net_amount,
* * Dynamic variables
l_rda_credit_amount TYPE REF TO currency,
l_rda_monthly_interest_factor TYPE REF TO f,
l_rda_monthly_vat_amount TYPE REF TO currency,
l_rda_monthly_amount TYPE REF TO currency.
FIELD-SYMBOLS:
* Access to reference variables
<l_credit_amount> TYPE any,
<l_monthly_interest_factor> TYPE f,
<l_monthly_vat_amount> TYPE any,
<l_monthly_amount> TYPE currency.
* Temporary calculations
l_net_amount = p_aprice * p_aquant.
l_tax_factor = p_tax / 100.
* Write Article information to screen
WRITE: /, / 'Article information',
/ 'Article number: ', 30 p_ano,
/ 'Article name: ', 30 p_aname,
/ 'Article net price: ', 30 p_aprice, p_curr,
/ 'Quantity: ', 30 p_aquant.
* Write conditions to screen
WRITE: /, / 'Conditions',
/ 'Tax rate: ', 30 p_tax,
/ 'Quantity: ', 30 p_aquant.
WRITE: /, / 'Result'.
IF p_cash = 'X'.
* Calculate cash results
l_vat_amount = l_net_amount * l_tax_factor.
l_total_amount = l_net_amount + l_vat_amount.
* Write results to screen
WRITE: / 'Total VAT amount: ', 30 l_vat_amount, p_curr,
/ 'Total amount: ', 30 l_total_amount, p_curr.
ELSE.
* Calculate interest Results
CREATE DATA l_rda_monthly_interest_factor.
ASSIGN l_rda_monthly_interest_factor->* to <l_monthly_interest_factor>.
CREATE DATA l_rda_credit_amount.
ASSIGN l_rda_credit_amount->* to <l_credit_amount>.
CREATE DATA l_rda_monthly_vat_amount.
ASSIGN l_rda_monthly_vat_amount->* to <l_monthly_vat_amount>.
CREATE DATA l_rda_monthly_amount.
ASSIGN l_rda_monthly_amount->* to <l_monthly_amount>.
<l_monthly_interest_factor> = con_annual_interest / 100 / 12.
<l_credit_amount> = l_net_amount + l_net_amount * <l_monthly_interest_factor>
* p_months.
l_vat_amount = <l_credit_amount> * l_tax_factor.
l_total_amount = <l_credit_amount> + l_vat_amount. "<=============== FAILS
<l_monthly_vat_amount> = l_vat_amount / p_months.
<l_monthly_amount> = l_total_amount / p_months.
* Write results to screen
WRITE: / 'Month: ', 30 p_months,
/ 'Monthly VAT amount: ', 30 <l_monthly_vat_amount>, p_curr,
/ 'Monthly amount: ', 30 <l_monthly_amount>, p_curr,
/ '(VAT amount: ', 30 l_vat_amount, p_curr, ')',
/ '(Total amount: ', 30 l_total_amount, p_curr, ')'.
ENDIF.
您正在使用文本字段CURRENCY
作為金額。 因此,您會得到一個短暫的轉儲。 只需將類型更改為值類型,一切都應該沒問題。 我已將其更改為DEC23_2
,一切運行順利。
CURRENCY
類型用於保存有關貨幣的信息,如 EUR、USD、GBP 等,是一種文本類型。
我猜問題是因為第 114 行的浮點范圍。只需轉換為壓縮十進制。通過添加以下代碼
DATA : lv_monthly_interest TYPE p DECIMALS 2.
MOVE <l_monthly_interest_factor> TO lv_monthly_interest.
<l_credit_amount> = l_net_amount + l_net_amount * lv_monthly_interest * p_months.
希望這可以幫助!!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.