17. informix ¹ê°È¬ã°Q

 

17-1 ¤½¥Î library function

 

#-----------------------------------------------------------------------

#   nckulib.4gl

#-----------------------------------------------------------------------

 

GLOBALS

   DEFINE

#----------------

#  system area

#----------------

          sys_date         INTEGER,

          sys_program      CHAR(7),

          sys_heading      CHAR(30),

          sys_user_id      CHAR(7),             

          sys_user_ip      CHAR(20),             

          sys_user_name    CHAR(8),             

          sys_permision    CHAR(6),      #¨Ï¥ÎÅv­­

          Curr_Open_Form   CHAR(1),

          data_window      CHAR(8),

          msg         ARRAY[100] OF CHAR(60)

END GLOBALS

#---------------------------------------------

#  §PÂ_ int_date (Integer«¬ºA) ¬O§_¬°¥¿½T¤é´Á

#---------------------------------------------

FUNCTION IH_is_date(int_date)

    DEFINE int_date INTEGER

    DEFINE date1 DATE

    IF  int_date < 10000 THEN RETURN FALSE END IF

    LET date1 = ih_int2date(int_date)

    IF  date1  IS NULL THEN RETURN FALSE END IF

    RETURN TRUE

END FUNCTION

 

#---------------------

# ºâ¥X¬Y¦~¤ëªº¤Ñ¼Æ

#---------------------

FUNCTION IH_monthday(a_ym)

    DEFINE a_ym   SMALLINT

    DEFINE li_bdate, li_edate INTEGER

    LET li_bdate = a_ym * 100 + 1  -- ¥»¤ë¤@¸¹

    LET li_edate = ih_add_date(li_bdate, 31)

    LET li_edate = li_edate - (li_edate MOD 100) + 1 -- ¤U¤ë¤@¸¹

    RETURN (ih_diff2date(li_bdate, li_edate))

END FUNCTION


 

#--------------------------

# §PÂ_¬O§_¬°¶|¦~ RETURN:T/F

#--------------------------

FUNCTION IH_is_year(a_yy)

    DEFINE a_yy  SMALLINT

    RETURN (ih_is_date(a_yy * 10000 + 229))

END FUNCTION

 

#--------------------------------

# §PÂ_¶Ç¤J¦~¤ë¬O§_¥¿½T RETURN:T/F

#--------------------------------

FUNCTION IH_is_ym(a_ym)

    DEFINE a_ym SMALLINT

    RETURN (ih_is_date(a_ym * 100 + 1))

END FUNCTION

 

#--------------------------------

# §PÂ_¶Ç¤J®É¶¡¬O§_¥¿½T RETURN:T/F

#--------------------------------

FUNCTION IH_is_time(a_time)

    DEFINE a_time   SMALLINT

    DEFINE p_hour   SMALLINT

    DEFINE p_minute SMALLINT

 

    LET p_hour = a_time / 100

    LET p_minute = a_time MOD 100

    IF  p_hour >= 0 AND p_hour <= 23 THEN

        IF  p_minute >= 0 AND p_minute <= 59 THEN

            RETURN TRUE

        END IF

    END IF

    RETURN FALSE

END FUNCTION

 

#--------------------------------------------------

# ­pºâ¨â¼Æ¦r¤é´Á¬Û¶Z¤Ñ¼Æ b_date:°_©l RETURN:INTEGER

#--------------------------------------------------

FUNCTION IH_diff2date(b_date,e_date)

    DEFINE b_date, e_date INTEGER

    DEFINE date1, date2 DATE

    LET date1 = ih_int2date(b_date)

    LET date2 = ih_int2date(e_date)

    RETURN (date2 - date1)

END FUNCTION


 

#--------------------------------------------------

# ­pºâ¨â¦~¤ë¼Æ¦r¬Û¶Z¤ë¼Æ b_date:°_©l RETURN:SMALLINT

#--------------------------------------------------

FUNCTION ncku_diff2ym(b_date,e_date)

    DEFINE b_date, e_date SMALLINT

    DEFINE b_yy,b_mm,e_yy,e_mm,Vmm SMALLINT

    LET b_yy = b_date / 100

    LET b_mm = b_date MOD 100

    LET e_yy = e_date / 100

    LET e_mm = e_date MOD 100

    IF  b_yy = e_yy THEN

        RETURN (e_mm - b_mm)

    END IF

    IF  e_mm >= b_mm THEN

        LET Vmm = ((e_yy - b_yy) * 12) + (e_mm - b_mm)

    ELSE

        LET Vmm = ((e_yy - b_yy - 1) * 12) + (12 + e_mm - b_mm )

    END IF

    RETURN (Vmm)

END FUNCTION

#--------------------------------------------------

# ­pºâ¨â¤é´Á¼Æ¦r¦~¤ë¬Û¶Z¤ë¼Æ b_date:°_©l RETURN:INTEGER

#--------------------------------------------------

FUNCTION IH_diff2yymm(b_date,e_date)

    DEFINE b_date, e_date INTEGER

    DEFINE b_yy,b_mm,e_yy,e_mm,Vmm SMALLINT

    LET b_yy = b_date / 10000

    LET b_mm = (b_date - (b_yy * 10000)) / 100

    LET e_yy = e_date / 10000

    LET e_mm = (e_date - (e_yy * 10000)) / 100

    IF  b_yy = e_yy THEN

        RETURN (e_mm - b_mm)

    END IF

    IF  e_mm >= b_mm THEN

        LET Vmm = ((e_yy - b_yy) * 12) + (e_mm - b_mm)

    ELSE

        LET Vmm = ((e_yy - b_yy - 1) * 12) + (12 + e_mm - b_mm )

    END IF

    RETURN (Vmm)

END FUNCTION

                                                                


#-------------------------------------------------

# ¼Æ¦r¤é´Ás_date¥[¤Wa_mm¤ë«áªº¦~¤ë RETURN:SMALLINT

# a_mm­Y¬°¥¿¼Æªí¥Ü©¹«á±Àºâa_mm¤ë,­Y¬°­t¼Æªí¥Ü©¹«e±Àºâ

# ex.8601,a_mm=3-->¦^¶Ç8604,­Ya_mm=-3-->¦^¶Ç8510

#-------------------------------------------------

FUNCTION ncku_add_ym(s_date, a_mm)

    DEFINE s_date SMALLINT

    DEFINE a_mm,s_yy,s_mm,s_dd,Vtt,Vyy,Vmm,Vdate SMALLINT

    IF  a_mm = 0 THEN

        RETURN (s_date)

    END IF

    LET s_yy = s_date / 100

    LET s_mm = s_date MOD 100

    IF  a_mm > 0 THEN

        LET Vtt = s_mm + a_mm

        LET Vyy = Vtt / 12

        IF  (Vtt MOD 12) = 0 THEN

            LET Vyy = Vyy - 1

        END IF

        LET Vmm = Vtt - Vyy * 12

        LET Vdate = (s_yy + Vyy)*100 + Vmm

        RETURN Vdate

    END IF 

    LET a_mm = a_mm * -1

    LET Vyy = a_mm / 12

    IF  (a_mm MOD 12) = 0 THEN

        LET Vyy = Vyy -1

    END IF 

    LET Vmm = a_mm - (Vyy * 12)

    IF  Vmm >= s_mm THEN

        LET Vdate = ((s_yy - Vyy - 1) * 100) + 12 + s_mm - Vmm

        RETURN Vdate

    ELSE

        LET Vdate = ((s_yy - Vyy ) * 100) + s_mm - Vmm

        RETURN Vdate

    END IF

END FUNCTION


#-------------------------------------------------

# ¼Æ¦r¤é´Ás_date¥[¤Wa_mm¤ë«áªº¤é´Á RETURN:INTEGER

# a_mm­Y¬°¥¿¼Æªí¥Ü©¹«á±Àºâa_mm¤ë,­Y¬°­t¼Æªí¥Ü©¹«e±Àºâ

# ex.860101,a_mm=3-->¦^¶Ç860401,­Ya_mm=-3-->¦^¶Ç851001

#-------------------------------------------------

FUNCTION IH_add_mm(s_date, a_mm)

    DEFINE s_date INTEGER

    DEFINE a_mm,s_yy,s_mm,s_dd,Vtt,Vyy,Vmm SMALLINT,Vdate INTEGER

    LET s_yy = s_date / 10000

    LET s_mm = (s_date - (s_yy * 10000)) / 100

    LET s_dd = s_date - (s_yy * 10000) - (s_mm * 100)

    IF  a_mm = 0 THEN

        RETURN (s_date)

    END IF

    IF  a_mm > 0 THEN

        LET Vtt = s_mm + a_mm

        LET Vyy = Vtt / 12

        IF  (Vtt MOD 12) = 0 THEN

            LET Vyy = Vyy - 1

        END IF

        LET Vmm = Vtt - Vyy * 12

        LET Vdate = (s_yy + Vyy)*10000 + (Vmm * 100) + s_dd

        RETURN Vdate

    END IF 

    LET a_mm = a_mm * -1

    LET Vyy = a_mm / 12

    IF  (a_mm MOD 12) = 0 THEN

        LET Vyy = Vyy -1

    END IF 

    LET Vmm = a_mm - (Vyy * 12)

    IF  Vmm >= s_mm THEN

        LET Vdate = ((s_yy - Vyy - 1) * 10000) + ((12 + s_mm - Vmm) * 100) + s_dd

        RETURN Vdate

    ELSE

        LET Vdate = ((s_yy - Vyy ) * 10000) + ((s_mm - Vmm) * 100) + s_dd

        RETURN Vdate

    END IF

END FUNCTION

#-------------------------------------------------

# ¼Æ¦r¤é´Ás_date¥[¤Wa_day¤Ñ«áªº¤é´Á RETURN:INTEGER

#-------------------------------------------------

FUNCTION IH_add_date(s_date, a_day)

    DEFINE s_date, a_day INTEGER

    DEFINE date2 DATE

    LET date2 = ih_int2date(s_date)

    LET date2 = date2 + a_day

    LET s_date = ih_date2int(date2)

    RETURN s_date

END FUNCTION


 

#-----------------------------------

# ±N¼Æ¦r«¬ºAÂର¤é´Á«¬ºA REUTRN:DATE

#-----------------------------------

FUNCTION IH_int2date(c_date)

    DEFINE c_date INTEGER

    DEFINE date2  DATE

    DEFINE yy,mm,dd SMALLINT

    IF  c_date < 1000000 THEN

     LET c_date = c_date + 19110000

    END IF

    LET yy = c_date / 10000

    LET mm = (c_date mod 10000) / 100

    LET dd = c_date mod 100

    LET date2 = MDY( mm, dd, yy)

    RETURN date2

END FUNCTION

 

#--------------------------------------

# ±N¤é´Á«¬ºAÂର¼Æ¦r«¬ºA RETURN:INTEGER

#--------------------------------------

FUNCTION IH_date2int(e_date)

    DEFINE e_date DATE

    DEFINE e_day  INTEGER

 

    LET e_day = YEAR(e_date) * 10000 + MONTH(e_date) * 100 + DAY(e_date)

    IF  e_day > 19000000 THEN

     LET e_day = e_day - 19110000

    END IF

    --RETURN ( YEAR(e_date) * 10000 + MONTH(e_date) * 100 + DAY(e_date) )

    --RETURN ( (YEAR(e_date)-1911) * 10000 + MONTH(e_date) * 100 + DAY(e_date) )

    RETURN e_day

 

END FUNCTION


#--------------------------------------

# ­pºâ¤é´Á¬°¬P´Á¤@¦Ü¬P´Á¤é RETURN:INTEGER

#--------------------------------------

FUNCTION ncku_int2weekday(e_day)

    DEFINE e_day      INTEGER

    RETURN (WEEKDAY(ih_int2date(e_day)))

END FUNCTION

#--------------------------------------

# ­pºâ¤é´Á¬°¬P´Á¤@¦Ü¬P´Á¤é¤¤¤å¦WºÙ RETURN:CHAR(2)

#--------------------------------------

FUNCTION ncku_int2weekname(e_day)

    DEFINE e_day      INTEGER

    CASE WEEKDAY(ih_int2date(e_day))

        WHEN 0 RETURN "¤é"

        WHEN 1 RETURN "¤@"

        WHEN 2 RETURN "¤G"

        WHEN 3 RETURN "¤T"

        WHEN 4 RETURN "¥|"

        WHEN 5 RETURN "¤­"

        WHEN 6 RETURN "¤»"

    END CASE

END FUNCTION


 

#---------------------------------------------

#  ¶Ç¦^¨â­Ó¤é´Á¬Û¥[¤§«áªº¤é´Á

#---------------------------------------------

FUNCTION IH_date_sum(idate1,idate2)

    DEFINE idate1,idate2     INTEGER

    DEFINE temp_date         INTEGER

    DEFINE return_date       INTEGER

    DEFINE dd_day            SMALLINT

    DEFINE yy1,mm1,dd1       SMALLINT

    DEFINE yy2,mm2,dd2       SMALLINT

    DEFINE yy3,mm3,dd3       SMALLINT

 

    LET yy1 = idate1 / 10000

    LET mm1 = (idate1 / 100) MOD 100

    LET dd1 = idate1 MOD 100

    LET yy2 = idate2 / 10000

    LET mm2 = (idate2 / 100) MOD 100

    LET dd2 = idate2 MOD 100

    LET yy3 = yy1 + yy2

    LET mm3 = mm1 + mm2

    LET dd3 = dd1 + dd2

    IF  mm3 > 12 THEN

        LET yy3 = yy3 + 1

        LET mm3 = mm3 - 12

    END IF

    LET dd_day = IH_monthday(yy3*100+mm3)

    IF  dd3 > dd_day THEN

        IF  mm3 = 12 THEN

            LET yy3 = yy3 + 1

            LET mm3 = 1

        ELSE

            LET mm3 = mm3 + 1

        END IF

        LET dd3 = dd3 - dd_day

        LET dd_day = IH_monthday(yy3*100+mm3)

        IF  dd3 > dd_day THEN

            IF  mm3 = 12 THEN

                LET yy3 = yy3 + 1

                LET mm3 = 1

            ELSE

                LET mm3 = mm3 + 1

            END IF

            LET dd3 = dd3 - dd_day

        END IF

    END IF

    LET return_date = yy3 * 10000 + mm3 * 100 + dd3

    RETURN return_date

END FUNCTION


#--------------------------------------

# ­pºâ¤é´Á¬°¬P´Á¤@¦Ü¬P´Á¤é RETURN:INTEGER

#--------------------------------------

FUNCTION IH_weekday(e_day)

    DEFINE e_day      INTEGER

    DEFINE e_yy       SMALLINT

    DEFINE e_mm       SMALLINT

    DEFINE e_dd       SMALLINT

    DEFINE e_weekday  SMALLINT

 

    LET e_yy = e_day / 10000 + 1911

    LET e_mm = (e_day / 100) MOD 100

    LET e_dd = e_day MOD 100

    RETURN (WEEKDAY(MDY(e_mm,e_dd,e_yy)))

END FUNCTION

#---------------------------------------------

#  ·í¤¤¤å¦r¦³½Ä½X®É

#---------------------------------------------

FUNCTION chinese_conflict(p_program)

    DEFINE p_program            CHAR(8)

    DEFINE p_user_name          CHAR(10)

    DEFINE p_heading            CHAR(30)

 

    SELECT prog_name

      INTO p_heading

      FROM progtab

     WHERE prog_no = p_program

 

    SELECT user_name

      INTO p_user_name

      FROM usertab

     WHERE user_id = (SELECT user

                        FROM SYSTABLES

                       WHERE TABNAME = "systables")

    RETURN p_heading,p_user_name

 

END FUNCTION

 


#---------------------------------

# ¾Ç®Õ¦WºÙ¦C¦L

# l_type  : ¯È±i¤j¤p 0:80¦æ 1:132¦æ

#--------------------------------

FUNCTION ih_print_comp(l_type)

    DEFINE l_title                  CHAR(80)

    DEFINE l_type, l_length         SMALLINT

    DEFINE li_len, li_pos, li_x     SMALLINT

    DEFINE l_out                    CHAR(400)

    LET l_title = '°ê¥ß¦¨¥\¤j¾Ç'

    IF  l_type = 0 THEN

        LET l_length = 80

    ELSE

        LET l_length = 136

    END IF

    LET l_out = "~ifmd0w1z1x12l6;"

    LET li_len = LENGTH(l_title)

    LET li_pos = l_length / 2 - li_len + LENGTH(l_out) + li_len * 12 / 112 --­pºâtitle°_©l¦ì¸m

    LET l_out = l_out[1,li_pos], '~w2; ', l_title CLIPPED, ' ~w1;'

    RETURN l_out CLIPPED

END FUNCTION


#---------------------------------

# ³øªítilte ¦Û°Ê³]©w ¦r¶Z

# l_title : ©ïÀY¦r¦ê

# l_length: ³Ì¤j¼e«×

# l_type  : ¯È±i¤j¤p 0:80¦æ 1:132¦æ

#--------------------------------

FUNCTION ih_print_head(l_title, l_length, l_type)

    DEFINE l_title                  CHAR(80)

    DEFINE l_type, l_length         SMALLINT

    DEFINE li_len, li_pos, li_x     SMALLINT

    DEFINE l_out                    CHAR(250)

    LET l_out = "~ifkw1z1l6"

    LET li_len = LENGTH(l_title)

    IF l_type = 0 THEN  -- 80¦æ¯È

        IF  l_length > 120 THEN

            LET l_out = l_out CLIPPED, 'd4'

        ELSE

            LET l_out = l_out CLIPPED, 'd0'

        END IF

        CASE

            WHEN l_length <= 62   LET li_x = 22

            WHEN l_length <= 65   LET li_x = 20

            WHEN l_length <= 68   LET li_x = 18

            WHEN l_length <= 72   LET li_x = 16

            WHEN l_length <= 76   LET li_x = 14

            WHEN l_length <= 80   LET li_x = 12

            WHEN l_length <= 84   LET li_x = 10

            WHEN l_length <= 90   LET li_x = 8

            WHEN l_length <= 96   LET li_x = 6

            WHEN l_length <= 102  LET li_x = 4

            WHEN l_length <= 110  LET li_x = 2

            WHEN l_length <= 120  LET li_x = 0

            WHEN l_length <= 130  LET li_x = 20

            WHEN l_length <= 137  LET li_x = 18

            WHEN l_length <= 143  LET li_x = 16

            WHEN l_length <= 151  LET li_x = 14

            WHEN l_length <= 160  LET li_x = 12

            WHEN l_length <= 168  LET li_x = 10

            WHEN l_length <= 180  LET li_x = 8

            WHEN l_length <= 192  LET li_x = 6

            WHEN l_length <= 204  LET li_x = 4

            WHEN l_length <= 220  LET li_x = 2

            WHEN l_length <= 240  LET li_x = 0

        END CASE

    ELSE -- 136¦æ¯È

        IF  l_length > 204 THEN

            LET l_out = l_out CLIPPED, 'd4'

        ELSE

            LET l_out = l_out CLIPPED, 'd0'

        END IF

        CASE

            WHEN l_length <= 106  LET li_x = 22

            WHEN l_length <= 111  LET li_x = 20

            WHEN l_length <= 116  LET li_x = 18

            WHEN l_length <= 122  LET li_x = 16

            WHEN l_length <= 128  LET li_x = 14

            WHEN l_length <= 136  LET li_x = 12

            WHEN l_length <= 144  LET li_x = 10

            WHEN l_length <= 153  LET li_x = 8

            WHEN l_length <= 163  LET li_x = 6

            WHEN l_length <= 174  LET li_x = 4

            WHEN l_length <= 188  LET li_x = 2

            WHEN l_length <= 204  LET li_x = 0

            WHEN l_length <= 222  LET li_x = 20

            WHEN l_length <= 233  LET li_x = 18

            WHEN l_length <= 244  LET li_x = 16

            WHEN l_length <= 256  LET li_x = 14

            WHEN l_length <= 272  LET li_x = 12

            WHEN l_length <= 288  LET li_x = 10

            WHEN l_length <= 306  LET li_x = 8

            WHEN l_length <= 326  LET li_x = 6

            WHEN l_length <= 348  LET li_x = 4

            WHEN l_length <= 376  LET li_x = 2

            WHEN l_length <= 408  LET li_x = 0

        END CASE

    END IF

    LET l_out = l_out CLIPPED, 'x', li_x USING "<<<&", ';'

    LET li_pos = l_length / 2 - li_len + LENGTH(l_out) + li_len * li_x / 112 --­pºâtitle°_©l¦ì¸m

    LET l_out = l_out CLIPPED, '¦C¦L¤é´Á:', sys_date USING "&&/&&/&&"

    LET l_out = l_out CLIPPED, '[', sys_program, ']'

    LET l_out = l_out[1,li_pos], '~w2u2; ', l_title CLIPPED, ' ~w1u1;'

    RETURN l_out CLIPPED

END FUNCTION


#------------------------------------------

# ¶Ç¦^¤@ªø«×¬° l_length ­«½Æ in_str ªº ¦r¦ê

------------------------------------------

FUNCTION ih_fill_str(in_str, l_length)

    DEFINE in_str        CHAR(10)

    DEFINE l_length, l_i, l_j SMALLINT

    DEFINE out_str       CHAR(400)

    LET out_str = ''

    LET l_i = l_length / LENGTH(in_str) + 1

    FOR l_j = 1 TO l_i

        LET out_str = out_str CLIPPED, in_str CLIPPED

    END FOR

    RETURN out_str[1,l_length]

END FUNCTION

#-------------------------------------------------------------------

#                     Åã ¥Ü µe ­± ©ï ÀY

#-------------------------------------------------------------------

FUNCTION disp_screen(V_row1,V_row2)

    DEFINE li_i,V_row1,V_row2 SMALLINT

 

    OPEN WINDOW w_user AT 1,3 WITH 3 ROWS, 19 COLUMNS

    LET sys_date=ih_date2int(TODAY)

    DISPLAY "¨Ï ¥Î ªÌ:",sys_user_name AT 1,2

    DISPLAY "¨t²Î®É¶¡:",sys_date USING "##/&&/&&" AT 2,2

    DISPLAY "µ{¦¡¦WºÙ:",sys_program   AT 3,2

    CALL curr_window("U")

    LET li_i = ( 66 - LENGTH(sys_heading) ) / 2 - 20

    IF li_i < 1 THEN

        LET li_i = 1

    END IF

    OPEN WINDOW w_menu AT 1,23 WITH 3 ROWS, 56 COLUMNS

    DISPLAY "¡¹ ¡¹ ", sys_heading CLIPPED, " ¡¹ ¡¹ " AT 3, li_i

         ATTRIBUTE(BOLD,UNDERLINE)

    OPEN WINDOW w_form AT V_row1,1 WITH V_row2 ROWS, 80 COLUMNS

         ATTRIBUTE(PROMPT LINE LAST)

    OPEN FORM form_option FROM sys_program

    DISPLAY FORM form_option

 -- ERROR "·í´å¼Ð¦b¤W¤è¥\¯à¿ï¾Ü®É,¥i«ö<Ctrl-F>Åã¥Ü§@·~»¡©ú"

END FUNCTION

#----------------------------------------------------------

#   CURRENT  WINDOW

#----------------------------------------------------------

FUNCTION curr_window(which)

    DEFINE  which   CHAR(1)

    CASE which

        WHEN "U"

             CURRENT WINDOW IS w_user

        WHEN "M"

             CURRENT WINDOW IS w_menu

        WHEN "F"

             CURRENT WINDOW IS w_form

    END CASE

END FUNCTION

 

FUNCTION curr_time(next_window)

    DEFINE next_window     CHAR(1)

    DEFINE now_time        DATETIME  HOUR TO SECOND

 

    CALL curr_window("U")

    LET now_time = CURRENT

    DISPLAY now_time AT 2,11

    CALL curr_window4(next_window)

 

END FUNCTION

 

FUNCTION sys_data_initial()

    LET  sys_date        = ih_date2int(TODAY)

    LET  sys_program     = ARG_VAL(0)

    LET  sys_permision   = UPSHIFT(ARG_VAL(1)) 

    LET  sys_user_ip     = ARG_VAL(2) 

    LET  sys_user_id     = ARG_VAL(3) 

    LET  Curr_Open_Form  = "0"

    CALL chinese_conflict(sys_program) RETURNING sys_heading, sys_user_name

END FUNCTION

 

FUNCTION valid_null(array_idx, array_size)

    DEFINE array_idx           SMALLINT,

           array_size          SMALLINT,

           next_fld            SMALLINT,

           last_key            SMALLINT

    LET last_key = FGL_LASTKEY()

    LET next_fld = (last_key = FGL_KEYVAL("right")) OR

                   (last_key = FGL_KEYVAL("return")) OR

                   (last_key = FGL_KEYVAL("tab")) OR

                   (last_key = FGL_KEYVAL("down"))

    IF  (array_idx >= array_size) THEN

        IF  next_fld THEN

            RETURN (FALSE)

        END IF

    ELSE -- IF  NOT next_fld THEN

        RETURN (FALSE)

#        END IF

    END IF

    RETURN (TRUE)

END FUNCTION

 


FUNCTION disp_screen4(V_row1,V_row2,V_row3,V_row4)

    DEFINE li_i,V_row1,V_row2,V_row3,V_row4 SMALLINT

 

    OPEN WINDOW w_user AT 1,3 WITH 3 ROWS, 19 COLUMNS

    LET sys_date=ih_date2int(TODAY)

    DISPLAY "¨Ï ¥Î ªÌ:",sys_user_name AT 1,2

    DISPLAY "¨t²Î¤é´Á:",sys_date USING "##/&&/&&" AT 2,2

    DISPLAY "µ{¦¡¦WºÙ:",sys_program   AT 3,2

    CALL curr_window("U")

    LET li_i = ( 66 - LENGTH(sys_heading) ) / 2 - 20

    IF li_i < 1 THEN

        LET li_i = 1

    END IF

    OPEN WINDOW w_menu AT 1,23 WITH 3 ROWS, 56 COLUMNS

    DISPLAY "¡¹ ¡¹ ", sys_heading CLIPPED, " ¡¹ ¡¹ " AT 3, li_i

         ATTRIBUTE(BOLD,UNDERLINE)

    OPEN WINDOW w_form AT V_row1,1 WITH V_row2 ROWS, 80 COLUMNS

         ATTRIBUTE(PROMPT LINE LAST)

    OPEN FORM form_option FROM sys_program

    DISPLAY FORM form_option

    OPEN WINDOW w_data AT V_row3,1 WITH V_row4 ROWS, 80 COLUMNS

         ATTRIBUTE(PROMPT LINE LAST)

    ERROR "·í´å¼Ð¦b¤W¤è¥\¯à¿ï¾Ü®É,¥i«ö<Ctrl-F>Åã¥Ü§@·~»¡©ú"

END FUNCTION

 

FUNCTION close_screen4()

 

    CLOSE WINDOW w_user

    CLOSE WINDOW w_menu

    CLOSE WINDOW w_form

    CLOSE WINDOW w_data

 

END FUNCTION

 

FUNCTION curr_window4(which)

    DEFINE  which   CHAR(1)

 

    CASE which

        WHEN "U"

             CURRENT WINDOW IS w_user

        WHEN "M"

             CURRENT WINDOW IS w_menu

        WHEN "F"

             CURRENT WINDOW IS w_form

        WHEN "D"

             CURRENT WINDOW IS w_data

    END CASE

 

END FUNCTION

 


FUNCTION curr_time4(next_window)

    DEFINE next_window     CHAR(1)

    DEFINE now_time        DATETIME  HOUR TO SECOND

 

    CALL curr_window4("U")

    LET now_time = CURRENT

    DISPLAY now_time AT 2,11

    CALL curr_window4(next_window)

 

END FUNCTION

 

FUNCTION curr_form3(next_form)  

    DEFINE next_form       CHAR(1)

 

    CALL curr_time("F")

    IF  Curr_Open_Form = "0" THEN

        IF  next_form != "0" THEN

            LET Curr_Open_Form = next_form

            LET data_window = sys_program,Curr_Open_Form

            OPEN FORM data_option FROM data_window

            DISPLAY FORM data_option

        END IF

    ELSE

        IF  next_form != Curr_Open_Form THEN

            IF  next_form  = "0" THEN

                CLOSE FORM data_option

                LET Curr_Open_Form = next_form

                INITIALIZE data_window TO NULL

                LET data_window = sys_program

                OPEN FORM data_option FROM data_window

                DISPLAY FORM data_option

            ELSE

                CLOSE FORM data_option

                LET Curr_Open_Form = next_form

                LET data_window = sys_program,Curr_Open_Form

                OPEN FORM data_option FROM data_window

                DISPLAY FORM data_option

            END IF

        END IF

    END IF

   

END FUNCTION

 


FUNCTION curr_form(next_form)  

    DEFINE next_form       CHAR(1)

 

    CALL curr_time4("D")

    IF  Curr_Open_Form = "0" THEN

        IF  next_form != "0" THEN

            LET Curr_Open_Form = next_form

            LET data_window = sys_program,Curr_Open_Form

            OPEN FORM data_option FROM data_window

            DISPLAY FORM data_option

        END IF

    ELSE IF  next_form != Curr_Open_Form THEN

             IF  next_form  = "0" THEN

                 CLOSE FORM data_option

             ELSE

                 CLOSE FORM data_option

                 LET Curr_Open_Form = next_form

                 LET data_window = sys_program,Curr_Open_Form

                 OPEN FORM data_option FROM data_window

                 DISPLAY FORM data_option

             END IF

         END IF

    END IF

   

END FUNCTION

 


FUNCTION ihtab(tab_name,io_ty)

    DEFINE tab_name         CHAR(60)

    DEFINE io_ty            CHAR(1)

    DEFINE cols             SMALLINT

    DEFINE col_name         CHAR(60)

    DEFINE n,i              SMALLINT

    DEFINE len              SMALLINT

    DEFINE str              CHAR(4000)

    DEFINE str1             CHAR(500)

    DEFINE str2             CHAR(500)

    DEFINE str3             CHAR(500)

    DEFINE str4             CHAR(500)

    DEFINE str5             CHAR(500)

    DEFINE str6             CHAR(500)

    INITIALIZE str,str1,str2,str3,str4,str5,str6 TO NULL

    SELECT ncols

      INTO cols

      FROM SYSTABLES

     WHERE tabname = tab_name

    IF  SQLCA.SQLCODE <> 0 THEN

        RETURN str1,str2,str3,str4,str5,str6

    END IF

    LET n = cols - 1

    CASE io_ty

        WHEN "I"

            LET str = " INSERT INTO ",tab_name CLIPPED ," VALUES("

        WHEN "U"

            LET str = "UPDATE ",tab_name CLIPPED," SET ("

            DECLARE p_cursor CURSOR FOR

             SELECT SYSCOLUMNS.colname,SYSCOLUMNS.colno

               FROM SYSCOLUMNS, SYSTABLES

              WHERE SYSCOLUMNS.tabid = SYSTABLES.tabid

                AND SYSTABLES.tabname = tab_name

              ORDER BY SYSCOLUMNS.colno

            FOREACH p_cursor INTO col_name,i

                LET str = str CLIPPED,col_name CLIPPED,","

            END FOREACH

            LET len = LENGTH(str)

            LET str[len,len] = ")"

            LET str = str CLIPPED," = ("

    END CASE

    FOR i = 1 TO n   -- table ¦@¦³ clos column_field

        LET str = str CLIPPED,"?,"

    END FOR

    LET str = str CLIPPED,"?)"

    LET str1 = str[1,500]

    LET str2 = str[501,1000]

    LET str3 = str[1001,1500]

    LET str4 = str[1501,2000]

    LET str5 = str[2001,2500]

    LET str6 = str[2501,3000]

    RETURN str1,str2,str3,str4,str5,str6

END FUNCTION


#---------------------------------------------------------------------

#                    ¸ß °Ý ¬O §_ ­n §R °£

#---------------------------------------------------------------------

FUNCTION ans()

    DEFINE ans1   CHAR(1)

        PROMPT "½T©w¶Ü (y/n)..." FOR CHAR ans1 HELP 0031

            IF  ( ans1 MATCHES "[Yy]" ) THEN

                PROMPT "¸ê®Æ±N³Q§R°£, ½T©w¶Ü (y/n)..." FOR CHAR ans1 HELP 0031

            END IF

        RETURN(ans1)

END FUNCTION

 

