ABAP 金额小写转大写

 

Z_CONVERT_TO_CAPITALIZATION

 

ABAP 金额小写转大写

 

 

 

ABAP 金额小写转大写

ABAP 金额小写转大写

FUNCTION Z_CONVERT_TO_CAPITALIZATION.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(PI_MONEY) TYPE  BBWERT
*"  EXPORTING
*"     VALUE(PO_CHINESE) TYPE  CHAR_50
*"----------------------------------------------------------------------


  IF PI_MONEY 0.
    PO_CHINESE ''.
    EXIT.
  ENDIF.
  DATA:MONEY_STR(13).
  MONEY_STR PI_MONEY.
  IF MONEY_STR CN '0123456789. '.
    RAISE WRONG_MONEY.
  ENDIF.
  DATA:I 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:po_chinese.",units_off.
  LASTD 0.
  CURNT_OFF STRLENMONEY_STR 1.
  WHILE CURNT_OFF >= 0.
    CURNTD MONEY_STR+CURNT_OFF(1).
    CWORD DIGTS+CURNTD(1).

    WEIGHT UNITS+UNITS_OFF(1).

    IF CURNTD 0.             "Current digit is 0
      IF UNITS_OFF OR UNITS_OFF OR UNITS_OFF 10.
        CLEAR:CWORD.
        IF CURNT_OFF 0.
          CLEAR:WEIGHT.
        ENDIF.
      ELSEIF LASTD 0.
        CLEAR:CWORD,WEIGHT.
      ELSE.
        CLEAR:WEIGHT.
      ENDIF.
    ENDIF.
    "PO_CHINESE = CWORD + WEIGHT + PO_CHINESE.
    CONCATENATE CWORD WEIGHT PO_CHINESE INTO PO_CHINESE.
    LASTD CURNTD.
    SUBTRACT FROM CURNT_OFF.
    ADD TO UNITS_OFF.
  ENDWHILE.
  IF PO_CHINESE NS ''.
    CONCATENATE PO_CHINESE 'INTO PO_CHINESE.
  ELSE.
    CWORD PO_CHINESE.
    IF CWORD ''.
      SHIFT PO_CHINESE BY PLACES.
    ENDIF.
  ENDIF.


ENDFUNCTION.