메뉴 건너뛰기

SAP 한국 커뮤니티

일/주/월/분기/년..연산가능 펑션~

초짜 2007.07.31 14:33 조회 수 : 5209 추천:23

*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(IN_RECTYPE) TYPE  ALPDBRTYP
*"     VALUE(IN_NBR_DWXMQY) TYPE  I
*"     VALUE(IN_DATE) TYPE  ALDATE
*"  EXPORTING
*"     VALUE(OUT_DATE) TYPE  ALDATE
*"  EXCEPTIONS
*"      OTHER_ERROR
*"----------------------------------------------------------------------


* R/3 2005S Version Standard 에 있는 펑션(SALP_CALC_DATE)이나


* Month/Quarter 는 마이너스값 입력시 적용안되는점 수정
* IN_RECTYPE : Days (D,R,I,H) or Weeks (W,A,B,C) or X-Days (X,E,F,G) or
*              Months (M,J,K,L) or Quarters (Q,N,O,P) or Years (Y,S,T,U)
* IN_NBR_DWXMQY : 원하는 구간값입력(+/-)
* IN_DATE : 기준일자
* OUT_DATE : the result


  DATA: dd TYPE i,
        md TYPE i,
        cd TYPE i,
        mm TYPE i,
        tt TYPE i,
        op TYPE d,
        fdate TYPE d.
  CASE in_rectype.
    WHEN 'D' OR 'R' OR 'I' OR 'H'.
      fdate = in_date + in_nbr_dwxmqy.
    WHEN 'A' OR 'B' OR 'W' OR 'C'.
      fdate = in_date + ( in_nbr_dwxmqy * 7 ).
    WHEN 'E' OR 'F' OR 'X' OR 'G'.
      fdate = in_date + in_nbr_dwxmqy.
    WHEN 'M' OR 'J' OR 'K' OR 'L'.
      dd = in_nbr_dwxmqy DIV 12.
      md = in_nbr_dwxmqy MOD 12.
      mm = in_date+4(2).
      cd = mm + in_nbr_dwxmqy.
      fdate = in_date.
      tt = fdate+6(2) - 1.
      fdate+6(2) = '01'.
      IF dd > 0.
        fdate+0(4) = in_date+0(4) + dd.
      ELSEIF cd <= 0.
        fdate+0(4) = in_date+0(4) + dd.
      ENDIF.
      fdate+4(2) = in_date+4(2) + md.
      IF fdate+4(2) > 12.
        fdate+4(2) = fdate+4(2) MOD 12.
        IF in_nbr_dwxmqy > 0.
          fdate+0(4) = fdate+0(4) + 1.
        ENDIF.
      ENDIF.
      fdate = fdate + tt.
    WHEN 'Q' OR 'N' OR 'O' OR 'P'.
      dd = ( in_nbr_dwxmqy * 3 ) DIV 12.
      md = ( in_nbr_dwxmqy * 3 ) MOD 12.
      cd = mm + in_nbr_dwxmqy.
      fdate = in_date.
      tt = fdate+6(2) - 1.
      fdate+6(2) = '01'.
      IF dd > 0.
        fdate+0(4) = in_date+0(4) + dd.
      ELSEIF cd <= 0.
        fdate+0(4) = in_date+0(4) + dd.
      ENDIF.
      fdate+4(2) = in_date+4(2) + md.
      IF fdate+4(2) > 12.
        fdate+4(2) = fdate+4(2) MOD 12.
        IF in_nbr_dwxmqy > 0.
          fdate+0(4) = fdate+0(4) + 1.
        ENDIF.
      ENDIF.
      fdate = fdate + tt.
    WHEN 'Y' OR 'S' OR 'T' OR 'U'.
      fdate = in_date.
      fdate+0(4) = in_date+0(4) + in_nbr_dwxmqy.
    WHEN OTHERS.
      fdate = in_date.
      RAISE other_error.
  ENDCASE.


  out_date = fdate.

번호 제목 글쓴이 날짜 조회 수
127 ABAP System Fields 홍성현 2007.08.09 3931
126 ABAP 문법 2nd [8] file 아일락 2007.08.20 3914
125 Difference Between User Exits, Screen Exits and Field Exits [1] sapjoy 2006.12.20 3907
124 SAP 어플리케이션의 구성 [3] file 노름마치 2007.10.10 3897
123 Fiori / UI5 ICON LIST 참조사이트 file sapjoy 2019.01.14 3896
122 Lock/Unlock the ABAP Editor Lock Field [1] sapjoy 2006.12.20 3891
121 자주 사용되는 String 조작 명령어 [4] 양키(이경환) 2014.01.28 3879
120 CLUSTER 테이블 찾는법~~ [4] 첼시 2008.02.28 3854
119 HELP를 WEB으로 접속하려면,,, 이렇게 하세요 [8] 김창훈 2007.08.08 3847
118 인용부호를 변수에 저장하려면 [2] 푸른밤 2007.07.31 3847
117 New ABAP Editor Concept [4] file D.Y.Kim 2007.06.07 3847
116 BSP 명령구절 [3] gauguin 2008.06.04 3837
115 Internal Table 내용 PC에 저장하기 [11] 별이고픈구름 2008.05.28 3829
114 파트너 정보 테이블(partner) sapjoy 2007.04.10 3799
113 SAP BEST PRACTICES BASELINE PACKAGE Link(한국어) [10] ac3mania 2009.06.23 3789
112 Selection Screeen에서 저장버튼 Disable 처리 [3] 양키(이경환) 2014.11.13 3757
111 Picking material description from custom table in the SAP Sales Order [2] file 노름마치 2009.07.10 3757
110 zebra printer 상세 사용메뉴얼입니다. 양키 2013.08.26 3745
109 일자에 포멧에 맞게 자동으로 처리하는 프로그램 [1] 박종갑 2007.07.13 3741
108 new_abap_editor [3] file Lastforone 2007.07.31 3734