FUNCTION mess()

    LET msg[1]  = "©I¥s»²§U»¡©úªí½Ð«ö Ctrl-W, §@·~»¡©ú½Ð«ö Ctrl-F"

    LET msg[2]  = "°õ¦æ¤¤, ½Ðµy«á..."

    LET msg[3]  = "¸ê®Æ¬d¸ß¤¤, ½Ðµy­Ô..."

    LET msg[4]  = "©ñ±ó¬d¸ß°Ê§@"

    LET msg[5]  = "µL¦X¥G±ø¥ó¤§¸ê®Æ"

    LET msg[6]  = "µL¦X¥G³æÀY±ø¥ó¤§³æ¨­¸ê®Æ"

    LET msg[10] = "¸ê®Æ¿é¤J¿ù»~"

    LET msg[11] = "¸ê®Æ¿é¤J­«ÂÐ"

    LET msg[12] = "¦¹Äæ¦ì¤£¥iªÅ¥Õ"

    LET msg[13] = "¦³Äæ¦ì¸ê®Æ¿é¤J¿ù»~, ½Ð¬d®Ö"

    LET msg[20] = "·s¼W¤@µ§¸ê®Æ§¹¦¨"

    LET msg[21] = "·s¼W¤@±i¸ê®Æ§¹¦¨"

    LET msg[22] = "·s¼W¸ê®Æµ²§ô"

    LET msg[23] = "·s¼W¸ê®Æ¥¢±Ñ"

    LET msg[24] = "©ñ±ó·s¼W¸ê®Æ"

    LET msg[25] = "­×§ï¸ê®Æ§¹¦¨"

    LET msg[26] = "­×§ï¸ê®Æ¥¢±Ñ"

    LET msg[27] = "©ñ±ó¤w­×§ï¤§¤º®e"

    LET msg[28] = "¤w§R°£¸ê®Æ§¹¦¨"

    LET msg[29] = "§R°£¸ê®Æ¥¢±Ñ"

    LET msg[30] = "©ñ±ó§R°£°Ê§@"

    LET msg[31] = "³Q¿ï¥X¤§¸ê®Æ¤w¥þ³¡§R°£"

    LET msg[32] = "¥Ø«eµL¸ê®Æ³Q¿ï¥X"

    LET msg[33] = "¦@"

    LET msg[34] = "µ§¤§²Ä"

    LET msg[35] = "µ§"

    LET msg[36] = "±i¤§²Ä"

    LET msg[37] = "±i"

    LET msg[38] = "¥Ø«eÅã¥Üªº¸ê®Æ¬°²Ä¤@µ§"

    LET msg[39] = "¥Ø«eÅã¥Üªº¸ê®Æ¬°³Ì«á¤@µ§"

    LET msg[40] = "¥Ø«eÅã¥Üªº¸ê®Æ¬°²Ä¤@±i"

    LET msg[41] = "¥Ø«eÅã¥Üªº¸ê®Æ¬°³Ì«á¤@±i"

    LET msg[42] = "¥»¦æ¬O²Ä"

    LET msg[43] = "¦³"

    LET msg[44] = "«ö F3:¤U­¶, F4:¤W­¶, ¡õ:¤Uµ§, ¡ô:¤Wµ§, Esc:µ²§ô¬d¸ß"

    LET msg[45] = "«ö F3:¤U­¶, F4:¤W­¶, ¡õ:¤Uµ§, ¡ô:¤Wµ§, Esc:µ²§ô¿ï¾Ü"

    LET msg[46] = "¸ê®Æ¦@¦³"

    LET msg[47] = "¤w¶W¹L PROGRAM ARRAY ["

    LET msg[48] = "] ¤§­­¨î"

    LET msg[49] = "«ö F4:¤W­¶, F1:´¡¤J¤@µ§, Esc   :µ²§ô¿é¤J"

    LET msg[50] = "   F3:¤U­¶, F2:§R°£¤@µ§, Ctrl-C:©ñ±ó"

    LET msg[51] = "«ö Esc:µ²§ô³æÀY¿é¤J,°õ¦æ³æ¨­¿é¤J, Ctrl-C:©ñ±ó"

    LET msg[52] = "³Q¿ï¥X¤§¸ê®Æ¤w¥þ³¡­×§ï"

    LET msg[60] = "µL®Ä¤§¥N¸¹ "

    LET msg[61] = "½T©w¶Ü (y/n)..."

    LET msg[62] = "¸ê®Æ±N³Q§R°£, ½T©w¶Ü (y/n)..."

    LET msg[65] = "¹ï¤£°_ !! ±z¨S¦³Åv§Q¶i¤J¥»¨t²Î"

    LET msg[66] = "°ß¤@Áä¤w¦³¬Û¦P­È"

    LET msg[67] = "¥»µ{¦¡¤£´£¨Ñ¦¹¥\¯à  "

    LET msg[68] = "¦b±z¬d¸ß´Á¶¡,¥»µ§¸ê®Æ¤w³Q¥L¤H§R°£,½Ð­«·s¬d¸ß"

    LET msg[70] = "¨Ï¥ÎªÌ­n¨D¤¤Â_µ{¦¡°õ¦æ"

    LET msg[81] = "«ö F4:¤W­¶,  ¤è¦VÁä:Äæ¦ì¤§¶¡²¾°Ê"

    LET msg[82] = "   F3:¤U­¶,     Esc:µ²§ô¿é¤J,    Ctrl-C:©ñ±ó"

    LET msg[86] = "¹ï¤£°_ !! ±z¨S¦³Åv§Q°õ¦æ¥»¶µ¥Ø"

    LET msg[87] = "¤é´Á¿é¤J¿ù»~, ½Ð¦A½T»{ !! "

    LET msg[88] = "¦¹¥N¸¹¤£¦s¦b©ó¥N¸¹¥DÀÉ"

    LET msg[89] = "<Esc>µ²§ô¿é¤J, <Ctrl-C>©ñ±ó"

    LET msg[90] = "¿é¤J[?]¥i¶}µ¡¬d¸ß"

END FUNCTION

###########################################################

# °õ¦æ¥t¤@°¦µ{¦¡ ®Ú¾Ú¨Ï¥ÎªÌuid ¤Îµ{¦¡¥N½X progno §PÂ_Åv­­ #

###########################################################

FUNCTION run_prog(progno)

    DEFINE progno    CHAR(8),

           perma     CHAR(1),

           permi     CHAR(1),

           permm     CHAR(1),

           permd     CHAR(1),

           permp     CHAR(1),

           permc     CHAR(1),

           run_stm   CHAR(200)

    SELECT add_id, inq_id, mod_id, del_id, prt_id, cfm_id

      INTO perma, permi, permm, permd, permp, permc

      FROM permtab

     WHERE permtab.prog_no = progno

       AND user_id = sys_user_id

    IF  SQLCA.SQLCODE = 0 AND SQLCA.SQLERRD[3] > 0 THEN

        LET run_stm = progno CLIPPED, '.4ge ', ' ', perma, permi, permm, permd,

                  permp, permc, ' ', sys_user_ip CLIPPED, ' ', sys_user_id

        RUN(run_stm)

    ELSE

        ERROR sys_user_id, '¨S¦³Åv­­°õ¦æ', progno

    END IF

END FUNCTION


