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_mmY¬°¥¿¼Æªí¥Ü©¹«á±Àºâ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_mmY¬°¥¿¼Æªí¥Ü©¹«á±Àºâ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
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