SAP 中文小写金额转大写金额 amount in word(支持负数)

1.定义入参,出参数

1
2

2.代码

FUNCTION zfun_convert_money.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_INPUT) TYPE  WERTV12
*"  EXPORTING
*"     VALUE(E_OUTPUT) TYPE  STRING
*"----------------------------------------------------------------------
  DATA: i_value   TYPE char100,        "入参
        e_value   TYPE char255,        "出参
        v_intege  TYPE c LENGTH 23,   "整数部分   最大23位
        v_decimal TYPE c LENGTH 2.    "小数部分   默认2位

  DATA: text_tab    TYPE TABLE OF char_4,
        wa_text_tab TYPE  char_4,
        length      TYPE i.

  DATA: v_lenth TYPE i,                           "整数部分长度
        v_cache TYPE c LENGTH 1.                  "缓存

  DATA: lv_flag TYPE c.                           "金额是否为负 标识
  "输入
  i_value = i_input.

  REPLACE ALL OCCURRENCES OF REGEX '\-'   IN i_value WITH ''.        "删除 - 符号
  IF sy-subrc = 0.            "如果为负数
    lv_flag = 'X'.
  ENDIF.

  SHIFT i_value LEFT DELETING LEADING '0'.          "删除前导0
  CONDENSE i_value NO-GAPS.                         "删除空格

  "拆分金额的整数小数
  SPLIT i_value AT '.' INTO v_intege v_decimal.

  PERFORM frm_string_reverse CHANGING v_intege.     "翻转intege sting

  CALL FUNCTION 'SCMS_STRING_TO_FTEXT'             "四个一拆分
    EXPORTING
      text      = |{ v_intege }|
    IMPORTING
      length    = length
    TABLES
      ftext_tab = text_tab.

  LOOP AT text_tab INTO wa_text_tab.
    CASE sy-tabix.
      WHEN 1.
        CONCATENATE e_value '元'  INTO e_value.
      WHEN 2.
        IF wa_text_tab <> '0000'.
          CONCATENATE '万' e_value INTO e_value.
        ENDIF.
      WHEN 3.
        IF wa_text_tab <> '0000'.
          CONCATENATE '亿' e_value INTO e_value.
        ENDIF.
      WHEN 4.
        IF wa_text_tab <> '0000'.
          CONCATENATE '兆' e_value INTO e_value.
        ENDIF.
      WHEN 5.
        IF wa_text_tab <> '0000'.
          CONCATENATE '万兆' e_value INTO e_value.
        ENDIF.
      WHEN 6.
        IF wa_text_tab <> '0000'.
          CONCATENATE '京' e_value INTO e_value.          "兆后面就是京
        ENDIF.
    ENDCASE.

    CLEAR: v_lenth.
    DO strlen( wa_text_tab ) TIMES.
      v_cache = wa_text_tab+v_lenth(1).
      IF v_cache <> 0.
        CASE v_lenth.
          WHEN 0.
            CONCATENATE v_cache e_value INTO e_value.
          WHEN 1.
            CONCATENATE v_cache '拾' e_value INTO e_value.
          WHEN 2.
            CONCATENATE v_cache '佰' e_value INTO e_value.
          WHEN 3.
            CONCATENATE v_cache '仟' e_value INTO e_value.
        ENDCASE.
      ELSE.
        CONCATENATE v_cache e_value INTO e_value.
      ENDIF.
      v_lenth = v_lenth + 1.
    ENDDO.
  ENDLOOP.

  IF e_value <> '0元'.
    REPLACE ALL OCCURRENCES OF REGEX '0+京' IN e_value WITH '京0'.
    REPLACE ALL OCCURRENCES OF REGEX '0+万兆' IN e_value WITH '万兆0'.
    REPLACE ALL OCCURRENCES OF REGEX '0+兆' IN e_value WITH '兆0'.
    REPLACE ALL OCCURRENCES OF REGEX '0+亿' IN e_value WITH '亿0'.
    REPLACE ALL OCCURRENCES OF REGEX '0+万' IN e_value WITH '万0'.
    REPLACE ALL OCCURRENCES OF REGEX '0+元' IN e_value WITH '元'.               "排除掉  100000.01 显示 壹拾万零元零壹分 的情况
  ENDIF.



  "处理小数部分
  IF v_decimal = '00'.
    CONCATENATE e_value '整' INTO e_value.
  ELSE.
    IF v_decimal+1(1) <> 0.
      IF v_decimal+0(1) <> 0.
        CONCATENATE e_value v_decimal+0(1)  '角' INTO e_value.
      ELSE.
        CONCATENATE e_value v_decimal+0(1) INTO e_value.
      ENDIF.
      CONCATENATE e_value v_decimal+1(1)  '分' INTO e_value.
    ELSE.
      CONCATENATE e_value v_decimal+0(1)  '角' INTO e_value.
    ENDIF.

  ENDIF.

  "  替换e_value中的数字  正则表达式
  REPLACE ALL OCCURRENCES OF REGEX '0+'   IN e_value WITH '零'.        "多个零时,只输出一个零
  REPLACE ALL OCCURRENCES OF REGEX '1{1}' IN e_value WITH '壹'.
  REPLACE ALL OCCURRENCES OF REGEX '2{1}' IN e_value WITH '贰'.
  REPLACE ALL OCCURRENCES OF REGEX '3{1}' IN e_value WITH '叁'.
  REPLACE ALL OCCURRENCES OF REGEX '4{1}' IN e_value WITH '肆'.
  REPLACE ALL OCCURRENCES OF REGEX '5{1}' IN e_value WITH '伍'.
  REPLACE ALL OCCURRENCES OF REGEX '6{1}' IN e_value WITH '陆'.
  REPLACE ALL OCCURRENCES OF REGEX '7{1}' IN e_value WITH '柒'.
  REPLACE ALL OCCURRENCES OF REGEX '8{1}' IN e_value WITH '捌'.
  REPLACE ALL OCCURRENCES OF REGEX '9{1}' IN e_value WITH '玖'.

  IF lv_flag = 'X'.
    CONCATENATE '负' e_value INTO e_value.
    CLEAR lv_flag.
  ENDIF.

  "输出
  e_output = e_value.

ENDFUNCTION.

3.效果

  • 正数
    3
    4
  • 负数
    5
    6

猜你喜欢

转载自blog.csdn.net/qq_30797051/article/details/121149514