17-2¹º­±¤Á´«µ{¦¡½d¨Ò

#=====================================================================#

#  PRGFUN     : ¬ù¸u¤H­ûÁ~¸ê 

#  PRGNAME    : emp1113.4gl

#  USE TABLE  : demptab, emeptab, jensaltab                           #

#  AUTHOR-NAME: §õ©Ó»T                                                #

#  USE FORM   : emp1113.per, emp1113a.per, emp1113b.per, mis1200w.per #

#  DATE       : Aug 22, 2000                                           #

#=====================================================================#

 

DATABASE nckuabs

GLOBALS

    DEFINE sys_date         INTEGER

    DEFINE sys_program      CHAR(7)

    DEFINE sys_heading      CHAR(30)

    DEFINE sys_user_id      CHAR(7)

    DEFINE sys_user_ip      CHAR(20)

    DEFINE sys_user_name    CHAR(8)

    DEFINE sys_permision    CHAR(6)      #-- ¨Ï¥ÎÅv­­

                                              # 1.·s¼W

                                              # 2.¬d¸ß

                                              # 3.§ó¥¿

                                              # 4.·s¼W

                                              # 5.¦Lªí

#----------------

#  work area

#----------------

    DEFINE prepare_clause   CHAR(1000)

    DEFINE construct_clause CHAR(400)

    DEFINE p_buffer         CHAR(256)

    DEFINE win_stm          CHAR(800)

    DEFINE commit_sw        CHAR(1)

    DEFINE answer           CHAR(1)

    DEFINE array_msg        CHAR(70)

    DEFINE p_salary         INTEGER

    DEFINE pa_curr          SMALLINT

    DEFINE sa_curr          SMALLINT

    DEFINE pa_count         SMALLINT

    DEFINE period1,period2  INTEGER

    DEFINE arr_cnt          SMALLINT

    DEFINE i,j              SMALLINT

    DEFINE p_ymd            INTEGER

    DEFINE q_ymd            INTEGER

    DEFINE p_ym             SMALLINT

    DEFINE q_ym             SMALLINT

    DEFINE dd1              SMALLINT

    DEFINE dd2              SMALLINT

    DEFINE ratio            LIKE jensaltab.ratio

#----------------

#  i-o area

#----------------

    DEFINE p_jensaltab          RECORD LIKE jensaltab.*

    DEFINE p_demptab            RECORD LIKE demptab.*

    DEFINE p_st  ARRAY[2000] OF RECORD

                  mark        CHAR(1),

                  idno        LIKE demptab.idno,

                  emp_name    LIKE demptab.emp_name,

                  acct_no     LIKE demptab.acct_no,

                  date_beg    LIKE demptab.date_beg,

                  word        CHAR(2),

                  date_end    LIKE demptab.date_end,

                  salary      LIKE demptab.salary,

                  yymm        LIKE jensaltab.yymm,

                  o_salary    LIKE jensaltab.salary,

                  upddate     LIKE demptab.upddate

    END RECORD

END GLOBALS                               

 

#####################################################

#   main program

#####################################################

MAIN

 

    DEFER    INTERRUPT

    SET      LOCK      MODE  TO  WAIT

    WHENEVER ERROR     STOP

    OPTIONS  ERROR     LINE  LAST

    CALL data_initial()

    CALL disp_screen(5,19)

    CALL main_menu()

    CALL close_screen()

    CLEAR SCREEN

 

END MAIN

 

FUNCTION close_screen()

 

    CLOSE WINDOW w_user

    CLOSE WINDOW w_menu

    CLOSE WINDOW w_form

 

END FUNCTION

 

FUNCTION data_initial()

    CALL sys_data_initial()

END FUNCTION

 


FUNCTION main_menu()

 

    MENU "¬ù¸u¤H­ûÁ~¸ê"

         BEFORE MENU

          IF  INT_FLAG THEN

          LET INT_FLAG = FALSE

             END IF

             CALL curr_time("M")

         COMMAND "1.¾ã¤ë§@·~"

          CALL curr_form3("0")

             CALL f_month(1)

             CALL curr_time("M")

 

         COMMAND "2.¥¼º¡¤@­Ó¤ë§@·~"

          CALL curr_form3("b")

             CALL f_month(2)

             CALL curr_time("M")

             CALL curr_time("M")

 

         COMMAND "0.µ²§ô"

                EXIT MENU

    END MENU

END FUNCTION

 

FUNCTION f_month(which)

    DEFINE which    SMALLINT

 

    IF  which = 1 THEN

        INPUT BY NAME period1,period2

            AFTER FIELD period1

                IF  period1 IS NULL THEN

                    ERROR "®ÖÁ~¶}©l¦~¤ë¤£¥iªÅ¥Õ"

                    NEXT FIELD period1

                ELSE IF  NOT ih_is_ym(period1) THEN

                         ERROR "®ÖÁ~¶}©l¦~¤ë¦³»~"

                         NEXT FIELD period1

                     END IF

                END IF

                LET p_ym = period1

                LET period2 = period1

                DISPLAY period2 TO FORMONLY.period2

            AFTER FIELD period2

                IF  period2 IS NULL THEN

                    ERROR "®ÖÁ~µ²§ô¦~¤ë¤£¥iªÅ¥Õ"

                    NEXT FIELD period2

                ELSE IF  NOT ih_is_ym(period2) THEN

                         ERROR "®ÖÁ~µ²§ô¦~¤ë¦³»~"

                         NEXT FIELD period2

                     END IF

                END IF

                LET q_ym = period2

                LET ratio = "¤@¤ë"

                IF  p_ym > q_ym THEN

                    ERROR "®ÖÁ~¶}©l¦~¤ë¤£¥i¤j©ó®ÖÁ~µ²§ô¦~¤ë"

                    NEXT FIELD period1

                END IF

          ON KEY(INTERRUPT)

             EXIT INPUT

        END INPUT

    ELSE

        INPUT BY NAME period1,period2

            AFTER FIELD period1

                IF  period1 IS NULL THEN

                    ERROR "®ÖÁ~¶}©l´Á¶¡¤£¥iªÅ¥Õ"

                    NEXT FIELD period1

                ELSE IF  NOT ih_is_date(period1) THEN

                         ERROR "®ÖÁ~¶}©l´Á¶¡¦³»~"

                         NEXT FIELD period1

                     END IF

                END IF

                LET p_ym = period1 / 100

            AFTER FIELD period2

                IF  period2 IS NULL THEN

                    ERROR "®ÖÁ~µ²§ô´Á¶¡¤£¥iªÅ¥Õ"

                    NEXT FIELD period2

                ELSE IF  NOT ih_is_date(period2) THEN

                         ERROR "®ÖÁ~µ²§ô´Á¶¡¦³»~"

                         NEXT FIELD period2

                     END IF

                END IF

                IF  period1 > period2 THEN

                    ERROR "®ÖÁ~¶}©l¦~¤ë¤£¥i¤j©ó®ÖÁ~µ²§ô¦~¤ë"

                    NEXT FIELD period1

                END IF

                LET q_ym = period2 / 100

                IF  p_ym <> q_ym THEN

                    ERROR "®ÖÁ~¦~¤ë¤£¥i¯}¤ë...."

                    NEXT FIELD period1

                END IF

                IF  period1 > period2 THEN

                    ERROR "®ÖÁ~¶}©l¤é´Á¤£¥i¤j©ó®ÖÁ~µ²§ô¤é´Á"

                    NEXT FIELD period1

                END IF

                LET dd1 = IH_diff2date(period1,period2) + 1

                LET dd2 = IH_monthday(period1/100)

                LET ratio = dd1 USING "##","/",dd2 USING "##"

                DISPLAY ratio TO jensaltab.ratio

                IF  dd1 = dd2 THEN

                    ERROR "½Ð¥H¾ã¤ë§@·~³B²z...."

                    NEXT FIELD period1

                END IF

          ON KEY(INTERRUPT)

             EXIT INPUT

        END INPUT

    END IF

    IF  INT_FLAG THEN

        LET INT_FLAG = FALSE

        RETURN

    END IF

    CONSTRUCT BY NAME construct_clause ON demptab.acct_no,

                                          demptab.tran_code,

                                          demptab.leader,

                                          demptab.dept_code,

                                          demptab.dept_name,

                                          demptab.idno,

                                          demptab.emp_name

                                          ATTRIBUTE(REVERSE)

        BEFORE FIELD dept_code

            MESSAGE " ¿é¤J ? ¶}µøµ¡,¿é¤J§¹²¦«ö ESC Áä½T»{"

            INITIALIZE p_buffer TO NULL

            LET win_stm = "SELECT dept_code,dept_name,' '",

                          "  FROM deptab",

                          " ORDER BY 1"

        AFTER FIELD dept_code

            MESSAGE " "

            LET p_buffer = GET_FLDBUF(dept_code)

            IF  p_buffer= '?' THEN

                CALL view_window(2,5,2,win_stm,"mis1200w",0)

                    RETURNING p_demptab.dept_code,p_demptab.dept_name

                IF  p_demptab.dept_code IS NOT NULL THEN

                    DISPLAY BY NAME p_demptab.dept_code

                ELSE

                    NEXT FIELD demptab.dept_code

                END IF

                DISPLAY BY NAME p_demptab.dept_name

            END IF

    END CONSTRUCT

    IF  INT_FLAG  THEN

        LET INT_FLAG = FALSE

        RETURN

    END IF

 

    CALL curr_form3("a")

    FOR i = 1 TO 10

        CLEAR s_dispitem[i].*

    END FOR

 

    LET prepare_clause = " SELECT * ",

                         "   FROM demptab ",

                         "  WHERE ", construct_clause CLIPPED,

                         "    AND plan_over = '0'",

                         "  ORDER BY dept_code,idno "

    PREPARE pre_update FROM prepare_clause

    DECLARE p_cursor CURSOR FOR pre_update

 

    IF  INT_FLAG  THEN

        ERROR"¨ú®ø"

        LET INT_FLAG = FALSE

        RETURN

    END IF

 

    LET arr_cnt = 1

 

    FOREACH p_cursor INTO p_demptab.*

        FOR i = 0 TO ncku_diff2ym(p_ym,q_ym)

            LET p_st[arr_cnt].idno = p_demptab.idno

            LET p_st[arr_cnt].emp_name = p_demptab.emp_name

            LET p_st[arr_cnt].acct_no = p_demptab.acct_no

            LET p_st[arr_cnt].date_beg = p_demptab.date_beg

            LET p_st[arr_cnt].date_end = p_demptab.date_end

            IF  which = 1 THEN

                LET p_st[arr_cnt].salary = p_demptab.salary

            ELSE

                LET p_st[arr_cnt].salary = p_demptab.salary * dd1 / dd2

                                  + 0.5

            END IF

            LET p_st[arr_cnt].upddate = sys_date

            LET p_st[arr_cnt].yymm = ncku_add_ym(p_ym,i)

            SELECT salary

              INTO p_st[arr_cnt].o_salary

              FROM jensaltab

             WHERE idno = p_st[arr_cnt].idno

               AND acct_no = p_st[arr_cnt].acct_no

               AND yymm = p_st[arr_cnt].yymm

            IF  SQLCA.SQLCODE = 0 THEN

                LET p_st[arr_cnt].mark = "*"

            ELSE

                INITIALIZE p_st[arr_cnt].o_salary TO NULL

                LET p_st[arr_cnt].mark = " "

            END IF

            LET arr_cnt = arr_cnt + 1

            IF  arr_cnt > 2000 THEN

                ERROR "¨t²Î¶W¹L 2000 µ§..½Ð³qª¾¹qºâ¤¤¤ß"

                EXIT FOREACH

            END IF

            IF  INT_FLAG THEN

                EXIT FOREACH

            END IF

        END FOR

    END FOREACH

    IF  INT_FLAG THEN

        LET INT_FLAG = FALSE

        ERROR "¨ú®ø...."

        RETURN

    END IF

 

    CALL SET_COUNT(arr_cnt - 1)

    INITIALIZE array_msg TO NULL

    LET array_msg = "F2:§R°£¤@µ§ F3:¤U­¶ F4:¤W­¶  ESC:½T»{ CTRL-C ¨ú®ø"

    DISPLAY array_msg CLIPPED AT 1,2 ATTRIBUTE(BLINK,REVERSE)

    INPUT ARRAY p_st WITHOUT DEFAULTS FROM s_dispitem.*

         BEFORE INSERT

             LET sa_curr  = SCR_LINE()

             CLEAR s_dispitem[sa_curr].*

   

         BEFORE ROW

             LET sa_curr = SCR_LINE()

             LET pa_curr = ARR_CURR()

             LET arr_cnt = ARR_COUNT()

             CALL mark_data(pa_curr)

         AFTER FIELD salary

             IF  NOT (FGL_LASTKEY() = FGL_KEYVAL("accept")) THEN

                 IF  p_st[pa_curr].salary IS NULL THEN

                     IF  NOT (valid_null(pa_curr,arr_cnt) AND

                         FGL_LASTKEY() = FGL_KEYVAL("up")) THEN

                         ERROR "Á~¸ê¤£¥iªÅ¥Õ"

                         NEXT FIELD salary

                     END IF

                 ELSE

                     SELECT salary 

                       INTO p_salary

                       FROM demptab

                      WHERE idno = p_st[pa_curr].idno

                        AND acct_no = p_st[pa_curr].acct_no

                     IF  p_st[pa_curr].salary > p_salary THEN

                         ERROR "Á~¸ê¤£¥i¤j©ó",p_salary

                         NEXT FIELD salary

                     END IF

                 END IF

             END IF

             CALL mark_data(0)

         ON KEY (INSERT)

             CONTINUE INPUT

         AFTER INPUT

            IF  p_st[pa_curr].salary IS NULL THEN

                ERROR "Á~¸ê¤£¥iªÅ¥Õ"

                CONTINUE INPUT

            END IF

            OPEN WINDOW w1 AT 21,31 WITH 1 ROWS, 20 COLUMNS ATTRIBUTES (BORDER,REVERSE)

                PROMPT "½T»{ ? ( Y/N ) " FOR  CHAR  answer

            CLOSE WINDOW w1

            IF  answer MATCHES  "[yY]" THEN

                EXIT INPUT

            ELSE

                CONTINUE INPUT

            END IF

        ON KEY(INTERRUPT)

            OPEN WINDOW w2 AT 21,31 WITH 1 ROWS, 20 COLUMNS ATTRIBUTES (BORDER,REVERSE)

                PROMPT "¨ú®ø½T»{ ? ( Y/N ) " FOR  CHAR  answer

            CLOSE WINDOW w2

            IF  answer MATCHES  "[yY]" THEN

                EXIT INPUT

            ELSE

                LET INT_FLAG = FALSE

                CONTINUE INPUT

            END IF

    END INPUT

    IF  INT_FLAG THEN

        LET INT_FLAG = FALSE

        RETURN

    END IF

 

    BEGIN WORK

    LET commit_sw = "Y"

    CALL replace_data(which)

    IF  commit_sw = "Y" THEN

        ERROR "­×§ï¦¨¥\!!"

        COMMIT WORK

    ELSE

        ERROR "­×§ï¥¢±Ñ,¨t²Î¤£§@¥ô¦ó­×§ï ...."

        ROLLBACK WORK

    END IF

END FUNCTION

 


FUNCTION replace_data(which)

    DEFINE which    SMALLINT

 

    LET pa_count = ARR_COUNT()

 

    FOR i = 1 TO pa_count

        IF  p_st[i].salary IS NULL THEN

            CONTINUE FOR

        ELSE

            DELETE FROM jensaltab

             WHERE idno = p_st[i].idno

               AND acct_no = p_st[i].acct_no

               AND yymm = p_st[i].yymm

            SELECT dept_code,dept_name,leader

              INTO p_jensaltab.dept_code,

                   p_jensaltab.dept_name,

                   p_jensaltab.leader

              FROM demptab

             WHERE idno = p_st[i].idno

               AND acct_no = p_st[i].acct_no

            LET p_jensaltab.emp_name = p_st[i].emp_name

            LET p_jensaltab.idno = p_st[i].idno

            LET p_jensaltab.acct_no = p_st[i].acct_no

            LET p_jensaltab.yymm = p_st[i].yymm

            LET p_jensaltab.salary = p_st[i].salary

            LET p_jensaltab.salary_date = sys_date

            LET p_jensaltab.ratio = ratio

            LET p_jensaltab.upduser = sys_user_name

            LET p_jensaltab.updtime = TIME

            IF  which = 2 THEN

                LET p_jensaltab.date_beg = period1

                LET p_jensaltab.date_end = period2

            ELSE

                LET p_jensaltab.date_beg = p_jensaltab.yymm * 100 + 1

                LET p_jensaltab.date_end = p_jensaltab.yymm * 100

                                         + IH_monthday(p_jensaltab.yymm)

            END IF

            INSERT INTO jensaltab VALUES(p_jensaltab.*)

            IF  NOT(SQLCA.SQLCODE = 0 AND SQLCA.SQLERRD[3] > 0) THEN

                LET commit_sw = "N"

                EXIT FOR

            END IF

        END IF

    END FOR

END FUNCTION

 


FUNCTION mark_data(row_no)

    DEFINE row_no          SMALLINT

    DEFINE i,j,k,l,m,n     SMALLINT

    LET j = ARR_CURR()

    LET k = SCR_LINE()

    LET pa_curr = ARR_CURR()

    LET l = j - k + 1

    LET m = 1

    FOR i = l TO ARR_COUNT()

        IF  m <= 10 THEN

            LET p_st[i].word = "¦Ü"

            IF  p_st[i].mark = "*" THEN

                IF  i = row_no THEN

                    DISPLAY p_st[i].* TO s_dispitem[m].* ATTRIBUTE(REVERSE)

                ELSE

                    DISPLAY p_st[i].* TO s_dispitem[m].*

                    DISPLAY p_st[i].mark TO s_dispitem[m].mark ATTRIBUTE(REVERSE)

                END IF

                IF  p_st[i].salary <> p_st[i].o_salary THEN

                    DISPLAY p_st[i].o_salary TO s_dispitem[m].o_salary ATTRIBUTE(REVERSE,BLINK)

                ELSE

                    DISPLAY p_st[i].o_salary TO s_dispitem[m].o_salary ATTRIBUTE(REVERSE)

                END IF

            ELSE

                DISPLAY p_st[i].* TO s_dispitem[m].*

            END IF

        END IF

        LET m = m + 1

    END FOR

END FUNCTION

 


emp1113.per

 

DATABASE nckuabs

SCREEN

{

 

 ®ÖÁ~´Á¶¡:[f01 ] ¦Ü [f02 ]

 

 ­pµe½s¸¹:[f03    ]  

 

 ±M­Ý¥ô§O:[a]  

 

 ¥D «ù ¤H:[f04       ]  

 

 ³¡ªù¥N¸¹:[f05     ][f06                         ]

 

 ¨­¤ÀÃÒ¸¹:[f07       ]

 

 ©m    ¦W:[f08       ]

 

}

END

 

TABLES

demptab

ATTRIBUTES

f01  = FORMONLY.period1     ,AUTONEXT;

f02  = FORMONLY.period2     ,AUTONEXT;

f03  = demptab.acct_no      ,UPSHIFT,AUTONEXT;

f04  = demptab.leader       ,AUTONEXT;

f05  = demptab.dept_code    ,AUTONEXT;

f06  = demptab.dept_name    ,NOENTRY;

f07  = demptab.idno, UPSHIFT,AUTONEXT;

f08  = demptab.emp_name     ,AUTONEXT;

a    = demptab.tran_code    ,COMMENTS="1.±M¥ô 2.­Ý¥ô 3.¯S®× 4.°òª÷·|"

                            ,INCLUDE=("1" TO "4")  ,AUTONEXT;

END


emp1113a.per

DATABASE nckuabs

SCREEN

{

                        ­pµe                           ®ÖÁ~ Áä¤J¤é   

   ¨­¥÷ÃÒ¸¹   ©m¦W      ½s¸¹  ¥»¦¸¸u´Á          Á~¸ê   ¤ë¥÷

   ===============================================================

[b|f01       |f02     |f03    |f04   |c |f04b  |F05   |F06 |a     |F07   ]

[b|f01       |f02     |f03    |f04   |c |f04b  |F05   |F06 |a     |F07   ]

[b|f01       |f02     |f03    |f04   |c |f04b  |F05   |F06 |a     |F07   ]

[b|f01       |f02     |f03    |f04   |c |f04b  |F05   |F06 |a     |F07   ]

[b|f01       |f02     |f03    |f04   |c |f04b  |F05   |F06 |a     |F07   ]

[b|f01       |f02     |f03    |f04   |c |f04b  |F05   |F06 |a     |F07   ]

[b|f01       |f02     |f03    |f04   |c |f04b  |F05   |F06 |a     |F07   ]

[b|f01       |f02     |f03    |f04   |c |f04b  |F05   |F06 |a     |F07   ]

[b|f01       |f02     |f03    |f04   |c |f04b  |F05   |F06 |a     |F07   ]

[b|f01       |f02     |f03    |f04   |c |f04b  |F05   |F06 |a     |F07   ]

 

}

END

 

TABLES

demptab,jensaltab           

ATTRIBUTES

b   = FORMONLY.mark        ,NOENTRY;

f01 = demptab.idno         ,NOENTRY;

f02 = demptab.emp_name     ,NOENTRY;

f03 = demptab.acct_no      ,NOENTRY;

f04 = demptab.date_beg     ,NOENTRY;

c   = FORMONLY.word        ,NOENTRY;

f04b= demptab.date_end     ,NOENTRY;

f05 = demptab.salary       ,COLOR=RED UNDERLINE ,AUTONEXT;

f06 = jensaltab.yymm       ,NOENTRY;

f07 = FORMONLY.o_salary    ,NOENTRY,

                    COLOR = RED REVERSE WHERE F07 IS NOT NULL ;

a   = demptab.upddate      ,NOENTRY;

INSTRUCTIONS

DELIMITERS "  "

     SCREEN RECORD s_dispitem[10] (mark THRU upddate)

END

 


emp1113b.per

DATABASE nckuabs

SCREEN

{

 

 ®ÖÁ~´Á¶¡:[f01   ] ¦Ü [f02   ]  ¤ä»â [f03  ]¤ë

 

 ­pµe½s¸¹:[f04   ]  

 

 ±M­Ý¥ô§O:[a]  

 

 ¥D «ù ¤H:[f09       ]  

 

 ³¡ªù¥N¸¹:[f05     ][f06                         ]

 

 ¨­¤ÀÃÒ¸¹:[f07       ]

 

 ©m    ¦W:[f08       ]

 

}

END

 

TABLES

demptab,jensaltab

ATTRIBUTES

f01  = FORMONLY.period1     ,AUTONEXT;

f02  = FORMONLY.period2     ,AUTONEXT;

f03  = jensaltab.ratio      ,NOENTRY,

                    COLOR = RED REVERSE WHERE f03 IS NOT NULL ;

f04  = demptab.acct_no,UPSHIFT,AUTONEXT;

f05  = demptab.dept_code    ,AUTONEXT;

f06  = demptab.dept_name    ,NOENTRY;

f07  = demptab.idno, UPSHIFT,AUTONEXT;

f08  = demptab.emp_name     ,AUTONEXT;

f09  = demptab.leader       ,AUTONEXT;

a    = demptab.tran_code    ,COMMENTS="1.±M¥ô 2.­Ý¥ô 3.¯S®× 4.°òª÷·|"

                            ,INCLUDE=("1" TO "4")  ,AUTONEXT;

END


17-3°}¦C¤Î¹º­±¤Á´«µ{¦¡½d¨Ò

#=====================================================================#

#  PRGFUN     : ¾ºÙÁ~¯Åªí³]©w

#  USE TABLE  : posgradetab, sranktab, postab                         #

#  AUTHOR-NAME: §õ©Ó»T                                                #

#  USE FORM   : psn1327.per, psn1327a.per, psn1327b.per, mis1200w.per #

#  DATE       : Jun 7, 2000                                           #

#=====================================================================#

 

DATABASE payroll

GLOBALS

 

#----------------

#  system area

#----------------

    DEFINE sys_program      CHAR(7)

    DEFINE sys_heading      CHAR(20)

    DEFINE sys_user_name    CHAR(8)   

    DEFINE sys_permision    CHAR(5)   # ¨Ï¥ÎÅv­­  

                                           # 1.·s¼W

                                           # 2.¬d¸ß

                                           # 3.§ó¥¿

                                           # 4.·s¼W

                                           # 5.¦Lªí

    DEFINE sys_ip           CHAR(15)   

#----------------

#  work area

#----------------

    DEFINE p_buffer         CHAR(256)

    DEFINE construct_clause CHAR(400)

    DEFINE pre_stm          CHAR(2000)

    DEFINE construct_stm    CHAR(256)

    DEFINE p_pos_code       LIKE posgradetab.pos_code

    DEFINE p_pos_name       LIKE posgradetab.pos_name

    DEFINE p_payrank        LIKE posgradetab.payrank

    DEFINE p_level          LIKE posgradetab.level

    DEFINE commit_sw        CHAR(1)

    DEFINE answer           CHAR(1)

    DEFINE array_msg        CHAR(70)

    DEFINE pa_curr          SMALLINT

    DEFINE sa_curr          SMALLINT

    DEFINE pa_count         SMALLINT

    DEFINE Is_dup           CHAR(1)

    DEFINE Insert_Flag      CHAR(1)

    DEFINE win_stm          CHAR(400)

    DEFINE win_rank         CHAR(400)

    DEFINE arr_cnt          SMALLINT

    DEFINE p_count          SMALLINT

    DEFINE i,j,Is_Open      SMALLINT

#----------------

#  i-o area

#----------------

    DEFINE p_postab             RECORD LIKE postab.*

    DEFINE p_sranktab           RECORD LIKE sranktab.*

    DEFINE p_posgradetab        RECORD LIKE posgradetab.*

    DEFINE p_st  ARRAY[2000] OF RECORD LIKE posgradetab.*

    DEFINE q_st  ARRAY[50] OF RECORD

                  payrank   LIKE posgradetab.payrank,

                  rank_name LIKE posgradetab.rank_name,

                  level     LIKE posgradetab.level

    END RECORD

END GLOBALS                               

 

#####################################################

#   main fmlyram

#####################################################

MAIN

 

    DEFER    INTERRUPT

    SET      LOCK      MODE  TO  WAIT

    WHENEVER ERROR     STOP

    OPTIONS  ERROR     LINE  LAST

    CALL data_initial()

    CALL disp_screen(5,19)

    CALL main_menu()

    CALL close_screen()

    CLEAR SCREEN

 

END MAIN

 

FUNCTION close_screen()

 

    CLOSE WINDOW w_user

    CLOSE WINDOW w_menu

    CLOSE WINDOW w_form

 

END FUNCTION

 

FUNCTION data_initial()

    CALL sys_data_initial()

    INITIALIZE array_msg TO NULL

    IF  sys_permision[1,1] != "Y"  THEN

        OPTIONS INSERT KEY F33

    ELSE

        LET array_msg = array_msg CLIPPED,"F1:´¡¤J¤@µ§"

    END IF

    IF  sys_permision[4,4] != "Y"  THEN

        OPTIONS DELETE KEY F34

    ELSE

        LET array_msg = array_msg CLIPPED," F2:§R°£¤@µ§"

    END IF

    LET array_msg = array_msg CLIPPED," F3:¤U­¶ F4:¤W­¶"

END FUNCTION

 


FUNCTION main_menu()

 

    MENU "¾ºÙÁ~¯Åªí³]©w"

         BEFORE MENU

          IF  INT_FLAG THEN

          LET INT_FLAG = FALSE

             END IF

             HIDE OPTION "3.±ý½Æ»s¨ì¾ºÙ"

             CALL curr_time("M")

         COMMAND "1.ºûÅ@"

          CALL curr_form3("0")

             CALL f_modify()

             HIDE OPTION "3.±ý½Æ»s¨ì¾ºÙ"

             CALL curr_time("M")

 

         COMMAND "2.½Æ»s¾ºÙ¨Ó·½"

          CALL curr_form3("a")

             CALL f_copy()

             IF  arr_cnt = 1 THEN

                 HIDE OPTION "3.±ý½Æ»s¨ì¾ºÙ"

             ELSE

                 SHOW OPTION "3.±ý½Æ»s¨ì¾ºÙ"

                 NEXT OPTION "3.±ý½Æ»s¨ì¾ºÙ"

             END IF

             CALL curr_time("M")

 

         COMMAND "3.±ý½Æ»s¨ì¾ºÙ"

          CALL curr_form3("b")

             CALL f_replace()

             HIDE OPTION "3.±ý½Æ»s¨ì¾ºÙ"

             CALL curr_time("M")

         COMMAND "0.µ²§ô"

                EXIT MENU

    END MENU

END FUNCTION

 


FUNCTION f_modify() -- ºûÅ@¥\¯à

    DEFINE arr_cnt       SMALLINT

 

    FOR i = 1 TO 10

        CLEAR s_dispitem[i].*

    END FOR

    FOR i = 1 TO 2000

        INITIALIZE p_st[i].* TO NULL

    END FOR

 

    LET INT_FLAG = FALSE

    DECLARE p_cursor CURSOR FOR

     SELECT *

       FROM posgradetab

      ORDER BY pos_code,level

 

    IF  INT_FLAG  THEN

        ERROR"¨ú®ø"

        LET INT_FLAG = FALSE

     -- ¥[  LET INT_FLAG = FALSE ©óreturn «e, not «á.

        RETURN

    END IF

 

    LET arr_cnt = 1

 

    FOREACH p_cursor INTO p_st[arr_cnt].*

        LET arr_cnt = arr_cnt + 1

        IF  arr_cnt > 2000 THEN

            EXIT FOREACH

        END IF

    END FOREACH

-- µù: array ­n¥Îset_count

    CALL SET_COUNT(arr_cnt - 1)

    INITIALIZE array_msg TO NULL

 

-- µù: WHEN YOU DON'T HAVE MODIFY RIGHT, WE USE DISPLAY ARRAY INSTEAD OF INPUT ARRAY !! IT MEANS CAN SEE ONLY , CAN'T MODIFY IT !! 

 

IF  sys_permision[3,3] = "N" THEN

        LET array_msg = array_msg CLIPPED," F3:¤U­¶ F4:¤W­¶"

        DISPLAY array_msg CLIPPED AT 17,2 ATTRIBUTE(BLINK,REVERSE)

        DISPLAY ARRAY p_st TO s_dispitem.*

    ELSE

        IF  sys_permision[1,1] != "Y"  THEN

            OPTIONS INSERT KEY F33

        ELSE

            LET array_msg = array_msg CLIPPED,"F1:´¡¤J¤@µ§"

        END IF

        IF  sys_permision[4,4] != "Y"  THEN

            OPTIONS DELETE KEY F34

        ELSE

            LET array_msg = array_msg CLIPPED," F2:§R°£¤@µ§"

        END IF

        LET array_msg = array_msg CLIPPED," F3:¤U­¶ F4:¤W­¶"

        LET array_msg = "F1:´¡¤J¤@µ§ F2:§R°£¤@µ§ F3:¤U­¶ F4:¤W­¶  ESC:½T»{ CTRL-C ¨ú®ø"

        DISPLAY array_msg CLIPPED AT 1,2 ATTRIBUTE(BLINK,REVERSE)

        LET Is_Open = FALSE

        INPUT ARRAY p_st WITHOUT DEFAULTS FROM s_dispitem.*

 

            BEFORE INSERT

                LET sa_curr  = SCR_LINE()

                CLEAR s_dispitem[sa_curr].*

   

            BEFORE ROW

                LET sa_curr = SCR_LINE()

                LET pa_curr = ARR_CURR()

                LET arr_cnt = ARR_COUNT()

   

            AFTER FIELD pos_code

                IF  NOT (FGL_LASTKEY() = FGL_KEYVAL("accept")) THEN

                    IF  p_st[pa_curr].pos_code IS NULL THEN

                        IF  NOT (valid_null(pa_curr,arr_cnt) AND

                  FGL_LASTKEY() = FGL_KEYVAL("up")) THEN

                            ERROR "Á~¸ê¾ºÙ¥N½X¤£¥iªÅ¥Õ"

                            NEXT FIELD pos_code

                        END IF

                    ELSE

                        SELECT pos_name

                          INTO p_st[pa_curr].pos_name

                          FROM postab

                         WHERE pos_no   = p_st[pa_curr].pos_code

                        IF  NOT(SQLCA.SQLCODE = 0 AND SQLCA.SQLERRD[3] > 0) THEN

                            LET win_stm = "SELECT pos_no,pos_name ",

    -- µù:¡@§ä¤£¨ì´Nopen window, get data from postab

                                          "  FROM postab",

                                          " ORDER BY pos_no  "

                            CALL view_window(2,5,2,win_stm,"mis1200w",0)

                                  RETURNING p_st[pa_curr].pos_code,

                                            p_st[pa_curr].pos_name

                            IF  p_st[pa_curr].pos_code IS NOT NULL THEN

                                DISPLAY p_st[pa_curr].pos_code TO s_dispitem[sa_curr].pos_code

                            --  DISPLAY p_st[pa_curr].pos_name TO s_dispitem[sa_curr].pos_name

                            ELSE

                                NEXT FIELD pos_code

                            END IF

                        END IF

                        LET p_pos_code = p_st[pa_curr].pos_code

                        DISPLAY p_st[pa_curr].pos_name TO s_dispitem[sa_curr].pos_name

                    END IF

                END IF

 

            AFTER FIELD payrank

                IF  p_st[pa_curr].payrank IS NULL THEN

                    ERROR "®ÖÁ~¾ºÙ¥N½X ¤£¥iªÅ¥Õ"

                    NEXT FIELD payrank

                ELSE

             SELECT rank_name

                      INTO p_st[pa_curr].rank_name

                      FROM sranktab

                     WHERE sranktab.payrank = p_st[pa_curr].payrank

                    IF  NOT(SQLCA.SQLCODE = 0 AND SQLCA.SQLERRD[3] > 0) THEN

                        INITIALIZE win_rank TO NULL

                        LET win_rank = "SELECT payrank,rank_name ",

                                      "  FROM sranktab",

                                      " ORDER BY payrank"

                        CALL view_window(2,5,2,win_rank,"mis1200w",0)

                             RETURNING p_st[pa_curr].payrank,

                                       p_st[pa_curr].rank_name

                        IF  p_st[pa_curr].payrank IS NOT NULL THEN

                            DISPLAY p_st[pa_curr].payrank TO s_dispitem[sa_curr].payrank

       --                   DISPLAY p_st[pa_curr].rank_name TO s_dispitem[sa_curr].rank_name

                        ELSE

                            NEXT FIELD payrank

                        END IF

                    END IF

                    DISPLAY p_st[pa_curr].rank_name TO s_dispitem[sa_curr].rank_name

                    LET p_payrank = p_st[pa_curr].payrank

                    IF  dup_check(1)  THEN

-- dup_check(1), check pos_code, payrank ¤£¥i­«½Æ

                        ERROR "¾ºÙ¤Î®ÖÁ~¾ºÙ¥N½X­«ÂÐ",p_payrank," ",  

                    pa_curr

                        LET Is_dup = "y"

                        NEXT FIELD payrank

                    ELSE

                        LET Is_dup = "n"

                    END IF

                END IF

 

            AFTER FIELD level

                IF  p_st[pa_curr].level IS NULL THEN

                    ERROR "¯Å§O¤£¥iªÅ¥Õ"

                    NEXT FIELD level

                END IF

                LET p_level = p_st[pa_curr].level

                IF  dup_check(2)  THEN

-- dup_check(2), check pos_code, level , pos_code same®Élevel ¤£¥i­«½Æ 

                    ERROR "Á~¸ê¾ºÙ¥N½X­«ÂÐ"  

                    LET Is_dup = "y"

                    NEXT FIELD pos_code

                ELSE

                    LET Is_dup = "n"

                END IF

            AFTER INPUT

                IF  Is_dup = "y" THEN

                    ERROR "Á~¸ê¾ºÙ¥N½X­«ÂÐ"  

                    CONTINUE INPUT

                END IF

                IF  p_st[pa_curr].pos_code IS NULL THEN

                    IF  valid_null(pa_curr,arr_cnt) THEN

                        DISPLAY  "" AT 1,1

                        OPEN WINDOW w3 AT 21,31 WITH 1 ROWS, 20 COLUMNS ATTRIBUTES (BORDER,REVERSE)

                            PROMPT "½T»{ ? ( Y/N ) " FOR  CHAR  answer

                        CLOSE WINDOW w3

                        IF  answer MATCHES  "[yY]" THEN

                            EXIT INPUT

                        ELSE

                            CONTINUE INPUT

                        END IF

                    ELSE

                        ERROR "Á~¸ê¾ºÙ¥N½X¤£¥iªÅ¥Õ ........"

                        CONTINUE INPUT

                    END IF

                END IF

                IF  p_st[pa_curr].payrank IS NULL THEN

                    ERROR "®ÖÁ~¾ºÙ¥N½X ¤£¥iªÅ¥Õ"

                    CONTINUE INPUT

                END IF

                IF  p_st[pa_curr].level IS NULL THEN

                    ERROR "¯Å§O¤£¥iªÅ¥Õ"

                    CONTINUE INPUT

                END IF

                OPEN WINDOW w1 AT 21,31 WITH 1 ROWS, 20 COLUMNS ATTRIBUTES (BORDER,REVERSE)

                    PROMPT "½T»{ ? ( Y/N ) " FOR  CHAR  answer

                CLOSE WINDOW w1

                IF  answer MATCHES  "[yY]" THEN

                    EXIT INPUT

                ELSE

                    CONTINUE INPUT

                END IF

            ON KEY(INTERRUPT)

                OPEN WINDOW w2 AT 21,31 WITH 1 ROWS, 20 COLUMNS ATTRIBUTES (BORDER,REVERSE)

                    PROMPT "¨ú®ø½T»{ ? ( Y/N ) " FOR  CHAR  answer

                CLOSE WINDOW w2

                IF  answer MATCHES  "[yY]" THEN

                    EXIT INPUT

                ELSE

                    LET INT_FLAG = FALSE

                    CONTINUE INPUT

                END IF

        END INPUT

        OPTIONS INSERT KEY F1

        OPTIONS DELETE KEY F2

    END IF

 

    IF  INT_FLAG THEN

        LET INT_FLAG = FALSE

        RETURN

    END IF

 

    BEGIN WORK

    LET commit_sw = "Y"

    CALL modify_data()

    IF  commit_sw = "Y" THEN

        ERROR "­×§ï¦¨¥\!!"

        COMMIT WORK

    ELSE

        ERROR "­×§ï¥¢±Ñ,¨t²Î¤£§@¥ô¦ó­×§ï ...."

        ROLLBACK WORK

    END IF

END FUNCTION

 


FUNCTION dup_check(ty)

    DEFINE ty                    SMALLINT

    DEFINE dup_error             SMALLINT

 

    LET dup_error = -1

    LET pa_count = ARR_COUNT()

 

    FOR i =  1 TO pa_count

        CASE

            WHEN ty = 1

                IF  p_st[i].pos_code = p_pos_code AND p_st[i].payrank = p_payrank THEN

{

error "i=",i," ", p_st[i].pos_code,"=", p_pos_code," ",p_st[i].payrank

,"=",p_payrank," dup_error:",dup_error

sleep 3

}

                    LET dup_error = dup_error + 1

                END IF

            WHEN ty = 2

                IF  p_st[i].pos_code = p_pos_code AND p_st[i].level = p_level THEN

                    LET dup_error = dup_error + 1

                END IF

            WHEN ty = 3

                IF  q_st[i].payrank = p_payrank THEN

                    LET dup_error = dup_error + 1

                END IF

            WHEN ty = 4

                IF  q_st[i].level = p_level THEN

                    LET dup_error = dup_error + 1

                END IF

        END CASE

    END FOR

 

    RETURN dup_error

 

END FUNCTION

 


FUNCTION modify_data()

    LET pa_count = ARR_COUNT()

 

    DELETE FROM posgradetab

 

    FOR i = 1 TO pa_count

        IF  p_st[i].pos_code IS NULL OR p_st[i].payrank IS NULL OR

            p_st[i].level    IS NULL THEN

            CONTINUE FOR

        ELSE

            INITIALIZE p_posgradetab.* TO NULL

            LET p_posgradetab.pos_code = p_st[i].pos_code

            LET p_posgradetab.pos_name = p_st[i].pos_name

            LET p_posgradetab.payrank = p_st[i].payrank

            LET p_posgradetab.rank_name = p_st[i].rank_name

            LET p_posgradetab.level = p_st[i].level

            INSERT INTO posgradetab VALUES(p_posgradetab.*)

            IF  NOT(SQLCA.SQLCODE = 0 AND SQLCA.SQLERRD[3] > 0) THEN

                LET commit_sw = "N"

                EXIT FOR

            END IF

        END IF

    END FOR

END FUNCTION

 


FUNCTION f_copy()

 

    CALL curr_form3("a")

    INPUT p_pos_code FROM  posgradetab.pos_code                

        BEFORE FIELD pos_code-- pos_code «e, ¥X²{ message...,

            MESSAGE "¿é¤J999 ¶}µøµ¡,¿é¤J§¹²¦«ö ESC Áä½T»{"

        AFTER FIELD pos_code

            IF  p_pos_code IS NULL THEN

                ERROR "Á~¸ê¾ºÙ¥N½X¤£¥iªÅ¥Õ"

                NEXT FIELD pos_code  

            END IF

            LET p_count = 0

            SELECT COUNT(*)

              INTO p_count

              FROM posgradetab

             WHERE pos_code = p_pos_code

            IF  p_count = 0 OR p_count IS NULL THEN

                LET win_stm = "SELECT DISTINCT pos_code,pos_name ",

                              "  FROM posgradetab",

                              " ORDER BY pos_code  "

                CALL view_window(2,5,2,win_stm,"mis1200w",0)

                     RETURNING p_pos_code, p_pos_name

                IF  p_pos_code IS NOT NULL THEN

                    DISPLAY p_pos_code TO posgradetab.pos_code

                ELSE

                    NEXT FIELD pos_code

                END IF

                DISPLAY p_pos_name  TO posgradetab.pos_name

            ELSE

                SELECT pos_name

                  INTO p_pos_name

                  FROM postab

                 WHERE pos_no = p_pos_code

                DISPLAY p_pos_name TO posgradetab.pos_name

            END IF

      ON KEY(INTERRUPT)

         EXIT INPUT

    END INPUT

    MESSAGE ""

    IF  INT_FLAG THEN

        LET INT_FLAG = FALSE

        RETURN

    END IF

 

    CALL curr_form3("a")

    FOR i = 1 TO 10

        CLEAR s_dispitem[i].*

    END FOR

 

    LET INT_FLAG = FALSE

    DECLARE q_cursor CURSOR FOR

     SELECT payrank,rank_name,level

       FROM posgradetab

      WHERE pos_code = p_pos_code

      ORDER BY level, payrank

 

    IF  INT_FLAG  THEN

        ERROR"¨ú®ø"

        LET INT_FLAG = FALSE

        RETURN

    END IF

 

    LET arr_cnt = 1

 

    FOREACH q_cursor INTO q_st[arr_cnt].*

        IF  arr_cnt <= 10 THEN

            DISPLAY q_st[arr_cnt].payrank TO s_dispitem[arr_cnt].payrank

            DISPLAY q_st[arr_cnt].rank_name TO s_dispitem[arr_cnt].rank_name

            DISPLAY q_st[arr_cnt].level TO s_dispitem[arr_cnt].level

-- <= 10µ§ ¸ê®Æ´Nshow , ¤£Â½­¶, curson ¦bmenu 3

-- >10 µ§´N½­¶,has f3 f4,curson ¦barray,need ctrl+c Â÷¶},back menu3

        END IF

        LET arr_cnt = arr_cnt + 1

        IF  arr_cnt > 50   THEN

            EXIT FOREACH

        END IF

    END FOREACH

    LET p_count = arr_cnt - 1

    IF  p_count > 10 THEN

        LET array_msg = "F3:¤U­¶ F4:¤W­¶  CTRL-C Â÷¶}"

        DISPLAY array_msg CLIPPED AT 1,2 ATTRIBUTE(BLINK,REVERSE)

        CALL SET_COUNT(p_count)

        DISPLAY ARRAY q_st TO  s_dispitem.*

-- display array ¬O¥u¥i¾\Äý, can't modify it.

    END IF

    DISPLAY "" AT 1,2

    LET INT_FLAG = FALSE

-- ¥[LET INT_FLAG = FALSE, ¤£µMesc §¹¥i¦Ü menu 3, but ctrl+c«á

-- ·|¸õ¦^menu2

 

END FUNCTION

 


FUNCTION f_replace()

    CALL curr_form3("b")

    INPUT p_pos_code FROM  posgradetab.pos_code                

        BEFORE FIELD pos_code-- pos_code «e, ¥X²{ message...,

            MESSAGE "¿é¤J999 ¶}µøµ¡,¿é¤J§¹²¦«ö ESC Áä½T»{"

        AFTER FIELD pos_code

            IF  p_pos_code IS NULL THEN

                    ERROR "Á~¸ê¾ºÙ¥N½X¤£¥iªÅ¥Õ"

                    NEXT FIELD pos_code  

                ELSE

                    SELECT pos_name

                      INTO p_pos_name

                      FROM postab

                     WHERE pos_no = p_pos_code

                    DISPLAY p_pos_name TO posgradetab.pos_name

                IF  SQLCA.SQLCODE <> 0 THEN

                    LET win_stm = "SELECT pos_no,pos_name ",

                                  "  FROM postab",

                                  " ORDER BY pos_no    "

                    CALL view_window(2,5,2,win_stm,"mis1200w",0)

                         RETURNING p_pos_code, p_pos_name

                    IF  p_pos_code IS NOT NULL THEN

                        DISPLAY p_pos_code TO posgradetab.pos_code

                    ELSE

                        NEXT FIELD pos_code

                    END IF

                    DISPLAY p_pos_name  TO posgradetab.pos_name

                ELSE

                END IF

           END IF

      ON KEY(INTERRUPT)

         EXIT INPUT

    END INPUT

 

    IF  INT_FLAG THEN

        LET INT_FLAG = FALSE

        RETURN

    END IF

    CALL SET_COUNT(p_count)

    INITIALIZE array_msg TO NULL

    LET array_msg = "F1:´¡¤J¤@µ§ F2:§R°£¤@µ§ F3:¤U­¶ F4:¤W­¶  ESC:½T»{ CTRL-C ¨ú®ø"

    DISPLAY array_msg CLIPPED AT 1,2 ATTRIBUTE(BLINK,REVERSE)

    LET Is_Open = FALSE

    INPUT ARRAY q_st WITHOUT DEFAULTS FROM s_dispitem.*

         BEFORE INSERT

             LET sa_curr  = SCR_LINE()

             CLEAR s_dispitem[sa_curr].*

   

         BEFORE ROW

             LET sa_curr = SCR_LINE()

             LET pa_curr = ARR_CURR()

             LET arr_cnt = ARR_COUNT()

   

         AFTER FIELD payrank

             IF  NOT (FGL_LASTKEY() = FGL_KEYVAL("accept")) THEN

                 IF  p_st[pa_curr].payrank IS NULL THEN

                     IF  NOT (valid_null(pa_curr,arr_cnt) AND

                         FGL_LASTKEY() = FGL_KEYVAL("up")) THEN

                         ERROR "®ÖÁ~¾ºÙ¥N½X ¤£¥iªÅ¥Õ"

                         NEXT FIELD pos_code

                     END IF

                 ELSE

                     SELECT rank_name

                       INTO q_st[pa_curr].rank_name

                       FROM sranktab

                      WHERE sranktab.payrank = q_st[pa_curr].payrank

                     IF  NOT(SQLCA.SQLCODE = 0 AND SQLCA.SQLERRD[3] > 0) THEN

                         INITIALIZE win_rank TO NULL

                         LET win_rank = "SELECT payrank,rank_name ",

                                        "  FROM sranktab",

                                        " ORDER BY payrank"

                         CALL view_window(2,5,2,win_rank,"mis1200w",0)

                              RETURNING q_st[pa_curr].payrank,

                                        q_st[pa_curr].rank_name

                         IF  q_st[pa_curr].payrank IS NOT NULL THEN

                             DISPLAY q_st[pa_curr].payrank TO s_dispitem[sa_curr].payrank

           --                DISPLAY q_st[pa_curr].rank_name TO s_dispitem[sa_curr].rank_name

                         ELSE

                             NEXT FIELD payrank

                         END IF

                     END IF

                     DISPLAY q_st[pa_curr].rank_name TO s_dispitem[sa_curr].rank_name

                     LET p_payrank = q_st[pa_curr].payrank

                     IF  dup_check(3)  THEN

                         ERROR "¾ºÙ¤Î®ÖÁ~¾ºÙ¥N½X­«ÂÐ"  

                         LET Is_dup = "y"

                         NEXT FIELD payrank

                     ELSE

                         LET Is_dup = "n"

                     END IF

                 END IF

             END IF

 

        AFTER FIELD level

            IF  q_st[pa_curr].level IS NULL THEN

                ERROR "¯Å§O¤£¥iªÅ¥Õ"

                NEXT FIELD level

            END IF

            LET p_level = q_st[pa_curr].level

            IF  dup_check(4)  THEN

                ERROR "Á~¸ê¾ºÙ¥N½X­«ÂÐ"   

                LET Is_dup = "y"

                NEXT FIELD level     

            ELSE

                LET Is_dup = "n"

            END IF

        AFTER INPUT

            IF  Is_dup = "y" THEN

                ERROR "Á~¸ê¾ºÙ¥N½X­«ÂÐ"  

                CONTINUE INPUT

            END IF

            IF  q_st[pa_curr].payrank IS NULL THEN

                ERROR "®ÖÁ~¾ºÙ¥N½X ¤£¥iªÅ¥Õ"

                CONTINUE INPUT

            END IF

            IF  q_st[pa_curr].level IS NULL THEN

                ERROR "¯Å§O¤£¥iªÅ¥Õ"

                CONTINUE INPUT

            END IF

            OPEN WINDOW w1 AT 21,31 WITH 1 ROWS, 20 COLUMNS ATTRIBUTES (BORDER,REVERSE)

                PROMPT "½T»{ ? ( Y/N ) " FOR  CHAR  answer

            CLOSE WINDOW w1

            IF  answer MATCHES  "[yY]" THEN

                EXIT INPUT

            ELSE

                CONTINUE INPUT

            END IF

        ON KEY(INTERRUPT)

            OPEN WINDOW w2 AT 21,31 WITH 1 ROWS, 20 COLUMNS ATTRIBUTES (BORDER,REVERSE)

                PROMPT "¨ú®ø½T»{ ? ( Y/N ) " FOR  CHAR  answer

            CLOSE WINDOW w2

            IF  answer MATCHES  "[yY]" THEN

                EXIT INPUT

            ELSE

                LET INT_FLAG = FALSE

                CONTINUE INPUT

            END IF

    END INPUT

    IF  INT_FLAG THEN

        LET INT_FLAG = FALSE

        RETURN

    END IF

 

    BEGIN WORK

    LET commit_sw = "Y"

    CALL replace_data()

    IF  commit_sw = "Y" THEN

        ERROR "­×§ï¦¨¥\!!"

        COMMIT WORK

    ELSE

        ERROR "­×§ï¥¢±Ñ,¨t²Î¤£§@¥ô¦ó­×§ï ...."

        ROLLBACK WORK

    END IF

END FUNCTION

 


FUNCTION replace_data()

 

    LET pa_count = ARR_COUNT()

 

    DELETE FROM posgradetab

     WHERE pos_code = p_pos_code

-- ¥udelete ¸Óµ§, ¦Ainsert ¦^¼g¦^¥h

    INITIALIZE p_posgradetab.* TO NULL

-- ²Mto null ¤£¥i©ñlet«á, ¤£µM¤S²M±¼¤F

    LET p_posgradetab.pos_code = p_pos_code

    LET p_posgradetab.pos_name = p_pos_name

-- pos_code, pos_name ¬O©T©wÄæ, don't write in array i..

    FOR i = 1 TO pa_count

        IF  q_st[i].payrank IS NULL OR q_st[i].level IS NULL THEN

            CONTINUE FOR

        ELSE

            LET p_posgradetab.payrank = q_st[i].payrank

            LET p_posgradetab.rank_name = q_st[i].rank_name

            LET p_posgradetab.level = q_st[i].level

            INSERT INTO posgradetab VALUES(p_posgradetab.*)

            IF  NOT(SQLCA.SQLCODE = 0 AND SQLCA.SQLERRD[3] > 0) THEN

                LET commit_sw = "N"

                EXIT FOR

            END IF

        END IF

    END FOR

END FUNCTION


psn1327.per

DATABASE payroll

SCREEN

{

   

  ¾ºÙ¥N½X ¾ºÙ                  ®ÖÁ~¾µ¥     ®ÖÁ~¾µ¥             ¯Å§O

                                   ¥N½X

  =====================================================================

  [f01 ]   [f02                 ][f03   ]     [f04                ][a ]

  [f01 ]   [f02                 ][f03   ]     [f04                ][a ]

  [f01 ]   [f02                 ][f03   ]     [f04                ][a ]

  [f01 ]   [f02                 ][f03   ]     [f04                ][a ]

  [f01 ]   [f02                 ][f03   ]     [f04                ][a ]

  [f01 ]   [f02                 ][f03   ]     [f04                ][a ]

  [f01 ]   [f02                 ][f03   ]     [f04                ][a ]

  [f01 ]   [f02                 ][f03   ]     [f04                ][a ]

  [f01 ]   [f02                 ][f03   ]     [f04                ][a ]

  [f01 ]   [f02                 ][f03   ]     [f04                ][a ]

 

}

END

 

TABLES

posgradetab

ATTRIBUTES

f01 = posgradetab.pos_code,  AUTONEXT;

f02 = posgradetab.pos_name,  NOENTRY;

f03 = posgradetab.payrank ,  UPSHIFT,AUTONEXT;

f04 = posgradetab.rank_name, NOENTRY;

a   = posgradetab.level, NOENTRY;

INSTRUCTIONS

SCREEN RECORD s_dispitem[10] (pos_code,pos_name,payrank,rank_name,level)

END


psn1327a.per

DATABASE payroll

SCREEN

{

   

   ±q¾ºÙ¥N½X[f01 ]½Æ»s     ¾ºÙ:[f02                 ]

 

 

    ®ÖÁ~¾µ¥¥N½X   ®ÖÁ~¾µ¥             ¯Å§O

  ==============================================

     [f03   ]     [f04                 ][a ]

     [f03   ]     [f04                 ][a ]

     [f03   ]     [f04                 ][a ]

     [f03   ]     [f04                 ][a ]

     [f03   ]     [f04                 ][a ]

     [f03   ]     [f04                 ][a ]

     [f03   ]     [f04                 ][a ]

     [f03   ]     [f04                 ][a ]

     [f03   ]     [f04                 ][a ]

     [f03   ]     [f04                 ][a ]

 

}

END

 

TABLES

posgradetab

ATTRIBUTES

f01 = posgradetab.pos_code,  AUTONEXT;

f02 = posgradetab.pos_name,  NOENTRY;

f03 = posgradetab.payrank ,  UPSHIFT,AUTONEXT;

f04 = posgradetab.rank_name, NOENTRY;

a   = posgradetab.level,     AUTONEXT;

INSTRUCTIONS

SCREEN RECORD s_dispitem[10] (payrank,rank_name,level)

END


psn1327b.per

DATABASE payroll

SCREEN

{

   

  »È¦æ¥N½X  »È¦æ¦WºÙ

  =============================================

  [f01 ]   [f02                 ]

  [f01 ]   [f02                 ]

  [f01 ]   [f02                 ]

  [f01 ]   [f02                 ]

  [f01 ]   [f02                 ]

  [f01 ]   [f02                 ]

  [f01 ]   [f02                 ]

  [f01 ]   [f02                 ]

  [f01 ]   [f02                 ]

  [f01 ]   [f02                 ]

 

}

END

 

TABLES

posgradetab

ATTRIBUTES

f01 = posgradetab.pos_code,  AUTONEXT;

f02 = posgradetab.pos_name,  NOENTRY;

f03 = posgradetab.payrank ,  UPSHIFT,AUTONEXT;

f04 = posgradetab.rank_name, NOENTRY;

INSTRUCTIONS

SCREEN RECORD s_dispitem[10] (pos_code,pos_name,payrank,rank_name,level)

END

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

17-4 ³æ¤@¹º­±¤Î¾\Äýµ{¦¡½d¨Ò

########################################################################

#     setprog-name : emp1111.4gl                

#     Programer    : §õ©Ó»T       

#     FUNCTION     : Á{®É¸u¹µ¤H­û°ò¥»¸ê®ÆÀÉ

#     used TABLES  : memptab

#     used forms   : emp1111.per, emp1111w.per emp1111y.per     

#     DATE-written : 2000.7.18    

#

#####################################################

 

#####################################################

#   select database

#####################################################

DATABASE nckuabs

 

#####################################################

#   DEFINE public variable

#####################################################

GLOBALS

 

#----------------

#  system area

#----------------

    DEFINE sys_date         INTEGER

    DEFINE sys_program      CHAR(7)

    DEFINE sys_heading      CHAR(20)

    DEFINE sys_user_name    CHAR(8)

    DEFINE sys_user_id      CHAR(7)

    DEFINE sys_permision    CHAR(5)                   # ¨Ï¥ÎÅv­­

                                                      # 1.·s¼W

                                                      # 2.¬d¸ß

                                                      # 3.§ó¥¿

                                                      # 4.§R°£

                                                      # 5.¦Lªí

    DEFINE sys_ip           CHAR(15)        

#----------------

#  work area

#----------------

    DEFINE p_buffer         CHAR(256)

    DEFINE win_stm          CHAR(800)

    DEFINE cnt              SMALLINT

    DEFINE answer           CHAR(1)

    DEFINE select_arr       INTEGER

    DEFINE break_ctrl_ty    SMALLINT

    DEFINE break_idno  SMALLINT

    DEFINE tot_cnt,curr_cnt INTEGER

    DEFINE g_disp_line      INTEGER  -- default ©M disp_screen row size

    DEFINE construct_clause CHAR(1000)

    DEFINE prepare_clause   CHAR(1000)

    DEFINE win_clause       CHAR(1000)

#----------------

#  i-o area

#----------------

    DEFINE p_psftab     RECORD LIKE psftab.*      --

    DEFINE p_psntab     RECORD LIKE psntab.*      --

    DEFINE p_healatab   RECORD LIKE healatab.*      --

    DEFINE p_spositab   RECORD LIKE spositab.*      --

    DEFINE p_psfcurrtab RECORD LIKE psfcurrtab.*      --

    DEFINE p_psfcodetab RECORD LIKE psfcodetab.*

    DEFINE p_psfedutab  RECORD LIKE psfedutab.*

    DEFINE p_deptab      RECORD LIKE deptab.*

    DEFINE p_memptab     RECORD LIKE memptab.*   

    DEFINE curr_memptab  RECORD LIKE memptab.*  

    DEFINE prev_memptab  RECORD LIKE memptab.*

    DEFINE next_memptab  RECORD LIKE memptab.*

END GLOBALS

 

MAIN

 

    DEFER    INTERRUPT

    SET      LOCK      MODE  TO  WAIT

    WHENEVER ERROR     STOP

    OPTIONS  ERROR     LINE  LAST

    OPTIONS  INPUT     WRAP

    CALL data_initial()

    CALL disp_screen(4,19)

    CALL main_menu()

    CALL close_screen()

    CLEAR SCREEN

 

END MAIN

 

FUNCTION close_screen()

 

    CLOSE WINDOW w_user

    CLOSE WINDOW w_menu

    CLOSE WINDOW w_form

 

END FUNCTION

 


FUNCTION main_menu()

 

    MENU "Á{®É¸u¹µ¤H­û°ò¥»¸ê®ÆÀɺûÅ@"     

         BEFORE MENU

             IF  sys_permision[1,1] != "Y"  THEN

                 HIDE OPTION "1.·s¼W"

             END IF

             IF  sys_permision[2,2] != "Y"  THEN

                 HIDE OPTION "2.ºûÅ@"?

             END IF

             CALL init_val()

             CALL curr_time("M")

 

         COMMAND "1.·s¼W" "·s¼W§¹, ½Ð«ö<Esc>°õ¦æ  <Ctrl-C>©ñ±ó"

             INITIALIZE  curr_memptab.* TO NULL

             CALL act_modify(1)

             CALL curr_time("M")

 

         COMMAND "2.ºûÅ@"  "±ø¥ó¦¡¬d¸ß(Äæ¦ì¤Ï¥Õ) <Esc>°õ¦æ  <Ctrl-C>©ñ±ó"

             CALL sub_menu(2)

             CALL curr_time("M")

 

         COMMAND "0.µ²§ô"

                EXIT MENU

    END MENU

END FUNCTION

 


FUNCTION sub_menu(update_option)

    DEFINE update_option      SMALLINT

    DEFINE fetch_dir,

           toward_last,

           toward_first,

           at_end           SMALLINT

              

    LET toward_last  = +1

    LET toward_first = -1

    LET at_end       = 0

 

    CALL curr_time("F")

    CLEAR FORM

 

    CONSTRUCT BY NAME construct_clause ON tran_code,

                                          idno    ,

                                          emp_name,

                                          dept_code,

                                          pos_code

                                          ATTRIBUTE(REVERSE)   

        

    IF  INT_FLAG THEN

        ERROR"©ñ±ó ..."

        LET INT_FLAG = FALSE

    RETURN

    END IF

    ERROR "¬d¸ß¤¤... ½Ðµy­Ô"

    LET prepare_clause = " SELECT * ",

                         "   FROM memptab",

                         "  WHERE ", construct_clause CLIPPED,

                         "  ORDER BY dept_name DESC"

    LET win_clause = " SELECT memptab.emp_name,",

                     "        memptab.dept_name,",

                     "        memptab.pos_name",

                     "   FROM memptab",

                     "  WHERE ", construct_clause CLIPPED,

                     "  ORDER BY dept_name DESC"

        

    PREPARE pre_update FROM prepare_clause

    DECLARE memptab_cursor SCROLL CURSOR WITH HOLD FOR pre_update

    OPEN    memptab_cursor

    CALL curr_time("M")

 

    MENU "Á{®É¸u¹µ¤H­û°ò¥»¸ê®ÆÀɺûÅ@"     

        BEFORE MENU

            FETCH FIRST memptab_cursor INTO curr_memptab.*

            IF  SQLCA.SQLCODE = NOTFOUND THEN

                ERROR "µL²Å¦X¬d¸ß¸ê®Æ !!"

                HIDE OPTION ALL

                SHOW OPTION "0.µ²§ô"

                NEXT OPTION "0.µ²§ô"

            ELSE

                LET curr_cnt = 1

                IF  sys_permision[3,3] != "Y"  THEN

                    HIDE OPTION "5.§ó¥¿"

                END IF

                IF  sys_permision[4,4] != "Y"  THEN

                    HIDE OPTION "6.§R°£"

                END IF

                CALL show_data()

                HIDE OPTION "1.²Ä¤@µ§"

                HIDE OPTION "3.¤W¤@µ§"

                LET fetch_dir = toward_last

                FETCH NEXT memptab_cursor INTO next_memptab.*

                IF  SQLCA.SQLCODE != 0 THEN

                    HIDE OPTION "2.¤U¤@µ§"

                    HIDE OPTION "4.³Ì«á¤@µ§"

                    HIDE OPTION "7.¾\Äý"

                END IF

            END IF

            CALL curr_time("M")

 

        COMMAND "1.²Ä¤@µ§"

            FETCH FIRST memptab_cursor INTO curr_memptab.*

            LET curr_cnt = 1

            CALL show_data()

            HIDE OPTION "1.²Ä¤@µ§"

            HIDE OPTION "3.¤W¤@µ§"

            SHOW OPTION "4.³Ì«á¤@µ§"

            LET fetch_dir = toward_last

            FETCH NEXT memptab_cursor INTO next_memptab.*

            IF  SQLCA.SQLCODE = 0 THEN

                SHOW OPTION "2.¤U¤@µ§"

                NEXT OPTION "2.¤U¤@µ§"

            ELSE

                HIDE OPTION "2.¤U¤@µ§"

                NEXT OPTION "0.µ²§ô"

            END IF

            CALL curr_time("M")

 

        COMMAND "2.¤U¤@µ§"

            LET prev_memptab.* = curr_memptab.*

            SHOW OPTION "1.²Ä¤@µ§"

            SHOW OPTION "3.¤W¤@µ§"

            SHOW OPTION "4.³Ì«á¤@µ§"

            LET curr_memptab.* = next_memptab.*

            LET curr_cnt = curr_cnt + 1

            CALL show_data()

            CASE (fetch_dir)

                WHEN toward_last

                    FETCH NEXT memptab_cursor INTO next_memptab.*

                WHEN at_end    

                    FETCH RELATIVE +2 memptab_cursor INTO next_memptab.*

                WHEN toward_first

                    FETCH RELATIVE +3 memptab_cursor INTO next_memptab.*

                    LET fetch_dir = toward_last

            END CASE

            IF  SQLCA.SQLCODE = NOTFOUND THEN

                LET fetch_dir = at_end

                HIDE OPTION "2.¤U¤@µ§"

                HIDE OPTION "4.³Ì«á¤@µ§"

                NEXT OPTION "1.²Ä¤@µ§"

            END IF

            CALL curr_time("M")

 

        COMMAND "3.¤W¤@µ§"

            LET next_memptab.* = curr_memptab.*

            SHOW OPTION "1.²Ä¤@µ§"

            SHOW OPTION "2.¤U¤@µ§"

            SHOW OPTION "4.³Ì«á¤@µ§"

            LET curr_memptab.* = prev_memptab.*

            LET curr_cnt = curr_cnt - 1

            CALL show_data()

            CASE (fetch_dir)

                WHEN toward_first

                    FETCH PRIOR memptab_cursor INTO prev_memptab.*

                WHEN at_end    

                    FETCH RELATIVE -2 memptab_cursor INTO prev_memptab.*

                    LET fetch_dir = toward_first

                WHEN toward_last

                    FETCH RELATIVE -3 memptab_cursor INTO prev_memptab.*

                    LET fetch_dir = toward_first

            END CASE

            IF  SQLCA.SQLCODE = NOTFOUND THEN

                LET fetch_dir = at_end

                HIDE OPTION "1.²Ä¤@µ§"

                HIDE OPTION "3.¤W¤@µ§"

                NEXT OPTION "4.³Ì«á¤@µ§"

            END IF

            CALL curr_time("M")

 

        COMMAND "4.³Ì«á¤@µ§"

            FETCH LAST memptab_cursor INTO curr_memptab.*

            LET curr_cnt = Get_Count(prepare_clause)

            CALL show_data()

            SHOW OPTION "1.²Ä¤@µ§"

            HIDE OPTION "2.¤U¤@µ§"

            HIDE  OPTION "4.³Ì«á¤@µ§"

            LET fetch_dir = toward_first

            FETCH PRIOR memptab_cursor INTO prev_memptab.*

            IF  SQLCA.SQLCODE = 0 THEN

                SHOW OPTION "3.¤W¤@µ§"

                NEXT OPTION "3.¤W¤@µ§"

            ELSE

                HIDE OPTION "3.¤W¤@µ§"

                NEXT OPTION "0.µ²§ô"

            END IF

            CALL curr_time("M")

 

        COMMAND "5.§ó¥¿"

            CALL act_modify(3)

            CALL curr_time("M")

            NEXT OPTION "0.µ²§ô"

 

        COMMAND "6.§R°£"

            CALL act_modify(4)

            CALL curr_time("M")

            NEXT OPTION "0.µ²§ô"

        COMMAND "7.¾\Äý"

            CALL view_window(3,5,2,win_clause,"emp1111w",curr_cnt)

                 RETURNING select_arr

            IF  select_arr = 1 THEN

                FETCH FIRST memptab_cursor INTO curr_memptab.*

                LET curr_cnt = 1

                CALL show_data()

                HIDE OPTION "1.²Ä¤@µ§"

                HIDE OPTION "3.¤W¤@µ§"

                SHOW OPTION "4.³Ì«á¤@µ§"

                LET fetch_dir = toward_last

                FETCH NEXT memptab_cursor INTO next_memptab.*

                IF  SQLCA.SQLCODE = 0 THEN

                    SHOW OPTION "2.¤U¤@µ§"

                    NEXT OPTION "2.¤U¤@µ§"

                ELSE

                    HIDE OPTION "2.¤U¤@µ§"

                    NEXT OPTION "0.µ²§ô"

                END IF

                CALL curr_time("M")

            ELSE IF  select_arr = Get_Count(prepare_clause) THEN

                     LET curr_cnt = select_arr

                     FETCH LAST memptab_cursor INTO curr_memptab.*

                     CALL show_data()

                     SHOW OPTION "1.²Ä¤@µ§"

                     HIDE OPTION "2.¤U¤@µ§"

                     HIDE  OPTION "4.³Ì«á¤@µ§"

                     LET fetch_dir = toward_first

                     FETCH PRIOR memptab_cursor INTO prev_memptab.*

                     IF  SQLCA.SQLCODE = 0 THEN

                         SHOW OPTION "3.¤W¤@µ§"

                         NEXT OPTION "3.¤W¤@µ§"

                     ELSE

                         HIDE OPTION "3.¤W¤@µ§"

                         NEXT OPTION "0.µ²§ô"

                     END IF

                     CALL curr_time("M")

                 ELSE

                     FETCH ABSOLUTE select_arr memptab_cursor INTO curr_memptab.*

                     LET curr_cnt = select_arr

                     CALL show_data()

                     FETCH RELATIVE -1 memptab_cursor INTO prev_memptab.*

                     IF  SQLCA.SQLCODE = 0 THEN

                         SHOW OPTION "1.²Ä¤@µ§"

                         SHOW OPTION "3.¤W¤@µ§"

                     END IF

                     FETCH RELATIVE +2 memptab_cursor INTO next_memptab.*

                     IF  SQLCA.SQLCODE = 0 THEN

                         LET fetch_dir = toward_last

                         SHOW OPTION "2.¤U¤@µ§"

                         SHOW OPTION "4.³Ì«á¤@µ§"

                     ELSE

                         LET fetch_dir = at_end

                     END IF

                 END IF

            END IF

            CALL curr_time("M")

            NEXT OPTION "0.µ²§ô"

        COMMAND "0.µ²§ô"

            EXIT  MENU

    END MENU

 

END FUNCTION

 


#####################################################

#   act_modify  function

#####################################################

FUNCTION act_modify(update_option)

    DEFINE update_option    SMALLINT

 

    CALL curr_time("F")

 

    IF  update_option = 1 THEN

        CLEAR FORM

    END IF

 

    LET INT_FLAG  = FALSE

    INPUT BY NAME curr_memptab.tran_code,

                  curr_memptab.idno     ,

                  curr_memptab.emp_name,

                  curr_memptab.dept_code,   

                  curr_memptab.pos_code,     

                  curr_memptab.enter_date,

                  curr_memptab.enter_seq, 

                  curr_memptab.psn_code,  

                  curr_memptab.birthday,  

                  curr_memptab.retire_date,

                  curr_memptab.office     ,

                  curr_memptab.phone,

                  curr_memptab.grade      ,

                  curr_memptab.school_name,

                  curr_memptab.addr       ,

                  curr_memptab.leave_date ,

                  curr_memptab.leave_num  ,

                  curr_memptab.upddate,

                  curr_memptab.ctrl_ty,

                  curr_memptab.remark,

                  curr_memptab.edu_mark

 

         WITHOUT DEFAULTS

     BEFORE FIELD tran_code                            

         IF  update_option = 3 THEN

             NEXT FIELD memptab.dept_code

         ELSE IF  update_option = 4 THEN

                  OPEN WINDOW w4 AT 21,31 WITH 1 ROWS, 30 COLUMNS ATTRIBUTES(BORDER,REVERSE)

                      PROMPT "½T»{­n§R°£¶Ü ? ( Y/N ) " FOR  CHAR  answer

                  CLOSE WINDOW w4

                  IF  answer NOT MATCHES  "[yY]" THEN

                      RETURN

                  ELSE

                      EXIT INPUT

                  END IF

              END IF

         END IF

         LET curr_memptab.enter_seq  = 0

         LET curr_memptab.retire_date= 0

         LET curr_memptab.leave_date = 0

         LET curr_memptab.leave_num  = 0

         LET curr_memptab.ctrl_ty    = 0

         DISPLAY BY NAME curr_memptab.enter_seq

         DISPLAY BY NAME curr_memptab.retire_date

         DISPLAY BY NAME curr_memptab.leave_date

         DISPLAY BY NAME curr_memptab.leave_num

         DISPLAY BY NAME curr_memptab.ctrl_ty  

--  only ·s¼W¥idefault these =0

--  ¦bform default =0 also ok

         IF  update_option = 1 THEN

             LET curr_memptab.upddate = sys_date

             DISPLAY BY NAME curr_memptab.upddate

         END IF

     AFTER FIELD tran_code    

         IF  curr_memptab.tran_code IS NULL THEN

             ERROR "§P§O½X¤£¥iªÅ¥Õ"

             NEXT FIELD memptab.tran_code     

         END IF

         CASE curr_memptab.tran_code

             WHEN "1" DISPLAY "±M¥ô" TO FORMONLY.tran_name 

             WHEN "2" DISPLAY "­Ý¥ô" TO FORMONLY.tran_name 

             WHEN "3" DISPLAY "¯S®×" TO FORMONLY.tran_name 

             WHEN "4" DISPLAY "°òª÷·|" TO FORMONLY.tran_name 

         END CASE

     AFTER FIELD idno             

        INITIALIZE p_memptab.* TO NULL

         SELECT *

           INTO p_memptab.*

           FROM memptab

          WHERE idno = curr_memptab.idno

         IF  SQLCA.SQLCODE = 0 THEN

             ERROR "¨­¥÷ÃÒ¸¹¤w¦s¦b"

             NEXT FIELD idno

         END IF

         IF  curr_memptab.idno IS NULL THEN

             ERROR "¨­¥÷ÃÒ¸¹¤£¥iªÅ¥Õ"

             NEXT FIELD memptab.idno

         END IF

         MESSAGE " "

        INITIALIZE p_psftab.* TO NULL

         SELECT *

           INTO p_psftab.*

           FROM psftab

          WHERE idno = curr_memptab.idno

         IF  SQLCA.SQLCODE <> 0 THEN

        INITIALIZE p_healatab.* TO NULL

             SELECT *

               INTO p_healatab.*

               FROM healatab

              WHERE idno = curr_memptab.idno

             LET curr_memptab.emp_name = p_healatab.emp_name

             LET curr_memptab.birthday = p_healatab.birthday

             LET curr_memptab.enter_date = p_healatab.enter_date

         ELSE

             LET curr_memptab.emp_name = p_psftab.psn_name

             LET curr_memptab.birthday = p_psftab.birthday

             LET curr_memptab.enter_date = p_psftab.enter_date

             LET curr_memptab.addr = p_psftab.curr_addr

             LET curr_memptab.phone = p_psftab.phone

         END IF

         DISPLAY curr_memptab.emp_name TO memptab.emp_name  

         DISPLAY curr_memptab.birthday  TO memptab.birthday   

         DISPLAY curr_memptab.enter_date TO memptab.enter_date 

         DISPLAY curr_memptab.addr TO memptab.addr       

         DISPLAY curr_memptab.phone      TO memptab.phone      

        INITIALIZE p_psntab.* TO NULL

         SELECT * 

           INTO p_psntab.*

           FROM psntab

          WHERE idno = curr_memptab.idno   

         LET curr_memptab.psn_code= p_psntab.psn_code

         LET curr_memptab.pos_code = p_psntab.pos_code

         LET curr_memptab.pos_name = p_psntab.pos_name

         LET curr_memptab.dept_code = p_psntab.dept_code

         LET curr_memptab.dept_name = p_psntab.dept_name

         DISPLAY curr_memptab.psn_code  TO memptab.psn_code  

         DISPLAY curr_memptab.pos_code  TO memptab.pos_code  

         DISPLAY curr_memptab.pos_name TO memptab.pos_name  

         DISPLAY curr_memptab.dept_code TO memptab.dept_code

      DISPLAY curr_memptab.dept_name TO memptab.dept_name

 

         INITIALIZE p_psfcurrtab.* TO NULL

         SELECT *

           INTO p_psfcurrtab.*

           FROM psfcurrtab

          WHERE idno = curr_memptab.idno

         LET curr_memptab.office = p_psfcurrtab.office_phone

         DISPLAY curr_memptab.office  TO memptab.office    

 

         INITIALIZE p_psfcodetab.* TO NULL

         SELECT *

           INTO p_psfcodetab.*  

           FROM psfcodetab

          WHERE code_kind = 501

            AND code_field = (SELECT MAX(grade) FROM psfedutab

                               WHERE idno = curr_memptab.idno)

 

         LET curr_memptab.grade     = p_psfcodetab.code_field

         DISPLAY p_psfcodetab.code_field TO memptab.grade

         DISPLAY p_psfcodetab.chin_item  TO FORMONLY.grade_name

 

         INITIALIZE p_psfedutab.* TO NULL

         SELECT *

           INTO p_psfedutab.*  

           FROM psfedutab

          WHERE grade = (SELECT MAX(grade)

                        FROM psfedutab

                          WHERE idno = curr_memptab.idno)

            AND idno = curr_memptab.idno

         LET curr_memptab.school_name = p_psfedutab.school_name

         DISPLAY curr_memptab.school_name TO memptab.school_name

     AFTER FIELD emp_name

         IF  curr_memptab.emp_name  IS NULL THEN

             ERROR "©m¦W¤£¥iªÅ¥Õ"

             NEXT FIELD memptab.emp_name

         END IF

 

     BEFORE FIELD dept_code

         MESSAGE "¿é¤J ? ¶}µøµ¡,¿é¤J§¹²¦«ö ESC Áä½T»{"

         INITIALIZE p_buffer TO NULL

         INITIALIZE win_stm  TO NULL

         LET win_stm = "SELECT dept_code, dept_name ",

                       "  FROM deptab ",

                       " ORDER BY dept_code"

     AFTER FIELD dept_code

         IF  curr_memptab.dept_code IS NULL THEN

             ERROR "³¡ªù¥N¸¹¤£¥iªÅ¥Õ"

             NEXT FIELD memptab.dept_code

         END IF

         MESSAGE " "

         LET p_buffer = GET_FLDBUF(dept_code)

         IF  p_buffer = '?' THEN

             CALL view_window(2,5,2,win_stm,"emp1111y",0)

                  RETURNING curr_memptab.dept_code,

                     curr_memptab.dept_name

             IF  curr_memptab.dept_code IS NULL THEN

                 NEXT FIELD memptab.dept_code

             END IF

             DISPLAY BY NAME curr_memptab.dept_code

             DISPLAY BY NAME curr_memptab.dept_name

         ELSE 

             SELECT dept_name

               INTO curr_memptab.dept_name

               FROM deptab

              WHERE dept_code  = curr_memptab.dept_code

          -- ¥´¿ù¶}WINDOW

             IF  SQLCA.SQLCODE <> 0 THEN

                 CALL view_window(2,5,2,win_stm,"emp1111y",0)

                     RETURNING curr_memptab.dept_code,

                        curr_memptab.dept_name

                 IF  curr_memptab.dept_code IS NULL THEN

                     NEXT FIELD memptab.dept_code

                 END IF

                 DISPLAY BY NAME curr_memptab.dept_code

             END IF

             DISPLAY BY NAME curr_memptab.dept_name

         END IF

--   CHAR  use ? , ¼Æ¦r USE 999

     BEFORE FIELD pos_code

         MESSAGE "¿é¤J 999 ¶}µøµ¡,¿é¤J§¹²¦«ö ESC Áä½T»{"

         INITIALIZE p_buffer TO NULL

         INITIALIZE win_stm  TO NULL

         LET win_stm = "SELECT pos_code, pos_name  ",

                       "  FROM spositab" ,

                       " ORDER BY pos_code"

     AFTER FIELD pos_code

         MESSAGE " "

         LET p_buffer = GET_FLDBUF(pos_code)

         IF  p_buffer = '999' THEN

             CALL view_window(2,5,2,win_stm,"emp1111y",0)

                  RETURNING curr_memptab.pos_code ,

                            curr_memptab.pos_name

             IF  curr_memptab.pos_code  IS NOT NULL THEN

                 DISPLAY BY NAME curr_memptab.pos_code

             ELSE

                 NEXT FIELD memptab.pos_code

             END IF

             DISPLAY p_spositab.pos_name TO memptab.pos_name

         ELSE 

             SELECT pos_name

               INTO curr_memptab.pos_name

               FROM spositab

              WHERE pos_code  = curr_memptab.pos_code

          -- ¥´¿ù¶}WINDOW

             IF  SQLCA.SQLCODE <> 0 THEN

                 CALL view_window(2,5,2,win_stm,"emp1111y",0)

                     RETURNING curr_memptab.pos_code,

                               curr_memptab.pos_name

                 IF  curr_memptab.pos_code IS NULL THEN

                     NEXT FIELD memptab.pos_code

                 ELSE

                     DISPLAY BY NAME curr_memptab.pos_code

                     DISPLAY BY NAME curr_memptab.pos_name

                 END IF

             END IF

             DISPLAY BY NAME curr_memptab.pos_name

         END IF

     BEFORE FIELD grade

         MESSAGE "¿é¤J ? ¶}µøµ¡,¿é¤J§¹²¦«ö ESC Áä½T»{"

         INITIALIZE p_buffer TO NULL

         INITIALIZE win_stm  TO NULL

         LET win_stm = "SELECT code_field, chin_item ",

                       "  FROM psfcodetab ",

                       " WHERE code_kind = 501",

                       "   AND code_field <> '000000'",

                       " ORDER BY code_field"

          -- ¥´¿ù¶}WINDOW

     AFTER FIELD grade

         IF  curr_memptab.grade IS NULL THEN

             ERROR "¤£¥iªÅ¥Õ"

             NEXT FIELD memptab.grade

         END IF

         MESSAGE " "

         LET p_buffer = GET_FLDBUF(grade)

         IF  p_buffer = '?' OR p_buffer = '000000' THEN

             CALL view_window(2,5,2,win_stm,"emp1111y",0)

                  RETURNING curr_memptab.grade ,p_psfcodetab.chin_item

             IF  curr_memptab.grade IS NULL THEN

                 NEXT FIELD memptab.grade

             ELSE

                 DISPLAY BY NAME curr_memptab.grade

                 DISPLAY p_psfcodetab.chin_item TO FORMONLY.grade_name

             END IF

         ELSE 

             SELECT chin_item

               INTO p_psfcodetab.chin_item

               FROM psfcodetab

              WHERE code_field = curr_memptab.grade

                AND code_kind  = 501               

          -- ¥´¿ù¶}WINDOW

             IF  SQLCA.SQLCODE <> 0 THEN

                 CALL view_window(2,5,2,win_stm,"emp1111y",0)

                      RETURNING curr_memptab.grade,

                                p_psfcodetab.chin_item

                 IF  curr_memptab.grade IS NULL THEN

                     NEXT FIELD memptab.grade

                 END IF

                 DISPLAY BY NAME curr_memptab.grade

             END IF

             DISPLAY p_psfcodetab.chin_item TO FORMONLY.grade_name 

         END IF

     AFTER FIELD enter_date

         IF  curr_memptab.enter_date IS NULL THEN

             ERROR "ªì¸u¤é¤£¥iªÅ¥Õ"

             NEXT FIELD memptab.enter_date

         END IF

         IF  NOT IH_is_date(curr_memptab.enter_date) THEN

             ERROR "¦¹Äæ¦ì¸ê®Æ¿é¤J¿ù»~!!"

             NEXT FIELD memptab.enter_date

         END IF

     AFTER FIELD birthday

         IF  curr_memptab.birthday IS NULL THEN

             ERROR "¤£¥iªÅ¥Õ"

             NEXT FIELD memptab.birthday

         END IF

         IF  NOT IH_is_date(curr_memptab.birthday) THEN

             ERROR "¦¹Äæ¦ì¸ê®Æ¿é¤J¿ù»~!!"

             NEXT FIELD memptab.birthday

         END IF

     AFTER FIELD enter_seq

         IF  curr_memptab.enter_seq IS NULL THEN

             ERROR "¨ì¾½s¸¹¤£¥iªÅ¥Õ"

             NEXT FIELD memptab.enter_seq

         END IF

 

     AFTER FIELD retire_date

         IF  curr_memptab.retire_date IS NULL THEN

             ERROR "°Ñ¥[Àxª÷¤é¤£¥iªÅ¥Õ"

             NEXT FIELD memptab.retire_date

         ELSE IF  curr_memptab.retire_date<> 0 THEN

                  IF  NOT IH_is_date(curr_memptab.retire_date) THEN

                      ERROR "¦¹Äæ¦ì¸ê®Æ¿é¤J¿ù»~!!"

                      NEXT FIELD memptab.retire_date

                  END IF

              END IF

         END IF

 

     AFTER FIELD leave_date

         IF  curr_memptab.leave_date IS NULL THEN

             ERROR "¤£¥iªÅ¥Õ"

             NEXT FIELD memptab.leave_date

         ELSE IF  curr_memptab.leave_date <> 0 THEN

                  IF  NOT IH_is_date(curr_memptab.leave_date) THEN

                      ERROR "¦¹Äæ¦ì¸ê®Æ¿é¤J¿ù»~!!"

                      NEXT FIELD memptab.leave_date

                  END IF

              END IF

         END IF

 

     AFTER FIELD ctrl_ty

         IF  curr_memptab.ctrl_ty  IS NULL THEN

             ERROR "¤£¥iªÅ¥Õ"

             NEXT FIELD memptab.ctry_ty

         END IF

         CASE curr_memptab.ctrl_ty

          WHEN "1" DISPLAY "¦CºÞ" TO FORMONLY.ctrl_name 

          WHEN "0" DISPLAY "¤£¦CºÞ" TO FORMONLY.ctrl_name   

         END CASE

 

     AFTER INPUT      

         IF  curr_memptab.upddate IS NULL THEN

             ERROR "²§°Ê¤é¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF

         IF  curr_memptab.tran_code IS NULL THEN

             ERROR "§P§O½X¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF

         IF  curr_memptab.idno IS NULL THEN

             ERROR "¨­¥÷ÃÒ¸¹¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF

         IF  curr_memptab.emp_name  IS NULL THEN

             ERROR "©m¦W¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF

         IF  curr_memptab.dept_code IS NULL THEN

             ERROR "³¡ªù¥N¸¹¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF

         IF  curr_memptab.pos_code IS NULL THEN

             ERROR "¾ºÙ¥N¸¹¤£¥iªÅ¥Õ"                   

             CONTINUE INPUT

         END IF

         IF  curr_memptab.enter_date IS NULL THEN

             ERROR "ªì¸u¤é¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF

         IF  curr_memptab.enter_seq  IS NULL THEN

             ERROR "¨ì¾½s¸¹¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF

         IF  curr_memptab.birthday IS NULL THEN

             ERROR "¥Í¤é¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF

         IF  curr_memptab.retire_date IS NULL THEN

             ERROR "°Ñ¥[Àxª÷¤é¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF

         IF  curr_memptab.leave_date IS NULL THEN

             ERROR "Â÷¾¤é¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF

         IF  curr_memptab.leave_num  IS NULL THEN

             ERROR "Â÷¾½s¸¹¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF

         OPEN WINDOW w1 AT 21,31 WITH 1 ROWS, 20 COLUMNS ATTRIBUTES(BORDER,REVERSE)

             PROMPT "½T»{ ? ( Y/N ) " FOR  CHAR  answer

         CLOSE WINDOW w1

         IF  answer MATCHES  "[yY]" THEN

             EXIT INPUT

         ELSE

             CONTINUE INPUT

         END IF

     ON KEY(INTERRUPT)

        OPEN WINDOW w1 AT 21,31 WITH 1 ROWS, 20 COLUMNS ATTRIBUTES(BORDER,REVERSE)

        IF  INT_FLAG THEN

            PROMPT "­n¨ú®ø ? ( Y/N ) " FOR  CHAR  answer

        END IF

        CLOSE WINDOW w1

        IF  answer MATCHES  "[yY]" THEN

            EXIT INPUT

        ELSE

            CONTINUE INPUT

        END IF

    END INPUT

 

    IF  INT_FLAG  THEN

        LET INT_FLAG = FALSE

        RETURN

    END IF

 

    CALL f_modify(update_option)

END FUNCTION

 


#####################################################

#    modify data function  §ó¥¿¥\¯à

#####################################################

FUNCTION f_modify(update_option)

  DEFINE update_option    SMALLINT

  CASE update_option

      WHEN 1 CALL insert_data()

      WHEN 3 CALL modify_data()

      WHEN 4 CALL delete_data()

  END CASE

  IF  SQLCA.SQLCODE = 0 AND SQLCA.SQLERRD[3] > 0 THEN

      ERROR "¦¨¥\"

  ELSE

      ERROR "¥¢±Ñ !!  ==> ½Ð³qª¾¨t²Î¤H­û,ÁÂÁÂ"

  END IF

END FUNCTION

#####################################################

#    modify_data()       

#####################################################

FUNCTION modify_data()       

      UPDATE memptab

         SET memptab.* = curr_memptab.*

       WHERE idno = curr_memptab.idno

         AND tran_code = curr_memptab.tran_code  

END FUNCTION

#####################################################

#    insert_data()       

#####################################################

FUNCTION insert_data()

    DEFINE  p_seq   LIKE memptab.emp_name

    LET  curr_memptab.upduser = sys_user_name

    LET  curr_memptab.updtime = TIME

    INSERT INTO memptab VALUES (curr_memptab.*)

END FUNCTION

#####################################################

#    delete_data()       

#####################################################

FUNCTION delete_data()

      DELETE

        FROM memptab

       WHERE idno = curr_memptab.idno

         AND tran_code = curr_memptab.tran_code  

END FUNCTION

#####################################################

#    data_initial()      

#####################################################

FUNCTION data_initial()

    LET g_disp_line = 19

    CALL sys_data_initial()

END FUNCTION


#####################################################

#    init_val      

#####################################################

FUNCTION init_val()

 

    INITIALIZE curr_memptab.* TO NULL

    INITIALIZE next_memptab.* TO NULL

    INITIALIZE prev_memptab.* TO NULL

 

END FUNCTION

 

FUNCTION show_data()

    CALL curr_time("F")

    DISPLAY BY NAME curr_memptab.idno,

                    curr_memptab.emp_name,

                    curr_memptab.dept_code,   

                    curr_memptab.dept_name,   

                    curr_memptab.psn_code ,   

                    curr_memptab.pos_code,     

                    curr_memptab.pos_name,     

                    curr_memptab.tran_code, 

                    curr_memptab.enter_date, 

                    curr_memptab.enter_seq, 

                    curr_memptab.birthday,

                    curr_memptab.retire_date,

                    curr_memptab.office     ,

                    curr_memptab.phone      ,

                    curr_memptab.grade     ,

                    curr_memptab.school_name,

                    curr_memptab.addr    ,

                    curr_memptab.leave_date,

                    curr_memptab.leave_num,

                    curr_memptab.ctrl_ty,

                    curr_memptab.remark,

                    curr_memptab.edu_mark,

                    curr_memptab.upddate,

                    curr_memptab.tran_code

    SELECT *

      INTO p_psfcodetab.*

      FROM psfcodetab

     WHERE code_kind = 501

       AND code_field = curr_memptab.grade

    DISPLAY p_psfcodetab.code_field TO memptab.grade 

    DISPLAY p_psfcodetab.chin_item TO FORMONLY.grade_name

 

     CASE curr_memptab.tran_code

     WHEN "1" DISPLAY "±M¥ô" TO FORMONLY.tran_name 

     WHEN "2" DISPLAY "­Ý¥ô" TO FORMONLY.tran_name 

     WHEN "3" DISPLAY "¯S®×" TO FORMONLY.tran_name 

     WHEN "4" DISPLAY "°òª÷·|" TO FORMONLY.tran_name 

     END CASE

     CASE curr_memptab.ctrl_ty 

     WHEN "1" DISPLAY "¦CºÞ" TO FORMONLY.ctrl_name 

     WHEN "0" DISPLAY "¤£¦CºÞ" TO FORMONLY.ctrl_name 

     END CASE

     CALL Get_Count(prepare_clause) RETURNING tot_cnt

     IF  tot_cnt > 1 THEN

         DISPLAY "¦@"," ", tot_cnt USING "#####"," ",

                 "µ§¤§²Ä"," ",curr_cnt USING "#####"," ",

                 "µ§" AT g_disp_line, 1 ATTRIBUTE(REVERSE)

     END IF

     CALL curr_time("M")

END FUNCTION


emp1111.per

DATABASE nckuabs

SCREEN

{

 ²§°Ê¤é´Á:[f21   ]                        §P§O½X:[b][f22   ]

 ¨­¤ÀÃÒ¦r¸¹:[f01       ]                  ©m  ¦W:[f02       ]

 ³¡ªù¥N¸¹:[f03     ][f04                         ]

 Â¾ºÙ:[f05 ][f06                 ]      ªì¸u¤é´Á:[f07   ]

 ¨ì¾½s¸¹:[y   ]          

 ±Ð¾­û¤u¸¹:[f08    ]    ¥Í¤é:[f09   ]   °Ñ¥[Àxª÷¤é´Á:[f10   ]

 ¹q¸Ü(¤½):[f11       ]¦v:[f12       ]   ±Ð¨|µ{«×:[f13 ][f14     ]

 ¾Ç®Õ¦WºÙ:[f15                                     ]

 ¦a§}:[f16                                                         ]

 Â÷¾¤é´Á:[f17   ] Â÷¾½s¸¹:[f18   ]  ¸u¹µºÞ²z§O:[a][f19   ]

 ³Æµù:[f20                                                         ]

 ³ø³¡:[f23                                                         ]

}

END

TABLES

memptab

ATTRIBUTES

f01  = memptab.idno         ,UPSHIFT,AUTONEXT;

f02  = memptab.emp_name     ,AUTONEXT;

f03  = memptab.dept_code    ,AUTONEXT;

f04  = memptab.dept_name    ,NOENTRY;

f05  = memptab.pos_code     ,AUTONEXT;

f06  = memptab.pos_name     ,NOENTRY;

f07  = memptab.enter_date   ,AUTONEXT;

y    = memptab.enter_seq    ,AUTONEXT;

f08  = memptab.psn_code     ,AUTONEXT;

f09  = memptab.birthday     ,AUTONEXT;

f10  = memptab.retire_date  ,AUTONEXT;

f11  = memptab.office       ,AUTONEXT;

f12  = memptab.phone        ,AUTONEXT;

f13  = memptab.grade        ,AUTONEXT;

f14  = FORMONLY.grade_name  ,NOENTRY;

f15  = memptab.school_name  ,AUTONEXT;

f16  = memptab.addr         ,AUTONEXT;

f17  = memptab.leave_date   ,AUTONEXT;

f18  = memptab.leave_num    ,AUTONEXT;

a    = memptab.ctrl_ty      ,COMMENTS="1.¦CºÞ 0.¤£¦CºÞ"

                            ,INCLUDE=("0" TO "1")  ,AUTONEXT;

f19  = FORMONLY.ctrl_name   ,NOENTRY;

f20  = memptab.remark       ,AUTONEXT;

f21  = memptab.upddate      ,NOENTRY;

b    = memptab.tran_code    ,COMMENTS="1.±M¥ô 2.­Ý¥ô 3.¯S®× 4.°òª÷·|"

                            ,INCLUDE=("1" TO "4")  ,AUTONEXT;

f22  = FORMONLY.tran_name   ,NOENTRY;

f23  = memptab.edu_mark     ,AUTONEXT;

END


emp1111w.per

DATABASE FORMONLY

SCREEN

{

     ©m  ¦W  ³¡ªù¦WºÙ                   ¾ºÙ 

   =======================================================================

[x|a         |b                         |c                                ]

[x|a         |b                         |c                                ]

[x|a         |b                         |c                                ]

[x|a         |b                         |c                                ]

[x|a         |b                         |c                                ]

[x|a         |b                         |c                                ]

[x|a         |b                         |c                                ]

[x|a         |b                         |c                                ]

[x|a         |b                         |c                                ]

[x|a         |b                         |c                                ]

[x|a         |b                         |c                                ]

[x|a         |b                         |c                                ]

 

}

END

 

ATTRIBUTES

 a  = FORMONLY.name1       , NOENTRY;

 b  = FORMONLY.name2       , NOENTRY;

 c  = FORMONLY.name3       , NOENTRY;

 x  = FORMONLY.no          , AUTONEXT;      

END

 

INSTRUCTIONS

DELIMITERS "  "

SCREEN RECORD s_dispitem[12] (name1 THRU no)

END


emp1111x.per

DATABASE nckuabs

SCREEN

{

 ¨­¤ÀÃÒ¦r¸¹:[f01       ] ©m ¦W:[f02       ] ¤é´Á:[f21   ]

 ³¡ªù¥N¸¹:[f03     ][f04                         ]

 Â¾ºÙ:[f05 ][f06                 ] ªì¸u¤é´Á:[f07   ]

 ¨ì¾½s¸¹:[f08 ]¥Í¤é:[f09   ]  °Ñ¥[Àxª÷¤é´Á:[f10   ]

 ¹q¸Ü(¤½):[f11       ]¦v:[f12       ]±Ð¨|µ{«×:[f13 ][f14     ]

 ¾Ç®Õ¦WºÙ:[f15                                     ]

 ¦a§}:[f16                                                         ]

 Â÷¾¤é´Á:[f17   ] Â÷¾½s¸¹:[f18   ]¸u¹µºÞ²z§O:[a][f19   ]

 ³Æµù:[f20                                                         ]

 

·|­p½s¸¹ ¸ê®Æ§¹¾ã§O:[c]³¡ªù¥N¸¹:[f31     ][f32                         ]

ùùùùùùùù ¾ºÙ:[f33 ][f34                 ] ¥D«ù¤H:[f35       ]

[b      ]­p¹º¦WºÙ:[f36                                     ]

[b      ]­p¹º´Á¶¡:[f37   ]¦Ü[f38   ]Á~¸ê:[f39   ]µ²®×§O:[d][f40   ]

[b      ]¬ì¥Ø:[e][f41           ]¤ä¹SÃþ§O:[f][f42       ]

[b      ]¸g¶O¨Ó·½:[g][f43       ]E-mail:[f44                           ]

}

END

 

TABLES

memptab,demptab

ATTRIBUTES

f01  = memptab.idno         ,UPSHIFT,AUTONEXT;

f02  = memptab.emp_name     ,AUTONEXT;

f03  = memptab.dept_code    ,AUTONEXT;

f04  = memptab.dept_name    ,NOENTRY;

f05  = memptab.pos_code     ,AUTONEXT;

f06  = memptab.pos_name     ,NOENTRY;

f07  = memptab.enter_date   ,AUTONEXT;

f08  = memptab.enter_num    ,AUTONEXT;

f09  = memptab.birthday     ,AUTONEXT;

f10  = memptab.retire_date  ,AUTONEXT;

f11  = memptab.office       ,AUTONEXT;

f12  = memptab.phone        ,AUTONEXT;

f13  = memptab.grade        ,AUTONEXT;

f14  = FORMONLY.grade_name  ,NOENTRY;

f15  = memptab.school_name  ,AUTONEXT;

f16  = memptab.addr         ,AUTONEXT;

f17  = memptab.leave_date   ,AUTONEXT;

f18  = memptab.leave_num    ,AUTONEXT;

a    = memptab.ctrl_ty      ,AUTONEXT;

f19  = FORMONLY.ctrl_name   ,NOENTRY;

f20  = memptab.remark       ,AUTONEXT;

f21  = memptab.upddate      ,NOENTRY;

b    = demptab.acct_no      ,AUTONEXT;

c    = demptab.mark         ,COMMENTS="Y.¸ê®Æ§¹¾ã  N ¸ê®Æ¤£§¹¾ã"

                            ,INCLUDE=("Y" TO "N")  ,AUTONEXT;

f31  = demptab.dept_code    ,AUTONEXT;

f32  = demptab.dept_name    ,NOENTRY;

f33  = demptab.pos_code     ,AUTONEXT;

f34  = demptab.pos_name     ,NOENTRY;

f35  = demptab.leader       ,AUTONEXT;

f36  = demptab.plan_name    ,UPSHIFT,AUTONEXT;

f37  = demptab.date_beg     ,AUTONEXT;

f38  = demptab.date_end     ,AUTONEXT;

f39  = demptab.salary       ,AUTONEXT;

d    = demptab.plan_over    ,COMMENTS="µ²®× '1' ¥¼µ²®× '0'"

                            ,INCLUDE=("1" TO "0")  ,AUTONEXT;

f40  = FORMONLY.over_name   ,AUTONEXT;

e    = demptab.budget_no    ,AUTONEXT;

f41  = FORMONLY.budget_name ,NOENTRY;

f    = demptab.salary_ty    ,AUTONEXT;

f42  = FORMONLY.salary_name ,NOENTRY;

g    = demptab.salary_item  ,AUTONEXT;

f43  = FORMONLY.item_name   ,NOENTRY;

f44  = demptab.e_mail       ,AUTONEXT;

END

 

INSTRUCTIONS

SCREEN RECORD s_item[4] (acct_no)

END

 


  emp1111y.per

 

DATABASE FORMONLY

SCREEN

{

 

     ¥N  ¸¹          ¦W        ºÙ

    ========  ==============================  [b]

[a][f01     ][f02                           ]

[a][f01     ][f02                           ]

[a][f01     ][f02                           ]

[a][f01     ][f02                           ]

[a][f01     ][f02                           ]

[a][f01     ][f02                           ]

[a][f01     ][f02                           ]

[a][f01     ][f02                           ]

[a][f01     ][f02                           ]

[a][f01     ][f02                           ]

 

}

END

 

ATTRIBUTES

b   = FORMONLY.xx,INVISIBLE,NOENTRY;

a   = FORMONLY.no,INVISIBLE,AUTONEXT;

f01 = FORMONLY.name1,NOENTRY;

f02 = FORMONLY.name2,NOENTRY;

END

INSTRUCTIONS

   DELIMITERS "  "

SCREEN RECORD s_dispitem[10] (name1,name2,no)

 

END


17-5  ³øªí function

#####################################################################

#     program-name : hea1221.4gl

#     author-name  : ³¯¤éª@

#     FUNCTION     : ¤½«Oú¶O²M³æ¦C¦Lµ{¦¡

#     used TABLES  : heal002tab

#     LAST-Modify  : 1995-4-18

#                  : 1995-5-23

#####################################################################

DATABASE payroll

 

GLOBALS

 

#------------------

#  system area

#------------------

    DEFINE sys_date         INTEGER,

           sys_program      CHAR(7),

           sys_heading      CHAR(30),

           sys_user_id      CHAR(7),

           sys_user_ip      CHAR(20),

           sys_user_name    CHAR(8),

           sys_permision    CHAR(6)       #¨Ï¥ÎÅv­­               

 

#------------------

#  work area

#------------------

   DEFINE  lp              CHAR(100)

#------------------

#  i-o area

#------------------

   DEFINE  p_heal002tab    RECORD   LIKE heal002tab.*

   DEFINE  p_sparmtab      RECORD   LIKE sparmtab.*

   DEFINE  p_prt           RECORD

           paypnt          LIKE heal002tab.paypnt,

           basepay_level   LIKE sbasetab.basepay_level,

           con1            LIKE heal002tab.con1,

           in_con1         LIKE heal002tab.in_con1,

           out_con1        LIKE heal002tab.out_con1,

           con2            LIKE heal002tab.con1,

           pins_fee_tot    INTEGER,

           pins_fee        INTEGER,

           pins_fee_s      INTEGER,

           trn_con1        SMALLINT,

           trn_con2        SMALLINT,

           trn_con3        SMALLINT,

           trn_con4        SMALLINT,

           trn_con5        SMALLINT

           END RECORD

   DEFINE  curr_ym         SMALLINT

   DEFINE  old_ym          SMALLINT

   DEFINE  p_ym            SMALLINT

   DEFINE  p_yy            SMALLINT

   DEFINE  p_mm            SMALLINT

   DEFINE  page_lenth      SMALLINT

   DEFINE  prt_count       SMALLINT

   DEFINE  Is_Run          CHAR(1)

END GLOBALS

 

#####################################

#    main program

#####################################

MAIN

    DEFER    INTERRUPT

    DEFER    QUIT

    SET      LOCK      MODE TO WAIT

    WHENEVER ERROR     STOP

    OPTIONS  COMMENT   LINE 23

    OPTIONS  MESSAGE   LINE 24

    OPTIONS  PROMPT    LINE 24

    OPTIONS  ERROR     LINE 24

 

    CALL data_initial()

    CALL disp_screen(4,20)

    CALL curr_window("M")

 

    MENU "¤½«Oú¶O²M³æ"

        COMMAND "1.¾\Äý"

            CALL Run_hea1221()

            CALL curr_window("M")

        COMMAND "2.¤½°·«O²Ö­pÀɺûÅ@"

            RUN "hea1132.4ge YYYYYY"

            CALL curr_window("M")

        COMMAND "0.Â÷¶}"

            EXIT MENU

    END MENU

 

END MAIN

 

##############################################################

#       initialize process

##############################################################

FUNCTION data_initial()

     CALL sys_data_initial()

     LET page_lenth     = 39

     LET curr_ym = sys_date/100

     LET old_ym         = 0

     LET Is_Run         = "N"

 

     SELECT *

       INTO  p_sparmtab.*

       FROM  sparmtab

 

END FUNCTION

 

FUNCTION Run_hea1221()

    LET    INT_FLAG   = FALSE

 

    DISPLAY "" AT 1,1

    DISPLAY "" AT 2,1

 

    #DISPLAY "Áä¤J±ý¦C¦Lªº½d³ò¡B«ö CTRL-C ªí©ñ±ó¡B «ö ESC Áäªí¶}©l" AT 20,10

    MESSAGE  "Áä¤J±ý¦C¦Lªº½d³ò¡B«ö CTRL-C ªí©ñ±ó¡B «ö ESC Áäªí¶}©l"

              ATTRIBUTE(REVERSE)

    INPUT BY NAME p_yy, p_mm

        AFTER FIELD p_yy

            IF  p_yy IS NULL THEN

                ERROR "  -- >>  ¦~«×¥²»Ý¿é¤J "

                NEXT FIELD p_yy

            END IF

 

        AFTER FIELD p_mm

            IF  p_mm IS NULL THEN

                ERROR "  -- >>  ¤ë¥÷¿é¤J¿ù»~!!½Ð­«·s¿é¤J!! "

                NEXT FIELD p_mm

            END IF

            LET p_ym = p_yy * 100 + p_mm

            IF  p_ym > curr_ym THEN

                ERROR "¤£¥i¿é¤J¥¼¨Ó¤é´Á"

                NEXT FIELD p_yy

            END IF

            IF  old_ym THEN

                IF  old_ym != p_ym THEN

                    LET Is_Run  = "N"

                END IF

            END IF

 

    END INPUT

    IF  INT_FLAG THEN

        ERROR "©ñ±ó ..."

        LET INT_FLAG = FALSE

        SLEEP 1

        RETURN

    END IF

    IF  Is_Run  = "N" THEN

        IF  print_hea1221() THEN

            LET Is_Run  = "Y"

        END IF

    END IF

    IF  Is_Run  = "Y" THEN

        LET old_ym = p_ym

        LET lp = "nckuview 66"

        RUN lp

    ELSE

        ERROR p_yy,"¦~",p_mm,"¤ëµL¤½«O¸ê®Æ!!¡A½Ð¥ý°õ¦æ¤½«Oú¶O²M¥U"

        SLEEP 2

    END IF

END FUNCTION

#######################################

#      print function

#######################################

 


FUNCTION print_hea1221()

    DEFINE query_1        CHAR(600)

    DEFINE query_2        CHAR(600)

    DEFINE i              SMALLINT

    DEFINE p_year         SMALLINT

 

    LET prt_count  =  0

 

    ERROR "¸ê®Æ¾ã²z¤¤¡A ½Ðµy«Ý ..." ATTRIBUTE(BLINK)

 

    IF  INT_FLAG THEN

        ERROR "©ñ±ó"

        LET INT_FLAG = FALSE

        SLEEP 1

        RETURN FALSE

    END IF

 

    START REPORT rep_hea1221 TO PIPE "cpri"

    CALL count_fun()

 

    LET query_1 = " SELECT paypnt,con1,in_con1,out_con1 ",

                  "   FROM heal002tab",

                  "  WHERE con_year = ?",

                  "    AND con_month = ?",

                  "  ORDER BY paypnt "

    PREPARE p_curs FROM query_1

    DECLARE p_cursor CURSOR FOR p_curs

    OPEN    p_cursor USING p_yy, p_mm

    FOREACH p_cursor INTO p_prt.paypnt, p_prt.con1,

                          p_prt.in_con1,p_prt.out_con1

        LET p_prt.con2 = p_prt.con1 + p_prt.in_con1 - p_prt.out_con1

        SELECT basepay_level,pins_fee_tot,pins_fee,pins_fee_s

          INTO p_prt.basepay_level, p_prt.pins_fee_tot,

               p_prt.pins_fee,      p_prt.pins_fee_s

          FROM sbasetab,sparmtab,spaypntab

         WHERE spaypntab.paypnt_tot = p_prt.paypnt

           AND sbasetab.annu_yy = p_sparmtab.curr_yy 

           AND sbasetab.sal_grd = spaypntab.sal_grd

        LET p_prt.pins_fee_tot = p_prt.con2 * p_prt.pins_fee_tot

        LET p_prt.pins_fee = p_prt.con2 * p_prt.pins_fee

        LET p_prt.pins_fee_s = p_prt.con2 * p_prt.pins_fee_s

 

        OUTPUT TO REPORT rep_hea1221()

        LET prt_count = prt_count + 1

        IF  prt_count > page_lenth THEN

            LET prt_count = 1

        END IF

       IF  INT_FLAG THEN

           ERROR "©ñ±ó ..."

           SLEEP 1

           EXIT FOREACH

       END IF

    END FOREACH

    IF  INT_FLAG THEN

        LET INT_FLAG = FALSE

        RETURN FALSE

    END IF

    IF  prt_count < page_lenth THEN

        INITIALIZE p_prt.* TO NULL

        FOR i = 1 TO (page_lenth - prt_count)

            OUTPUT TO REPORT rep_hea1221()

        END FOR

    END IF

    FINISH REPORT rep_hea1221

    RETURN prt_count

END FUNCTION

 


##############################################

#   report function

##############################################

REPORT rep_hea1221()

   DEFINE  line_count      SMALLINT

OUTPUT

  PAGE LENGTH    65

  TOP MARGIN     1

  LEFT MARGIN    0

  BOTTOM MARGIN  2

 

 FORMAT

   PAGE HEADER

        SKIP 1 LINE

        PRINT COLUMN   2,"~ig2x6l4; "

        PRINT COLUMN   2,"                               ùÝùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùß"

        PRINT COLUMN  2," ­n «O ¾÷ Ãö : ¦¨ ¥\ ¤j ¾Ç     ùø  ",p_yy USING "#&"," ¦~ ",p_mm USING "#&"," ¤ë ¥÷ ¤½ «O ú ¶O ²M ³æ  ùø  ­p ºâ ¤é ´Á ",TODAY USING "MM/DD/YY"

        PRINT COLUMN  2," ¥N       ¸¹ : 0 0 5 8 3       ùãùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùå     "

        PRINT COLUMN  2,"                                            ¡i  ¾ã  ¤ë  ¡j"

        SKIP 1 LINE

        PRINT COLUMN   7,"ùÝùùùùùçùùùùùùùÞùùùùùçùùùùùçùùùùùçùùùùùÞùùùùùùùùùçùùùùùùùùùçùùùùùùùùùçùùùùùùùùùß"

        PRINT COLUMN   7,"ùø ¥» ¢x  «O  ùø¤W¤ë¢x¥»¤ë¢x¥»¤ë¢x¥»¤ëùø À³  ú ¢x ¦Û  ¥I ¢x ¾÷  Ãö ¢x        ùø"

        PRINT COLUMN   7,"ùø ­Ä ¢x  ­Ä  ùø¤H¼Æ¢x¥[«O¢x°h«O¢x¤H¼Æùø «O  ¶O ¢x ¹ê  ÃB ¢x ¸É  §U ¢x ³Æ  µù ùø"

        PRINT COLUMN   7,"ùò¢w¢w¢q¢w¢w¢wùó¢w¢w¢q¢w¢w¢q¢w¢w¢q¢w¢wùó¢w¢w¢w¢w¢q¢w¢w¢w¢w¢q¢w¢w¢w¢w¢q¢w¢w¢w¢wùô"

        LET line_count = 0

   ON EVERY ROW

        LET line_count = line_count + 1

        IF line_count > page_lenth  then

           SKIP TO TOP OF PAGE

        END IF

        PRINT COLUMN   7,"ùø",

              COLUMN   9,p_prt.paypnt USING "###&",

              COLUMN  13,"¢x",

              COLUMN  15,p_prt.basepay_level  USING "#####&",

              COLUMN  21,"ùø",

              COLUMN  23,p_prt.con1 USING "###&",

              COLUMN  27,"¢x",

              COLUMN  29,p_prt.in_con1 USING "###&",

              COLUMN  33,"¢x",

              COLUMN  35,p_prt.out_con1 USING "###&",

              COLUMN  39,"¢x",

              COLUMN  41,p_prt.con2  USING "###&",

              COLUMN  45,"ùø",

              COLUMN  47,p_prt.pins_fee_tot USING "#######&",

              COLUMN  55,"¢x",

              COLUMN  57,p_prt.pins_fee USING "#######&",

              COLUMN  65,"¢x",

              COLUMN  67,p_prt.pins_fee_s USING "#######&",

              COLUMN  75,"¢x",

              COLUMN  85,"ùø"

   ON LAST ROW

         PRINT COLUMN  7,"ùò¢w¢w¢r¢w¢w¢wùó¢w¢w¢q¢w¢w¢q¢w¢w¢q¢w¢wùó¢w¢w¢w¢w¢q¢w¢w¢w¢w¢q¢w¢w¢w¢w¢q¢w¢w¢w¢wùô"

         PRINT COLUMN  7,"ùø  ¦X    ­p  ùø",

               COLUMN  23, SUM(p_prt.con1) USING "###&",

               COLUMN  27,"¢x",

               COLUMN  29, SUM(p_prt.in_con1) USING "###&",

               COLUMN  33,"¢x",

               COLUMN  35, SUM(p_prt.out_con1) USING "###&",

               COLUMN  39,"¢x",

               COLUMN  41, SUM(p_prt.con2)  USING "###&",

               COLUMN  45,"ùø",

               COLUMN  47, SUM(p_prt.pins_fee_tot) USING "#######&",

               COLUMN  55,"¢x",

               COLUMN  57, SUM(p_prt.pins_fee) USING "#######&",

               COLUMN  65,"¢x",

               COLUMN  67, SUM(p_prt.pins_fee_s) USING "#######&",

               COLUMN  75,"¢x",

               COLUMN  85,"ùø"

   PAGE TRAILER

         PRINT COLUMN  7,"ùò¢w¢w¢w¢w¢w¢wùó¢w¢w¢r¢w¢w¢r¢w¢w¢r¢w¢wùö¢w¢w¢w¢w¢r¢w¢w¢w¢w¢r¢w¢w¢w¢w¢r¢w¢w¢w¢wùô"

         PRINT COLUMN  7,"ùø  ¥» ¤ë ¥÷  ùø ¥[«O ",p_prt.trn_con1 USING "##&","¤H                                                   ùø"

         PRINT COLUMN  7,"ùø  ²§    °Ê  ùø °h«O ",p_prt.trn_con4 USING "##&","¤H     ÅÜ­Ä ",p_prt.trn_con5 USING "##&","¤H        ´_«O ",p_prt.trn_con3 USING "##&","¤H       °±«O ",p_prt.trn_con2 USING "##&","¤H ùø"

         PRINT COLUMN  7,"ùò¢w¢w¢w¢w¢w¢wùö¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢wùô"

         PRINT COLUMN  7,"ùø ­n «O ¾÷ Ãö ¦L «H              ¸g¿ì¤H        ¶ñ ³ø ¤é ´Á    ¦~    ¤ë    ¤é ùø"

         PRINT COLUMN  7,"ùø ©Î ¥D ºÞ ¾ ³¹                 ñ  ³¹                                      ùø"

         PRINT COLUMN  7,"ùø                                                                            ùø"

         PRINT COLUMN  7,"ùãùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùå"

         PRINT COLUMN  7,""

         PRINT COLUMN  7,"",ASCII 12

END REPORT

 

 


FUNCTION count_fun()

 

    LET p_prt.trn_con1 = 0

    SELECT COUNT(*)

      INTO p_prt.trn_con1

      FROM healtab

     WHERE trn_yy = p_yy

       AND trn_mm = p_mm

       AND truth  = "N"

       AND trn_no = "1"

       AND ins_ty = "1"

 

--  IF  SQLCA.SQLAWARN[3] MATCHES "[wW]" THEN

    IF  p_prt.trn_con1 IS NULL THEN

        LET p_prt.trn_con1 = 0

    END IF

 

    LET p_prt.trn_con2 = 0

    SELECT COUNT(*)

      INTO p_prt.trn_con2

      FROM healtab

     WHERE trn_yy = p_yy

       AND trn_mm = p_mm

       AND truth  = "N"

       AND trn_no = "2"

       AND ins_ty = "1"

 

    IF  p_prt.trn_con2 IS NULL THEN

        LET p_prt.trn_con2 = 0

    END IF

 

    LET p_prt.trn_con3 = 0

    SELECT COUNT(*)

      INTO p_prt.trn_con3

      FROM healtab

     WHERE trn_yy = p_yy

       AND trn_mm = p_mm

       AND truth  = "N"

       AND trn_no = "3"

       AND ins_ty = "1"

    IF  p_prt.trn_con3 IS NULL THEN

        LET p_prt.trn_con3 = 0

    END IF

 

    LET p_prt.trn_con4 = 0

    SELECT COUNT(*)

      INTO p_prt.trn_con4

      FROM healtab

     WHERE trn_yy = p_yy

       AND trn_mm = p_mm

       AND truth  = "N"

       AND trn_no = "4"

       AND ins_ty = "1"

    IF  p_prt.trn_con4 IS NULL THEN

        LET p_prt.trn_con4 = 0

    END IF

 

    LET p_prt.trn_con5 = 0

    SELECT COUNT(*)

      INTO p_prt.trn_con5

      FROM healtab

     WHERE trn_yy = p_yy

       AND trn_mm = p_mm

       AND truth  = "N"

       AND trn_no MATCHES "[56]"

       AND ins_ty = "1"

    IF  p_prt.trn_con5 IS NULL THEN

        LET p_prt.trn_con5 = 0

    END IF

 

END FUNCTION


Hea1221.per

DATABASE FORMONLY

SCREEN

{

 

 

 

              ¡¹    ¤½ «O ú ¶O ²M ³æ ¦C ¦L µ{ ¦¡     ¡¹

     ùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùù

 

 

                    ¦C¦L²M¥U¤é´Á¡G[a1] ¦~ [a2] ¤ë 

 

 

     ùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùù

 

}

END

 

ATTRIBUTES

a1   = formonly.p_yy,    AUTONEXT;

a2   = formonly.p_mm,    AUTONEXT;

END


17-6 ¤½¥Î¾\Äý library function

#-----------------------------------------------------------------------

#   viewlib.4gl

#-----------------------------------------------------------------------

 

GLOBALS

    DEFINE show_cnt,pg_cnt       SMALLINT

    DEFINE curr,i,j,k,l,curr_cnt SMALLINT

    DEFINE lens,len,p_item       SMALLINT

    DEFINE wpa_curr              SMALLINT

    DEFINE wsa_curr              SMALLINT

    DEFINE warr_cnt              SMALLINT

    DEFINE wpa_count             SMALLINT

    DEFINE next_fld              SMALLINT

    DEFINE last_key              SMALLINT

    DEFINE all_cnt               INTEGER

    DEFINE ud_key                CHAR(1)

    DEFINE tot_cnt,read_cnt      INTEGER

    DEFINE answer,cancel_sw      CHAR(1)

    DEFINE view_array1  ARRAY[100] OF RECORD

                  name1 CHAR(40),

                  no    CHAR(1)

    END RECORD

    DEFINE view_array2  ARRAY[100] OF RECORD

                  name1 CHAR(40),

                  name2 CHAR(40),

                  no    CHAR(1)

    END RECORD

    DEFINE view_array3  ARRAY[100] OF RECORD

                  name1 CHAR(40),

                  name2 CHAR(40),

                  name3 CHAR(40),

                  no    CHAR(1)

    END RECORD

    DEFINE view_array4  ARRAY[100] OF RECORD

                  name1 CHAR(40),

                  name2 CHAR(40),

                  name3 CHAR(40),

                  name4 CHAR(40),

                  no    CHAR(1)

    END RECORD

   


DEFINE view_array5  ARRAY[100] OF RECORD

                  name1 CHAR(40),

                  name2 CHAR(40),

                  name3 CHAR(40),

                  name4 CHAR(40),

                  name5 CHAR(40),

                  no    CHAR(1)

    END RECORD

    DEFINE view_array6  ARRAY[100] OF RECORD

                  name1 CHAR(40),

                  name2 CHAR(40),

                  name3 CHAR(40),

                  name4 CHAR(40),

                  name5 CHAR(40),

                  name6 CHAR(40),

                  no    CHAR(1)

    END RECORD

    DEFINE view_array7  ARRAY[100] OF RECORD

                  name1 CHAR(40),

                  name2 CHAR(40),

                  name3 CHAR(40),

                  name4 CHAR(40),

                  name5 CHAR(40),

                  name6 CHAR(40),

                  name7 CHAR(40),

                  no    CHAR(1)

    END RECORD

    DEFINE view_array8  ARRAY[100] OF RECORD

                  name1 CHAR(40),

                  name2 CHAR(40),

                  name3 CHAR(40),

                  name4 CHAR(40),

                  name5 CHAR(40),

                  name6 CHAR(40),

                  name7 CHAR(40),

                  name8 CHAR(40),

                  no    CHAR(1)

    END RECORD

   


DEFINE view_array9  ARRAY[100] OF RECORD

                  name1 CHAR(40),

                  name2 CHAR(40),

                  name3 CHAR(40),

                  name4 CHAR(40),

                  name5 CHAR(40),

                  name6 CHAR(40),

                  name7 CHAR(40),

                  name8 CHAR(40),

                  name9 CHAR(40),

                  no    CHAR(1)

    END RECORD

END GLOBALS

 


FUNCTION open_window(rows,cols,str,tabid_1,tabid_2,tab_name)

    DEFINE rows         SMALLINT  -- µøµ¡ row ¦ì¸m

    DEFINE cols         SMALLINT  -- µøµ¡ column ¦ì¸m

    DEFINE str          CHAR(8)   -- §ä´M¤§ÅܼÆ

    DEFINE tabid_1      CHAR(32)  -- §ä´Mtableªºfield (¥N¸¹)

    DEFINE tabid_2      CHAR(32)  -- §ä´Mtableªºfield (¦WºÙ)

    DEFINE tab_name     CHAR(32)  -- §ä´Mtableªº table name

    DEFINE cut_str      CHAR(8)

    DEFINE win_data  RECORD

                  num   CHAR(8),

                  name  CHAR(30)

    END RECORD

    DEFINE win_array   ARRAY[500] OF RECORD

                  no         CHAR(1),

                  num   CHAR(8),

                  name  CHAR(30)

    END RECORD

    DEFINE win_stm     CHAR(400)

    DEFINE while_stm   CHAR(400)

    INITIALIZE win_data.* TO NULL

    IF  rows > 8 THEN

        ERROR "window row must <= 8 "

     SLEEP 2

        RETURN win_data.num,win_data.name

    ELSE IF  cols > 30 THEN

             ERROR "window column must <= 30 "

          SLEEP 2

             RETURN win_data.num,win_data.name

         END IF

    END IF

    LET len = LENGTH(str)

    LET lens = len

    LET j = 0

    WHILE j = 0

IF  len = 0 THEN

            LET cut_str = "%"

        ELSE

            LET cut_str = str[1,lens], "%"

        END IF

        INITIALIZE while_stm TO NULL

        LET while_stm = " SELECT count(*)",

                        "   FROM ",tab_name CLIPPED,

                        "  WHERE ",tabid_1 CLIPPED," LIKE '",cut_str CLIPPED,"'"

        PREPARE while_pre FROM while_stm

        DECLARE while_cursor CURSOR FOR while_pre

        FOREACH while_cursor INTO j

        END FOREACH

        IF  j = 0 THEN

            LET lens = lens - 1

            IF  lens <= 0 THEN

                LET cut_str = "%"

                EXIT WHILE

            END IF

        END IF

    END WHILE

    OPEN WINDOW open_win AT rows,cols WITH FORM "openwin" ATTRIBUTE(BORDER)

    LET win_stm = " SELECT ",tabid_1 CLIPPED,",",tabid_2 CLIPPED,

                  "   FROM ",tab_name CLIPPED,

                   " WHERE ",tabid_1 CLIPPED," LIKE '",cut_str CLIPPED,"'",

                   " ORDER BY ",tabid_1 CLIPPED

    PREPARE win_pre FROM win_stm

    DECLARE win_cursor CURSOR FOR win_pre

    LET curr = 1

    FOREACH win_cursor INTO win_array[curr].num,win_array[curr].name

        INITIALIZE win_array[curr].no TO NULL

        LET curr = curr + 1

        IF  curr > 500 THEN

            ERROR "¸ê®Æ¶W¹L500µ§,½ÐÁY¤p¬d¸ß½d³ò©Î³qª¾¸ê°T³¡,ÁÂÁÂ!!"

            SLEEP 2

            CLOSE WINDOW open_win

            RETURN win_data.num,win_data.name

        END IF

    END FOREACH

    LET curr = curr - 1

    CALL SET_COUNT(curr)

    MESSAGE " <F3>¤U­¶<F4>¤W­¶<Esc>¿ï©w<Ctrl-C>©ñ±ó"

    INPUT ARRAY win_array WITHOUT DEFAULTS FROM s_dispitem.*

        BEFORE ROW

            LET wsa_curr = SCR_LINE()

            LET wpa_curr = ARR_CURR()

            IF  wpa_curr <= curr THEN

                DISPLAY win_array[wpa_curr].num   TO s_dispitem[wsa_curr].num ATTRIBUTE(REVERSE)

                DISPLAY win_array[wpa_curr].name TO s_dispitem[wsa_curr].name ATTRIBUTE(REVERSE)

                DISPLAY "Á`¦@ ",curr," µ§¤§²Ä ",wpa_curr," µ§ " AT 1,4 ATTRIBUTE(REVERSE)

            ELSE

                DISPLAY "" AT 1,1

                ERROR "´å¼Ð¤w¶W¹LÁ`µ§¼Æ¡A½Ð©¹¤W²¾°Ê !!"

            END IF

        AFTER ROW

            IF  wpa_curr <= curr THEN

                DISPLAY win_array[wpa_curr].num   TO s_dispitem[wsa_curr].num

                DISPLAY win_array[wpa_curr].name TO s_dispitem[wsa_curr].name

            END IF

        BEFORE FIELD no

            INITIALIZE win_array[wpa_curr].no TO NULL

            DISPLAY win_array[wpa_curr].no TO s_dispitem[wsa_curr].no  

        AFTER FIELD no

            LET last_key = FGL_LASTKEY()

            LET next_fld = (last_key = FGL_KEYVAL("right")) OR

                           (last_key = FGL_KEYVAL("return")) OR

                           (last_key = FGL_KEYVAL("down")) OR

                           (last_key = FGL_KEYVAL("tab"))

            IF  next_fld OR win_array[wpa_curr].no IS NOT NULL THEN

                IF  wpa_curr >= curr THEN

                    ERROR "Àɮײ×ÂI !!"

                    NEXT FIELD no

                END IF

            END IF

            INITIALIZE win_array[wpa_curr].no TO NULL

            DISPLAY win_array[wpa_curr].no TO s_dispitem[wsa_curr].no  

       ON KEY(INSERT)

           CONTINUE INPUT

       ON KEY(DELETE)

           CONTINUE INPUT

       ON KEY(INTERRUPT)

           LET INT_FLAG = FALSE

           EXIT INPUT

       AFTER INPUT

           LET p_item = ARR_CURR()

           LET win_data.num = win_array[p_item].num

           LET win_data.name = win_array[p_item].name

    END INPUT

    CLOSE WINDOW open_win

    RETURN win_data.num,win_data.name

 

END FUNCTION


FUNCTION view_window(args,r,c,stm,name,pos)

    DEFINE args         SMALLINT  -- µøµ¡ªº°Ñ¼Æ­Ó¼Æ

    DEFINE r            SMALLINT  -- µøµ¡ row ¦ì¸m

    DEFINE c            SMALLINT  -- µøµ¡ column ¦ì¸m

    DEFINE stm          CHAR(2000)-- §ä´M¤§±Ô­z

    DEFINE name         CHAR(10)  -- ¶}µøµ¡¤§FORM NAME

    DEFINE pos          SMALLINT  -- ¶}µøµ¡®É­ì¨Ó¦ì¸m

    DEFINE ret_pos      SMALLINT  -- ¶}µøµ¡«á¿ï¾Ü¦ì¸m

    DEFINE view_data  RECORD

                  name1 CHAR(40),

                  name2 CHAR(40)

    END RECORD

    IF  args <= 0 THEN

        ERROR "µøµ¡ªº°Ñ¼Æ­Ó¼Æ,¥²»Ý¤j©ó0"

        SLEEP 2

        ERROR "µøµ¡ªº°Ñ¼Æ­Ó¼Æ,¥²»Ý¤j©ó0"

        SLEEP 2

        RETURN 0

    ELSE IF args > 9 THEN

            ERROR "µøµ¡ªº°Ñ¼Æ­Ó¼Æ,¥²»Ý¤p©ó10"

            SLEEP 2

            ERROR "µøµ¡ªº°Ñ¼Æ­Ó¼Æ,¥²»Ý¤p©ó10"

            SLEEP 2

            RETURN 0

         END IF

    END IF

 

    IF  NOT (args =1 OR args = 2) AND pos = 0 THEN

        ERROR "­ì°}¦Cªº¦ì¸m¤£¥i¬°0"

        SLEEP 2

        RETURN 0

    END IF

 

    CASE args

        WHEN  1

            CALL view_window1(r,c,stm,name,pos) RETURNING ret_pos,

                 view_data.name1

            IF  pos = 0 THEN

                RETURN view_data.name1

            END IF

        WHEN  2

            CALL view_window2(r,c,stm,name,pos) RETURNING ret_pos,

                 view_data.name1,view_data.name2

            IF  pos = 0 THEN

                RETURN view_data.name1,view_data.name2

            END IF

        WHEN  3

            CALL view_window3(r,c,stm,name,pos) RETURNING ret_pos

        WHEN  4

            CALL view_window4(r,c,stm,name,pos) RETURNING ret_pos

        WHEN  5

            CALL view_window5(r,c,stm,name,pos) RETURNING ret_pos

        WHEN  6

            CALL view_window6(r,c,stm,name,pos) RETURNING ret_pos

        WHEN  7

            CALL view_window7(r,c,stm,name,pos) RETURNING ret_pos

        WHEN  8

            CALL view_window8(r,c,stm,name,pos) RETURNING ret_pos

        WHEN  9

            CALL view_window9(r,c,stm,name,pos) RETURNING ret_pos

    END CASE

 

    RETURN ret_pos

END FUNCTION

 

 


FUNCTION view_window1(rows,cols,view_stm,form_name,form_pos)

    DEFINE rows         SMALLINT  -- µøµ¡ row ¦ì¸m

    DEFINE cols         SMALLINT  -- µøµ¡ column ¦ì¸m

    DEFINE view_stm     CHAR(2000)-- §ä´M¤§±Ô­z

    DEFINE form_name    CHAR(10)  -- ¶}µøµ¡¤§FORM NAME

    DEFINE form_pos     SMALLINT  -- ¶}µøµ¡®É­ì¨Ó¦ì¸m

    DEFINE view_data  RECORD

                  name1 CHAR(40)

    END RECORD

    

    CALL before_enter(rows,cols,view_stm,form_name,form_pos)

    WHILE TRUE

        CALL before_input(1)

        INPUT ARRAY view_array1 WITHOUT DEFAULTS FROM s_dispitem.*

            BEFORE ROW

                CALL before_row(1)

            AFTER ROW

                CALL after_row(1)

            BEFORE FIELD no

                CALL before_field(1)

            AFTER FIELD no

                CALL after_field(1)

                IF  next_fld OR view_array1[wpa_curr].no IS NOT NULL THEN

                    IF  wpa_curr >= tot_cnt THEN

                        ERROR "Àɮײ×ÂI !!"

                        NEXT FIELD no

                    ELSE IF  wpa_curr >= show_cnt THEN

                             NEXT FIELD no

                         END IF

                    END IF

                END IF

                INITIALIZE view_array1[wpa_curr].no TO NULL

            ON KEY(INSERT)

                CONTINUE INPUT

            ON KEY(DELETE)

                CONTINUE INPUT

            ON KEY(CONTROL-T)

                LET ud_key = "T"

                EXIT INPUT

            ON KEY(CONTROL-B)

                LET ud_key = "B"

                EXIT INPUT

            ON KEY(CONTROL-N)

                IF  read_cnt >= tot_cnt THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "N"

                EXIT INPUT

            ON KEY(CONTROL-P)

                IF  pg_cnt = 1 THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "P"

                EXIT INPUT

            ON KEY(INTERRUPT)

             DISPLAY view_array1[wpa_curr].* TO s_dispitem[wsa_curr].*

                LET p_item = form_pos

                LET cancel_sw = "Y"

                LET ud_key = "C"

                INITIALIZE view_data.name1 TO NULL

                LET INT_FLAG = FALSE

                EXIT INPUT

            AFTER INPUT

                LET ud_key = "C"

                LET p_item = ARR_CURR()

                LET view_data.name1 = view_array1[p_item].name1

        END INPUT

        IF  end_input() THEN

            EXIT WHILE

        END IF

    END WHILE

    RETURN before_return(form_pos),view_data.name1

