Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Write formatting problem - Currency + sign front

Peter_Inotai
Active Contributor
0 Kudos

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.

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Why dont you use USING EDIT MASK or TRANSLATE command.

Regards

Anurag

5 REPLIES 5

Former Member
0 Kudos

Why dont you use USING EDIT MASK or TRANSLATE command.

Regards

Anurag

0 Kudos

Can you provide some more detail about what you meant exactly?

Thanks,

Peter

0 Kudos

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.

0 Kudos

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

Peter_Inotai
Active Contributor
0 Kudos

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.