FUNCTION Z_DIGITAL_LOWER_TO_UPPER.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(DIGITALIN) TYPE C
*" EXPORTING
*" VALUE(DIGITALOUT) TYPE C
*"----------------------------------------------------------------------
IF digitalin = '0'.
digitalout = '零'.
ELSEIF digitalin = '1'.
digitalout = '壹'.
ELSEIF digitalin = '2'.
digitalout = '貳'.
ELSEIF digitalin = '3'.
digitalout = '叄'.
ELSEIF digitalin = '4'.
digitalout = '肆'.
ELSEIF digitalin = '5'.
digitalout = '伍'.
ELSEIF digitalin = '6'.
digitalout = '陸'.
ELSEIF digitalin = '7'.
digitalout = '柒'.
ELSEIF digitalin = '8'.
digitalout = '捌'.
ELSEIF digitalin = '9'.
digitalout = '玖'.
ELSE.
digitalout = '×'.
ENDIF.
digitalout = '零'.
ELSEIF digitalin = '1'.
digitalout = '壹'.
ELSEIF digitalin = '2'.
digitalout = '貳'.
ELSEIF digitalin = '3'.
digitalout = '叄'.
ELSEIF digitalin = '4'.
digitalout = '肆'.
ELSEIF digitalin = '5'.
digitalout = '伍'.
ELSEIF digitalin = '6'.
digitalout = '陸'.
ELSEIF digitalin = '7'.
digitalout = '柒'.
ELSEIF digitalin = '8'.
digitalout = '捌'.
ELSEIF digitalin = '9'.
digitalout = '玖'.
ELSE.
digitalout = '×'.
ENDIF.
ENDFUNCTION.
FUNCTION Z_MONEY_LOWER_TO_UPPER.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(MONEYIN) TYPE CRMT_GROSS_VALUE_CUM
*" EXPORTING
*" VALUE(MONEYOUT) TYPE C
*"----------------------------------------------------------------------
DATA: ipos TYPE I,
iwan TYPE I,
imod TYPE I,
pin TYPE P DECIMALS 2,
strint TYPE C LENGTH 10,
strdec TYPE C LENGTH 3,
strintt TYPE C,
strintd TYPE C,
strintu TYPE C LENGTH 40,
strdect TYPE C,
strdecd TYPE C,
strdecu TYPE C LENGTH 4.
iwan TYPE I,
imod TYPE I,
pin TYPE P DECIMALS 2,
strint TYPE C LENGTH 10,
strdec TYPE C LENGTH 3,
strintt TYPE C,
strintd TYPE C,
strintu TYPE C LENGTH 40,
strdect TYPE C,
strdecd TYPE C,
strdecu TYPE C LENGTH 4.
pin = MONEYIN.
IF pin eq 0.
ipos = 0.
ELSE.
ipos = FLOOR( LOG10( pin ) ) + 1. "計算數值pin的整數位數。
ENDIF.
*write / ipos.
IF pin eq 0.
ipos = 0.
ELSE.
ipos = FLOOR( LOG10( pin ) ) + 1. "計算數值pin的整數位數。
ENDIF.
*write / ipos.
*計算小數部分
pin = pin * 100. "將數值的百分位變為個位,便於處理。
strdect = pin - pin DIV 10 * 10. "獲取數值的百分位,也就是分。
IF strdect NE '0'. "如果值為0,則不顯示該值,直接跳過。
CALL FUNCTION 'Z_DIGITAL_LOWER_TO_UPPER' "調用數值小寫轉大寫的函數,獲得大寫的數字。
EXPORTING
DIGITALIN = strdect
IMPORTING
DIGITALOUT = strdecd.
CONCATENATE strdecd '分' INTO strdecu. "生成金額的“分”。
ENDIF.
pin = pin DIV 10. "將十分位變為個位。
strdect = pin - pin DIV 10 * 10. "獲取數值的十分位,也就是角。
IF strdect EQ '0' AND strdecu EQ ''. "如果角為0,分也為0,則金額的小數部分就沒有。
strdecu = ''.
ELSEIF strdect EQ '0' AND strdecu NE ''. "如果角為0,分不為0,則角位只寫“零”不寫“角”。
CONCATENATE '零' strdecu INTO strdecu.
ELSE. "如果角不為0,則直接與前面生成的分進行拼接。
CALL FUNCTION 'Z_DIGITAL_LOWER_TO_UPPER' "調用數值小寫轉大寫的函數。
EXPORTING
DIGITALIN = strdect
IMPORTING
DIGITALOUT = strdecd.
CONCATENATE strdecd '角' strdecu INTO strdecu. "生成金額的“角”和“分”
ENDIF.
pin = pin DIV 10. "恢復原來的整數位。
pin = pin * 100. "將數值的百分位變為個位,便於處理。
strdect = pin - pin DIV 10 * 10. "獲取數值的百分位,也就是分。
IF strdect NE '0'. "如果值為0,則不顯示該值,直接跳過。
CALL FUNCTION 'Z_DIGITAL_LOWER_TO_UPPER' "調用數值小寫轉大寫的函數,獲得大寫的數字。
EXPORTING
DIGITALIN = strdect
IMPORTING
DIGITALOUT = strdecd.
CONCATENATE strdecd '分' INTO strdecu. "生成金額的“分”。
ENDIF.
pin = pin DIV 10. "將十分位變為個位。
strdect = pin - pin DIV 10 * 10. "獲取數值的十分位,也就是角。
IF strdect EQ '0' AND strdecu EQ ''. "如果角為0,分也為0,則金額的小數部分就沒有。
strdecu = ''.
ELSEIF strdect EQ '0' AND strdecu NE ''. "如果角為0,分不為0,則角位只寫“零”不寫“角”。
CONCATENATE '零' strdecu INTO strdecu.
ELSE. "如果角不為0,則直接與前面生成的分進行拼接。
CALL FUNCTION 'Z_DIGITAL_LOWER_TO_UPPER' "調用數值小寫轉大寫的函數。
EXPORTING
DIGITALIN = strdect
IMPORTING
DIGITALOUT = strdecd.
CONCATENATE strdecd '角' strdecu INTO strdecu. "生成金額的“角”和“分”
ENDIF.
pin = pin DIV 10. "恢復原來的整數位。
iwan = 0. "萬位標記,四個數值位為一“萬”,從個位開始,所以iwan的初值為0。
*計算整數部分
DO ipos TIMES.
strintt = pin - pin DIV 10 * 10.
imod = iwan MOD 4.
IF imod EQ 0.
IF iwan = 0.
IF strintt NE '0'.
CALL FUNCTION 'Z_DIGITAL_LOWER_TO_UPPER'
EXPORTING
DIGITALIN = strintt
IMPORTING
DIGITALOUT = strintd.
strintu = strintd.
ENDIF.
ELSEIF iwan = 4.
IF strintt NE '0'.
CALL FUNCTION 'Z_DIGITAL_LOWER_TO_UPPER'
EXPORTING
DIGITALIN = strintt
IMPORTING
DIGITALOUT = strintd.
ELSE.
strintd = ''.
ENDIF.
CONCATENATE strintd '萬' strintu INTO strintu.
ELSEIF iwan = 8.
IF strintt NE '0'.
CALL FUNCTION 'Z_DIGITAL_LOWER_TO_UPPER'
EXPORTING
DIGITALIN = strintt
IMPORTING
DIGITALOUT = strintd.
ELSE.
strintd = ''.
ENDIF.
CONCATENATE strintd '億' strintu INTO strintu.
ENDIF.
ENDIF.
IF imod EQ 1.
IF strintt NE '0'.
CALL FUNCTION 'Z_DIGITAL_LOWER_TO_UPPER'
EXPORTING
DIGITALIN = strintt
IMPORTING
DIGITALOUT = strintd.
CONCATENATE strintd '拾' strintu INTO strintu.
ELSEIF strintd NE '零'.
CONCATENATE '零' strintu INTO strintu.
ENDIF.
ENDIF.
IF imod EQ 2.
IF strintt NE '0'.
CALL FUNCTION 'Z_DIGITAL_LOWER_TO_UPPER'
EXPORTING
DIGITALIN = strintt
IMPORTING
DIGITALOUT = strintd.
CONCATENATE strintd '佰' strintu INTO strintu.
ELSEIF strintd NE '零'.
CONCATENATE '零' strintu INTO strintu.
ENDIF.
ENDIF.
IF imod EQ 3.
IF strintt NE '0'.
CALL FUNCTION 'Z_DIGITAL_LOWER_TO_UPPER'
EXPORTING
DIGITALIN = strintt
IMPORTING
DIGITALOUT = strintd.
CONCATENATE strintd '仟' strintu INTO strintu.
ELSEIF strintd NE '零'.
CONCATENATE '零' strintu INTO strintu.
ENDIF.
ENDIF.
pin = pin DIV 10.
iwan = iwan + 1.
* write: / iwan, strintt, strintu, imod.
ENDDO.
*計算整數部分
DO ipos TIMES.
strintt = pin - pin DIV 10 * 10.
imod = iwan MOD 4.
IF imod EQ 0.
IF iwan = 0.
IF strintt NE '0'.
CALL FUNCTION 'Z_DIGITAL_LOWER_TO_UPPER'
EXPORTING
DIGITALIN = strintt
IMPORTING
DIGITALOUT = strintd.
strintu = strintd.
ENDIF.
ELSEIF iwan = 4.
IF strintt NE '0'.
CALL FUNCTION 'Z_DIGITAL_LOWER_TO_UPPER'
EXPORTING
DIGITALIN = strintt
IMPORTING
DIGITALOUT = strintd.
ELSE.
strintd = ''.
ENDIF.
CONCATENATE strintd '萬' strintu INTO strintu.
ELSEIF iwan = 8.
IF strintt NE '0'.
CALL FUNCTION 'Z_DIGITAL_LOWER_TO_UPPER'
EXPORTING
DIGITALIN = strintt
IMPORTING
DIGITALOUT = strintd.
ELSE.
strintd = ''.
ENDIF.
CONCATENATE strintd '億' strintu INTO strintu.
ENDIF.
ENDIF.
IF imod EQ 1.
IF strintt NE '0'.
CALL FUNCTION 'Z_DIGITAL_LOWER_TO_UPPER'
EXPORTING
DIGITALIN = strintt
IMPORTING
DIGITALOUT = strintd.
CONCATENATE strintd '拾' strintu INTO strintu.
ELSEIF strintd NE '零'.
CONCATENATE '零' strintu INTO strintu.
ENDIF.
ENDIF.
IF imod EQ 2.
IF strintt NE '0'.
CALL FUNCTION 'Z_DIGITAL_LOWER_TO_UPPER'
EXPORTING
DIGITALIN = strintt
IMPORTING
DIGITALOUT = strintd.
CONCATENATE strintd '佰' strintu INTO strintu.
ELSEIF strintd NE '零'.
CONCATENATE '零' strintu INTO strintu.
ENDIF.
ENDIF.
IF imod EQ 3.
IF strintt NE '0'.
CALL FUNCTION 'Z_DIGITAL_LOWER_TO_UPPER'
EXPORTING
DIGITALIN = strintt
IMPORTING
DIGITALOUT = strintd.
CONCATENATE strintd '仟' strintu INTO strintu.
ELSEIF strintd NE '零'.
CONCATENATE '零' strintu INTO strintu.
ENDIF.
ENDIF.
pin = pin DIV 10.
iwan = iwan + 1.
* write: / iwan, strintt, strintu, imod.
ENDDO.
*連接整數位和小數位。
CONCATENATE strintu '元' strdecu INTO MONEYOUT.
CONCATENATE strintu '元' strdecu INTO MONEYOUT.
*把“零億”、“零萬”、“零元”都替換掉。
REPLACE ALL OCCURRENCES OF '零零' in monEYOUT with '零' .
REPLACE ALL OCCURRENCES OF '零零' in monEYOUT with '零' .
REPLACE ALL OCCURRENCES OF '零億' in monEYOUT with '億' .
REPLACE ALL OCCURRENCES OF '零萬' in monEYOUT with '萬' .
REPLACE ALL OCCURRENCES OF '零元' in monEYOUT with '元' .
REPLACE ALL OCCURRENCES OF '零零' in monEYOUT with '零' .
REPLACE ALL OCCURRENCES OF '零零' in monEYOUT with '零' .
REPLACE ALL OCCURRENCES OF '零億' in monEYOUT with '億' .
REPLACE ALL OCCURRENCES OF '零萬' in monEYOUT with '萬' .
REPLACE ALL OCCURRENCES OF '零元' in monEYOUT with '元' .
IF ipos eq 0.
MONEYOUT = '零元'.
ENDIF.
MONEYOUT = '零元'.
ENDIF.
ENDFUNCTION.