END FUNCTION

 

 


FUNCTION view_window2(rows,cols,view_stm,form_name,form_pos)

    DEFINE rows         SMALLINT  -- µøµ¡ row ¦ì¸m

    DEFINE cols         SMALLINT  -- µøµ¡ column ¦ì¸m

    DEFINE view_stm     CHAR(2000)-- §ä´M¤§±Ô­z

    DEFINE form_name    CHAR(10)  -- ¶}µøµ¡¤§FORM NAME

    DEFINE form_pos     SMALLINT  -- ¶}µøµ¡®É­ì¨Ó¦ì¸m

    DEFINE view_data  RECORD

                  name1 CHAR(40),

                  name2 CHAR(40)

    END RECORD

    INITIALIZE view_data.* TO NULL

    CALL before_enter(rows,cols,view_stm,form_name,form_pos)

    WHILE TRUE

        CALL before_input(2)

        INPUT ARRAY view_array2 WITHOUT DEFAULTS FROM s_dispitem.*

            BEFORE ROW

                CALL before_row(2)

            AFTER ROW

                CALL after_row(2)

            BEFORE FIELD no

                CALL before_field(2)

            AFTER FIELD no

                CALL after_field(2)

                IF  next_fld OR view_array2[wpa_curr].no IS NOT NULL THEN

                    IF  wpa_curr >= tot_cnt THEN

                        ERROR "Àɮײ×ÂI !!"

                        NEXT FIELD no

                    ELSE IF  wpa_curr >= show_cnt THEN

                             NEXT FIELD no

                         END IF

                    END IF

                END IF

                INITIALIZE view_array2[wpa_curr].no TO NULL

            ON KEY(INSERT)

                CONTINUE INPUT

            ON KEY(DELETE)

                CONTINUE INPUT

            ON KEY(CONTROL-T)

                LET ud_key = "T"

                EXIT INPUT

            ON KEY(CONTROL-B)

                LET ud_key = "B"

                EXIT INPUT

            ON KEY(CONTROL-N)

                IF  read_cnt >= tot_cnt THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "N"

                EXIT INPUT

            ON KEY(CONTROL-P)

                IF  pg_cnt = 1 THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "P"

                EXIT INPUT

            ON KEY(INTERRUPT)

             DISPLAY view_array2[wpa_curr].* TO s_dispitem[wsa_curr].*

                LET p_item = form_pos

                LET cancel_sw = "Y"

                LET ud_key = "C"

                INITIALIZE view_data.name1,view_data.name2 TO NULL

                LET INT_FLAG = FALSE

                EXIT INPUT

            AFTER INPUT

                LET ud_key = "C"

                LET p_item = ARR_CURR()

                LET view_data.name1 = view_array2[p_item].name1

                LET view_data.name2 = view_array2[p_item].name2

        END INPUT

        IF  end_input() THEN

            EXIT WHILE

        END IF

    END WHILE

    RETURN before_return(form_pos),view_data.name1,view_data.name2

