REPORT  zptb00_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'.
TYPES:
  currency TYPE p DECIMALS 2.
DATA: 	
* Temporary data
  l_net_amount TYPE p DECIMALS 2,
  l_tax_factor TYPE f,
* Result data
  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 currency,
  <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 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 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.
  <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.