Code20070216 - ooxxvv/MySAPnotes GitHub Wiki

code20070216

  • 在 layouset 中無法直接撰寫程式碼,需 PERFORM 到別的程式做運算,這裡是一些有用的程式碼。

程式碼

REPORT ZERFI002.
*-------用在 layoutset 中用來轉換年份的 form
FORM CHANGE_YEAR TABLES IN_TAB STRUCTURE ITCSY
                        OUT_TAB STRUCTURE ITCSY.

 DATA: L_INT_YEAR    TYPE i VALUE '95',
       L_CHR_YEAR(4) TYPE c VALUE '0'.
*----GET INPUT
 LOOP AT IN_TAB.
  IF IN_TAB-NAME EQ 'L_YEAR'.
   L_INT_YEAR = IN_TAB-VALUE.
  ENDIF.
 ENDLOOP.
*-----CHANGE YEAR
 L_INT_YEAR = L_INT_YEAR - 1911.
 IF L_INT_YEAR < 0.
  L_INT_YEAR = 0.
 ENDIF.
 WRITE L_INT_YEAR TO L_CHR_YEAR.

*------OUTPUT
 LOOP AT OUT_TAB.
  IF OUT_TAB-NAME EQ 'L_YEAR'.
   MOVE L_CHR_YEAR TO OUT_TAB-VALUE .
  ENDIF.
  MODIFY OUT_TAB.
 ENDLOOP.

ENDFORM.

*-------用在 layoutset 中用來清除空白 form
FORM REPLACE_SPACE TABLES IN_TAB STRUCTURE ITCSY
                          OUT_TAB STRUCTURE ITCSY.

 DATA/ L_INT_SPELL(50) TYPE C VALUE ''.
*----GET INPUT
 LOOP AT IN_TAB.
  IF IN_TAB-NAME EQ 'L_SPELL'.
   L_INT_SPELL = IN_TAB-VALUE.
  ENDIF.
 ENDLOOP.
*-----REPLACE SPACE
 CONDENSE L_INT_SPELL NO-GAPS.
*------OUTPUT
 LOOP AT OUT_TAB.
  IF OUT_TAB-NAME EQ 'L_SPELL'.
   MOVE L_INT_SPELL TO OUT_TAB-VALUE .
  ENDIF.
  MODIFY OUT_TAB.
 ENDLOOP.

ENDFORM.

在 layoutset 中使用 PERFORM 將西元年轉成民國年

 SET DATE MASK = 'YYYYMMDD'
 DEFINE &L_YEAR& = &REGUH-WDATE(4)&
 PERFORM CHANGE_YEAR IN PROGRAM ZERFI002
 USING &L_YEAR&
 CHANGING &L_YEAR&
 ENDPERFORM