END FUNCTION

 

 


FUNCTION view_window3(rows,cols,view_stm,form_name,form_pos)

    DEFINE rows         SMALLINT  -- µøµ¡ row ¦ì¸m

    DEFINE cols         SMALLINT  -- µøµ¡ column ¦ì¸m

    DEFINE view_stm     CHAR(2000)-- §ä´M¤§±Ô­z

    DEFINE form_name    CHAR(10)  -- ¶}µøµ¡¤§FORM NAME

    DEFINE form_pos     SMALLINT  -- ¶}µøµ¡®É­ì¨Ó¦ì¸m

    DEFINE esc_key      INTEGER

 

    OPTIONS ACCEPT KEY ESCAPE

    CALL before_enter(rows,cols,view_stm,form_name,form_pos)

    WHILE TRUE

        CALL before_input(3)

        INPUT ARRAY view_array3 WITHOUT DEFAULTS FROM s_dispitem.*

            BEFORE ROW

                CALL before_row(3)

            AFTER ROW

                CALL after_row(3)

            BEFORE FIELD no

                CALL before_field(3)

            AFTER FIELD no

                CALL after_field(3)

                IF  next_fld OR view_array3[wpa_curr].no IS NOT NULL THEN

                    IF  wpa_curr >= tot_cnt THEN

                        ERROR "Àɮײ×ÂI !!"

                        NEXT FIELD no

                    ELSE IF  wpa_curr >= show_cnt THEN

                             NEXT FIELD no

                         END IF

                    END IF

                END IF

                INITIALIZE view_array3[wpa_curr].no TO NULL

            ON KEY(INSERT)

                CONTINUE INPUT

            ON KEY(DELETE)

                CONTINUE INPUT

            ON KEY(CONTROL-T)

                LET ud_key = "T"

                EXIT INPUT

            ON KEY(CONTROL-B)

                LET ud_key = "B"

                EXIT INPUT

            ON KEY(CONTROL-N)

                IF  read_cnt >= tot_cnt THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "N"

                EXIT INPUT

            ON KEY(CONTROL-P)

                IF  pg_cnt = 1 THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "P"

                EXIT INPUT

            ON KEY(INTERRUPT)

             DISPLAY view_array3[wpa_curr].* TO s_dispitem[wsa_curr].*

                LET p_item = form_pos

                LET cancel_sw = "Y"

                LET ud_key = "C"

                EXIT INPUT

            AFTER INPUT

                LET ud_key = "C"

                LET p_item = ARR_CURR()

        END INPUT

        IF  end_input() THEN

            EXIT WHILE

        END IF

    END WHILE

    RETURN(before_return(form_pos))

