08-21-2006 9:05 AM
Hi,
I'd like to write an amount to a file with currency formatting and sign has to be front of the amount.
The problem is that the output will be always separator will be always ',' although it set to '.' for the user.
Probable in the WRITE TO the amount is no longer considered as amount. However FM CLOI_PUT_SIGN_IN_FRONT can handle only char format.
Any idea?
Thanks,
Peter
REPORT z_bc_s_test_kcopin.
CONSTANTS:
* Debit/Credit Indicator
c_shkzg_credit TYPE shkzg VALUE 'H',
c_shkzg_debit TYPE shkzg VALUE 'S'.
DATA:
lv_doc_amount_char TYPE char20,
lv_doc_amount_curr TYPE char20.
PARAMETER:
p_debcre TYPE bsid-shkzg " Debit/Credit Indicator
OBLIGATORY,
p_amount TYPE bsid-wrbtr, " Document Amount
p_curr TYPE bsid-waers. " Document Currency
START-OF-SELECTION.
IF p_debcre = c_shkzg_credit.
p_amount = p_amount * -1.
ENDIF.
lv_doc_amount_char = p_amount.
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
value = lv_doc_amount_char.
WRITE lv_doc_amount_char TO lv_doc_amount_curr CURRENCY p_curr.
*
WRITE: lv_doc_amount_curr.
08-21-2006 9:13 AM
Why dont you use USING EDIT MASK or TRANSLATE command.
Regards
Anurag
08-21-2006 9:13 AM
Why dont you use USING EDIT MASK or TRANSLATE command.
Regards
Anurag
08-21-2006 9:20 AM
Can you provide some more detail about what you meant exactly?
Thanks,
Peter
08-21-2006 9:45 AM
REPORT z_bc_s_test_kcopin.
CONSTANTS:
Debit/Credit Indicator
c_shkzg_credit TYPE shkzg VALUE 'H',
c_shkzg_debit TYPE shkzg VALUE 'S'.
DATA: lv_doc_amount_char TYPE char20,
lv_doc_amount_curr TYPE char20.
data l_ch_work(20).
data l_curr_work type bsid-wrbtr.
PARAMETER: p_debcre TYPE bsid-shkzg " Debit/Credit Indicator
OBLIGATORY,
p_amount TYPE bsid-wrbtr, " Document Amount
p_curr TYPE bsid-waers. " Document Currency
START-OF-SELECTION.
l_ch_work = p_amount.
replace all occurrences of ',' in l_ch_work with '.'.
l_curr_work = l_ch_work.
IF p_debcre = c_shkzg_credit.
l_curr_work = l_curr_work * -1.
ENDIF.
lv_doc_amount_char = l_curr_work.
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
value = lv_doc_amount_char.
WRITE lv_doc_amount_char TO lv_doc_amount_curr CURRENCY p_curr.
*
WRITE: lv_doc_amount_curr.
08-21-2006 9:46 AM
Basically,
WRITE: lv_doc_amount_curr USING EDIT MAST 'RR__,__,__,___.__'. "Depending on the required format.
Second option is to use the translate command.
TRANSLATE lv_doc_amount_curr using '.$'.
TRANSLATE lv_doc_amount_curr using ',.'.
TRANSLATE lv_doc_amount_curr using '$,'.
Also, for sign you can use the below logic.
If p_amount < 0.
lv_sign = '-'.
else.
lv_sign = '+'.
endif.
concatenate lv_sign lv_doc_amount_curr into lv_doc_amount_curr.
Regards
Anurag
Message was edited by: Anurag Bankley
08-21-2006 10:18 AM
I changed the logic as below and it works now.
Thanks everyone who helped!!!
Peter
START-OF-SELECTION.
WRITE p_amount TO lv_doc_amount_curr CURRENCY p_curr.
CONDENSE lv_doc_amount_curr.
IF p_debcre = c_shkzg_credit.
CONCATENATE '-' lv_doc_amount_curr INTO lv_doc_amount_curr.
ENDIF.
*
WRITE: lv_doc_amount_curr.