SAP阿拉伯数字转中文大写函数

已经不知道是哪个高手写的函数了,名字忘了,只留下了函数。

此函数会经常用在FICO模块的会计凭证打印方面,所以说还是比较有用的。只需新建一个函数组,并创建一个函数,并将代码拷贝进程序当中即可。

 FUNCTION ZM_CHN_NUM.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(IV_MONEY) TYPE  BSEG-DMBTR
*"  EXPORTING
*"     REFERENCE(EV_MONEY) TYPE  STRING
*"  EXCEPTIONS
*"      WRONG_MONEY
*"----------------------------------------------------------------------
 clear ev_money.
 IF iv_money 0.
    ev_money '零'.
    EXIT.
  ENDIF.
  DATA:money_str(33).
  money_str iv_money.
   CONDENSE money_str NO-GAPS.
  IF money_str CN '0123456789. '.
    RAISE wrong_money.
  ENDIF.
  DATA:TYPE i.
  IF money_str CS '.'.
    sy-fdpos + 1.
    money_str+sy-fdpos money_str+i.
  ENDIF.
  CONDENSE money_str NO-GAPS.
  DATA:units_off TYPE i,
       curnt_off TYPE i.
  DATA:lastd TYPE n,curntd TYPE n.
  DATA:cword(2),weight(2).
  DATA:units(30VALUE '分角元拾佰仟万拾佰仟亿拾佰仟万',
       digts(20VALUE '零壹贰叁肆伍陆柒捌玖'.
* clear:ev_money,units_off.
  lastd 0.
  curnt_off STRLENmoney_str 1.
  WHILE curnt_off >= 0.
    curntd money_str+curnt_off(1).
    curntd.
    cword digts+i(1).
    weight units+units_off(1).
    units_off / 1.
    IF curntd 0.             "Current digit is 0
      IF OR OR 10.
        CLEAR:cword.
        IF curnt_off 0.
          CLEAR:weight.
        ENDIF.
      ELSEIF lastd 0.
        CLEAR:cword,weight.
      ELSE.
        CLEAR:weight.
      ENDIF.
    ENDIF.
    CONCATENATE cword weight ev_money INTO ev_money.
    lastd curntd.
    SUBTRACT FROM curnt_off.
    ADD TO units_off.
  ENDWHILE.
  IF ev_money NS '分'.
    CONCATENATE ev_money '整' INTO ev_money.
  ELSE.
    cword ev_money.
    IF cword '零'.
      SHIFT ev_money BY PLACES.
    ENDIF.
  ENDIF.

展开阅读全文

没有更多推荐了,返回首页