END FUNCTION

 

 


FUNCTION view_window4(rows,cols,view_stm,form_name,form_pos)

    DEFINE rows         SMALLINT  -- µøµ¡ row ¦ì¸m

    DEFINE cols         SMALLINT  -- µøµ¡ column ¦ì¸m

    DEFINE view_stm     CHAR(2000)-- §ä´M¤§±Ô­z

    DEFINE form_name    CHAR(10)  -- ¶}µøµ¡¤§FORM NAME

    DEFINE form_pos     SMALLINT  -- ¶}µøµ¡®É­ì¨Ó¦ì¸m

 

    CALL before_enter(rows,cols,view_stm,form_name,form_pos)

    WHILE TRUE

        CALL before_input(4)

        INPUT ARRAY view_array4 WITHOUT DEFAULTS FROM s_dispitem.*

            BEFORE ROW

                CALL before_row(4)

            AFTER ROW

                CALL after_row(4)

            BEFORE FIELD no

                CALL before_field(4)

            AFTER FIELD no

                CALL after_field(4)

                IF  next_fld OR view_array4[wpa_curr].no IS NOT NULL THEN

                    IF  wpa_curr >= tot_cnt THEN

                        ERROR "Àɮײ×ÂI !!"

                        NEXT FIELD no

                    ELSE IF  wpa_curr >= show_cnt THEN

                             NEXT FIELD no

                         END IF

                    END IF

                END IF

                INITIALIZE view_array4[wpa_curr].no TO NULL

            ON KEY(INSERT)

                CONTINUE INPUT

            ON KEY(DELETE)

                CONTINUE INPUT

            ON KEY(CONTROL-T)

                LET ud_key = "T"

                EXIT INPUT

            ON KEY(CONTROL-B)

                LET ud_key = "B"

                EXIT INPUT

            ON KEY(CONTROL-N)

                IF  read_cnt >= tot_cnt THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "N"

                EXIT INPUT

            ON KEY(CONTROL-P)

                IF  pg_cnt = 1 THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "P"

                EXIT INPUT

            ON KEY(INTERRUPT)

             DISPLAY view_array4[wpa_curr].* TO s_dispitem[wsa_curr].*

                LET p_item = form_pos

                LET cancel_sw = "Y"

                LET ud_key = "C"

                EXIT INPUT

            AFTER INPUT

                LET ud_key = "C"

                LET p_item = ARR_CURR()

        END INPUT

        IF  end_input() THEN

            EXIT WHILE

        END IF

    END WHILE

    RETURN(before_return(form_pos))

END FUNCTION

 

 


FUNCTION view_window5(rows,cols,view_stm,form_name,form_pos)

    DEFINE rows         SMALLINT  -- µøµ¡ row ¦ì¸m

    DEFINE cols         SMALLINT  -- µøµ¡ column ¦ì¸m

    DEFINE view_stm     CHAR(2000)-- §ä´M¤§±Ô­z

    DEFINE form_name    CHAR(10)  -- ¶}µøµ¡¤§FORM NAME

    DEFINE form_pos     SMALLINT  -- ¶}µøµ¡®É­ì¨Ó¦ì¸m

    

    CALL before_enter(rows,cols,view_stm,form_name,form_pos)

    WHILE TRUE

        CALL before_input(5)

        INPUT ARRAY view_array5 WITHOUT DEFAULTS FROM s_dispitem.*

            BEFORE ROW

                CALL before_row(5)

            AFTER ROW

                CALL after_row(5)

            BEFORE FIELD no

                CALL before_field(5)

            AFTER FIELD no

                CALL after_field(5)

                IF  next_fld OR view_array5[wpa_curr].no IS NOT NULL THEN

                    IF  wpa_curr >= tot_cnt THEN

                        ERROR "Àɮײ×ÂI !!"

                        NEXT FIELD no

                    ELSE IF  wpa_curr >= show_cnt THEN

                             NEXT FIELD no

                         END IF

                    END IF

                END IF

                INITIALIZE view_array5[wpa_curr].no TO NULL

            ON KEY(INSERT)

                CONTINUE INPUT

            ON KEY(DELETE)

                CONTINUE INPUT

            ON KEY(CONTROL-T)

                LET ud_key = "T"

                EXIT INPUT

            ON KEY(CONTROL-B)

                LET ud_key = "B"

                EXIT INPUT

            ON KEY(CONTROL-N)

                IF  read_cnt >= tot_cnt THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "N"

                EXIT INPUT

            ON KEY(CONTROL-P)

                IF  pg_cnt = 1 THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "P"

                EXIT INPUT

            ON KEY(INTERRUPT)

             DISPLAY view_array5[wpa_curr].* TO s_dispitem[wsa_curr].*

                LET p_item = form_pos

                LET cancel_sw = "Y"

                LET ud_key = "C"

                EXIT INPUT

            AFTER INPUT

                LET ud_key = "C"

                LET p_item = ARR_CURR()

        END INPUT

        IF  end_input() THEN

            EXIT WHILE

        END IF

    END WHILE

    RETURN(before_return(form_pos))

END FUNCTION

 

 


FUNCTION view_window6(rows,cols,view_stm,form_name,form_pos)

    DEFINE rows         SMALLINT  -- µøµ¡ row ¦ì¸m

    DEFINE cols         SMALLINT  -- µøµ¡ column ¦ì¸m

    DEFINE view_stm     CHAR(2000)-- §ä´M¤§±Ô­z

    DEFINE form_name    CHAR(10)  -- ¶}µøµ¡¤§FORM NAME

    DEFINE form_pos     SMALLINT  -- ¶}µøµ¡®É­ì¨Ó¦ì¸m

 

    CALL before_enter(rows,cols,view_stm,form_name,form_pos)

    WHILE TRUE

        CALL before_input(6)

        INPUT ARRAY view_array6 WITHOUT DEFAULTS FROM s_dispitem.*

            BEFORE ROW

                CALL before_row(6)

            AFTER ROW

                CALL after_row(6)

            BEFORE FIELD no

                CALL before_field(6)

            AFTER FIELD no

                CALL after_field(6)

                IF  next_fld OR view_array6[wpa_curr].no IS NOT NULL THEN

                    IF  wpa_curr >= tot_cnt THEN

                        ERROR "Àɮײ×ÂI !!"

                        NEXT FIELD no

                    ELSE IF  wpa_curr >= show_cnt THEN

                             NEXT FIELD no

                         END IF

                    END IF

                END IF

                INITIALIZE view_array6[wpa_curr].no TO NULL

            ON KEY(INSERT)

                CONTINUE INPUT

            ON KEY(DELETE)

                CONTINUE INPUT

            ON KEY(CONTROL-T)

                LET ud_key = "T"

                EXIT INPUT

            ON KEY(CONTROL-B)

                LET ud_key = "B"

                EXIT INPUT

            ON KEY(CONTROL-N)

                IF  read_cnt >= tot_cnt THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "N"

                EXIT INPUT

            ON KEY(CONTROL-P)

                IF  pg_cnt = 1 THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "P"

                EXIT INPUT

            ON KEY(INTERRUPT)

             DISPLAY view_array6[wpa_curr].* TO s_dispitem[wsa_curr].*

                LET p_item = form_pos

                LET cancel_sw = "Y"

                LET ud_key = "C"

                EXIT INPUT

            AFTER INPUT

                LET ud_key = "C"

                LET p_item = ARR_CURR()

        END INPUT

        IF  end_input() THEN

            EXIT WHILE

        END IF

    END WHILE

    RETURN(before_return(form_pos))

END FUNCTION

 

 


FUNCTION view_window7(rows,cols,view_stm,form_name,form_pos)

    DEFINE rows         SMALLINT  -- µøµ¡ row ¦ì¸m

    DEFINE cols         SMALLINT  -- µøµ¡ column ¦ì¸m

    DEFINE view_stm     CHAR(2000)-- §ä´M¤§±Ô­z

    DEFINE form_name    CHAR(10)  -- ¶}µøµ¡¤§FORM NAME

    DEFINE form_pos     SMALLINT  -- ¶}µøµ¡®É­ì¨Ó¦ì¸m

 

    CALL before_enter(rows,cols,view_stm,form_name,form_pos)

    WHILE TRUE

        CALL before_input(7)

        INPUT ARRAY view_array7 WITHOUT DEFAULTS FROM s_dispitem.*

            BEFORE ROW

                CALL before_row(7)

            AFTER ROW

                CALL after_row(7)

            BEFORE FIELD no

                CALL before_field(7)

            AFTER FIELD no

                CALL after_field(7)

                IF  next_fld OR view_array7[wpa_curr].no IS NOT NULL THEN

                    IF  wpa_curr >= tot_cnt THEN

                        ERROR "Àɮײ×ÂI !!"

                        NEXT FIELD no

                    ELSE IF  wpa_curr >= show_cnt THEN

                             NEXT FIELD no

                         END IF

                    END IF

                END IF

                INITIALIZE view_array7[wpa_curr].no TO NULL

            ON KEY(INSERT)

                CONTINUE INPUT

            ON KEY(DELETE)

                CONTINUE INPUT

            ON KEY(CONTROL-T)

                LET ud_key = "T"

                EXIT INPUT

            ON KEY(CONTROL-B)

                LET ud_key = "B"

                EXIT INPUT

            ON KEY(CONTROL-N)

                IF  read_cnt >= tot_cnt THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "N"

                EXIT INPUT

            ON KEY(CONTROL-P)

                IF  pg_cnt = 1 THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "P"

                EXIT INPUT

            ON KEY(INTERRUPT)

             DISPLAY view_array7[wpa_curr].* TO s_dispitem[wsa_curr].*

                LET p_item = form_pos

                LET cancel_sw = "Y"

                LET ud_key = "C"

                EXIT INPUT

            AFTER INPUT

                LET ud_key = "C"

                LET p_item = ARR_CURR()

        END INPUT

        IF  end_input() THEN

            EXIT WHILE

        END IF

    END WHILE

    RETURN(before_return(form_pos))

END FUNCTION

 

 


FUNCTION view_window8(rows,cols,view_stm,form_name,form_pos)

    DEFINE rows         SMALLINT  -- µøµ¡ row ¦ì¸m

    DEFINE cols         SMALLINT  -- µøµ¡ column ¦ì¸m

    DEFINE view_stm     CHAR(2000)-- §ä´M¤§±Ô­z

    DEFINE form_name    CHAR(10)  -- ¶}µøµ¡¤§FORM NAME

    DEFINE form_pos     SMALLINT  -- ¶}µøµ¡®É­ì¨Ó¦ì¸m

 

    CALL before_enter(rows,cols,view_stm,form_name,form_pos)

    WHILE TRUE

        CALL before_input(8)

        INPUT ARRAY view_array8 WITHOUT DEFAULTS FROM s_dispitem.*

            BEFORE ROW

                CALL before_row(8)

            AFTER ROW

                CALL after_row(8)

            BEFORE FIELD no

                CALL before_field(8)

            AFTER FIELD no

                CALL after_field(8)

                IF  next_fld OR view_array8[wpa_curr].no IS NOT NULL THEN

                    IF  wpa_curr >= tot_cnt THEN

                        ERROR "Àɮײ×ÂI !!"

                        NEXT FIELD no

                    ELSE IF  wpa_curr >= show_cnt THEN

                             NEXT FIELD no

                         END IF

                    END IF

                END IF

                INITIALIZE view_array8[wpa_curr].no TO NULL

            ON KEY(INSERT)

                CONTINUE INPUT

            ON KEY(DELETE)

                CONTINUE INPUT

            ON KEY(CONTROL-T)

                LET ud_key = "T"

                EXIT INPUT

            ON KEY(CONTROL-B)

                LET ud_key = "B"

                EXIT INPUT

            ON KEY(CONTROL-N)

                IF  read_cnt >= tot_cnt THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "N"

                EXIT INPUT

            ON KEY(CONTROL-P)

                IF  pg_cnt = 1 THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "P"

                EXIT INPUT

            ON KEY(INTERRUPT)

             DISPLAY view_array8[wpa_curr].* TO s_dispitem[wsa_curr].*

                LET p_item = form_pos

                LET cancel_sw = "Y"

                LET ud_key = "C"

                EXIT INPUT

            AFTER INPUT

                LET ud_key = "C"

                LET p_item = ARR_CURR()

        END INPUT

        IF  end_input() THEN

            EXIT WHILE

        END IF

    END WHILE

    RETURN(before_return(form_pos))

END FUNCTION

 

 


FUNCTION view_window9(rows,cols,view_stm,form_name,form_pos)

    DEFINE rows         SMALLINT  -- µøµ¡ row ¦ì¸m

    DEFINE cols         SMALLINT  -- µøµ¡ column ¦ì¸m

    DEFINE view_stm     CHAR(2000)-- §ä´M¤§±Ô­z

    DEFINE form_name    CHAR(10)  -- ¶}µøµ¡¤§FORM NAME

    DEFINE form_pos     SMALLINT  -- ¶}µøµ¡®É­ì¨Ó¦ì¸m

 

    CALL before_enter(rows,cols,view_stm,form_name,form_pos)

    WHILE TRUE

        CALL before_input(9)

        INPUT ARRAY view_array9 WITHOUT DEFAULTS FROM s_dispitem.*

            BEFORE ROW

                CALL before_row(9)

            AFTER ROW

                CALL after_row(9)

            BEFORE FIELD no

                CALL before_field(9)

            AFTER FIELD no

                CALL after_field(9)

                IF  next_fld OR view_array9[wpa_curr].no IS NOT NULL THEN

                    IF  wpa_curr >= tot_cnt THEN

                        ERROR "Àɮײ×ÂI !!"

                        NEXT FIELD no

                    ELSE IF  wpa_curr >= show_cnt THEN

                             NEXT FIELD no

                         END IF

                    END IF

                END IF

                INITIALIZE view_array9[wpa_curr].no TO NULL

            ON KEY(INSERT)

                CONTINUE INPUT

            ON KEY(DELETE)

                CONTINUE INPUT

            ON KEY(CONTROL-T)

                LET ud_key = "T"

                EXIT INPUT

            ON KEY(CONTROL-B)

                LET ud_key = "B"

                EXIT INPUT

            ON KEY(CONTROL-N)

                IF  read_cnt >= tot_cnt THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "N"

                EXIT INPUT

            ON KEY(CONTROL-P)

                IF  pg_cnt = 1 THEN

                    CONTINUE INPUT

                END IF

                LET ud_key = "P"

                EXIT INPUT

            ON KEY(INTERRUPT)

             DISPLAY view_array9[wpa_curr].* TO s_dispitem[wsa_curr].*

                LET p_item = form_pos

                LET cancel_sw = "Y"

                LET ud_key = "C"

                EXIT INPUT

            AFTER INPUT

                LET ud_key = "C"

                LET p_item = ARR_CURR()

        END INPUT

        IF  end_input() THEN

            EXIT WHILE

        END IF

    END WHILE

    RETURN(before_return(form_pos))

