본문 바로가기

SAP/BSP

BSP - 숫자를 컨버젼하는 프로그램(3자리마다 컴마 찍자)

사용자 삽입 이미지


전에 누가 요청이 있어서 만들어둔 펑션

혹시나 쓰일일이 있을려낭 ㅡ,.ㅡ


FUNCTION Z_SPLIT_3_COMMA_N.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(INPUT) OPTIONAL
*"     VALUE(INPUT_TYPE) TYPE  CHAR1 OPTIONAL
*"  EXPORTING
*"     VALUE(OUTPUT)
*"  EXCEPTIONS
*"      NO_INT_TYPE    "NO INT TYPE
*"      INPUT_TYPE_X   "X = 소수점 없음 OTHER = 소수점 있음
*"----------------------------------------------------------------------

  DATA : TEMP_S1      TYPE STRING.
  DATA : TEMP_S2      TYPE STRING.
  DATA : TEMP_FLAG(1) TYPE C.
  DATA : TEMP_INPUT   TYPE STRING.

  DATA : M   TYPE I.
  DATA : N   TYPE I.
  DATA : LEN TYPE I.

  DATA : TMP TYPE STRING.

  TEMP_INPUT = INPUT.

  IF TEMP_INPUT CN '1234567890.- '.
    RAISE NO_INT_TYPE.
  ENDIF.

  REPLACE '-' WITH '' INTO TEMP_INPUT.

  IF SY-SUBRC EQ 0.
    TEMP_FLAG = '-'.
  ENDIF.

  SPLIT TEMP_INPUT AT '.' INTO TEMP_S1 TEMP_S2.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    EXPORTING
      INPUT  = TEMP_S1
    IMPORTING
      OUTPUT = TEMP_S1.

  CONDENSE : TEMP_S1 NO-GAPS.

  LEN = STRLEN( TEMP_S1 ).

  M = LEN MOD 3.

  CLEAR : OUTPUT.

  DO.
    IF M <= LEN.
      IF M NE 0.
        IF M < 3.
          TMP = TEMP_S1+0(M).
        ELSE.
          N = M - 3.
          TMP = TEMP_S1+N(3).
        ENDIF.
        IF OUTPUT IS NOT INITIAL.
          CONCATENATE OUTPUT TMP INTO OUTPUT SEPARATED BY ','.
        ELSE.
          OUTPUT = TMP.
        ENDIF.
        M = M + 3.
      ELSE.
        M = 3.
      ENDIF.
    ELSE.
      EXIT.
    ENDIF.
  ENDDO.

  IF TEMP_S2 IS NOT INITIAL AND INPUT_TYPE NE 'X'.
    CONCATENATE OUTPUT TEMP_S2 INTO OUTPUT SEPARATED BY '.'.
  ENDIF.

  IF TEMP_FLAG IS NOT INITIAL.
    CONCATENATE TEMP_FLAG OUTPUT INTO OUTPUT.
  ENDIF.

ENDFUNCTION.