END FUNCTION

 

 


FUNCTION Get_Count(str)

    DEFINE str                 CHAR(2000)

    DEFINE foreach_str         CHAR(2000)

 

    CALL Get_Count_up_down_shift(str,1) RETURNING all_cnt

    IF  all_cnt > 0 THEN

        RETURN all_cnt

    END IF

    CALL Get_Count_up_down_shift(str,2) RETURNING all_cnt

    IF  all_cnt > 0 THEN

        RETURN all_cnt

    END IF

    PREPARE non_updown FROM str

    DECLARE non_updown_cursor CURSOR FOR non_updown

    LET all_cnt = 0

    FOREACH non_updown_cursor INTO foreach_str

        LET all_cnt = all_cnt + 1

    END FOREACH

    RETURN all_cnt

END FUNCTION

 

 


FUNCTION Get_Count_up_down_shift(str,updown_ty)

    DEFINE str                 CHAR(2000)

    DEFINE updown_ty           SMALLINT 

    DEFINE foreach_str         CHAR(2000)

    DEFINE prepare_cnt         CHAR(2000)

    DEFINE s1,s2,s3,s4         CHAR(80)

    DEFINE g_str               CHAR(6)

    DEFINE o_str               CHAR(7)

    DEFINE u_str               CHAR(6)

    DEFINE n_str               CHAR(7)

    DEFINE f_str               CHAR(5)

    DEFINE d_str               CHAR(9)

    DEFINE cat_sw              SMALLINT

    DEFINE i,j,k,l,len         SMALLINT

    DEFINE p1,p2,all_cnt       SMALLINT

 

    IF  updown_ty = 1 THEN

        LET str = DOWNSHIFT(str)

        LET f_str = " from"

        LET g_str = " group"

        LET o_str = " order"

        LET u_str = " union"

        LET n_str = " unique"

        LET d_str = " distinct"

    ELSE

        LET str = UPSHIFT(str)

        LET f_str = " FROM"

        LET g_str = " GROUP"

        LET o_str = " ORDER"

        LET u_str = " UNION"

        LET n_str = " UNIQUE"

        LET d_str = " DISTINCT"

    END IF

    LET len = LENGTH(str)

    LET i = 0

    LET j = 0

    LET k = 0

    LET p2 = len + 1

    LET cat_sw = 0

    FOR i = 1 TO len

        LET j = i

        LET l = 1

        FOR k = 1 TO 6

            IF  str[j] = g_str[k] THEN

                LET j = j + 1

                LET l = l + 1

            ELSE

                EXIT FOR

            END IF

        END FOR

        IF  l = 7 THEN

            LET cat_sw = 1

        END IF

    END FOR

    FOR i = 1 TO len

        LET j = i

        LET l = 1

        FOR k = 1 TO 9

            IF  str[j] = d_str[k] THEN

                LET j = j + 1

                LET l = l + 1

            ELSE

                EXIT FOR

            END IF

        END FOR

        IF  l = 10 THEN

            LET cat_sw = 1

        END IF

    END FOR

    FOR i = 1 TO len

        LET j = i

        LET l = 1

        FOR k = 1 TO 6

            IF  str[j] = u_str[k] THEN

                LET j = j + 1

                LET l = l + 1

            ELSE

                EXIT FOR

            END IF

        END FOR

        IF  l = 7 THEN

            LET cat_sw = 1

        END IF

    END FOR

    FOR i = 1 TO len

        LET j = i

        LET l = 1

        FOR k = 1 TO 7

            IF  str[j] = n_str[k] THEN

                LET j = j + 1

                LET l = l + 1

            ELSE

                EXIT FOR

            END IF

        END FOR

        IF  l = 8 THEN

            LET cat_sw = 1

        END IF

    END FOR

    IF  cat_sw = 1 THEN

        WHENEVER ERROR CONTINUE

        PREPARE cat_cnt FROM str

        IF  SQLCA.SQLCODE = 201 THEN

            LET s1 = prepare_cnt[1,80]

            LET s2 = prepare_cnt[81,160]

            LET s3 = prepare_cnt[161,240]

            LET s4 = prepare_cnt[241,320]

            DISPLAY s1 AT 1,1

            DISPLAY s2 AT 2,1

            DISPLAY s3 AT 3,1

            DISPLAY s4 AT 4,1

            DISPLAY "" AT 5,1

            ERROR "¦r¦ê»yªk¦³»~"

            RETURN -1

        END IF

        DECLARE cat_curr CURSOR FOR cat_cnt

        LET all_cnt = 0

        FOREACH cat_curr INTO foreach_str

            LET all_cnt = all_cnt + 1

        END FOREACH

        RETURN all_cnt

    END IF

    FOR i = 1 TO len

        LET j = i

        LET l = 1

        FOR k = 1 TO 5

            IF  str[j] = f_str[k] THEN

                LET j = j + 1

                LET l = l + 1

            ELSE

                EXIT FOR

            END IF

        END FOR

        IF  l = 6 THEN

            LET p1 = i

        END IF

    END FOR

    FOR i = 1 TO len

        LET j = i

        LET l = 1

        FOR k = 1 TO 6

            IF  str[j] = o_str[k] THEN

                LET j = j + 1

                LET l = l + 1

            ELSE

                EXIT FOR

            END IF

        END FOR

        IF  l = 7 THEN

            LET p2 = i

        END IF

    END FOR

    LET prepare_cnt = "SELECT COUNT(*) "

    LET i = p2 - p1

    LET j = 16

    FOR k = 1 TO i

        LET j = j + 1

        LET l = p1 + k - 1

        LET prepare_cnt[j,j] = str[l,l]

    END FOR

    WHENEVER ERROR CONTINUE

    PREPARE pre_cnt FROM prepare_cnt

    DECLARE cnt_curr CURSOR FOR pre_cnt

    OPEN cnt_curr  

    FETCH cnt_curr  INTO all_cnt   

    WHENEVER ERROR STOP

    CLOSE cnt_curr  

    IF  SQLCA.SQLCODE = 201 THEN

        LET s1 = prepare_cnt[1,80]

        LET s2 = prepare_cnt[81,160]

        LET s3 = prepare_cnt[161,240]

        LET s4 = prepare_cnt[241,320]

        DISPLAY s1 AT 1,1

        DISPLAY s2 AT 2,1

        DISPLAY s3 AT 3,1

        DISPLAY s4 AT 4,1

        DISPLAY "" AT 5,1

        ERROR "¦r¦ê»yªk¦³»~"

        SLEEP 10

     RETURN -1

    ELSE

        RETURN all_cnt

    END IF

END FUNCTION

 

 


FUNCTION before_enter(rows,cols,view_stm,form_name,form_pos)

    DEFINE rows         SMALLINT  -- µøµ¡ row ¦ì¸m

    DEFINE cols         SMALLINT  -- µøµ¡ column ¦ì¸m

    DEFINE view_stm     CHAR(2000)-- §ä´M¤§±Ô­z

    DEFINE form_name    CHAR(10)  -- ¶}µøµ¡¤§FORM NAME

    DEFINE form_pos     SMALLINT  -- ¶}µøµ¡®É­ì¨Ó¦ì¸m

 

    OPEN WINDOW view_win AT rows,cols WITH FORM form_name ATTRIBUTE(BORDER)

    PREPARE view_pre FROM view_stm

    DECLARE view_cursor SCROLL CURSOR FOR view_pre

    open view_cursor

    CALL Get_Count(view_stm) RETURNING tot_cnt

    LET curr = 1

    LET pg_cnt = 0

    LET cancel_sw = "N"

    LET ud_key = "N"

 

END FUNCTION

 

 


FUNCTION before_input(which)

    DEFINE which      SMALLINT

    LET show_cnt = 0

    FOR i = 1 TO 100

     CASE which

       WHEN 1 FETCH ABSOLUTE curr view_cursor INTO view_array1[i].*

                 INITIALIZE view_array1[i].no TO NULL

       WHEN 2 FETCH ABSOLUTE curr view_cursor INTO view_array2[i].*

                 INITIALIZE view_array2[i].no TO NULL

       WHEN 3 FETCH ABSOLUTE curr view_cursor INTO view_array3[i].*

                 INITIALIZE view_array3[i].no TO NULL

       WHEN 4 FETCH ABSOLUTE curr view_cursor INTO view_array4[i].*

                 INITIALIZE view_array4[i].no TO NULL

       WHEN 5 FETCH ABSOLUTE curr view_cursor INTO view_array5[i].*

                 INITIALIZE view_array5[i].no TO NULL

       WHEN 6 FETCH ABSOLUTE curr view_cursor INTO view_array6[i].*

                 INITIALIZE view_array6[i].no TO NULL

       WHEN 7 FETCH ABSOLUTE curr view_cursor INTO view_array7[i].*

                 INITIALIZE view_array7[i].no TO NULL

       WHEN 8 FETCH ABSOLUTE curr view_cursor INTO view_array8[i].*

                 INITIALIZE view_array8[i].no TO NULL

       WHEN 9 FETCH ABSOLUTE curr view_cursor INTO view_array9[i].*

                 INITIALIZE view_array9[i].no TO NULL

     END CASE

        IF  SQLCA.SQLCODE <> 0 THEN

            EXIT FOR

        END IF

        LET curr = curr + 1

        LET show_cnt = show_cnt + 1

    END FOR

    LET read_cnt = pg_cnt * 100 + show_cnt

    LET pg_cnt = pg_cnt + 1

    CALL SET_COUNT(show_cnt)

    MESSAGE " <F3>¤U­¶<F4>¤W­¶<Esc>¿ï©w<Ctrl-C>©ñ±ó"

END FUNCTION

 


FUNCTION before_row(which)

    DEFINE which      SMALLINT

    DEFINE is_ctrl_c  SMALLINT

    DEFINE is_up      SMALLINT

 

    LET wsa_curr = SCR_LINE()

    LET wpa_curr = ARR_CURR()

    LET curr_cnt = (pg_cnt - 1) * 100 + wpa_curr

    IF  wpa_curr <= curr THEN

     CASE which

         WHEN 1 DISPLAY view_array1[wpa_curr].* TO s_dispitem[wsa_curr].* ATTRIBUTE(REVERSE)

         WHEN 2 DISPLAY view_array2[wpa_curr].* TO s_dispitem[wsa_curr].* ATTRIBUTE(REVERSE)

         WHEN 3 DISPLAY view_array3[wpa_curr].* TO s_dispitem[wsa_curr].* ATTRIBUTE(REVERSE)

         WHEN 4 DISPLAY view_array4[wpa_curr].* TO s_dispitem[wsa_curr].* ATTRIBUTE(REVERSE)

         WHEN 5 DISPLAY view_array5[wpa_curr].* TO s_dispitem[wsa_curr].* ATTRIBUTE(REVERSE)

         WHEN 6 DISPLAY view_array6[wpa_curr].* TO s_dispitem[wsa_curr].* ATTRIBUTE(REVERSE)

         WHEN 7 DISPLAY view_array7[wpa_curr].* TO s_dispitem[wsa_curr].* ATTRIBUTE(REVERSE)

         WHEN 8 DISPLAY view_array8[wpa_curr].* TO s_dispitem[wsa_curr].* ATTRIBUTE(REVERSE)

         WHEN 9 DISPLAY view_array9[wpa_curr].* TO s_dispitem[wsa_curr].* ATTRIBUTE(REVERSE)

     END CASE

        DISPLAY "" AT 1,4

        LET is_ctrl_c = curr_cnt MOD 100

        LET is_up     = curr_cnt / 100

        LET j = all_cnt  / 100

        DISPLAY "" AT 1,4

        DISPLAY "Á`¦@ ",tot_cnt," µ§¤§²Ä ",curr_cnt," µ§" AT 1,4 ATTRIBUTE(REVERSE)

        IF  tot_cnt > 100 THEN

            IF  curr_cnt = tot_cnt THEN

                DISPLAY "Á`¦@ ",tot_cnt," µ§¤§²Ä ",curr_cnt," µ§¥i«ö Ctrl-P Ä~Äò¬d¸ß" AT 1,4 ATTRIBUTE(BLINK,REVERSE)

            ELSE IF  is_ctrl_c = 0 THEN

                     DISPLAY "Á`¦@ ",tot_cnt," µ§¤§²Ä ",curr_cnt," µ§¥i«ö Ctrl-N Ä~Äò¬d¸ß" AT 1,4 ATTRIBUTE(BLINK,REVERSE)

                 ELSE IF  wsa_curr = 1 THEN

                          IF  is_up THEN

                              IF  j = is_up THEN

                                  DISPLAY "Á`¦@ ",tot_cnt," µ§¤§²Ä ",curr_cnt," µ§¥i«ö Ctrl-P Ä~Äò¬d¸ß" AT 1,4 ATTRIBUTE(BLINK,REVERSE)

                              ELSE

                                  DISPLAY "Á`¦@ ",tot_cnt," µ§¤§²Ä ",curr_cnt," µ§¥i«ö Ctrl-P OR Ctrl-N Ä~Äò¬d¸ß" AT 1,4 ATTRIBUTE(BLINK,REVERSE)

                              END IF

                          ELSE

                              DISPLAY "Á`¦@ ",tot_cnt," µ§¤§²Ä ",curr_cnt," µ§¥i«ö Ctrl-N Ä~Äò¬d¸ß" AT 1,4 ATTRIBUTE(BLINK,REVERSE)

                          END IF

                      END IF

                 END IF

            END IF

        END IF

    ELSE

        DISPLAY "" AT 1,1

        ERROR "´å¼Ð¤w¶W¹LÁ`µ§¼Æ¡A½Ð©¹¤W²¾°Ê !!"

    END IF

END FUNCTION

 

 


FUNCTION after_row(which)

    DEFINE which      SMALLINT

 

    IF  wpa_curr <= curr THEN

     CASE which

         WHEN 1 DISPLAY view_array1[wpa_curr].* TO s_dispitem[wsa_curr].*

         WHEN 2 DISPLAY view_array2[wpa_curr].* TO s_dispitem[wsa_curr].*

         WHEN 3 DISPLAY view_array3[wpa_curr].* TO s_dispitem[wsa_curr].*

         WHEN 4 DISPLAY view_array4[wpa_curr].* TO s_dispitem[wsa_curr].*

         WHEN 5 DISPLAY view_array5[wpa_curr].* TO s_dispitem[wsa_curr].*

         WHEN 6 DISPLAY view_array6[wpa_curr].* TO s_dispitem[wsa_curr].*

         WHEN 7 DISPLAY view_array7[wpa_curr].* TO s_dispitem[wsa_curr].*

         WHEN 8 DISPLAY view_array8[wpa_curr].* TO s_dispitem[wsa_curr].*

         WHEN 9 DISPLAY view_array9[wpa_curr].* TO s_dispitem[wsa_curr].*

     END CASE

    END IF

END FUNCTION

 

 


FUNCTION before_field(which)

    DEFINE which      SMALLINT

 

    CASE which

        WHEN 1 INITIALIZE view_array1[wpa_curr].no TO NULL

               DISPLAY view_array1[wpa_curr].no TO s_dispitem[wsa_curr].no 

        WHEN 2 INITIALIZE view_array2[wpa_curr].no TO NULL

               DISPLAY view_array2[wpa_curr].no TO s_dispitem[wsa_curr].no 

        WHEN 3 INITIALIZE view_array3[wpa_curr].no TO NULL

               DISPLAY view_array3[wpa_curr].no TO s_dispitem[wsa_curr].no 

        WHEN 4 INITIALIZE view_array4[wpa_curr].no TO NULL

               DISPLAY view_array4[wpa_curr].no TO s_dispitem[wsa_curr].no 

        WHEN 5 INITIALIZE view_array5[wpa_curr].no TO NULL

               DISPLAY view_array5[wpa_curr].no TO s_dispitem[wsa_curr].no 

        WHEN 6 INITIALIZE view_array6[wpa_curr].no TO NULL

               DISPLAY view_array6[wpa_curr].no TO s_dispitem[wsa_curr].no 

        WHEN 7 INITIALIZE view_array7[wpa_curr].no TO NULL

               DISPLAY view_array7[wpa_curr].no TO s_dispitem[wsa_curr].no 

        WHEN 8 INITIALIZE view_array8[wpa_curr].no TO NULL

               DISPLAY view_array8[wpa_curr].no TO s_dispitem[wsa_curr].no 

        WHEN 9 INITIALIZE view_array9[wpa_curr].no TO NULL

               DISPLAY view_array9[wpa_curr].no TO s_dispitem[wsa_curr].no 

    END CASE

END FUNCTION

 

 


FUNCTION after_field(which)

    DEFINE which      SMALLINT

 

    LET last_key = FGL_LASTKEY()

    LET next_fld = (last_key = FGL_KEYVAL("right")) OR

                   (last_key = FGL_KEYVAL("return")) OR

                   (last_key = FGL_KEYVAL("down")) OR

                   (last_key = FGL_KEYVAL("tab"))

END FUNCTION

 

 


FUNCTION end_input()

    FOR i = 1 TO 100

        INITIALIZE view_array1[i].* TO NULL

        INITIALIZE view_array2[i].* TO NULL

        INITIALIZE view_array3[i].* TO NULL

        INITIALIZE view_array4[i].* TO NULL

        INITIALIZE view_array5[i].* TO NULL

        INITIALIZE view_array6[i].* TO NULL

        INITIALIZE view_array7[i].* TO NULL

        INITIALIZE view_array8[i].* TO NULL

        INITIALIZE view_array9[i].* TO NULL

    END FOR

    IF  ud_key = "C" THEN

        RETURN TRUE

    ELSE IF  ud_key = "N" THEN

             RETURN FALSE

         END IF

    END IF

    IF  ud_key = "P" THEN

        LET curr = curr - show_cnt - 100

        LET pg_cnt = curr / 100

    ELSE IF  ud_key = "T" THEN

             LET curr = 1

             LET pg_cnt = 0

         ELSE IF  ud_key = "B" THEN

                  LET pg_cnt = tot_cnt / 100

                  LET curr = pg_cnt * 100 + 1

              ELSE

                  LET curr = curr - show_cnt

                  LET pg_cnt = curr / 100

             END IF

        END IF

    END IF

    RETURN FALSE

END FUNCTION

 

 


FUNCTION before_return(form_pos)

    DEFINE form_pos     SMALLINT  -- ¶}µøµ¡®É­ì¨Ó¦ì¸m

 

    MESSAGE ""

    CLOSE WINDOW view_win

    IF  cancel_sw = "Y" THEN

        LET p_item = form_pos

    ELSE

        LET p_item = p_item + (pg_cnt - 1) * 100

    END IF

    RETURN p_item

END FUNCTION


17-7 µL½a°j°é(­û¤u½s¸¹¬y¤ô¸¹) function

 

DATABASE payroll

FUNCTION get_psn_code(p_ym,ty)

    DEFINE p_ym          SMALLINT

    DEFINE ty            SMALLINT

    DEFINE p_yy          SMALLINT

    DEFINE p_mm          SMALLINT

    DEFINE p_ten         SMALLINT

    DEFINE p_trx         CHAR(4)

    DEFINE p_num         LIKE psntrxtab.trx_date

    DEFINE p_psn_code    LIKE psntab.psn_code

 

    IF  NOT ih_is_ym(p_ym) THEN

        ERROR "¦~¤ë¸ê®Æ¦³»~,¨t²Î¤£¤©³B²z....."

        SLEEP 3

        RETURN ""

    END IF

    LET p_yy = p_ym / 100

    LET p_mm = p_ym MOD 100

    LET p_ten = p_mm MOD 10

    LET p_trx = "idn",ty USING "&"

    WHILE TRUE

        SELECT trx_date

          INTO p_num

          FROM psntrxtab

         WHERE curr_yy = p_yy

           AND curr_mm = p_mm

           AND trx_no = p_trx

        IF  SQLCA.SQLCODE <> 0 THEN

            LET p_num = 0

            INSERT INTO psntrxtab VALUES(p_yy,p_mm,p_trx,p_num)

        END IF

        UPDATE psntrxtab

           SET trx_date = p_num + 1

         WHERE curr_yy = p_yy

           AND curr_mm = p_mm

           AND trx_no = p_trx

           AND trx_date = p_num

        IF  SQLCA.SQLCODE = 0 AND SQLCA.SQLERRD[3] > 0 THEN

            LET p_num = p_num + 1

            EXIT WHILE

        END IF

    END WHILE

    IF  ty = 1 THEN

        LET p_psn_code=p_yy USING "&&",p_mm USING "&&",p_num USING "&&&"

    ELSE

        LET p_psn_code=p_yy USING "&&",ASCII(64+p_mm),p_num USING "&&&&"

    END IF

    RETURN p_psn_code

END FUNCTION


17-8 ²§°ÊÀɹL±b¥DÀÉ function

 

#######################################################

#     setprog-name : wel1111.4gl                

#     Programer    : §õ©Ó»T       

#     FUNCTION     : ºÖ§Q¤¬§U¨t²Î

#     used TABLES  : psnweltab,psntrxtab ¹L±bÀÉ,psnwelamt,psftab

#     used forms   : wel1111.per, wel1111w.per mis1200w.per     

#     DATE-written : 2000.10.18    

#

#####################################################

 

#####################################################

#   select database

#####################################################

DATABASE nckuabs

 

#####################################################

#   DEFINE public variable

#####################################################

GLOBALS

 

#----------------

#  system area

#----------------

    DEFINE sys_date         INTEGER

    DEFINE sys_program      CHAR(7)

    DEFINE sys_heading      CHAR(20)

    DEFINE sys_user_name    CHAR(8)

    DEFINE sys_user_id      CHAR(7)

    DEFINE sys_permision    CHAR(5)                   # ¨Ï¥ÎÅv­­

                                                      # 1.·s¼W

                                                      # 2.¬d¸ß

                                                      # 3.§ó¥¿

                                                      # 4.§R°£

                                                      # 5.¦Lªí

    DEFINE sys_ip           CHAR(15)        

 


#----------------

#  work area

#----------------

    DEFINE p_buffer         CHAR(256)

    DEFINE win_stm          CHAR(800)

    DEFINE p_yy             SMALLINT

    DEFINE p_mm             SMALLINT

    DEFINE cnt              SMALLINT

    DEFINE Is_commit        SMALLINT

    DEFINE answer           CHAR(1)

    DEFINE select_arr       INTEGER

    DEFINE exist_psftab     SMALLINT

    DEFINE break_ctrl_ty    SMALLINT

    DEFINE break_idno        SMALLINT

    DEFINE tot_cnt,curr_cnt INTEGER

    DEFINE g_disp_line      INTEGER  -- default ©M disp_screen row size

    DEFINE construct_clause CHAR(1000)

    DEFINE prepare_clause   CHAR(1000)

    DEFINE win_clause       CHAR(1000)

#----------------

#  i-o area

#----------------

    DEFINE p_psftab     RECORD LIKE psftab.*      --

    DEFINE p_psntab     RECORD LIKE psntab.*      --

    DEFINE p_healatab   RECORD LIKE healatab.*      --

    DEFINE p_spositab   RECORD LIKE spositab.*      --

    DEFINE p_psfcurrtab RECORD LIKE psfcurrtab.*      --

    DEFINE p_psfcodetab RECORD LIKE psfcodetab.*

    DEFINE p_psfedutab  RECORD LIKE psfedutab.*

    DEFINE p_deptab     RECORD LIKE deptab.*

    DEFINE p_psnweltab  RECORD LIKE psnweltab.*   

    DEFINE p_psnwelamt  RECORD LIKE psnwelamt.*   

    DEFINE p_psnwelhist RECORD LIKE psnwelhist.*   

    DEFINE p_npayrankty CHAR(20)

    DEFINE p_opayrankty CHAR(20)

    DEFINE p_nwelpayty  CHAR(20)

    DEFINE p_owelpayty  CHAR(20)

    DEFINE old_psnweltab    RECORD LIKE psnweltab.*   

    DEFINE curr_psnweltab RECORD LIKE psnweltab.*  

    DEFINE prev_psnweltab RECORD LIKE psnweltab.*

    DEFINE next_psnweltab RECORD LIKE psnweltab.*

END GLOBALS

 


 

MAIN

 

    DEFER    INTERRUPT

    SET      LOCK      MODE  TO  WAIT

    WHENEVER ERROR     STOP

    OPTIONS  ERROR     LINE  LAST

    OPTIONS  INPUT     WRAP

    CALL data_initial()

    CALL disp_screen(4,19)

    CALL main_menu()

    CALL close_screen()

    CLEAR SCREEN

 

END MAIN

 

FUNCTION close_screen()

 

    CLOSE WINDOW w_user

    CLOSE WINDOW w_menu

    CLOSE WINDOW w_form

 

END FUNCTION

 

 


FUNCTION main_menu()

 

    MENU "ºÖ§Q¤¬§U²§°ÊÀɧ@·~"     

         BEFORE MENU

             SELECT *

                FROM psntrxtab

              WHERE curr_yy = p_yy

                AND curr_mm = p_mm

                AND trx_no = "wel"

             IF  SQLCA.SQLCODE = 0 THEN

                 HIDE OPTION "1.·s¼W"

                 HIDE OPTION "2.ºûÅ@"

                 HIDE OPTION "3.¹L±b"

                 SHOW OPTION "4.ÁÙ­ì"

             ELSE

                 SHOW OPTION "1.·s¼W"

                 SHOW OPTION "2.ºûÅ@"

                 SHOW OPTION "3.¹L±b"

                 HIDE OPTION "4.ÁÙ­ì"

             END IF

             CALL init_val()

             CALL curr_time("M")

 

         COMMAND "1.·s¼W" "·s¼W§¹,<Esc>°õ¦æ  <Ctrl-C>©ñ±ó"

             INITIALIZE  curr_psnweltab.* TO NULL

             CALL act_modify(1)

             CALL curr_time("M")

 

         COMMAND "2.ºûÅ@" "±ø¥ó¦¡¬d¸ß(Äæ¦ì¤Ï¥Õ) <Esc>°õ¦æ <Ctrl-C>©ñ±ó"

             CALL sub_menu(2)

             CALL curr_time("M")

 

         COMMAND "3.¹L±b"

--1.copy¥DÀɦܾú¥vÀÉ

--2.²§°ÊÀɧó·s¥DÀÉ

--3.·s¼W1µ§·í¤ë¹L±b¸ê®Æ TO psntrxtab(¹L±bÀÉ) in pay

             CALL gt_history()

             IF  Is_commit THEN

                 HIDE OPTION "1.·s¼W"

                 HIDE OPTION "2.ºûÅ@"

                 HIDE OPTION "3.¹L±b"

                 SHOW OPTION "4.ÁÙ­ì"

             END IF

             CALL curr_time("M")

 

         COMMAND "4.ÁÙ­ì"

            -- 1. §R±¼¥DÀÉ

-- 2. §â¾ú¥vÀɭ˦^¥DÀÉ

-- 3.§R°£1µ§·í¤ë¹L±bÀÉ¸ê®Æ

--  4. §R°£·í¤ë¾ú¥vÀÉ

             IF  bk_history() THEN

                 SHOW OPTION "1.·s¼W"

                 SHOW OPTION "2.ºûÅ@"

                 SHOW OPTION "3.¹L±b"

                 HIDE OPTION "4.ÁÙ­ì"

             END IF

             CALL curr_time("M")

         COMMAND "0.µ²§ô"

             EXIT MENU

    END MENU

END FUNCTION

 

FUNCTION sub_menu(update_option)

    DEFINE update_option      SMALLINT

    DEFINE fetch_dir,

           toward_last,

           toward_first,

           at_end           SMALLINT

              

    LET toward_last  = +1

    LET toward_first = -1

    LET at_end       = 0

 

    CALL curr_time("F")

    CLEAR FORM

   

    CONSTRUCT BY NAME construct_clause ON pay_yy,

                                             pay_mm,

                                             psn_code,

                                          idno,

                                          psn_name,

                                             tran_code

                                          ATTRIBUTE(REVERSE)   

    IF  INT_FLAG THEN

        ERROR"©ñ±ó ..."

        LET INT_FLAG = FALSE

        RETURN

    END IF


    ERROR "¬d¸ß¤¤... ½Ðµy­Ô"

    LET prepare_clause = " SELECT * ",

                         "   FROM psnweltab",

                         "  WHERE ", construct_clause CLIPPED,

                         "  ORDER BY pay_yy DESC, pay_mm DESC"

    LET win_clause = " SELECT psnweltab.psn_code,",

                     "        psnweltab.psn_name,",

                     "        psnweltab.npayrank",

                     "   FROM psnweltab",

                     "  WHERE ", construct_clause CLIPPED,

                     "  ORDER BY psn_code DESC"

        

    PREPARE pre_update FROM prepare_clause

    DECLARE psnweltab_cursor SCROLL CURSOR WITH HOLD FOR pre_update

    OPEN    psnweltab_cursor

    CALL curr_time("M")

 

    MENU "ºÖ§Q¤¬§U²§°ÊÀɺûÅ@"     

        BEFORE MENU

            FETCH FIRST psnweltab_cursor INTO curr_psnweltab.*

            IF  SQLCA.SQLCODE = NOTFOUND THEN

                ERROR "µL²Å¦X¬d¸ß¸ê®Æ !!"

                HIDE OPTION ALL

                SHOW OPTION "0.µ²§ô"

                NEXT OPTION "0.µ²§ô"

            ELSE

                LET curr_cnt = 1

                IF  sys_permision[3,3] != "Y"  THEN

                    HIDE OPTION "5.§ó¥¿"

                END IF

                IF  sys_permision[4,4] != "Y"  THEN

                    HIDE OPTION "6.§R°£"

                END IF

                CALL show_data()

                HIDE OPTION "1.²Ä¤@µ§"

                HIDE OPTION "3.¤W¤@µ§"

                LET fetch_dir = toward_last

                FETCH NEXT psnweltab_cursor INTO next_psnweltab.*

                IF  SQLCA.SQLCODE != 0 THEN

                    HIDE OPTION "2.¤U¤@µ§"

                    HIDE OPTION "4.³Ì«á¤@µ§"

                    HIDE OPTION "7.¾\Äý"

                END IF

            END IF

            CALL curr_time("M")

 

        COMMAND "1.²Ä¤@µ§"

            FETCH FIRST psnweltab_cursor INTO curr_psnweltab.*

            LET curr_cnt = 1

            CALL show_data()

            HIDE OPTION "1.²Ä¤@µ§"

            HIDE OPTION "3.¤W¤@µ§"

            SHOW OPTION "4.³Ì«á¤@µ§"

            LET fetch_dir = toward_last

            FETCH NEXT psnweltab_cursor INTO next_psnweltab.*

            IF  SQLCA.SQLCODE = 0 THEN

                SHOW OPTION "2.¤U¤@µ§"

                NEXT OPTION "2.¤U¤@µ§"

            ELSE

                HIDE OPTION "2.¤U¤@µ§"

                NEXT OPTION "0.µ²§ô"

            END IF

            CALL curr_time("M")

 

        COMMAND "2.¤U¤@µ§"

            LET prev_psnweltab.* = curr_psnweltab.*

            SHOW OPTION "1.²Ä¤@µ§"

            SHOW OPTION "3.¤W¤@µ§"

            SHOW OPTION "4.³Ì«á¤@µ§"

            LET curr_psnweltab.* = next_psnweltab.*

            LET curr_cnt = curr_cnt + 1

            CALL show_data()

            CASE (fetch_dir)

                WHEN toward_last

                    FETCH NEXT psnweltab_cursor INTO next_psnweltab.*

                WHEN at_end    

                    FETCH RELATIVE +2 psnweltab_cursor INTO next_psnweltab.*

                WHEN toward_first

                    FETCH RELATIVE +3 psnweltab_cursor INTO next_psnweltab.*

                    LET fetch_dir = toward_last

            END CASE

            IF  SQLCA.SQLCODE = NOTFOUND THEN

                LET fetch_dir = at_end

                HIDE OPTION "2.¤U¤@µ§"

                HIDE OPTION "4.³Ì«á¤@µ§"

                NEXT OPTION "1.²Ä¤@µ§"

            END IF

            CALL curr_time("M")

 

        COMMAND "3.¤W¤@µ§"

            LET next_psnweltab.* = curr_psnweltab.*

            SHOW OPTION "1.²Ä¤@µ§"

            SHOW OPTION "2.¤U¤@µ§"

            SHOW OPTION "4.³Ì«á¤@µ§"

            LET curr_psnweltab.* = prev_psnweltab.*

            LET curr_cnt = curr_cnt - 1

            CALL show_data()

            CASE (fetch_dir)

                WHEN toward_first

                    FETCH PRIOR psnweltab_cursor INTO prev_psnweltab.*

                WHEN at_end    

                    FETCH RELATIVE -2 psnweltab_cursor INTO prev_psnweltab.*

                    LET fetch_dir = toward_first

                WHEN toward_last

                    FETCH RELATIVE -3 psnweltab_cursor INTO prev_psnweltab.*

                    LET fetch_dir = toward_first

            END CASE

            IF  SQLCA.SQLCODE = NOTFOUND THEN

                LET fetch_dir = at_end

                HIDE OPTION "1.²Ä¤@µ§"

                HIDE OPTION "3.¤W¤@µ§"

                NEXT OPTION "4.³Ì«á¤@µ§"

            END IF

            CALL curr_time("M")

 

        COMMAND "4.³Ì«á¤@µ§"

            FETCH LAST psnweltab_cursor INTO curr_psnweltab.*

            LET curr_cnt = Get_Count(prepare_clause)

            CALL show_data()

            SHOW OPTION "1.²Ä¤@µ§"

            HIDE OPTION "2.¤U¤@µ§"

            HIDE  OPTION "4.³Ì«á¤@µ§"

            LET fetch_dir = toward_first

            FETCH PRIOR psnweltab_cursor INTO prev_psnweltab.*

            IF  SQLCA.SQLCODE = 0 THEN

                SHOW OPTION "3.¤W¤@µ§"

                NEXT OPTION "3.¤W¤@µ§"

            ELSE

                HIDE OPTION "3.¤W¤@µ§"

                NEXT OPTION "0.µ²§ô"

            END IF

            CALL curr_time("M")

 

        COMMAND "5.§ó¥¿"

            CALL act_modify(3)

            CALL curr_time("M")

            NEXT OPTION "0.µ²§ô"

 

        COMMAND "6.§R°£"

            CALL act_modify(4)

            CALL curr_time("M")

            NEXT OPTION "0.µ²§ô"

        COMMAND "7.¾\Äý"

            CALL view_window(3,5,2,win_clause,"wel1111w",curr_cnt)

                 RETURNING select_arr

            IF  select_arr = 1 THEN

                FETCH FIRST psnweltab_cursor INTO curr_psnweltab.*

                LET curr_cnt = 1

                CALL show_data()

                HIDE OPTION "1.²Ä¤@µ§"

                HIDE OPTION "3.¤W¤@µ§"

                SHOW OPTION "4.³Ì«á¤@µ§"

                LET fetch_dir = toward_last

                FETCH NEXT psnweltab_cursor INTO next_psnweltab.*

                IF  SQLCA.SQLCODE = 0 THEN

                    SHOW OPTION "2.¤U¤@µ§"

                    NEXT OPTION "2.¤U¤@µ§"

                ELSE

                    HIDE OPTION "2.¤U¤@µ§"

                    NEXT OPTION "0.µ²§ô"

                END IF

                CALL curr_time("M")

            ELSE IF  select_arr = Get_Count(prepare_clause) THEN

                     LET curr_cnt = select_arr

                     FETCH LAST psnweltab_cursor INTO curr_psnweltab.*

                     CALL show_data()

                     SHOW OPTION "1.²Ä¤@µ§"

                     HIDE OPTION "2.¤U¤@µ§"

                     HIDE  OPTION "4.³Ì«á¤@µ§"

                     LET fetch_dir = toward_first

                     FETCH PRIOR psnweltab_cursor INTO prev_psnweltab.*

                     IF  SQLCA.SQLCODE = 0 THEN

                         SHOW OPTION "3.¤W¤@µ§"

                         NEXT OPTION "3.¤W¤@µ§"

                     ELSE

                         HIDE OPTION "3.¤W¤@µ§"

                         NEXT OPTION "0.µ²§ô"

                     END IF

                     CALL curr_time("M")

                 ELSE

                     FETCH ABSOLUTE select_arr psnweltab_cursor INTO curr_psnweltab.*

                     LET curr_cnt = select_arr

                     CALL show_data()

                     FETCH RELATIVE -1 psnweltab_cursor INTO prev_psnweltab.*

                     IF  SQLCA.SQLCODE = 0 THEN

                         SHOW OPTION "1.²Ä¤@µ§"

                         SHOW OPTION "3.¤W¤@µ§"

                     END IF

                     FETCH RELATIVE +2 psnweltab_cursor INTO next_psnweltab.*

                     IF  SQLCA.SQLCODE = 0 THEN

                         LET fetch_dir = toward_last

                         SHOW OPTION "2.¤U¤@µ§"

                         SHOW OPTION "4.³Ì«á¤@µ§"

                     ELSE

                         LET fetch_dir = at_end

                     END IF

                 END IF

            END IF

            CALL curr_time("M")

            NEXT OPTION "0.µ²§ô"

        COMMAND "0.µ²§ô"

            EXIT  MENU

    END MENU

 

END FUNCTION

 

 


#####################################################

#   act_modify  function

#####################################################

FUNCTION act_modify(update_option)

    DEFINE update_option    SMALLINT

 

    CALL curr_time("F")

    IF  update_option = 1 THEN

        CLEAR FORM

    END IF

    LET INT_FLAG  = FALSE

    LET old_psnweltab.* = curr_psnweltab.*

    INPUT BY NAME curr_psnweltab.tran_code,

                  curr_psnweltab.psn_code,

                  curr_psnweltab.wel_no,

                  curr_psnweltab.npayrank,

                  curr_psnweltab.tran_date,

                  curr_psnweltab.enter_date,

                  curr_psnweltab.birthday,

                  curr_psnweltab.wel_mm

         WITHOUT DEFAULTS

     BEFORE FIELD tran_code                            

         IF  update_option = 3 THEN

             NEXT FIELD npayrank

         ELSE IF  update_option = 4 THEN

                  OPEN WINDOW w4 AT 21,31 WITH 1 ROWS, 30 COLUMNS

ATTRIBUTES(BORDER,REVERSE)

                      PROMPT "½T»{­n§R°£¶Ü ? ( Y/N ) " FOR  CHAR  answer

                  CLOSE WINDOW w4

                  IF  answer NOT MATCHES  "[yY]" THEN

                      RETURN

                  ELSE

                      EXIT INPUT

                  END IF

              END IF

         END IF

         LET curr_psnweltab.pay_yy = sys_date / 10000

         LET curr_psnweltab.pay_mm = MONTH(TODAY) + 1

         IF  curr_psnweltab.pay_mm = 13 THEN

             LET curr_psnweltab.pay_mm = 1

             LET curr_psnweltab.pay_yy = curr_psnweltab.pay_yy + 1

         END IF

         DISPLAY BY NAME curr_psnweltab.pay_yy,

                         curr_psnweltab.pay_mm


 

    AFTER FIELD tran_code    

         IF  curr_psnweltab.tran_code IS NULL THEN

             ERROR "§P§O½X¤£¥iªÅ¥Õ"

             NEXT FIELD psnweltab.tran_code     

         END IF

         CASE curr_psnweltab.tran_code

          WHEN "1" DISPLAY "·s¼W" TO FORMONLY.tran_name         

              LET curr_psnweltab.opayrank = "0"

              LET curr_psnweltab.owelpay = 0

              DISPLAY BY NAME curr_psnweltab.opayrank

              DISPLAY BY NAME curr_psnweltab.owelpay

          WHEN "5"

              DISPLAY "§ï±Ô" TO FORMONLY.tran_name

          WHEN "6"

DISPLAY "¦ÒÁZ" TO FORMONLY.tran_name

          WHEN "8"

DISPLAY "°h¥ð" TO FORMONLY.tran_name

               LET curr_psnweltab.npayrank = "0"

               LET curr_psnweltab.nwelpay = 0

              DISPLAY BY NAME curr_psnweltab.npayrank

              DISPLAY BY NAME curr_psnweltab.nwelpay

          WHEN "9"

              DISPLAY "¯d¾°±Á~" TO FORMONLY.tran_name

               LET curr_psnweltab.npayrank = "0"

               LET curr_psnweltab.nwelpay = 0

              DISPLAY BY NAME curr_psnweltab.npayrank

              DISPLAY BY NAME curr_psnweltab.nwelpay

         END CASE


     AFTER FIELD psn_code   

         IF  curr_psnweltab.psn_code IS NULL THEN

             ERROR "¤£¥iªÅ¥Õ"

             NEXT FIELD psnweltab.psn_code

         END IF

         SELECT *

           INTO p_psnweltab.*

           FROM psnweltab         -- psnweltab ²§°ÊÀÉ

          WHERE pay_yy = curr_psnweltab.pay_yy

            AND pay_mm = curr_psnweltab.pay_mm

            AND psn_code= curr_psnweltab.psn_code

         IF  SQLCA.SQLCODE = 0 THEN

             IF  update_option <> 3 THEN

                 ERROR "¸ê®Æ¤w¦s¦b©ó²§°ÊÀÉ"

                 NEXT FIELD psn_code

             END IF

         ELSE

-- else means ¤£¦s©ó²§°ÊÀÉ, °µ¥H¤U°Ê§@

--  check whether ¸ê®Æ¤w¦s¦b©ó¥DÀÉ"

             CASE curr_psnweltab.tran_code

                 WHEN "1"

                     SELECT *

                       INTO p_psnwelamt.*

                       FROM psnwelamt

                      WHERE psn_code= curr_psnweltab.psn_code

                     IF  SQLCA.SQLCODE = 0 THEN

                         ERROR "¸ê®Æ¤w¦s¦b©ó¤¬§U¥DÀÉ"

                         NEXT FIELD tran_code

                     ELSE

                         SELECT *

                           INTO p_psftab.*

                           FROM psftab

                           WHERE psn_code= curr_psnweltab.psn_code

                         IF  SQLCA.SQLCODE <> 0 THEN

                             ERROR "¸ê®Æ¤£¦s¦b©ó¤H¨Æ¥DÀÉ"

                             NEXT FIELD tran_code

                         END IF

                     END IF

                     LET curr_psnweltab.psn_name = p_psftab.psn_name

                     LET curr_psnweltab.idno     = p_psftab.idno

                     LET curr_psnweltab.birthday = p_psftab.birthday

                     DISPLAY curr_psnweltab.psn_name TO psnweltab.psn_name

                     DISPLAY curr_psnweltab.idno     TO psnweltab.idno  

                     DISPLAY curr_psnweltab.birthday TO psnweltab.birthday


             OTHERWISE

                 SELECT *

                   INTO p_psnwelamt.*

                   FROM psnwelamt

                  WHERE psn_code= curr_psnweltab.psn_code

                 IF  SQLCA.SQLCODE <> 0 THEN

                     ERROR "¸ê®Æ¤£¦s¦b©ó¤¬§U¥DÀÉ"

                     NEXT FIELD tran_code

                 END IF

                 LET curr_psnweltab.psn_name = p_psnwelamt.psn_name

                 LET curr_psnweltab.idno     = p_psnwelamt.idno

                 LET curr_psnweltab.wel_no   = p_psnwelamt.wel_no

                 LET curr_psnweltab.birthday = p_psnwelamt.birthday

                 LET curr_psnweltab.owelpay  = p_psnwelamt.welpay 

                 LET curr_psnweltab.opayrank = p_psnwelamt.payrank

                 LET curr_psnweltab.enter_date = p_psnwelamt.enter_date

                 DISPLAY curr_psnweltab.psn_name TO psnweltab.psn_name  

                 DISPLAY curr_psnweltab.idno     TO psnweltab.idno   

                 DISPLAY curr_psnweltab.wel_no   TO psnweltab.wel_no   

                 DISPLAY curr_psnweltab.birthday TO psnweltab.birthday  

                 DISPLAY curr_psnweltab.owelpay  TO psnweltab.owelpay  

                 DISPLAY curr_psnweltab.opayrank TO psnweltab.opayrank 

                 DISPLAY curr_psnweltab.enter_date TO psnweltab.enter_date 

             END CASE

         END IF

     AFTER FIELD wel_no

         IF  curr_psnweltab.wel_no IS NULL THEN

             ERROR "¤£¥iªÅ¥Õ"

             NEXT FIELD psnweltab.wel_no

         END IF

     BEFORE FIELD npayrank

         IF  curr_psnweltab.tran_code MATCHES "[89]" THEN

              LET curr_psnweltab.npayrank = "0"

              LET curr_psnweltab.nwelpay = 0

             DISPLAY BY NAME curr_psnweltab.npayrank

             DISPLAY BY NAME curr_psnweltab.nwelpay

         ELSE

             MESSAGE "¿é¤J ? ¶}µøµ¡,¿é¤J§¹²¦«ö ESC Áä½T»{"

             INITIALIZE p_buffer TO NULL

             INITIALIZE win_stm  TO NULL

             LET win_stm = "SELECT payrank, rank_name  ",

                           "  FROM sranktab ",

                           " ORDER BY payrank"

         END IF


     AFTER FIELD npayrank

         IF  curr_psnweltab.tran_code MATCHES "[89]" THEN

          LET curr_psnweltab.npayrank = "0"

          LET curr_psnweltab.nwelpay = 0

             DISPLAY BY NAME curr_psnweltab.npayrank

             DISPLAY BY NAME curr_psnweltab.nwelpay

         ELSE

             MESSAGE " "

             LET p_buffer = GET_FLDBUF(npayrank)

             IF  p_buffer = '?' THEN

                 CALL view_window(2,5,2,win_stm,"mis1200w",0)

                      RETURNING curr_psnweltab.npayrank ,

                                p_npayrankty

                 IF  curr_psnweltab.npayrank  IS NOT NULL THEN

                     DISPLAY BY NAME curr_psnweltab.npayrank

                 ELSE

                     NEXT FIELD psnweltab.npayrank

                 END IF

                 DISPLAY p_npayrankty TO FORMONLY.npayrankty

             ELSE 

                 SELECT rank_name

                   INTO p_npayrankty

                   FROM sranktab

                  WHERE payrank  = curr_psnweltab.npayrank

             IF  SQLCA.SQLCODE <> 0 THEN   -- ¥´¿ù¶}WINDOW

                     CALL view_window(2,5,2,win_stm,"mis1200w",0)

                         RETURNING curr_psnweltab.npayrank,

                                   p_npayrankty

                     IF  curr_psnweltab.npayrank IS NULL THEN

                         NEXT FIELD psnweltab.npayrank

                     ELSE

                         DISPLAY BY NAME curr_psnweltab.npayrank

                         DISPLAY p_npayrankty TO FORMONLY.npayrankty

                     END IF

                 END IF

                 DISPLAY p_npayrankty TO FORMONLY.npayrankty

             END IF

             SELECT welpay

               INTO curr_psnweltab.nwelpay

               FROM sweltab, sranktab

              WHERE sranktab.rankgrd = sweltab.rankgrd

            AND sranktab.payrank = curr_psnweltab.npayrank

            DISPLAY curr_psnweltab.nwelpay TO psnweltab.nwelpay 

        END IF


 

     AFTER FIELD enter_date

         IF  curr_psnweltab.enter_date IS NULL THEN

             ERROR "¤£¥iªÅ¥Õ"

             NEXT FIELD psnweltab.enter_date

         END IF

         IF  NOT IH_is_date(curr_psnweltab.enter_date) THEN

             ERROR "¦¹Äæ¦ì¸ê®Æ¿é¤J¿ù»~!!"

             NEXT FIELD psnweltab.tran_date

         END IF

     AFTER FIELD birthday

         IF  curr_psnweltab.birthday IS NULL THEN

             ERROR "¤£¥iªÅ¥Õ"

             NEXT FIELD psnweltab.birthday

         END IF

         IF  NOT IH_is_date(curr_psnweltab.birthday) THEN

             ERROR "¦¹Äæ¦ì¸ê®Æ¿é¤J¿ù»~!!"

             NEXT FIELD psnweltab.birthday

         END IF

     AFTER FIELD wel_mm

         IF  curr_psnweltab.wel_mm IS NULL THEN

             ERROR "¤£¥iªÅ¥Õ"

             NEXT FIELD psnweltab.wel_mm

         END IF

 

     AFTER INPUT      

         IF  curr_psnweltab.psn_code  IS NULL THEN

             ERROR "¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF

         IF  curr_psnweltab.wel_no    IS NULL THEN

             ERROR "¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF

         IF  curr_psnweltab.npayrank IS NULL THEN

             ERROR "¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF

         IF  curr_psnweltab.tran_code IS NULL THEN

             ERROR "¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF

         IF  curr_psnweltab.tran_date IS NULL THEN

             ERROR "¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF?

         IF  curr_psnweltab.enter_date IS NULL THEN

             ERROR "¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF?

         IF  curr_psnweltab.birthday  IS NULL THEN

             ERROR "¤£¥iªÅ¥Õ"

             CONTINUE INPUT

         END IF

         OPEN WINDOW w1 AT 21,31 WITH 1 ROWS, 20 COLUMNS ATTRIBUTES(BORDER,REVERSE)

             PROMPT "½T»{ ? ( Y/N ) " FOR  CHAR  answer

         CLOSE WINDOW w1

         IF  answer MATCHES  "[yY]" THEN

             EXIT INPUT

         ELSE

             CONTINUE INPUT

         END IF

     ON KEY(INTERRUPT)

        OPEN WINDOW w1 AT 21,31 WITH 1 ROWS, 20 COLUMNS ATTRIBUTES(BORDER,REVERSE)

        IF  INT_FLAG THEN

            PROMPT "­n¨ú®ø ? ( Y/N ) " FOR  CHAR  answer

        END IF

        CLOSE WINDOW w1

        IF  answer MATCHES  "[yY]" THEN

            EXIT INPUT

        ELSE

            CONTINUE INPUT

        END IF

    END INPUT

 

    IF  INT_FLAG  THEN

        LET INT_FLAG = FALSE

        RETURN

    END IF

 

    CALL f_modify(update_option)

END FUNCTION

 

 


#####################################################

#    modify data function  §ó¥¿¥\¯à

#####################################################

FUNCTION f_modify(update_option)

  DEFINE update_option    SMALLINT

  CASE update_option

      WHEN 1 CALL insert_data()

      WHEN 3 CALL modify_data()

      WHEN 4 CALL delete_data()

  END CASE

  IF  SQLCA.SQLCODE = 0 AND SQLCA.SQLERRD[3] > 0 THEN

      ERROR "¦¨¥\"

  ELSE

      ERROR "¥¢±Ñ !!  ==> ½Ð³qª¾¨t²Î¤H­û,ÁÂÁÂ"

  END IF

END FUNCTION

#####################################################

#    modify_data()       

#####################################################

FUNCTION modify_data()        

    LET curr_psnweltab.upddate = sys_date

    LET curr_psnweltab.upduser = sys_user_name

    LET curr_psnweltab.updtime = TIME

    UPDATE psnweltab

       SET psnweltab.* = curr_psnweltab.*

     WHERE idno = curr_psnweltab.idno

       AND pay_yy = curr_psnweltab.pay_yy

       AND pay_mm = curr_psnweltab.pay_mm

END FUNCTION

#####################################################

#    insert_data()       

#####################################################

FUNCTION insert_data()

    LET curr_psnweltab.upddate = sys_date

    LET curr_psnweltab.upduser = sys_user_name

    LET curr_psnweltab.updtime = TIME

    INSERT INTO psnweltab VALUES (curr_psnweltab.*)

END FUNCTION

 


#####################################################

#    delete_data()       

#####################################################

FUNCTION delete_data()

    DELETE

      FROM psnweltab

     WHERE psn_code = curr_psnweltab.psn_code

       AND pay_yy = curr_psnweltab.pay_yy

       AND pay_mm = curr_psnweltab.pay_mm

END FUNCTION

#####################################################

#    ¹L±b gt_history()      

#####################################################

FUNCTION gt_history() 

--1.copy¥DÀɦܾú¥vÀÉ  2.²§°ÊÀɧó·s¥DÀÉ  3.·s¼W1µ§¹L±b¸ê®Æto psntrxtab

-- psntrxtab(¹L±bÀÉ) in pay

    DEFINE cnt   SMALLINT

    CALL curr_time("F")

 

    LET Is_commit = TRUE

    LET p_psnwelhist.pay_yy = p_yy

    LET p_psnwelhist.pay_mm = p_mm

    LET cnt = 0

    BEGIN WORK     -- ¥æ©ö¶}©l

    DECLARE p_hist CURSOR FOR

     SELECT *

       FROM psnwelamt

    FOREACH p_hist INTO p_psnwelamt.*

        LET p_psnwelhist.psn_code = p_psnwelamt.psn_code

        LET p_psnwelhist.idno     = p_psnwelamt.idno

        LET p_psnwelhist.psn_name = p_psnwelamt.psn_name

        LET p_psnwelhist.wel_no   = p_psnwelamt.wel_no

        LET p_psnwelhist.welpay   = p_psnwelamt.welpay

        LET p_psnwelhist.payrank  = p_psnwelamt.payrank

        LET p_psnwelhist.tran_code= p_psnwelamt.tran_code 

        LET p_psnwelhist.tran_date= p_psnwelamt.tran_date  

        LET p_psnwelhist.enter_date= p_psnwelamt.enter_date  

        LET p_psnwelhist.birthday= p_psnwelamt.birthday   

        LET p_psnwelhist.upddate = p_psnwelamt.upddate

        LET p_psnwelhist.upduser = p_psnwelamt.upduser

        LET p_psnwelhist.updtime = p_psnwelamt.updtime

        WHENEVER ERROR CONTINUE

        INSERT INTO psnwelhist VALUES (p_psnwelhist.*)

        WHENEVER ERROR STOP

        IF  SQLCA.SQLCODE <> 0 THEN

            LET Is_commit = FALSE

            EXIT FOREACH

        ELSE

            LET cnt = cnt + 1

            DISPLAY cnt, p_psnwelhist.psn_name AT 16,1

        END IF

    END FOREACH

    IF  Is_commit = FALSE THEN

        ROLLBACK WORK

        ERROR "¹L±b¥¢±Ñ...."

        RETURN

    END IF

    DECLARE p_main CURSOR FOR

     SELECT *

       FROM psnweltab

    FOREACH p_main INTO p_psnweltab.*

        IF  p_psnweltab.tran_code = 1 THEN

            LET p_psnwelamt.psn_code = p_psnweltab.psn_code

            LET p_psnwelamt.idno     = p_psnweltab.idno

            LET p_psnwelamt.psn_name = p_psnweltab.psn_name

            LET p_psnwelamt.wel_no   = p_psnweltab.wel_no

            LET p_psnwelamt.welpay   = p_psnweltab.nwelpay

            LET p_psnwelamt.payrank  = p_psnweltab.npayrank

            LET p_psnwelamt.tran_code= p_psnweltab.tran_code 

            LET p_psnwelamt.tran_date= p_psnweltab.tran_date  

            LET p_psnwelamt.enter_date= p_psnweltab.enter_date  

            LET p_psnwelamt.birthday= p_psnweltab.birthday   

            LET p_psnwelamt.upddate = sys_date

            LET p_psnwelamt.upduser = sys_user_name

            LET p_psnwelamt.updtime = TIME

            WHENEVER ERROR CONTINUE

            INSERT INTO psnwelamt VALUES (p_psnwelamt.*)

            WHENEVER ERROR STOP

            IF  SQLCA.SQLCODE <> 0 THEN

                LET Is_commit = FALSE

                EXIT FOREACH

            ELSE

                LET cnt = cnt + 1

                DISPLAY cnt, p_psnweltab.psn_name AT 16,1

            END IF

        ELSE IF  p_psnweltab.tran_code = 5 OR

                 p_psnweltab.tran_code = 6 THEN

                 UPDATE psnwelamt

                    SET payrank = p_psnweltab.npayrank,

                        welpay = p_psnweltab.nwelpay,

                        upddate = sys_date,

                        upduser = sys_user_name,

                        updtime = p_psnwelamt.updtime

                  WHERE psn_code = p_psnweltab.psn_code

                  IF  SQLCA.SQLCODE <> 0 OR SQLCA.SQLERRD[3] <> 1 THEN

                      LET Is_commit = FALSE

                      EXIT FOREACH

                  ELSE

                      LET cnt = cnt + 1

                      DISPLAY cnt, p_psnweltab.psn_name AT 16,1

                  END IF

             ELSE

                 DELETE

                   FROM psnwelamt

                  WHERE psn_code = p_psnweltab.psn_code

                  IF  SQLCA.SQLCODE <> 0 OR SQLCA.SQLERRD[3] <> 1 THEN

                      LET Is_commit = FALSE

                      EXIT FOREACH

                  ELSE

                      LET cnt = cnt + 1

                      DISPLAY cnt, p_psnweltab.psn_name AT 16,1

                  END IF

             END IF

         END IF

    END FOREACH

    IF  Is_commit = FALSE THEN

        ROLLBACK WORK

        ERROR "¹L±b¥¢±Ñ...."

        RETURN

    END IF

    WHENEVER ERROR CONTINUE

    INSERT INTO psntrxtab VALUES (p_yy,p_mm,"wel",sys_date)

    WHENEVER ERROR STOP

    IF  SQLCA.SQLCODE = 0 THEN

        COMMIT WORK

    ELSE

        LET Is_commit = FALSE

        ROLLBACK WORK

    END IF

 

END FUNCTION


 

#####################################################

#    ÁÙ­ì bk_history()    

#- 1. §R±¼¥DÀÉ 2. §â¾ú¥vÀɭ˦^¥DÀÉ 3.§R°£1µ§¹L±bÀÉ¸ê®Æ

#- 4. §R°£·í¤ë¾ú¥vÀÉ

#####################################################

FUNCTION bk_history()

    DEFINE cnt   SMALLINT

 

    CALL curr_time("F")

    LET Is_commit = TRUE

    BEGIN WORK

    DELETE

      FROM psnwelamt

    LET cnt = 0

    DECLARE p_amt CURSOR FOR

     SELECT *

       FROM psnwelhist

    FOREACH p_amt INTO p_psnwelhist.*

        LET p_psnwelamt.psn_code = p_psnwelhist.psn_code

        LET p_psnwelamt.idno     = p_psnwelhist.idno

        LET p_psnwelamt.psn_name = p_psnwelhist.psn_name

        LET p_psnwelamt.wel_no   = p_psnwelhist.wel_no

        LET p_psnwelamt.welpay   = p_psnwelhist.welpay

        LET p_psnwelamt.payrank  = p_psnwelhist.payrank

        LET p_psnwelamt.tran_code= p_psnwelhist.tran_code 

        LET p_psnwelamt.tran_date= p_psnwelhist.tran_date  

        LET p_psnwelamt.enter_date= p_psnwelhist.enter_date  

        LET p_psnwelamt.birthday= p_psnwelhist.birthday   

        LET p_psnwelamt.upddate = p_psnwelhist.upddate

        LET p_psnwelamt.upduser = p_psnwelhist.upddate

        LET p_psnwelamt.updtime = p_psnwelhist.updtime

        WHENEVER ERROR CONTINUE

        INSERT INTO psnwelamt VALUES (p_psnwelamt.*)

        WHENEVER ERROR STOP

        IF  SQLCA.SQLCODE <> 0 THEN

            LET Is_commit = FALSE

            EXIT FOREACH

        ELSE

            LET cnt = cnt + 1

            DISPLAY cnt, p_psnwelamt.psn_name AT 16,1

        END IF

    END FOREACH

    IF  Is_commit THEN

        DELETE

          FROM psnwelhist

         WHERE pay_yy = p_yy

           AND pay_mm = p_mm

        DELETE

          FROM psntrxtab

         WHERE curr_yy = p_yy

           AND curr_mm = p_mm

           AND trx_no = "wel"

        COMMIT WORK

    ELSE

        ROLLBACK WORK

    END IF

    RETURN Is_commit

END FUNCTION

#####################################################

#    data_initial()      

#####################################################

FUNCTION data_initial()

    LET p_yy = sys_date / 10000

    LET p_mm = MONTH(TODAY) + 1

    IF  p_mm = 13 THEN

        LET p_mm = 1

        LET p_yy = p_yy + 1

    END IF

    CALL sys_data_initial()

    LET g_disp_line = 19

END FUNCTION

#####################################################

#    init_val      

#####################################################

FUNCTION init_val()

 

    INITIALIZE curr_psnweltab.* TO NULL

    INITIALIZE next_psnweltab.* TO NULL

    INITIALIZE prev_psnweltab.* TO NULL

 

END FUNCTION

 

 


FUNCTION show_data()

    CALL curr_time("F")

    DISPLAY BY NAME curr_psnweltab.pay_yy,

                    curr_psnweltab.pay_mm,

                    curr_psnweltab.psn_code,  

                    curr_psnweltab.idno     ,

                    curr_psnweltab.tran_code,

                    curr_psnweltab.psn_name,

                    curr_psnweltab.wel_no,   

                    curr_psnweltab.nwelpay,   

                    curr_psnweltab.owelpay,   

                    curr_psnweltab.npayrank,     

                    curr_psnweltab.opayrank,     

                    curr_psnweltab.tran_code    ,

                    curr_psnweltab.tran_date    ,

                    curr_psnweltab.enter_date,

                    curr_psnweltab.birthday,  

                    curr_psnweltab.wel_mm  

         CASE curr_psnweltab.tran_code

          WHEN "1" DISPLAY "·s¼W"     TO FORMONLY.tran_name

          WHEN "5" DISPLAY "§ï±Ô"     TO FORMONLY.tran_name  

          WHEN "6" DISPLAY "¦ÒÁZ"     TO FORMONLY.tran_name   

          WHEN "8" DISPLAY "°h¥ð"     TO FORMONLY.tran_name   

          WHEN "9" DISPLAY "¯d¾°±Á~" TO FORMONLY.tran_name   

         END CASE

     CALL Get_Count(prepare_clause) RETURNING tot_cnt

     IF  tot_cnt > 1 THEN

         DISPLAY "¦@"," ", tot_cnt USING "#####"," ",

                 "µ§¤§²Ä"," ",curr_cnt USING "#####"," ",

                 "µ§" AT g_disp_line, 1 ATTRIBUTE(REVERSE)

     END IF

     CALL curr_time("M")

END FUNCTION


DATABASE payroll

SCREEN

{

 

 ²§°Ê¦~:[a ]               ²§°Ê¤ë:[b ]

 ²§°Ê§O:[c][d                ] 

 ±Ð¾­û¤u¸¹:[e      ]      ¨­¤ÀÃÒ¦r¸¹:[f01       ]

 ¤¤¤å©m¦W:[f02       ]     ºÖ§Q¤¬§U¸¹:[f03     ]

 ·s®ÖÁ~¾µ¥:[f06   ][f07                 ] 

 Â®ÖÁ~¾µ¥:[f08   ][f09                 ] 

 ·sºÖ§Q¤¬§U­ÄÃB:[f04 ]     º֧Q¤¬§U­ÄÃB:[f05 ]

 ²§°Ê¤é´Á  :[f10   ]

 °Ñ¥[¤é´Á  :[f11   ]

 ¥Í¤é:[f12   ] 

 ¸Éµo¤ë¼Æ:[f ]

 

}

END

 

TABLES

psnweltab

ATTRIBUTES

a    = psnweltab.pay_yy       ,NOENTRY;

b    = psnweltab.pay_mm       ,NOENTRY;

c    = psnweltab.tran_code    ,COMMENTS="1.·s¼W 5.§ï±Ô 6.¦ÒÁZ 8.°h¥ð 9. ¯d¾°±Á~"

                              ,INCLUDE=(1,5,6,8,9 ),AUTONEXT;

d    = FORMONLY.tran_name     ,NOENTRY;

e    = psnweltab.psn_code     ,AUTONEXT;

f01  = psnweltab.idno         ,NOENTRY;

f02  = psnweltab.psn_name     ,NOENTRY;

f03  = psnweltab.wel_no       ,AUTONEXT;

f04  = psnweltab.nwelpay      ,AUTONEXT;

f05  = psnweltab.owelpay      ,NOENTRY;

f06  = psnweltab.npayrank     ,AUTONEXT;

f07  = FORMONLY.npayrankty    ,NOENTRY;

f08  = psnweltab.opayrank     ,NOENTRY;

f09  = FORMONLY.opayrankty    ,NOENTRY;

f10  = psnweltab.tran_date    ,AUTONEXT;

f11  = psnweltab.enter_date   ,AUTONEXT;

f12  = psnweltab.birthday     ,AUTONEXT;

f    = psnweltab.wel_mm       ,AUTONEXT;

END