Файл
Дополнения\Изменения
– ADD_DEL.PRG
*************************************************************************************
Дополнение\Изменение
данных
**
*********************************************************************
PROCEDURE ins && Процедура
Дополнения\Изменения
PARAMETERS
d_ins
ord_a=order()
CLEAR
RELEASE
KW,GW,XW,KS,ELC,TL,RD,OT,OR1,LG_TA
HIDE
POPUP serv
ON
KEY LABEL F1 DO HELP WITH 8
ON
KEY LABEL F7 DO N_YDOS_AND_KOD
sele
a
STORE
.F. TO _PAD_OTCH
DEFINE
POPUP YL FROM 4,10
n=recno()
m=1
br=1
DIMENSION
yl_za(100,1)
go
top
i=1
yl_za(i,1)=yl
DO
WHILE !EOF()
DEFINE
BAR (br) OF YL PROMPT yl_za(i,1)
IF
yl=yl_za(i,1)
skip
loop
ENDIF
m=m+1
i=i+1
yl_za(i,1)=yl
br=br+1
ENDDO
DIMENSION
yl_za(m,1)
ON
SELECTION POPUP YL DO YLIZ WITH PROMPT()
define
window hp from 12,28 to 20,60 shadow color scheme 16
DO
CASE
CASE
d_ins=1
SCATTER
MEMVAR BLANK
STORE
1 TO red
set
skip to
CLOSE
DATA
SELE
i
USE
HELP
SELE
a
USE
RABOT
SELE
d
USE
LGOT
CASE
d_ins=2
IF
RECCOUNT()=0
RETURN
ELSE
GO
_REC
kw=kw_l
gw=g_w_l
xw=x_w_l
ks=k_ys_l
ot=otop_l
elc=el_c_l
tl=tel_l
rd=rad_l
lg_ta=lgot
or1=or_r
yl_ins=yl
dom_ins=dom
k_ins=kw_ra
SCATTER
MEMVAR
STORE
2 TO red
ENDIF
ENDCASE
ACTIVATE
WINDOW INS
=POS_CH2()
@
1,10 GET m.fam
@
2,10 GET m.tab picture '9999' VALID unic() ERROR 'Повтор
Табеля'
@
2,28 GET m.tel picture '99999999'
@
3,10 GET m.yl WHEN yliz_s()
@
3,30 GET m.dom PICTURE 'NNNN'
@
3,40 GET m.kw_ra picture 'nnnn'
@
4,10 GET m.kv_m picture '###.##' default ''
*@
5,39 GET m.kol_vo DISABLE
*@
3,2 GET yl_z FUNCTION '*I ' VALID YLIZ1() WHEN INS2() DEFA 1 SIZE 1,7
@
5,35 GET m.elec picture '999999'
@
6,35 GET m.elec1 picture '999999'
@
5,43 GET or1 FUNCTION '*C Ордер' VALID
O_R() DEFA
0
COLOR SCHEME 16
@
6,43 GET lg_ta FUNC '*C Льгота'
VALID vib_lg() DEFA
.f.COLOR
SCHEME 16
@
8,1 to 8,70 double
@
12,2 GET kw FUNCTION '*C Квартплата'
DEFAULT .F. VALID KW_INS() COLOR SCHEME 16
@
13,2 GET gw FUNCTION '*C Горячая
вода' VALID GW_INS() defa .f. COLOR SCHEME
16
@
14,2 GET xw FUNCTION '*C Холодная
вода' VALID XW_INS() DEFA .F. COLOR SCHEME 16
@
15,2 GET ks FUNC '*C Комунальные
услуги' VALI KS_INS() DEFA .F.
COLO SCHEME 16
@
16,2 GET ot FUNCTION '*C Отопление'
VALID OT_INS() DEFA .F. COLOR SCHEME 16
@
17,2 GET elc FUNC '*C Электроэнергия'
VALID ELC_INS() DEFA .F. COLOR SCHEME 16
@
18,2 GET tl FUNCTION '*C Телефон'
VALID TL() WHEN TL1() DEFA .F. COLOR SCHEME 16
@
19,2 GET rd FUNCTION '*C Радио' VALID
rd() WHEN rd1() DEFA .F. COLOR SCHEME 16
*@
10,30 SAY 'Категория'
*@
10,47 get d.info
@
11,30 say 'Действительна
с' COLOR SCHEME 17
@
11,47 get m.dat_c COLOR SCHEME 17
@
11,58 say 'по' COLOR SCHEME 17
@
11,61 get m.dat_po VALID IIF(m.dat_c=
@
12,35 say '%начислений
кв.платы' COLOR SCHEME 17
@
12,60 get d.kwp_l PICTURE '#.##' COLOR SCHEME 17
@
12,65 SAY '%' COLOR SCHEME 17
@
13,35 SAY '%начислений
телефона' COLOR
SCHEME 17
@
13,60 get d.tl_l PICTURE '#.##' COLOR SCHEME 17
@
13,65 SAY '%' COLOR SCHEME 17
@
14,35 say '%начислений
радио' COLOR SCHEME 17
@
14,60 get d.rd_l PICTURE '#.##' COLOR SCHEME 17
@
14,65 SAY '%' COLOR SCHEME 17
@
15,35 say '%начислений
ком. услуг' COLOR
SCHEME 17
@
15,60 get d.k_l_l PICTURE '#.##' COLOR SCHEME 17
@
15,65 SAY '%' COLOR SCHEME 17
@
16,35 say '%начислений
Гор.воды' COLOR SCHEME 17
@
16,60 get d.gw_l PICTURE '#.##' COLOR SCHEME 17
@
16,65 SAY '%' COLOR SCHEME 17
@
17,35 say '%начислений
Хол.воды'COLOR SCHEME 17
@
17,60 get d.xw_l PICTURE '#.##' COLOR SCHEME 17
@
17,65 SAY '%' COLOR SCHEME 17
@
18,35 say '%начислений
отопления'
COLOR SCHEME 17
@
18,60 get d.ot_l PICTURE '#.##' COLOR SCHEME 17
@
18,65 SAY '%' COLOR SCHEME 17
@
20,35 SAY 'КАТЕГОРИЯ'
GET d.info COLOR SCHEME 17
@
1,57 GET pod FUNCTION '*N Сохранить;Выход;Удалить'
valid ad_in() default 1;
size
1,15,1 COLOR ,,,,gr+/b,w+/n,r+/b,,W+/GR,w/b
READ
CYCLE SHOW red() color scheme 9
DEACTIVATE
WINDOW INS
release
windows hp
IF
d_ins=1
DO
P_INDEX
ENDIF
GO
_REC
DO
POS_CH
ON
KEY
ON
KEY LABEL F1 DO HELP WITH 6
RETURN
FUNCTION red
DO
CASE
CASE
red=1
SHOW
GET pod,1 PROMPT 'Cохранить'
SHOW
GET pod,3 DISABLE
CASE
red=2
SHOW
GET pod,1 PROMPT 'Подтверждаю'
ENDCASE
DO
CASE
CASE
m.or_r=1
SHOW
GET kw ENABLE COLOR SCHEME 16
SHOW
GET gw ENABLE COLOR SCHEME 16
SHOW
GET xw ENABLE COLOR SCHEME 16
SHOW
GET ks ENABLE COLOR SCHEME 16
SHOW
GET ot ENABLE COLOR SCHEME 16
SHOW
GET elc ENABLE COLOR SCHEME 16
SHOW
GET tl DISABLE COLOR ,,,,,,,,,BG+/BG
SHOW
GET rd DISABLE COLOR ,,,,,,,,,BG+/BG
@
10,2 FILL TO 20,29 COLOR SCHEME 16
DO
CASE
CASE
m.lgot=.F.
SHOW
GET m.dat_c DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET m.dat_po DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET d.kwp_l DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET d.gw_l DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET d.xw_l DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET d.k_l_l DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET d.ot_l DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET d.tl_l DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET d.rd_l DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET d.info DISABLE COLOR ,,,,,,,,,W+/W
@
8,29 clear to 9,60
@
10,30 FILL TO 20,70 COLOR W+/BG
CASE
m.lgot=.T.
SHOW
GET m.dat_c ENABLE
SHOW
GET m.dat_po ENABLE
SHOW
GET d.kwp_l ENABLE
SHOW
GET d.gw_l ENABLE
SHOW
GET d.xw_l ENABLE
SHOW
GET d.k_l_l ENABLE
SHOW
GET d.ot_l ENABLE
SHOW
GET d.tl_l ENABLE
SHOW
GET d.rd_l ENABLE
SHOW
GET d.info ENABLE
SHOW
GET kw ENABLE COLOR SCHEME 16
SHOW
GET gw ENABLE COLOR SCHEME 16
SHOW
GET xw ENABLE COLOR SCHEME 16
SHOW
GET ks ENABLE COLOR SCHEME 16
SHOW
GET ot ENABLE COLOR SCHEME 16
SHOW
GET elc ENABLE COLOR SCHEME 16
@
10,30 FILL TO 20,70 COLOR SCHEME 17
ENDCASE
CASE
m.or_r=0
SHOW
GET kw DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET gw DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET xw DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET ks DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET ot DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET elc DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET tl DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET rd DISABLE COLOR ,,,,,,,,,W+/W
DO
CASE
CASE
m.lgot=.F.
SHOW
GET m.dat_c DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET m.dat_po DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET d.kwp_l DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET d.gw_l DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET d.xw_l DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET d.k_l_l DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET d.ot_l DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET d.tl_l DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET d.rd_l DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET d.info DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET kw DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET gw DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET xw DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET ks DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET ot DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET elc DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET tl DISABLE COLOR ,,,,,,,,,W+/W
SHOW
GET rd DISABLE COLOR ,,,,,,,,,W+/W
@
8,29 clear to 9,60
@
10,30 FILL TO 20,70 COLOR W+/BG
CASE
m.lgot=.T.
SHOW
GET m.dat_c ENABLE
SHOW
GET m.dat_po ENABLE
SHOW
GET d.kwp_l ENABLE
SHOW
GET d.gw_l ENABLE
SHOW
GET d.xw_l ENABLE
SHOW
GET d.k_l_l ENABLE
SHOW
GET d.ot_l ENABLE
SHOW
GET d.tl_l ENABLE
SHOW
GET d.rd_l ENABLE
SHOW
GET d.info ENABLE
SHOW
GET kw ENABLE COLOR SCHEME 16
SHOW
GET gw ENABLE COLOR SCHEME 16
SHOW
GET xw ENABLE COLOR SCHEME 16
SHOW
GET ks ENABLE COLOR SCHEME 16
SHOW
GET ot ENABLE COLOR SCHEME 16
SHOW
GET elc ENABLE COLOR SCHEME 16
@
10,30 FILL TO 20,70 COLOR SCHEME 17
ENDCASE
@
10,2 FILL TO 20,29 COLOR W+/W
ENDCASE
RETURN
***********************************************************************************
**
Дополнение
(Редактирование)
ставок по льготам
**
***********************************************************************************
FUNCTION INS_LG
SELE
d
ON
KEY LABEL F1 DO HELP WITH 5
DEFINE
WINDOW m_zar FROM 5,14 TO 23,58 SHADOW;
TITLE
'Сегодня - '+dtoc(date())
COLOR SCHEME 17
ACTIVATE
WINDOW M_ZAR
@
1,0 to 1,33 double
SCATTER
MEMVAR BLANK
@
3,1 to 3,31
@
3,7 say 'Ввод ставок
по льготам'
@
2,1 SAY 'КОД - ' GET m.n_lg PICTURE '99';
VALID
UNIC_LG() ERROR 'Код уже
существует'
@
2,10 SAY 'КАТЕГОРИЯ'
GET m.info
@
4,3 say '%начислений
кв.платы'
@
4,29 get m.kwp_l PICTURE '#.##'
@
4,35 SAY '%'
@
5,3 SAY '%начислений
телефона'
@
5,29 get m.tl_l PICTURE '#.##'
@
5,35 SAY '%'
@
6,3 say '%начислений
радио'
@
6,29 get m.rd_l PICTURE '#.##'
@
6,35 SAY '%'
@
7,3 say '%начислений
ком. услуг'
@
7,29 get m.k_l_l PICTURE '#.##'
@
7,35 SAY '%'
@
8,3 say '%начислений
Гор.воды'
@
8,29 get m.gw_l PICTURE '#.##'
@
8,35 SAY '%'
@
9,3 say '%начислений
Хол.воды'
@
9,29 get m.xw_l PICTURE '#.##'
@
9,35 SAY '%'
@
10,3 say '%начислений
отопления'
@
10,29 get m.ot_l PICTURE '#.##'
@
10,35 SAY '%'
@
12,2 GET LG_INS FUNCTION '*HN Сохранить;Отмена;Удалить'
VALID LG_INS() DEFA 1 SIZE 1,10,2
read
CYCLE COLOR SCHEME 5
SELE
a
ON
KEY
ON
KEY LABEL F1 DO HELP WITH 6
RELEASE
WINDOWS M_ZAR
RETURN
П риложение
№ 1.5
-
6 -
Просмотр
с помощью команды
BROWSE
– BAZES.PRG
*************************************************************************************
Пункт
меню - КАДРЫ
**
***********************************************************************************
PROCEDURE
KDR_r && Пункт меню
- Работа с картотекой
HIDE
POPUP kadr
IF
RECCOUNT()=0
ACTIVATE
WINDOW vib
@
1,10 SAY 'Б а з а п у с т
а'
@
2,9 SAY 'Начните с
дополнения'
@
0,0 FILL TO 8,43 COLOR W+/R
@
5,3 GET ins1 FUNCTION '*TH Дополнить;Отмена'
VALID ins2();
DEFA
1 SIZE 1,10,4 COLOR ,,,,w+/n,w+/n,w+/n,,W+/R,
READ
CYCLE OBJECT 1
DEACTIVATE
WINDOW vib
RETURN
ENDIF
DEFINE
WINDOW kd FROM 3,0 TO 23,30 system float grow close zoom shadow
ON
KEY LABEL F1 DO HELP WITH 1
SELECT
A
BROWS
FOR or_r=1 REST NOMENU NOEDIT;
TITLE
'F3 - Меню Сегодня
-'+dtoc(date()) FIELDS;
kp=iif(or_r=1,'-','')
:1 :H='' :W=nach() :F,;
tab
:H='Таб' :W=EN() :V=NE() :F,;
fam
:h='Фамилия' :W=EN()
:V=NE() :F :15,;
lg=iif(lgot=.t.,'v','')
:1 :H='':W=EN() :W=nach() :V=NE() :F ;
WIND
kd COLOR SCHEME 12
CLEAR
release
window kd
ON
KEY LABEL F1 DO HELP WITH 6
RETURN
PROCEDURE kv_sch && Пункт
меню(pop_vib) - жильцы
SELECT
A
SET
ORDER TO ADRR
DEFINE
WINDOW kd FROM 3,0 TO 23,30 system float grow close zoom shadow
ON
KEY LABEL F1 DO HELP WITH 1
tr=recno()
_y=yl
_d=dom
_kv=kw_ra
BROWS
FOR yl=_y.and.dom=_d.and.kw_ra=_kv NOMENU NOEDIT;
TITLE
'F3 - Меню Сегодня
-'+dtoc(date()) FIELDS;
kp=iif(or_r=1,'-','')
:1 :H='' :W=nach() :F,;
tab
:H='Таб' :W=EN() :V=NE() :F,;
fam
:h='Фамилия' :W=EN()
:V=NE() :F :15,;
lg=iif(lgot=.t.,'v','')
:1 :H='':W=EN() :W=nach() :V=NE() :F ;
WIND
kd COLOR SCHEME 12
CLEAR
release
window kd
ON
KEY LABEL F1 DO HELP WITH 6
RETURN
PROCEDURE
kdr_l && пункт меню
- Картотека
льготников
HIDE
POPUP kadr
IF
RECCOUNT()=0
ACTIVATE
WINDOW vib
@
1,10 SAY 'Б а з а п у с т
а'
@
2,9 SAY 'Начните с
дополнения'
@
0,0 FILL TO 8,43 COLOR W+/R
@
5,3 GET ins1 FUNCTION '*TH Дополнить;Отмена'
VALID ins2();
DEFA
1 SIZE 1,10,4 COLOR ,,,,w+/n,w+/n,w+/n,,W+/R,
READ
CYCLE OBJECT 1
DEACTIVATE
WINDOW vib
RETURN
ENDIF
DEFINE
WINDOW kd1 FROM 1,0 TO 20,79 system float grow close zoom
ON
KEY LABEL F1 DO HELP WITH 2
ON
KEY LABEL F5 ACTIVATE POPUP POISK
ON
KEY LABEL CTRL+T DO DEL
ON
KEY LABEL CTRL+N DO INS WITH 1 IN ADD_DEL
GO
TOP
BROWS
FOR lgot=.T. WIND kd1 color scheme 8 TITLE;
'F3
- Меню F5 - Поиск
Сегодня -'+dtoc(date())
FIELDS;
tab
:H='Таб' :W=INFO3() :R :F,;
fam
:H='Фамилия' :W=INFO() :F
:15,;
dat_c
:H='С даты' :W=INFO() :F,;
dat_po
:H='По дату' :w=INFO() :F,;
d.info
:H='Категория'
:R :W=INFO() :F,;
n_yd
:H='N удост.' :W=INFO() :F,;
yl
:H='Улица' :W=INFO() :R :F,;
dom
:H='Д' :W=INFO() :R :F,;
kw_ra
:H='Кв' :W=INFO() :r :F,;
tel
:h='Телефон' :W=INFO() :F
CLEAR
ON
KEY LABEL F1 DO HELP WITH 6
RETURN
PROCEDURE BAZA && пункт
меню - База жильцов
HIDE
POPUP kadr
IF
RECCOUNT()=0
ACTIVATE
WINDOW vib
@
1,10 SAY 'Б а з а п у с т
а'
@
2,9 SAY 'Начните с
дополнения'
@
0,0 FILL TO 8,43 COLOR W+/R
@
5,3 GET ins1 FUNCTION '*TH Дополнить;Отмена'
VALID ins2();
DEFA
1 SIZE 1,10,4 COLOR ,,,,w+/n,w+/n,w+/n,,W+/R,
READ
CYCLE OBJECT 1
DEACTIVATE
WINDOW vib
RETURN
ENDIF
DEFINE
WINDOW kd1 FROM 1,0 TO 20,79 system float grow close zoom
ON
KEY LABEL F1 DO HELP WITH 2
ON
KEY LABEL F5 ACTIVATE POPUP POISK
ON
KEY LABEL CTRL+T DO DEL
ON
KEY LABEL CTRL+N DO INS WITH 1 IN ADD_DEL
GO
TOP
BROWS
WIND kd1 color scheme 18 TITLE;
'F3
- Меню F5 - Поиск
Сегодня -'+dtoc(date())
FIELDS;
tab
:H='Таб' :R :W=INFO() :F,;
fam
:H='Фамилия' :W=INFO() :F
:15,;
yl
:H='Улица' :R :W=INFO() :F :10,;
dom
:H='Д' :R :W=INFO() :F,;
kw_ra
:H='Кв' :R :W=INFO() :F,;
tel
:h='Телефон' :W=INFO() :F
:6,;
d.info
:H='Категория'
:R :W=INFO() :15 :F,;
n_yd
:H='N удост.' :W=INFO() :F,;
kol_vo
:H='Кол-во' :W=INFO() :3
CLEAR
ON
KEY LABEL F1 DO HELP WITH 6
RETURN
PROCEDURE ent_sch && пункт
меню - Ввод оплаты
счетчика
HIDE
POPUP kadr
IF
RECCOUNT()=0
ACTIVATE
WINDOW vib
@
1,10 SAY 'Б а з а п у с т
а'
@
2,9 SAY 'Начните с
дополнения'
@
0,0 FILL TO 8,43 COLOR W+/R
@
5,3 GET ins1 FUNCTION '*TH Дополнить;Отмена'
VALID ins2();
DEFA
1 SIZE 1,10,4 COLOR ,,,,w+/n,w+/n,w+/n,,W+/R,
READ
CYCLE OBJECT 1
DEACTIVATE
WINDOW vib
RETURN
ENDIF
DEFINE
WINDOW kd1 FROM 1,0 TO 20,79 system float grow close zoom
GO
TOP
SELECT
A
ON
KEY LABEL F1 DO HELP WITH 2
ON
KEY LABE F5 ACTIVATE POPUP POISK
BROWSE
for or_r=1 TITLE;
'F3
- Меню F5 - Поиск
Сегодня -'+dtoc(date())
FIELDS;
tab
:H='Таб' :W=INFO() :F :R,;
fam :h='Фамилия' :W=INFO()
:F :15 :r,;
yl :H='Улица' :W=INFO() :F :r :10,;
dom :H='Дом' :W=INFO() :F :r,;
kw_ra :H='Кв.' :W=INFO() :F :r,;
tel :H='Телефон':W=INFO()
:F :r ,;
elec :H='Ст.знач':W=INFO() :F
:v=r() :f ,;
elec1 :H='Нов.знач' :v=r()
:W=INFO() :F,;
c.el_c :H='К оплате'
:W=INFO() :F :8;
WIND
kd1 color scheme 18
CLEAR
ON
KEY LABEL F1 DO HELP WITH 6
RETURN
PROCEDURE ent_opl && пункт
меню - Ввод оплаты
HIDE
POPUP kadr
IF
RECCOUNT()=0
ACTIVATE
WINDOW vib
@
1,10 SAY 'Б а з а п у с т
а'
@
2,9 SAY 'Начните с
дополнения'
@
0,0 FILL TO 8,43 COLOR W+/R
@
5,3 GET ins1 FUNCTION '*TH Дополнить;Отмена'
VALID ins2();
DEFA
1 SIZE 1,10,4 COLOR ,,,,w+/n,w+/n,w+/n,,W+/R,
READ
CYCLE OBJECT 1
DEACTIVATE
WINDOW vib
RETURN
ENDIF
DEFINE
WINDOW kd1 FROM 1,0 TO 20,79 system float grow close zoom
dat=DATE()
opl=0
SELECT
A
GO
TOP
ON
KEY LABEL F1 DO HELP WITH 2
ON
KEY LABEL F5 ACTIVATE POPUP POISK
BROWS
FOR or_r=1 REST TITLE;
'F3
- Меню F5 - Поиск
Сегодня -'+dtoc(date())
FIELDS;
lg=iif(lgot=.t.,'v','')
:1 :H='':W=INFO3(),;
tab
:H='Таб' :R :W=INFO3(),;
fam :h='Фамилия' :15
:W=INFO3(),;
opl_ta :H='ВВОД ОПЛАТЫ'
:8 :V=sv3() :W=INFO3(),;
ost_k :H='Остаток' :8
:W=INFO3() :r,;
d_opl :H='Дата' :8 :W=INFO3(),;
c.itog_n :h='Начислен':8
:R :W=INFO3(),;
c.sum_it :h='По льготе'
:W=INFO3() :8 :R,;
c.itog :h='К оплате':10
:W=INFO3() :R;
WIND
kd1 COLOR W+/RB,GR+/RB,N/g,GR+/g,GR+/N,GR+/RB,GR+/RB,,,
ON
KEY LABEL F1 DO HELP WITH 6
CLEAR
RETURN
*************************************************************************************
Пункт
меню – СЕРВИС
**
***********************************************************************************
PROCEDURE
NORMS && пункт меню
- Ввод нормативов
оплаты (стоимости
услуг)
HIDE
POPUP serv
ON
KEY LABEL F1 DO HELP WITH 4
DEFINE
WINDOW m_zar FROM 5,15 TO 23,55 SHADOW;
TITLE
'Сегодня - '+dtoc(date())
color scheme 19
ACTIVATE
WINDOW M_ZAR
@
1,0 TO 1,33 DOUBLE
@
2,1 TO 2,31
@
2,7 SAY 'Ввод стоимости
услуг'
@
3,3 SAY 'Стоимость
кв.платы'
@
3,29 GET _kv_pl PICTURE '##.##'
@
4,3 SAY 'Стоимость
телефона'
@
4,29 GET _tel PICTURE '##.##'
@
5,3 SAY 'Стоимость
радио'
@
5,29 GET _rad PICTURE '##.##'
@
6,3 SAY 'Стоимость
ком. услуг'
@
6,29 GET _kom PICTURE '##.##'
@
7,3 SAY 'Cтоимость
Гор.воды'
@
7,29 GET _gor_w PICTURE '##.##'
@
8,3 SAY 'Стоимость
Хол.воды'
@
8,29 GET _xol_w PICTURE '##.##'
@
9,3 SAY 'Стоимость
отопления'
@
9,29 GET _otopl PICTURE '##.##'
@
10,3 SAY 'Стоимость
электроэнергии'
@
10,29 GET _elek PICTURE '##.##'
@
12,3 SAY 'Бухгалтер'
@
12,14 GET _pod PICTURE 'xxxxxxxxxxxxxxx'
@
14,5 GET c function '*HN ОК;Отмена'
VALID cf();
DEFAULT
1 SIZE 1,6,7 COLOR SCHEME 12
READ
CYCLE COLOR ,N/W
RELEASE
WINDOWS M_ZAR
ON
KEY LABEL F1 DO HELP WITH 6
RETURN
********************************************************************************
PROCEDURE VVV && пункт
меню - Ввод оплаты
для олного
квартиросъемщика
ON
KEY LABEL F1 DO HELP WITH 2
SELE
a
R=RECNO()
y=yl
d=dom
kv=kw_ra
dat=DATE()
opl=0
DEFINE
WINDOW m_zar FROM 5,15 TO 23,55 SHADOW;
TITLE
'Сегодня - '+dtoc(date())
color scheme 19
ACTIVATE
WINDOW M_ZAR
IF
or_r=0
LOCATE
FOR y=yl.AND.d=dom.AND.kv=kw_ra.AND.or_r=1
IF
FOUND()=.F.
RETURN
ENDIF
ENDIF
@
1,2 SAY 'ВВОД ОПЛАТЫ
ДЛЯ ' color gr+/b
@
2,2 SAY ALLTRIM(FAM) COLOR W+/B
@
3,2 SAY 'Табель - ' color gr+/b
@
3,14 SAY ALLTRIM(STR(TAB)) COLOR W+/B
@
5,1 TO 14,39 DOUBLE
@
6,3 SAY 'Начислено'
@
6,15 GET c.itog_n disable PICTURE '#######.##' color scheme 12
@
7,3 SAY 'По льготе'
@
7,15 SAY ltrim(str(c.sum_it,7,2)) color r/W
@
8,3 SAY 'К оплате'
@
8,15 GET c.itog disable PICTURE '#######.##' color scheme 12
@
10,2 SAY 'Введите
уплаченную
сумму'
@
10,26 GET opl picture '####.##' VALID SM()
@
12,4 SAY 'Остаток '
@
12,12 GET ost_k disable PICTURE '####.##' color scheme 12
@
15,5 GET sav FUNCTION '*H Ok;Отмена'
VALID SAV() DEFA 1 SIZE 1,8,5
READ
CYCLE COLOR ,N/W
DEACTIVATE
WINDOW M_ZAR
GO
r
ON
KEY LABEL F1 DO HELP WITH 1
IF
WONTOP()='INS'
@
10,27 CLEAR TO 20,50
set
order to adrr
=POS_CH1()
SHOW
GETS
ON
KEY LABEL F1 DO HELP WITH 5
ENDIF
RETURN
П риложение
№ 1.4
- 6 -
Часть
I ВВЕДЕНИЕ
|
1
|
Краткая
характеристика
предприятия
|
2
|
Основные
производственные
фонды
|
3
|
Себестоимость,
прибыль и
рентабельность
продукции
|
4
|
Планирование
производственно-хозяйственной
деятельности
предприятия
|
5
|
Предпосылки
для написания
приложения
|
5
|
Краткая
характеристика
системы
|
6
|
Часть
II
ОСНОВНАЯ
ЧАСТЬ
|
|
ГЛАВА 1
|
8
|
Описание
предметной
области
|
9
|
Проектирование
базы данных
|
12
|
Этап 1.
Определение
сущностей
|
12
|
Этап 2.
Определение
взаимосвязей
мужду сущностями
|
12
|
Этап 3.
Задание первичных
и альтернативных
ключей, определение
атрибутов
сущностей
|
13
|
Этап 4.
Физическое
описание модели
|
16
|
ГЛАВА 2
|
19
|
Поддержка
базы данных
|
20
|
Описание
работы приложения.
|
21
|
Работа
с пунктами
меню
|
23
|
PAD-пункт
«Кадры»
|
23
|
PAD-пункт
«Отчеты»
|
24
|
PAD-пункт
«Печать»
|
24
|
PAD-пункт
«Сервис»
|
25
|
PAD-пункт
«Расчет»
|
25
|
PAD-пункт
«Помощь»
|
25
|
PAD-пункт
«Выход»
|
25
|
Работа
с окнами
|
26
|
Окно
«Работа с
картотекой»
(INS)
|
26
|
Окно
«Квартиросъемщики»
(KD)
|
28
|
Окно
нормативов
(M_ZAR)
|
29
|
Окно
дополнения
льгот
(M_ZAR)
|
29
|
Окно
тарифов
(M_ZAR)
|
29
|
Окно
дополнения
жильцов (INS)
|
29
|
BROWSE-окна
(KDR)
|
30
|
Окно
помощи (HELP)
|
30
|
ГЛАВА
3
|
31
|
Краткий
обзор Процедурного
языка - FoxPro
|
32
|
Техническое
описание работы
программы
|
34
|
«СЕРВИС»-«Дополнение»
|
36
|
«СЕРВИС»-«Дополнение
льгот»
|
39
|
«СЕРВИС»-«Тарифы»
|
39
|
«СЕРВИС»-«Нормы
оплаты услуг»
|
40
|
«СЕРВИС»-«Упаковка
данных»
|
40
|
«СЕРВИС»-«Переиндексация»
|
40
|
Пункт
меню – «КАДРЫ»
|
41
|
«КАДРЫ»-«Работа
с картотекой»
|
41
|
«КАДРЫ»-«Квартиросъемщики»
|
46
|
«КАДРЫ»-«Картотека
льготников»
|
47
|
«КАДРЫ»-«База
жильцов»
|
47
|
«КАДРЫ»-«Ввод
данных счетчика»
|
47
|
«КАДРЫ»-«Ввод
оплаты»
|
47
|
Пункт
меню «РАСЧЕТ»
|
48
|
«РАСЧЕТ»-«Расчет
квартплаты»
|
48
|
«РАСЧЕТ»-«Расчет
по льготам»
|
49
|
«РАСЧЕТ»-«Слияние
квартплаты
с льготами»
|
49
|
Функция
ПОИСКА
|
50
|
Пункт
меню «ОТЧЕТЫ»
|
52
|
«ОТЧЕТЫ»-«Списки
по начислению»
|
52
|
«ОТЧЕТ»-«Списки
по льготам»
|
53
|
«ОТЧЕТ»-«Оплата
э\энергии»
|
53
|
«ОТЧЕТ»-«Сальдо
по квартиросъемщикам»»
|
53
|
«ОТЧЕТ»-«Свод
по квартплате
за месяц»
|
53
|
Пункт
меню «ПЕЧАТЬ»
|
54
|
«ПОМОЩЬ»-«Помощь»
|
55
|
«ПОМОЩЬ»-«Справка»
|
55
|
Создание
контексно-зависимой
экранной
подсказки.
|
55
|
Пункт
меню «Выход»
|
56
|
Часть
III
ЗАКЛЮЧЕНИЕ
|
|
Заключение
|
58
|
Список
используемой
литературы
|
59
|
Часть
I ВВЕДЕНИЕ
|
1
|
Краткая
характеристика
предприятия
|
2
|
Основные
производственные
фонды
|
3
|
Себестоимость,
прибыль и
рентабельность
продукции
|
4
|
Планирование
производственно-хозяйственной
деятельности
предприятия
|
5
|
Предпосылки
для написания
приложения
|
5
|
Краткая
характеристика
системы
|
6
|
Часть
II
ОСНОВНАЯ
ЧАСТЬ
|
|
ГЛАВА 1
|
8
|
Описание
предметной
области
|
9
|
Проектирование
базы данных
|
12
|
Этап 1.
Определение
сущностей
|
12
|
Этап 2.
Определение
взаимосвязей
мужду сущностями
|
12
|
Этап 3.
Задание первичных
и альтернативных
ключей, определение
атрибутов
сущностей
|
13
|
Этап 4.
Физическое
описание модели
|
16
|
ГЛАВА 2
|
19
|
Поддержка
базы данных
|
20
|
Описание
работы приложения.
|
21
|
Работа
с пунктами
меню
|
23
|
PAD-пункт
«Кадры»
|
23
|
PAD-пункт
«Отчеты»
|
24
|
PAD-пункт
«Печать»
|
24
|
PAD-пункт
«Сервис»
|
25
|
PAD-пункт
«Расчет»
|
25
|
PAD-пункт
«Помощь»
|
25
|
PAD-пункт
«Выход»
|
25
|
Работа
с окнами
|
26
|
Окно
«Работа с
картотекой»
(INS)
|
26
|
Окно
«Квартиросъемщики»
(KD)
|
28
|
Окно
нормативов
(M_ZAR)
|
29
|
Окно
дополнения
льгот
(M_ZAR)
|
29
|
Окно
тарифов
(M_ZAR)
|
29
|
Окно
дополнения
жильцов (INS)
|
29
|
BROWSE-окна
(KDR)
|
30
|
Окно
помощи (HELP)
|
30
|
|
|
ГЛАВА
3
|
31
|
Краткий
обзор Процедурного
языка - FoxPro
|
32
|
Техническое
описание работы
программы
|
34
|
«СЕРВИС»-«Дополнение»
|
36
|
«СЕРВИС»-«Дополнение
льгот»
|
39
|
«СЕРВИС»-«Тарифы»
|
39
|
«СЕРВИС»-«Нормы
оплаты услуг»
|
40
|
«СЕРВИС»-«Упаковка
данных»
|
40
|
«СЕРВИС»-«Переиндексация»
|
40
|
Пункт
меню – «КАДРЫ»
|
41
|
«КАДРЫ»-«Работа
с картотекой»
|
41
|
«КАДРЫ»-«Квартиросъемщики»
|
46
|
«КАДРЫ»-«Картотека
льготников»
|
47
|
«КАДРЫ»-«База
жильцов»
|
47
|
«КАДРЫ»-«Ввод
данных счетчика»
|
47
|
«КАДРЫ»-«Ввод
оплаты»
|
47
|
Пункт
меню «РАСЧЕТ»
|
48
|
«РАСЧЕТ»-«Расчет
квартплаты»
|
48
|
«РАСЧЕТ»-«Расчет
по льготам»
|
49
|
«РАСЧЕТ»-«Слияние
квартплаты
с льготами»
|
49
|
Функция
ПОИСКА
|
50
|
Пункт
меню «ОТЧЕТЫ»
|
52
|
«ОТЧЕТЫ»-«Списки
по начислению»
|
52
|
«ОТЧЕТ»-«Списки
по льготам»
|
53
|
«ОТЧЕТ»-«Оплата
э\энергии»
|
53
|
«ОТЧЕТ»-«Сальдо
по квартиросъемщикам»»
|
53
|
«ОТЧЕТ»-«Свод
по квартплате
за месяц»
|
53
|
Пункт
меню «ПЕЧАТЬ»
|
54
|
«ПОМОЩЬ»-«Помощь»
|
55
|
«ПОМОЩЬ»-«Справка»
|
55
|
Создание
контексно-зависимой
экранной
подсказки.
|
55
|
Пункт
меню «Выход»
|
56
|
Часть
III
ЗАКЛЮЧЕНИЕ
|
|
Заключение
|
58
|
Список
используемой
литературы
|
59
|
I-й
раздел Введение
Краткая
характеристика
предприятия……………………………………...
|
2
|
Основные
производственные
фонды……………………………………….
|
3
|
Себестоимость,
прибыль и
рентабельность
продукции…………………….
|
4
|
Планирование
производственно-хозяйственной
деятельности
предприятия..
|
5
|
Предпосылки
для написания
приложения………………………………….
|
5
|
Краткая
характеристика
системы…………………………………………..
|
6
|
Краткая
характеристика
предприятия
Усть-Кутская
перевалочно-распределительная
нефтебаза
является филиалом
ОАО "Иркутскнефтепродукт".
Расположена
в г. Усть-Куте,
Иркутской
обл., на берегу
р. Лена, в устье
реки Якурим.
Нефтебаза
классифицируется
по следующим
признакам:
по
общей вместимости
и максимальному
объему одного
резервуара
относится к
первой категории
по
функциональному
назначению
– перевалочно-распределительная
по
транспортным
связям – смешанная,
автомобильно-водно-железнодорожная
по
номенклатуре
– нефтебаза
общего хранения.
Предприятие
имеет восемь
АЗС, а также
пять филиалов-нефтескладов. Характеристика
производственной
деятельности
По своему
функциональному
назначению
нефтебаза
является
перевалочным
пунктом для
отправки
нефтепродуктов
в северные
районы Иркутской
области, Республику
Саха-Якутия,
Хабаровский
край водным
путем (по р. Лена)
за период навигации
с 1/05 по 25/10. Наличие
мощного резервуарного
парка позволяет
производить
накопление
и хранение
нефтепродукта
в любое время
года.
Через имеющиеся
восемь АЗС и
пять филиалов-нефтескладов
нефтебаза
покрывает
потребности
в нефтепродуктах
в некоторых
районах Иркутской
обл.
Маслами, смазками
также обеспечиваются
предприятия
Братского и
Усть-Илимского
районов.
Предприятие
имеет развитую
инфраструктуру
по обеспечению
предприятий
и организаций
и жилых микрорайонов
следующими
видами услуг:
установка
телефонов и
обеспечение
телефонной
связью
передача
электроэнергии
через собственную
подстанцию
снабжение
паром, холодной
и горячей водой
от собственных
источников
(ТЭЦ, водозабор)
перевозка
нефтепродуктов
автотранспортом.
Производственные
мощности и их
оснащения
Чтобы управлять
организацией,
необходимо
определенным
образом связать
цели, людей и
виды, выполняемой
ими работ между
собой. Для этого
создается
организационная
структура
управления
организацией,
и составляются
должностные
инструкции
на всех членов
организации,
в которых
оговариваются:
права, ответственность
и обязанности
каждого.
Схема
1
Структура
управления
предприятия
Схема
2
Подразделение
предприятия
на цеха
Непосредственная
реализация
нефтепродуктов
осуществляется
через такие
основные цеха,
как 1 цех, 4 цех
и АЗС. Объем
реализации
нефтепродуктов
по цехам распределяется
в зависимости
от сезонных
условий, т.е.
в летний период
наибольший
объем реализации
нефтепродукта
приходится
на 1 и 4 цеха, т.к.
в этих цехах
производится
отгрузка
нефтепродуктов
водным путем
(танкерами).В
зимний же период
эти цеха производят
"затарку"
резервуаров
на хранение
нефтепродукта.
Прием нефтепродукта
осуществляется
с вагоноцистерн
через эстокады.
Отгрузка
производится
водным путем
танкерами
через причалы
Цех № 1 предназначен
как для хранения
нефтепродукта
, перевалки
водным путем
(танкерами),
обеспечением
города и филиалов
темными и светлыми
нефтепродуктами.
Цех № 4предназначен
для хранения
светлых нефтепродуктов
и отправки
водным путем.
Лаборатория
осуществляет
контроль за
качеством
принимаемых
и отпускаемых
нефтепродуктов,
а также периодический
контроль за
состоянием
нефтепродуктов
в резервуарах.
Тарный производит
перевалку
горюче-смазочных
материалов
через бочкатару
и поштучно
(литол, циатим,
тосол …).
Цех № 3, АЗС осуществляют
реализацию
нефтепродуктов
населению и
предприятиям
наличным и
безналичным
расчетом.
Вспомогательное
производство
осуществляет
обслуживания
основных объектов
нефтебазы, а
также и близлежащий
жилой поселок
(обеспечение
теплом, связью,
электроэнергией
при необходимости)1 Основные
производственные
фонды
Условное
распределение
объема реализации
нефтепродукта
основными
цехами
1
Разработка
приложения
ориентированна
именно на эту
часть производства,
то есть по ЖКХ
(учет квартплаты.)
Основные средства
предприятия
представлены
различными
видами, которые
отражают
производственную
деятельность.
Наибольший
удельный вес
имеют здания
и сооружения.
В состав зданий
входят производственные
цеха, которые
были построены
в основном
25-30 лет назад и
большей частью
требуют капитального
ремонта. Низка
норма износа,
проводимые
переоценки
значительно
увеличили
стоимость
зданий, что не
всегда соответствует
истинной рыночной
стоимости.
Сооружение,
в основном,
представлены
резервуарами,
которые на 90%
не имеют остаточной
стоимости и
фактически
по сроку службы
подлежат списанию.
Но так как сделать
это не возможно,
следует произвести
оценку остаточной
стоимости этой
части основных
фондов, это
позволит получить
дополнительные
амортизационные
отчисление
на восстановление
износа
Из общего количества
резервуаров
на нефтебазе
10% требуют немедленной
замены, остальным
необходимо
проведение
полного обследования,
определения
остаточного
ресурса и ремонт.
Высокая степень
износа (более
60%) характеризует
такие объекты
основных средств
как машины и
оборудование,
и транспортные
средства. Их
удельный вес
в общем объеме
составляет
2%.
Практически
изношенными
являются
передаточные
устройства,
имеющие остаточную
стоимость 22,7
млн.руб. при
восстановительной
стоимости 96,2
млн. руб.,
В связи с уменьшением
капитальных
вложений, ввод
основных фондов
за 1999-2000 сократился
и не оказывает
влияния. За
1999 г. введено
основных средств
на сумму 2,9 млн.
руб. Списание
основных средств
в 2000 г. не производилось.
Это связано
с тем, что полностью
амортизированные
основные средства
эксплуатируются,
а списание
основных средств
физически
изношенных
и не эксплуатирующихся,
но не имеющих
остаточную
стоимость не
разрешается.
В целом основные
средства нефтебазы
имеют значительную
восстановительную
стоимость
606,9 млн. руб., большой
износ – 356,8 млн.
руб.
Для
определения
истинной рыночной
стоимости
каждого объекта
основных фондов
необходимо
провести натуральную
оценку с привлечением
профессиональных
оценщиков. Это
положительно
скажется на
определение
налогооблагаемой
базы для определения
налога на имущество
так и для увеличения
амортизационных
отчислений
на ремонт и
полное восстановление
основных средств Себестоимость,
прибыль и
рентабельность
продукции Прибыль
и рентабельность
представляют
собой важные
показатели
эффективности
производства.
Достижение
наибольших
результатов
при наименьших
затратах
является непреложным
законом хозяйственного
деятельности.
Повышение
эффективности
производства
означает не
только рост
производительности
труда, фондоотдачи
и снижение
себестоимости
продукции, но
и увеличение
суммы прибыли
и уровня рентабельности.
На
предприятии
различают
прибыль от
реализации
продукции и
балансовую
прибыль. Прибыль
представляет
собой часть
чистого дохода,
полученного
в процессе
хозяйственной
деятельности,
который образуется
после возмещения
из доходных
поступлений
(выручки) затрат
на себестоимость
продукции.
Сумма
прибыли изменяется
под влиянием
интенсивных
и экстенсивных
факторов.
К числу
интенсивных
факторов изменение
суммы прибыли
относится
улучшение
использования
производственных
фондов, рост
объема производства
без увеличения
численности
работающих,
повышение
производительности
труда и снижение
себестоимости.
Рентабельность
- важный обобщающий
показатель
работы предприятия.
В ней находит
отражение не
только величена
прибыли и
производственных
фондов, но и
производительность
труда, фондоотдачи,
скорости
оборачиваемости
оборотных
средств и т.д. Различают
три вида рентабельности:
общая
рентабельность
- отношение
суммы балансовой
прибыли к
среднегодовой
стоимости
основных
производственных
фондов и нормируемых
оборотных
средств, не
про кредитованных
банком;
расчетная
рентабельность
- отношение
суммы расчетной
прибыли к
среднегодовой
стоимости
основных
производственных
фондов и нормируемых
оборотных
средств за
вычетом тех
основных фондов,
по которым не
взимается
плата в бюджет,
и нормируемых
оборотных
средств, про
кредитованных
банком. Для
исчисления
суммы расчетной
прибыли балансовая
прибыль уменьшается
на сумму платежей
в бюджет за
производственные
основные фонды
и нормируемые
оборотные
средства и на
сумму уплаченных
процентов за
пользование
банковским
кредитом;
рентабельность
по отношению
к расходам -
отношение
суммы прибыли
к расходам как
в целом по
анализируемому
предприятию,
так и по отдельным
видам деятельности
или видам работ. Планирование
производственно-хозяйственной
деятельности
предприятия План
производства
и реализации
продукции
Исходным
элементом
организации
производственного
процесса является
качественно
разработанный,
своевременно
доведенный
до цехов и
подразделений
предприятия
планы и плановые
задания.
Планирование
капитального
строительства
и капитального
ремонта основных
фондов
Основной
задачей планирования
капитального
строительства
являются увеличение
и обновление
производственных
мощностей и
основных фондов.
Эта задача
должна решаться
на современной
научно-технической
основе в объемах,
необходимых
для обеспечения
прироста продукции
и услуг, повышения
их качества,
роста эффективности
производства.
При
планировании
капитального
строительства
следует обеспечить
сбалансированность
лимитов капитальных
вложений и
строительно-монтажных
работ с финансовыми
и материальными
ресурсами.
К основным
показателям
плана капитальных
вложений относится:
прирост производственных
мощностей за
счет технического
перевооружения
и реконструкции
ввод
в действие
производственных
мощностей,
отдельных
объектов
производственного
назначения
за счет расширения
действующих
и строительства
новых зданий
и сооружений
ввод
в действие
объектов охраны
природы
ввод
в действие
основных
производственных
и непроизводственных
фондов
Лимит - ресурсный
показатель,
определяющий
предельную
величину
капитальных
вложений, в
том числе на
строительно-монтажные
работы, на
запланированный
ввод в действие
мощностей,
объектов и
создание нормативных
заделов. Заказчики
обязаны укладываться
в соответствующие
лимиты капитальных
вложений.
Предпосылки
для написания
приложения
Главным фактором
для разработки
своего приложения
явилось предложение
моей супруги,
работающей
бухгалтером
на этом предприятии
и выполняющей
расчет квартплаты.
Усть-Кутская
нефтебаза
имеет на своем
балансе Жилищное
хозяйство
общей площадью
– 22735 кв.метров
и количеством
проживающих
– 14 тысяч 420 человек.
Расчет квартплаты
производится
в бухгалтерии
по данным ЖКО.
При данном
расчете в основном
фиксируются
те жильцы, с
которых взимают
и начисляют
квартплату
за предоставляемые
услуги. Моей
целью, при написании
приложения,
было наиболее
полно отразить
всех проживающих
в СУБД и подходящей
больше непосредственно
для ЖКО как
расчетно-инфармационная
база всех
проживающих.
Краткая
характеристика
системы Для
осуществления
планирования
деятельности
любой фирмы
на любом этапе
работы осуществляются
некоторые
расчеты для
автоматизации
которых удобно
и рационально
применять
вычислительную
технику. В своей
дипломной
работе я решил
разработать
приложение
по учету платы
за квартиру.
В
данном приложении
решаются следующие
задачи:
Заполнение
и хранение
информации
о всех жильцах.
Данная информация
упорядочена
и выводится
на экран, для
просмотра или
редактирования
в зависимости
от предполагаемого
действия
пользователя.
Возможность
выборочного
начисления
на предоставляемые
услуги, а также
возможно (если
это необходимо)
установить
процент начисления
на каждую услугу
отдельно для
конкретного
квартиросъемщика
(например в
какой то период
в квартире
никто не проживает
(отпуск ,командировка
и т.д.)) следовательно
за какие-то
услуги плата
не начисляется
или начисляется
в меньшем размере
(10%,20%,…), или наоборот.
Возможность
определения
льготы для
одного или
группы квартиро-съемщиков
и процентной
ставке для
каждой льготы.
Формирование
и печать необходимых
данных для
отчетности
и анализа, а
также печать
квитанции об
произведенных
начислениях,
задолженности
по оплате и
остатке денежных
средств для
конкретного
жильца.
Возможность
обращения к
справочным
экранам, описывающими
возмож-ные
действия в
данном месте
системы.
Предусмотрен
входной и выходной
контроль для
записей, которые
являются
обязательно
уникальными
(не повторяемость).
II-й
раздел
Основная
часть
-
ГЛАВА
1
|
стр.9
|
ГЛАВА
2
|
стр.
19
|
ГЛАВА
3
|
стр.
31
|
Описание
предметной
области…………………………………..
|
9
|
Проектирование
базы данных…………………………………..
|
12
|
Этап 1.
Определение
сущностей………………………………..
|
12
|
Этап 2.
Определение
взаимосвязей
мужду сущностями……….
|
12
|
Этап 3.
Задание первичных
и альтернативных
ключей, определение
атрибутов
сущностей……………………………..
|
13
|
Этап 4.
Физическое
описание
модели…………………………
|
16
|
Описание
предметной
области
Организация
работы с данными
является одним
из основных
этапов создания
прикладной
программы.
Именно от этого
первого этапа,
действительно
очень важного
и многими
недооцениваемого,
зачастую зависит
создание всей
системы автоматизированной
обработки
данных и успех
ее эксплуатации
у конечного
пользователя.
Разработка
программы для
учета начислений
оплаты за пользование
услугами,
предоставляемых
Жилищно-Коммунальным
хозяйством
Усть-Кутской
нефтебазы.
При расчете
квартплаты
должны быть
предусмотрены
начисления
по льготам,
такие как если
гражданин
является участником
ВОВ, работником
тыла, ветеран
труда, инвалиды
и т.д., пользователь
может использовать
любые виды
льготы и ставки
по ним, согласно
действующим
для данной
организации.
В процессе
работы, можно
изменять, дополнять
льготы для
конкретного
жильца или
группы жильцов,
имеющих одинаковый
код и ставок
по ней. Также
предусмотрено
начисление
льгот на определенный
период, в этом
случае пользователь
выбирает дату,
с которой начинается
расчет льгот,
для конкретного
лица, и дату
когда она
заканчивается.
Для каждого
жильца, с которого
берется квартплата,
предусмотреть
изменение
стоимости
услуг, в зависимости
от сложившейся
ситуации на
данный момент
времени (отпуск,
командировка
и т.д.) или от типа
жилья (неблагоустроенная
квартира, привозная
вода и т.д.), как
в меньшую, так
и в большую
сторону, по
умолчанию
начисляются
нормативные
ставки, действующие
в данной организации.
После производства
всех расчетов,
определяется
общая сумма
к оплате, суммы
начислений
по всем видам
услуг и суммы
начислений
по льготам по
каждому квартиросъемщику.
По окончании
отчетного
периода (1 месяц)
формируется
отчеты по видам
оплаты и категориям
проживающих,
с возможностью
их корректировки
вручную и распечаткой
в любое время.
Определение
задач
Регистрация
всех проживающих
Определение
(указание),
используемых
услуг
Определение
(выбор) льготы
и ставок по ней
Определение
(изменение)
периода начисления
льготы (необязательное
условие)
Определение
норм оплаты
за каждую услугу
(нормативы)
Определение
норм оплаты
за каждую услугу,
для отдельного
жильца или в
целом для жильцов,
проживающих
в одном доме
(необязательное
условие)
Расчет квартплаты
Расчет льгот
Определение
сумм к оплате
Формирование
и печать квитанции
об оплате для
конкретного
плательщика
Учет платежей
квартиросъемщиков
(дата и сумма
платежа, остаток
или задолженность)
Просмотр, Дополнение
и Изменение
информации
обо всех категориях
проживающих
Ежемесячная
подготовка
отчетов по
различным
начислениям
Редактирование
и печать отчетов
(в любое время
и в любом количестве)
Возможность
обратиться
к файлам помощи
(F1)
Возможность
поиска
Ответы на эти
вопросы позволяют
подойти к главному
в постановке
задачи – построении
инфологической
модели приложения.
В простейшем
примере такая
модель может
быть отображена
в виде взаимосвязей
между компонентами
и процессами
приложения,
как показано
на рисунке 2.1.
в практике
проектирования
такие схемы
получили название
ER-диаграмм
(Entity-relationship diagram (ERD) –
диаграмма
«Сущность-связь»)
Жильцы
Ф.И.О
Табельный
номер
Дата
рождения
Льгота
Адрес
КОД
Улица
Дом
Квартира
Кв. метры
Количество
проживающих
Дата начала
начислений
Дата
окончания
начислений
Описание
льготы
№ удостоверения
Расчет
Расчет
квартплаты
Расчет
по льготам
Выбранные
услуги
Расчет
Итог
Выбранные
услуги
КОД и
процентные
ставки, определяемые
кодом
Расчет
Итог
К оплате
Процентные
ставки по услугам
КАТЕГОРИЯ
Рис 2.1. Диаграмма
взаимосвязей
между компонентами
и процессами
(Инфологическая
модель)
Максимально
формализованное
описание задачи
теперь будет
выглядеть
следующим
образом.
Наименование
задачи:
Автоматизация
работы бухгалтера
по расчету
квартплаты.
Цель работы
бухгалтера:
Введение
учета и расчетов
с населением
за предоставляемые
коммунальные
услуги.
Функции бухгалтера:
Заключение
договоров и
регистрация
клиентов в
Базе Данных.
Ведение
информации
по льготам и
ставкам по
ним.
Работа
с клиентами
: установление
льготы, установление
тарифных ставок
отличных от
нормативных
по различным
причинам,
разъяснительная
работа и т.д..
Ведение
расчетов за
используемые
услуги (выписка
квитанции об
оплате).
Бизнес - правила:
Требования
к системе
Программа
может работать
под управлением
операционных
систем DOS
или WINDOWS, при
наличии пакета
FoxPro 2.6 for DOS.
Перечень вводимой
информации:
Фамилия,
имя и отчество
жильца;
Табельный
номер;
Год
рождения
Адрес;
Квадратные
метры;
Телефон;
При
наличии льготы
– описание
льготы, код,
период;
Выбор
плательщика,
указанного
в ордере
Нормативные
ставки на услуги
Тарифные
ставки и описание
тарифа
Перечень печатных
отчетов:
Списки
по начислению
Списки
льготников
Списки
с показаниями
счетчика
Оплата
электроэнергии
Сальдо
по квартиросъемщикам
Свод
по квартплате
за месяц
Квитанция
об оплате
Проектирование
базы данных
Существует
очень простое
понятие базы
данных как
большого по
объему хранилища,
в которое организация
помещает все
используемые
ею данные и из
которого различные
пользователи
могут их получать,
используя
различные
приложения.
Такая единая
база данных
представляется
идеальным
вариантом, хотя
на практике
это решение
по различным
причинам трудно
достижимо.
Поэтому чаще
всего под базой
данных понимают
любой набор
хранящихся
в компьютере
данных.
В
основу проектирования
БД должны быть
положены
представления
конечных
пользователей
организации
– концептуальные
требования
к системе. Потому
что, именно
конечный пользователь
в своей работе
принимает
решения с учетом
получаемой
в результате
доступа к базе
данных информации.
Следовательно,
от оперативности
и качества этой
информации
будет зависеть
эффективность
работы организации.
Данные, помещаемые
в базу данных,
также предоставляет
конечный
пользователь.
При
рассмотрении
требований
конечных
пользователей
принято во
внимание следующее:
База
данных должна
удовлетворять
актуальным
информационным
потребностям
организации.
Получаемая
информация
должна по структуре
и содержанию
соответствовать
решаемым задачам.
База
данных должна
обеспечивать
получение
требуемых
данных за приемлемое
время, то есть
отвечать заданным
требованиям
производительности.
База
данных должна
удовлетворять
выявленным
и вновь возникающим
требованиям
конечных
пользователей.
Загруженные
в базу данных
корректные
данные должны
оставаться
корректными.
Данные
до включения
в базу данных
должны проверяться
на достоверность.
Доступ
к данным, размещаемым
в базе данных,
должны иметь
только лица
с соответствующими
полномочиями.
На
основании
вышеизложенного
рассмотрим
этапы проектирования
баз данных,
которые должны
обеспечить
необходимую
независимость
данных и выполнение
эксплуатационных
требований
(пожеланий
пользователей).
Этап
1. Определение
сущностей
Исходя
из задачи, описанной
выше, выделим
следующие
сущности:
Жильцы
– БД, содержащая
информацию
о жильцах
(RABOT.DBF)
Начисления
- БД, содержащая
информацию
о начислениях
(OPLATA.DBF)
Льготы
- БД,
содержащая
информацию
о льготах
(LGOT.DBF)
Ставки
- БД, содержащая
информацию
о ставках для
конкретного
жильца и (или)
о жильцах,
проживающих
в одном доме
(TABLE_R.DBF)
Тарифы
- БД, содержащая
информацию
описания тарифов
и ставок по
ним (TARIF.DBF)
Этап
2. Определение
взаимосвязей
мужду сущностями
ЖИЛЬЦЫ
СТАВКИ
ТАРИФЫ
СЧЕТ
ЛЬГОТЫ
Этап 3. Задание
первичных и
альтернативных
ключей, определение
атрибутов
сущностей
Первичный
ключ – это атрибут
(или группа
атрибутов),
которые
единственным
образом идентифицируют
каждую строку
в таблице.
Альтернативный
ключ – это атрибут
(или группа
атрибутов),
несовпадающий
с первичным
ключом и уникально
идентифицирующий
экземпляр
объекта.
Для
каждой сущности
определим
атрибуты, которые
будем хранить
в БД.
Атрибуты,
включаемые
в состав БД,
приведены в
таблице 2.1. информационная
модель после
третьего этапа
проектирования
приведена на
рис. 2.13
Таблица
2.1. Атрибуты и
первичные ключи
сущностей
информационной
модели
Сущность
|
Первичный
ключ
|
Атрибуты
|
ЖИЛЬЦЫ |
Табельный
номер
Улица
Дом
Квартира
|
Табельный
номер
Улица
Дом
Квартира
Ф.И.О
Номер
телефона
Квадратные
метры
Льгота
Код
льготы
№ удостоверения
(по льготе)
Дата,
с которой будет
начисляться
льгота
Дата
окончания
начислений
по льготе
Старое
значение счетчика
Новое
значение счетчика
Определение
плательщика
Количество
проживающих
(в 1-й квартире)
Дата
оплаты за
предоставленные
услуги
Остаток
денежных средств
Ввод
оплаты
Начисления
квартплаты
(Есть\Нет)
Начисления
радио (Есть\Нет)
Начисления
телефона
(Есть\Нет)
Начисления
горячей воды
(Есть\Нет)
Начисления
холодной воды
(Есть\Нет)
Начисления
коммунальн.
услуг (Есть\Нет)
Начисления
отопления
(Есть\Нет)
Начисления
электроэнергии
(Есть\Нет)
|
ЛЬГОТА |
Код
льготы |
Код
льготы
Описание
льготы
Процентная
ставка по
квартплате
Процентная
ставка по радио
Процентная
ставка по телефону
Процентная
ставка по горячей
воде
Процентная
ставка по холодной
воде
Процентная
ставка по ком.
услугам
Процентная
ставка по
отоплению
|
ТАРИФ |
|
Описание
тарифа
Ставка
оплаты
Порядок
начисления
(на 1-го чел.\ на
1 м2)
Выбор:
на 1-го человека
или на 1 м2
|
Сущность
|
Первичный
ключ
|
Атрибуты
|
СТАВКИ |
Табельный
номер |
Табельный
номер
Описание
льготы
Ставка
по квартплате
Ставка
по радио
Ставка
по телефону
Ставка
по горячей
воде
Ставка
по холодной
воде
Ставка
по коммунальным
услугам
Ставка
по отоплению
Ставка
по электроэнергии
|
НАЧИСЛЕНИЯ |
Табельный
номер
Улица
Дом
Квартира
|
Табельный
номер
Улица
Дом
Квартира
Квадратные
метры
Код
льготы
Выбор
плательщика
Количество
проживающих
Льгота
(Да\Нет)
Начисления
квартплаты
(Да\Нет)
Начисления
радио (Да\Нет)
Начисления
телефона (Да\Нет)
Начисления
гор. Воды (Да\Нет)
Начисления
хол. Воды (Да\Нет)
Начисления
ком. Услуг
(Да\Нет)
Начисления
эл. Энергии
(Да\Нет)
Начисления
отопления
(Да\Нет)
Сумма
начисления
квартплаты
Сумма
начисления
телефона
Сумма
начисления
радио
Сумма
начисления
ком.услуг
Сумма
начисления
отопления
Сумма
начисления
эл\энергии
Сумма
начисления
гор.воды
Сумма
начисления
хол.воды
Нач.
квартплаты
(по льготе) на
1-го чел.
Нач.телефона
(по льготе) на
1-го чел.
Нач.
радио (по льготе)
на 1-го чел.
Нач.
ком.услуг (по
льготе) на 1-го
чел.
Нач.
отопления
(по льготе) на
1-го чел.
Нач.
эл\энергии
(по льготе) на
1-го чел.
Нач.
гор.воды (по
льготе) на 1-го
чел.
Нач.
хол.воды (по
льготе) на 1-го
чел.
Сумма
нач. квартплаты
по льготе
Сумма
нач. гор. Воды
по льготе
Сумма
нач. хол. Воды
по льготе
Сумма
нач. ком. Услуг
по льготе
Сумма
нач. отопления
по льготе
Сумма
нач. телефона
по льготе
Сумма
нач. радио по
льготе
Итог
сумм начислений
по льготе
Итог
сумм начислений
Итоговая
сумма к оплате
|
ЖИЛЬЦЫ
Таб. Номер
Улица
Дом
Квартира
Код льготы
. . .
ЛЬГОТЫ
Код
льготы
. . .
СТАВКИ
Таб.
Номер
. . .
НАЧИСЛЕНИЯ
Таб. Номер
Улица
Дом
Квартира
Код льготы
. . .
Рис.
2.13. Взаимосвязи
между атрибутами
сущностей
Этап 4. Физическое
описание модели
На этом
этапе составим
базы данных,
которые будут
в дальнейшем
реализовываться
в СУБД. Назначения
имен БД и их
атрибутов
отражены в
табл. 2.2.
Таблица
2.2. Структура,
используемых
Баз Данных.
RABOT.DBF
(Жильцы)
Имя
|
Тип
|
Длина
|
|
примечание
|
TAB |
N |
4 |
0 |
Табельный
номер |
FAM |
C |
40 |
- |
Ф.И.О |
TEL |
N |
8 |
0 |
Номер
телефона |
YL |
C |
15 |
- |
Улица |
DOM |
С |
3 |
0 |
Дом |
KW_RA |
С |
3 |
0 |
Квартира |
KV_M |
N |
6 |
2 |
Квадратные
метры |
N_LG |
N |
1 |
0 |
Код
льготы |
N_YD |
С |
9 |
0 |
Номер
удостоверения
(по льготе) |
DAT_C |
D |
8 |
- |
Дата,
с которой будет
начисляться
льгота |
DAT_PO |
D |
8 |
- |
Дата
окончания
начислений
по льготе |
ELEC |
N |
6 |
0 |
Старое
значение счетчика |
ELEC1 |
N |
6 |
0 |
Новое
значение счетчика |
OR_R |
N |
1 |
0 |
Определение
плательщика |
KOL_VO |
N |
2 |
0 |
Количество
проживающих |
D_OPL |
D |
8 |
- |
Дата
оплаты |
OST_K |
N |
8 |
2 |
Остаток
денежных средств |
OPL_TA |
N |
8 |
2 |
Ввод
оплаты |
LGOT |
L |
1 |
- |
Льгота
(Да\Нет) |
RAD_L |
L |
1 |
- |
Начисления
радио (Да\Нет) |
TEL_L |
L |
1 |
- |
Начисления
телефона (Да\Нет) |
KW_L |
L |
1 |
- |
Начисления
квартплаты
(Да\Нет) |
G_W_L |
L |
1 |
- |
Начисления
гор. воды (Да\Нет) |
X_W_L |
L |
1 |
- |
Начисления
хол. воды (Да\Нет) |
K_YS_L |
L |
1 |
- |
Начисления
ком. услуг
(Да\Нет) |
EL_C_L |
L |
1 |
- |
Начисления
эл. энергии
(Да\Нет) |
OTOP_L |
L |
1 |
- |
Начисления
отопления
(Да\Нет) |
OPLATA.DBF
(Начисления)
Имя
|
Тип
|
Длина
|
|
Примечание
|
TAB |
N |
4 |
0 |
Табельный
номер |
YL |
C |
15 |
- |
Улица |
DOM |
С |
3 |
0 |
Дом |
KW_RA |
С |
3 |
0 |
Квартира |
KV_M |
N |
6 |
2 |
Квадратные
метры |
N_LG |
N |
1 |
0 |
Код
льготы |
OR_R |
N |
1 |
0 |
Выбор
плательщика |
KOL_VO |
N |
2 |
0 |
Количество
проживающих |
DAT_C |
D |
8 |
- |
Дата,
с которой будет
начисляться
льгота |
DAT_PO |
D |
8 |
- |
Дата
окончания
начислений
по льготе |
ELEC |
N |
6 |
0 |
Старое
значение счетчика |
ELEC1 |
N |
6 |
0 |
Новое
значение счетчика |
TEL_L |
L |
1 |
- |
Начисления
телефона (Да\Нет) |
G_W_L |
L |
1 |
- |
Начисления
гор. Воды (Да\Нет) |
X_W_L |
L |
1 |
- |
Начисления
хол. Воды (Да\Нет) |
K_YS_L |
L |
1 |
- |
Начисления
ком. Услуг
(Да\Нет) |
EL_C_L |
L |
1 |
- |
Начисления
эл. Энергии
(Да\Нет) |
OTOPL_L |
L |
1 |
- |
Начисления
отопления
(Да\Нет) |
KW_PL |
N |
8 |
2 |
Сумма
начисления
квартплаты |
TEL_R |
N |
8 |
2 |
Сумма
начисления
телефона |
RAD_R |
N |
8 |
2 |
Сумма
начисления
радио |
K_YSL |
N |
8 |
2 |
Сумма
начисления
ком.услуг |
OTOPL |
N |
8 |
2 |
Сумма
начисления
отопления |
EL_C |
N |
8 |
2 |
Сумма
начисления
эл\энергии |
G_W |
N |
8 |
2 |
Сумма
начисления
гор.воды |
X_W |
N |
8 |
2 |
Сумма
начисления
хол.воды |
KW_PLL |
N |
8 |
2 |
Нач.
квартплаты
(по льготе) на
1-го чел. |
TEL_RL |
N |
8 |
2 |
Нач.телефона
(по льготе) на
1-го чел. |
RAD_RL |
N |
8 |
2 |
Нач.
радио (по льготе)
на 1-го чел. |
K_YSLL |
N |
8 |
2 |
Нач.
ком.услуг (по
льготе) на 1-го
чел. |
OTOPLL |
N |
8 |
2 |
Нач.
отопления
(по льготе) на
1-го чел. |
EL_CL |
N |
8 |
2 |
Нач.
эл\энергии
(по льготе) на
1-го чел. |
G_WL |
N |
8 |
2 |
Нач.
гор.воды (по
льготе) на 1-го
чел. |
X_WL |
N |
8 |
2 |
Нач.
хол.воды (по
льготе) на 1-го
чел. |
*SUM_KW |
N |
8 |
2 |
Сумма
нач. квартплаты
по льготе |
*SUM_GW |
N |
8 |
2 |
Сумма
нач. гор. Воды
по льготе |
*SUM_XW |
N |
8 |
2 |
Сумма
нач. хол. Воды
по льготе |
*SUM_KYSL |
N |
8 |
2 |
Сумма
нач. ком. Услуг
по льготе |
*SUM_OT |
N |
8 |
2 |
Сумма
нач. отопления
по льготе |
*SUM_TL |
N |
8 |
2 |
Сумма
нач. телефона
по льготе |
*SUM_RD |
N |
8 |
2 |
Сумма
нач. радио по
льготе |
*SUM_IT |
N |
9 |
2 |
Итог сумм
начислений
по льготе |
ITOG_N |
N |
9 |
2 |
Итог
сумм начислений |
ITOG_L |
N |
9 |
2 |
Итог сумм
начислений
по льготе |
ITOG |
N |
9 |
2 |
Итог сумм
начислений
(к оплате) |
* - Сумма начислений
по льготам
жильцов, проживающих
в одной квартире
LGOT.DBF
(Льготы)
Имя
|
Тип
|
Длина
|
|
Примечание
|
N_LG |
N |
1 |
0 |
Код
льготы |
INFO |
C |
20 |
- |
Описание
льготы |
KWP_L |
N |
4 |
2 |
Ставка
начислений
по квартплате |
RD_L |
N |
4 |
2 |
Ставка
начислений
по радио |
GW_L |
N |
4 |
2 |
Ставка
начислений
по горячей
воде |
XW_L |
N |
4 |
2 |
Ставка
начислений
по холодной
воде |
K_L_L |
N |
4 |
2 |
Ставка
начислений
по ком. Услугам |
OT_L |
N |
4 |
2 |
Ставка
начислений
по отоплению |
TL_L |
N |
4 |
2 |
Ставка
начислений
по телефону |
TABLE_R
.DBF (Ставки)
Имя
|
Тип
|
Длина
|
|
Примечание
|
TAB |
N |
4 |
0 |
Табельный
номер |
KWP_L |
N |
5 |
2 |
Ставка
начислений
по квартплате |
RD_L |
N |
5 |
2 |
Ставка
начислений
по радио |
GW_L |
N |
5 |
2 |
Ставка
начислений
по гор. Воде |
XW_L |
N |
5 |
2 |
Ставка
начислений
по хол. Воде |
K_L_L |
N |
5 |
2 |
Ставка
начислений
по ком. Услугам |
OT_L |
N |
5 |
2 |
Ставка
начислений
по отоплению |
EL_L |
N |
5 |
2 |
Ставка
начислений
электроэнергии |
TL_L |
N |
5 |
2 |
Ставка
начислений
по телефону |
TARIF.DBF
(Тарифы)
Имя
|
Тип
|
Длина
|
|
Примечание
|
INFO |
C |
25 |
-
|
Описание
тарифа |
ST_KA |
N |
5 |
2 |
Ставка
оплаты |
K_INFO |
C |
11 |
-
|
Помощь
начисления
(на 1-го чел.\на
1 кв.м) |
K_CH |
L |
1 |
-
|
Выбор:
.T. – на 1-го
человека
.F. – на 1 м2
|
HELP.DBF – БД,
содержащая
описание помощи.
Имя
|
Тип
|
Длина
|
|
Примечание
|
HLP |
M |
10 |
-
|
Описание
помощи |
M_ZAR .MEM - Файл,
в котором хранятся
переменные
стоимости услуг
( _* ).
А
также структурные
файлы-индексы
(CDX),
для каждой
базы, создаваеммые
программным
путем.
Поддержка
базы данных……………………...
|
20
|
Описание
работы приложения………………..
|
21
|
|
Работа
с пунктами
меню………………….
|
23
|
PAD-пункт
«Кадры»………………………………
|
23
|
PAD-пункт
«Отчеты»
…………………………….
|
24
|
PAD-пункт
«Печать»………………………………
|
24
|
PAD-пункт
«Сервис»………………………………
|
25
|
PAD-пункт
«Расчет»………………………………
|
25
|
PAD-пункт
«Помощь»…………………………….
|
25
|
PAD-пункт
«Выход»………………………………
|
25
|
|
Работа
окнами…………………………….
|
26
|
Окно
«Работа с
картотекой»
(INS)……………….
|
26
|
Окно
«Квартиросъемщики»
(KD)…………………
|
28
|
Окно
нормативов
(M_ZAR)………………………
|
29
|
Окно
дополнения
льгот
(M_ZAR)………………...
|
29
|
Окно
тарифов
(M_ZAR)…………………………..
|
29
|
Окно
дополнения
жильцов (INS)…………………..
|
29
|
BROWSE-окна
(KDR)…………………………….
|
30
|
Окно
помощи (HELP)……………………………..
|
30
|
Поддержка
базы данных
поддержка
или ведение
базы данных
подразумевает
наличие средств
доступа к данным
и средств управления
ими. При этом
рабочий интерфейс
должен быть
максимально
“комфортным”.
Здесь нужно
решить, что
пользователь
будет обычно
видеть на экране
компьютера.
Удобно
в качестве
“рабочего
стола”,
на котором он
будет принимать
решения, и совершать
действия по
обработке
данных, взять
не какое-то
меню, а отображение
самой базы
данных. На экране
должны присутствовать
и указания на
возможные
действия
пользователя.
Поскольку на
нем никогда
не хватает
места, указания
на некоторые
действия можно
поместить в
развертывающиеся
световые меню.
При необходимости
также должна
быть предусмотрена
контекстно-зависимая
помощь (HELP
– F1).
Функции
поддержки базы
данных.
Для
обслуживания
базы необходимы
следующие
функции.
перемещение
вперед\назад
на одну запись
(SKIP\SKIP
–1). При
этом должны
блокироваться
попытки выйти
за первую\последнюю
запись базы.
Достижение
верхней\нижней
границы желательно
отображать
на экране
(READ-окно).
Переход
на начало\конец
базы (GO
TOP\BOTTOM).
Пометка
записей, предназначенных
для удаления,
и снятие пометки
(DELETE\RECALL).
Дополнение
базы новой
записью (APPEND
BLANK).
Выход
из
окна редактирования.
Поиск
по ключу (SEEK,
LOCATE). В
случае неудачного
поиска указатель
записей должен
вернуться на
исходную запись.
Вывод\печать
данных.
Упаковка
данных (PACK).
Переиндексация
базы (REINDEX
или
INDEX).
Полная
очистка
базы от данных
(вспомогательная
база oplata.dbf)
(ZAP).
Средства
предъявления
данных.
Команда
BROWSE\CHANGE
удобна
тем, что дает
панораму данных
и не требует
программирования
перемещения
в БД. В данной
программе
команда BROWSE
в основном
используется
для просмотра
данных и результатов
вычислений.
Команда
READ с
командами
@…SAY…@…GET:
@…SAY…GET…
@…SAY…
@…GET…
READ
…
Эта
форма предъявления
данных является
самой гибкой
и дает непосредственный
доступ к полям
базы. Теперь
кроме собственно
редактирования,
поля базы данных
можно анализировать,
трансформировать,
запоминать
в переменных
или в других
базах и т.д.. Чаще
всего такой
режим называют
READ-окном,
хотя использование
команд @…GET,
READ не
обязывает
помещать их
в специальное
окно – они могут
проектироваться
и непосредственно
на экран.
Все
операции над
базой, предъявляемой
командой READ,
могут быть
совершены либо
после завершения
команды READ,
либо в вызываемых
процедурах.
Обе
формы (BROWSE
и READ) предъявления
данных активно
используются
в программе.
Описание
работы приложения.
Управление
программой
осуществляется
с помощью меню,
так как меню
является основной
формой диалога
в прикладных
системах обработки
данных. FoxPro
обладает развитыми
средствами
поддержания
меню как с объемным
световым курсором
(световым
«зайчиком»),
так и с назначаемыми
клавишами.
Кроме того, в
FoxPro
реализовано
еще и «кнопочное»
(Button)
меню, которые
означают не
физическую
кнопку на клавиатуре,
а некоторую
область на
экране, которой
приданы управляющие
свойства. «Кнопочные»
меню удобно
использовать
совместно с
мышью.
В
FoxPro
имеются
две альтернативные
технологии
построения
меню – концепция,
продолжающая
еще из предыдущей
версии СУДБ
FoxBASE-2,1,
и концепция,
позаимствованная
из СУДБ
dBASEIV.
Важнейшее
«идейное»
различие между
Fox-меню
и dBASE-меню
может быть
определено
терминами
«меню-программа»
и «меню-объект».
Fox-меню
является только
частью программы,
где оно создается,
используется
и «умирает».
dBASE-меню
после своего
определения
остается независимым
и «живым» объектом,
к которому
можно обратиться
из любого места
прикладной
системы.
Поэтому
управление
программой
осуществляется
именно с помощью
dBASE-меню,
а также в процедуре
показано
использование
Fox-меню.
dBASE-меню
может не только
вырабатывать
переменные
для анализа,
но и непосредственно
вызывать процедуры,
подпрограммы,
команды по
обработке
выбора. Оно
предлагает
такую архитектуру
построения
систем обработки
данных, когда
программа может
вообще не иметь
единого ядра,
а состоять из
процедур, которые
связаны друг
с другом только
через вызовы
меню. Кроме
того, имеется
неоценимая
возможность
создавать меню
из имен файлов
и компонентов
базы данных,
осуществлять
множественный
выбор.
В
общем случае
для создания
dBASE-меню
и работы с ним
необходимо
предусмотреть
следующие
элементы:
Определение
меню. Здесь
описываются
содержание,
«горячие»
клавиши, клавиши
быстрого доступа,
форма и реакции
меню. Определение
меню может
сделано один
раз в начале
программы и
далее только
использоваться.
Активация
меню. Команды\клавиши
активации
предъявляют
меню на экране
и делают его
чувствительным
к выбору пользователя.
Деактивация
меню. Удаляет
его с экрана,
сохраняя в
памяти для
следующего
возможного
использования.
Удаление
меню. Это
действие очищает
память от определения
меню, и более
оно не может
быть использовано
без нового
определения.
Имеются
два типа
элементарных
меню:
Вертикальное
(«всплывающее»,
или POPUP-меню),
Горизонтальное
(BAR-меню)
На их
основе можно
строить иерархические
меню практически
любой сложности
(вложенности).
Именно по такой
технологии
построенно
меню программы
и вид меню показан
на рис. 2.1
Рисунок
2.1 Структура
меню (ZAR)
* -
Файл, где
описывается
процедура
** -
Имя процедуры
BAR-меню
– это обычно
горизонтальное
меню (BAR –
по-английски
строка, линейка).
Такое меню
имеет имя (ZAR-для
данного приложения),
и состоит из
конкретных
элементов,
пунктов, которые
называют PAD-пунктами
(PAD-заголовок).
Каждый PAD-пункт
также имеет
имя и видимую
на экране
строку-приглашение.
POPUP-меню
– это прямоугольное
меню, строки-элементы
которого называют
BAR-пунктами
или BAR-строками
(не путать с
BAR-меню). POPUP-меню
имеет имя, а
его видимое
содержание
на экране
(BAR-строки)
будет зависеть
от типа POPUP-меню.
BAR-
и POPUP-меню могут
использоваться
отдельно, а
могут сбыть
связаны. Взаимосвязь
показана на
рис. 2.2
Рис. 2.2
BAR-меню
Кадры
Отчеты ……
POPUP-меню
Нормы оплаты
услуг
Ввод данных
счетчика
Ввод оплаты
PAD-пункт(ы)
BAR-пункт(ы)
Работа
с пунктами меню
PAD-пункт
«Кадры»
BAR-пункт
«Работа с картотекой»
– при выборе
этого пункта
открывается
READ-окно, в
котором представлена
информация
о квартиросъемщике.
В этом окне,
возможно, изменять
начисления
услуг, изменять
тарифы для
жильцов квартиры
или дома, период
льготы, количество
проживающих,
возможность
формирования,
просмотра и
печати квитанции,
ввода суммы
оплаты, расчета
квартплаты,
выбора фильтра
отображения
жильцов (Плательщики,
Льготники, Все
жильцы) и перемещения
по базе дынных.
BAR-пункт
«Квартиросъемщики»
– при его выборе
отображаются
те жильцы, которые
оплачивают
квартплату.
Вывод осуществляется
в табличной
форме, где
показываются
поля с табельным
номером и фамилией,
а также два
дополнительных
(вычисляемых)
поля, которые
не сохраняются
в базе данных.
Это поле со
значком «»,
который появляется
у тех жильцов,
которые платят
за квартиру
и поле со значком
«» появляется
у жильцов, которые
имеют льготу.
На свободной
области экрана
выводится
остальная
информация
о жильце, включая
информацию
о произведенных
начислениях.
Если курсор
перемещать,
находясь в поле
со значком «»,
то автоматически
будет обновляться
информация
на экране. На
всех других
полях, при нажатии
клавиши «Enter»
появляется
Fox-меню, где
можно выбрать
дальнейшие
действия.
(Прил.№2,Рис ….)
BAR-пункт
«Картотека
льготников»
- при его выборе
показываются
те жильцы которые
имеют льготу.
Вывод осуществляется
в табличной
форме, где
показываются
поля с табельным
номером, фамилией,
адрес, телефон,
категория
льготы, номер
(название) документа,
подтверждающего
льготу. В нижней
части экрана
отображается
статус-строка,
где показывается
дополнительная
информация,
а именно: если
льготник является
плательщиком,
то показывается
количество
проживающих
и количество
льготников,
иначе фамилия
и таб. № того,
кто платит за
квартиру.
BAR-пункт
«База жильцов»
- такой же показ
как в «Картотеке
льготников»,только
отображаются
все жильцы.
BAR-пункт
«Ввод счетчика»
– это табличный
вывод всех
плательщиков,
с данными счетчика,
при вводе новых
значений счетчика,
сумма автоматически
вычисляется
и корректируется
сумма к оплате.
BAR-пункт
«Ввод оплаты»
- это
табличный вывод
всех плательщиков,
с данными о
суммах начислений,
сумме к оплате
и полем для
ввода суммы
платежа. При
вводе суммы
платежа автоматически
рассчитывается
остаток и заносится
дата платежа,
которые затем
отображаются
в отчете и квитанции.
PAD-пункт
«Отчеты»
BAR-пункт
«Списки по
начислению»
- формируется
отчет о всех
произведенных
начислений,
и открывается
окно с выводом
сумм по каждой
услуге, отдельно
сумм по каждой
услуге по льготам,
итоговая сумма
к уплате, остаток
или задолжность,
дата платежа.
BAR-пункт
«Списки по
льготам» -
формируется
отчет и открывается
окно с информацией
о каждом льготнике,
включая суммы
по каждой услуге,
а также показывается
фамилия и таб.
№ того к кому
привязан льготник
(т.е. того, кто
платит за квартиру).
BAR-пункт
«Списки с показанием
счетчика» -
формируется
отчет и открывается
окно, в котором
указаны фамилия,
таб.№, адрес и
данные старого
и нового значений
счетчика.
BAR-пункт
«Оплата электроэнергии»
- формируется
отчет и открывается
окно, где в
табличной форме
выводятся
фамилия, таб.№,
адрес, данные
старого и нового
значений счетчика
и сумма к уплате.
BAR-пункт
«Сальдо по
квартиросъемщикам»
– формируется
отчет и открывается
окно, где в табличной
форме выводятся
фамилия, таб.№,
суммы начисления,
к оплате и остаток.
BAR-пункт
«Свод по квартплате
за месяц» -
формируется
отчет и открывается
окно, где в табличной
форме выводятся
общие суммы
по каждой услуге,
отдельно по
льготам, итоговые
суммы начислений
по квартплате,
по льготам и
суммы, которую
организация
должна получить
за месяц.
После
закрытия любого
окна с отчетом,
открывается
окно с предложением
распечатки.
PAD-пункт
«Печать»
- состоит из
имен файлов,
которые были
созданы при
выборе BAR-пунктов
«Отчеты» это:
«Списки
по начислению»
-
файл NACH-xx.TXT
«Списки
по льготам»
- файл
LG_KW-xx.TXT
«Списки
с показанием
счетчика»
- файл ELC_V-xx.TXT
«Оплата
электроэнергии»
- файл
EL_PL-xx.TXT
«Сальдо
по квартиросъемщикам»
- файл SALDO-xx.TXT
«Свод
по квартплате
за месяц»
- файл SVOD-xx.TXT
Где
хх – это номер
месяца, за который
сформирован
отчет. Если
установить
курсор на имя
соответствующего
файла и нажать
клавишу «Enter»
(ВВОД), то откроется
окно для
просмотра-редактирования
отчета. Если
установить
курсор на имя
соответствующего
файла и нажать
клавишу «Spacebar»
(ПРОБЕЛ), то файл
распечатается,
при условии,
если принтер
готов, иначе
появится сообщение
о подготовке
принтера.
PAD-пункт
«Сервис»
BAR-пункт
«Дополнение»
– открывается
окно, в котором
можно добавить
жильцов в базу
данных, с указанием
льгот и услуг.
BAR-пункт
«Дополнение
льгот» -
открывается
окно, в котором
добавляются
или изменяются
код, описание
льготы и ставки
по ним.
BAR-пункт
«Тарифы» –
открывается
окно с dBASE-меню
PAD-пункты
которого позволяют:
PAD-пункт
«Просмотр»
– формирует
POPUP-меню из
полей базы с
описанием
тарифов, при
нажатии клавиши
«Enter», на
выбранном
BAR-пункте
с описанием
тарифа, появляются
поля редактирования
данного тарифа
с возможностью
удаления или
изменения.
PAD-пункт
«Добавить»
– выводит поля
для дополнения
тарифа.
PAD-пункт
«Выйти» - закрывает
окно и меню
тарифов.
BAR-пункт
«Нормы оплаты
услуг» –
при его выборе
открывается
окно, в котором
нужно указать
стоимость
каждой услуги.
Эти ставки
действуют для
расчета начисления
квартплаты
по умолчанию
для всех жильцов.
BAR-пункт
«Переиндексация»
– при
его выборе
происходит
процедура
переиндексации
всех БД.
BAR-пункт
«Упаковка
данных» –
запускает
процедуру
физического
удаления данных,
которые ранее
были помечены
на удаление.
PAD-пункт
«Расчет»
BAR-пункт
«Расчет квартплаты»
-при его выборе
происходит
расчет квартплаты
за текущий
месяц и после
выводится окно,
где в табличной
форме показывается
таб.№, фамилия
и начисления
по каждой услуге,
с возможностью
их редактирования.
В нижней части
экрана показывается
общие суммы
по всем услугам
и общая итоговая
сумма, также
эти суммы выделяются
цветом в зависимости
от нахождения
курсора в таблице.
BAR-пункт
«Расчет по
льготам» –
при его выборе
происходит
расчет для тех
жильцов, которые
имеют льготу
и удовлетворяют
требованию
начала и конца
действия льготы,
если эти поля
у жильца отсутствуют
предполагается,
что он не имеет
срока ограничения.
Вывод данных
и информация
в нижней части
аналогична
как в пункте
«Расчет квартплаты».
BAR-пункт
«Слияние квартплаты
с льготами»
– при его выборе
происходит
расчет суммы
к оплате т.е.
«начисления
по квартплате»
минус «начисления
по льготе».
После этого
выводится окно
с полями: таб.№,
фамилия, итоговая
сумма начислений,
итоговая сумма
начислений
по льготе и
сумма к оплате.
В нижней части
экрана показывается
адрес плательщика,
количество
проживающих
и количество
льготников.
PAD-пункт
«Помощь»
BAR-пункт
«Помощь» -выводит
окно с описанием
назначений
PAD- и BAR-пунктов.
BAR-пункт
«Справка» –
выводит окно
с кратким описанием
предназначения
программы.
PAD-пункт
«Выход» –
позволяет
выйти из программы.
Работа
окнами.
В приложении
используются
два вида окон
это:
Окна,
предназначены
для обработки
данных.
Окна,
предназначены
для выбора
действия или
отказа, либо
выводят дополнительную
поясняющую
информацию.
Такие окна еще
называют диалоговые
окна.
При
начальном
запуске приложения,
когда база
данных пуста,
любой выбор
пункта меню,
для работы
которого необходимы
данные о жильцах,
вызовет диалоговое
окно с предложением
начать работу
с дополнения.
Это окно содержит
поясняющий
текст и две
кнопки <Добавить>
и <Отмена>.
Окно
«Работа с картотекой»
(INS)
При
выборе пункта
меню «КАДРЫ»-«Работа
с картотекой»
открывается
окно размером
во весь экран,
в котором размещается
вся основная
информация
о жильце. Окно
визуально
делится по
вертикали на
две части, где
в первой части
(около 2\3 окна)
располагается
сведения о
жильце, а в
оставшейся
части, которая
выделена цветом,
располагаются
кнопки для
выбора определенных
действий. Рисунок
окна показан
на рисунке
2 приложения
2. Рассмотрим
эти части
поподробней.
1 часть
«Сведения о
жильце»
В
первых строках
расположена
личная информация:
фамилия, таб.№,
адрес, телефон,
площадь квартиры,
которые недоступны
для редактирования,
дата рождения,
а также автоматически
вычисляемая
информация
о количество
лет.
Количество
проживающих
и количество
льготников
вычисляются
в зависимости
от записей в
БД и в ней не
сохраняются,
напротив этих
полей находится
поле с количеством
проживающих,
которое сохраняется
в БД и служит
основанием
для расчета
квартплаты.
Далее идет
надпись «СОСТАВ
СЕМЬИ», которая
накрыта невидимой
кнопкой, при
выборе которой
выпадает POPUP-меню
с фамилиями
проживающих
в данной квартире
с указанием
кто за неё платит
и кто является
льготниками.
При выборе
элемента меню,
окно обновляется
информацией
об этом жильце.
Далее идет
строка с информацией
о льготе: код,
наименование
льготы, а также
с какого и по
какой период
она действует.
Если период
не указан, то
предполагается,
что льгота не
имеет ограничения.
Далее идет
информация,
расположенная
в табличной
форме, как показано
на рисунке,
где:
Услуга Тариф Расчет
Льготы []
7
[x]
Квартплата
1.17
91.26 -15.21 6
[
] Горячая
вода 10.00
0.00 0.00
1 2
3 4 5
Кнопки
выбора начислений
услуг ( [ ]-не
начисляется,
[x]-начисляется)
Поясняющий
текст к кнопки
(для какой услуги,
которую нужно
выбирать)
Ставки
за услуги, эти
надписи накрыты
невидимыми
кнопками, выбор
которых открывает
окно и меню,
где можно изменить
ставки для
жильцов квартиры
(дома). Описания
тарифов отображается
в окне в зависимости
от выбора тарифа:
так если расчет
услуги производится
в зависимости
от количества
проживающих
в квартире, то
отображаются
только тарифы
на одного человека,
если рассчитывается
от занимаемой
жилплощади,
то на 1 квадратный
метр. (см. рис.
3 прилож. №2, а
также см. описание
пунктов меню
«Сервис»-«Тарифы»).
Показываются
суммы начислений
по услугам
Показываются
суммы начислений
по услугам с
учетом льготы.
Заголовки
столбцов.
В столбце
«Льготы»
предоставлена
общая сумма
начислений
по льготам для
данной квартиры
и чтобы получить
информацию
о начислениях
по льготе жильца,
информация
по которому
представлена
в окне, предназначена
кнопка «[]»,
которая доступна
только в том
случае если
жилец имеет
льготу и при
его выборе
появляется
мини окно, где
показаны его
начисления
по льготе.
На следующей
строке представлены
итоговые суммы
по начислению,
льготам и к
оплате.
Далее дата
оплаты, сумма
уплаты и остаток
или задолженность.
И на последней
строке расположены
две кнопки «По
льготам» и «По
оплате», которые
доступны в том
случае если
данный жилец
имеет льготу
либо имеет
ордер, либо и
то и другое.
«По льготе»
– при ее выборе
появляется
окно, которое
показано на
рис. 5 прилож.
2, в котором
указан код,
ставки и описание
льготы для
данного жильца.
Вся информация
может корректироваться,
важно только
помнить, что
вся измененная
информация
повлияет на
всех жильцов,
имеющих этот
код.
«По оплате»
– при ее выборе
появляется
аналогичное
окно, описанное
выше, которое
показано на
рис. 6 прилож.
2, в котором
содержится
информация
о ставках стоимости
услуг для данного
жильца. Если
расчет ведется
по нормативным
ставкам, то все
поля имеют
нулевое значение,
а также если
нужно данному
жильцу установить
нормативные
ставки, то нужно
обнулить
соответствующее
поле. После
выхода из полей
редактирования
появится
предупреждение:
« Установить
всем жильцам
дома Y/N
»,
которое будет
ждать нажатие
клавиш. Если
нажать клавишу
«Y» то ставки,
которые отображались
в окне будут
установлены
всем жильцам,
проживающих
в данном доме,
при нажатии
любой другой
клавиши ставки
будут установлены
только жильцам
данной квартиры.
На этом информация
в первой части
окна заканчивается,
и перейдем ко
второй части.
2 часть
«Кнопки - меню»
Во второй части
расположены
кнопки, при
выборе которых
выполняется
определенные
действия по
обработке
данных (см. рис
2 приложения.
2 стр. 2). Разберем
их по порядку
расположения.
Кнопка «Изменить»
– при ее выборе
открывается
окно, которое
показано на
рис 20 приложения
2 стр. 20, где можно
изменить данные
о жильце. Если
изменяется
адрес жильца,
то автоматически
пересчитывается
количество
проживающих
по старому и
новому адресах.
Чтобы сохранить
измененную
информацию
необходимо
выйти из окна
по кнопке
«Подтверждаю»,
если выйти по
кнопке «Отмена»,
внесенные
изменения не
сохраняются.
Кнопка «Добавить»
– открывается
аналогичное
окно, описанное
выше, которое
показано на
рис 19 приложения
2 стр. 19,только
все поля имеют
пустые значения.
Также некоторые
поля, при редактировании
проверяются
на корректность
вносимых данных.
Подробнее это
будет описано
при рассмотрении
этого окна.
Выход также
должен происходить
по кнопке «Сохранить»
иначе жилец
и его данные
не будут внесены
в БД.
Кнопка «Удалить»
- помечает на
удаление жильца,
находящегося
в окне и информация
в окне обновляется.
Кнопка «Печать…»
- формирует
квитанцию о
начислениях
и оплате, и открывает
окно, которое
показано на
рис 7 приложения
2 стр. 7. После
его закрытия
появится окно
с просьбой
выбрать решение
распечатки
данного документа
(рис 8 приложения
2 стр. 8).
Кнопка «Ввод
оплаты» - открывает
окно, которое
показано на
рис 4 приложения
2 стр. 4, где
возможно вести
сумму оплаты
для квартиросъемщика,
который платит
за квартиру.
Следующие
кнопки позволяют
фильтровать
данные для
просмотра:
Кнопка «Плательщики»
– для просмотра
будут доступны
жильцы которые
платят за квартиру;
Кнопка «Льготники»
– для просмотра
будут доступны
жильцы, которые
имеют льготу,
независимо
от периода ее
действия;
Кнопка «Все
жильцы» – для
просмотра будут
доступны все
жильцы, кроме
помеченных
на удаление.
При этом под
этими кнопками
расположена
подсказка,
какой фильтр
выбран.
Следующая
группа кнопок
предназначена
для перемещения
в БД:
Кнопка «Вверх»
- позволяет
перейти на одну
запись вверх;
Кнопка «Вниз»
- позволяет
перейти на одну
запись вниз;
Кнопка «Начало»
- позволяет
перейти в начало
БД;
Кнопка «Вверх»
- позволяет
перейти в конец
БД.
При
этом если достигнуто
начало (конец)
БД, то соответствующие
кнопки становятся
недоступными,
а в правом углу
окна появляется
предупреждение,
что достигнут
конец (начало)
БД.
Кнопка
«Выйти» – позволяет
выйти и закрыть
окно.
Кнопка
«Расчет» –
позволяет
рассчитать
квартплату
для текущего
жильца, с учетом
сделанных
изменений, а
также расчет
происходит,
если в окне
находится
плательщик,
иначе кнопка
просто игнорируется.
Окно
«Квартиросъемщики»
(KD)
При выборе
пункта меню
«КАДРЫ»-«Квартиросъемщики»
открывается
BROWSE-окно с
полями: табельный
номер, фамилия
и два вычисляемых
поля (см. рис
9 приложения
2 стр.9), которые
показывают
плательщика
и льготников.
При этом отображаются
только те жильцы
кто платит за
квартиру. На
свободной части
экрана с правой
стороны выводится
информация
по жильцу, на
котором находится
курсор, при
этом она автоматически
обновляется,
если при перемещении
курсор находится
в поле, которое
указывает,
является ли
жилец плательщиком.
При нажатии
в любом поле,
кроме поля со
значком (),
появляется
Fox-меню, где
можно выбрать
дальнейшие
действия (см.
рис 10 приложения
2 стр.10):
«Постоянная
часть» – открывает
окно «Работа
с картотекой»,
которое было
описано выше
«Начисления»
- обновляют
информацию
на экране в
правой части
относительно
того квартиросъемщика,
на котором
находится
курсор.
«Жильцы» – при
выборе этого
пункта в BROWSE-окне
отображаются
только жильцы
квартиры того
квартиросъемщика,
на котором
находился
курсор.
«Плательщики»
– возвращает
окно с отображением
только тех
жильцов, которые
платят за квартиру.
«Поиск» – при
выборе этого
пункта активируется
POPUP-меню с
просьбой выбора
критерия поиска
(см. рис 13 приложения
2 стр. 13), это может
быть по фамилии,
табельному
номеру или по
адресу. После
выбора соответствующего
пункта, кроме
пункта «Отмена»,
предъявляется
окно для ввода
ключа. При этом
если это по
фамилии, то
возможен поиск
и по неполному
ключу, например
по ключу «ПЕТР»
будут удовлетворять
поиску фамилии:
«ПЕТРОВ»,
«ПЕТРОВСКИЙ»,
«ПЕТРИК» и
т.д., если по адресу
то предъявляются
три поля для
заполнения
улицы, дома и
квартиры. Здесь
также возможен
неполный ключ,
то есть обязательным
заполненным
полем, должно
быть, поле «улица»
которое можно
редактировать
вручную или
выбрать из
выпадающего
списка всех
улиц, когда
курсор попадает
в это поле, а
остальные поля
могут быть
пустыми. В этом
случае указатель
записи в БД
установится
на первого
жильца в БД
проживающего
по этой улице.
Эта система
поиска вызывается
во всех окнах,
где содержится
информация
о жильцах.
Остальные
пункты были
рассмотрены
выше (окно «Работа
с картотекой»).
Окно нормативов
(M_ZAR)
При выборе
пункта меню
«СЕРВИС»-«Нормы
оплаты услуг»
– открывается
окно, где нужно
вести ставки
стоимости
каждой услуги
и фамилию того,
кто занимается
расчетом и эта
фамилия будет
подставляться
в отчеты и квитанцию.
Ставки, веденные
в этом окне
являются базовыми
при расчете
квартплаты
для всех жильцов,
кроме тех, для
кого ставки
определены
отдельно (см.
рис 11 приложения
2 стр. 11).
Окно
дополнения
льгот (INS)
При выборе
пункта меню
«СЕРВИС»-«Дополнение
льгот» – открывается
окно, в котором
можно добавлять
или изменять
информацию
по льготам.
Первое поле
в которое попадает
курсор после
открытия окна
- это код льготы,
если вести
цифру кода,
которая уже
описана раннее,
то информация
в окне автоматически
обновится, то
есть поля будут
заполнены в
зависимости
от веденного
кода и возможно
изменить информацию
по этому коду.
Для того чтобы
сохранить
веденные изменения
или добавить
льготу нужно
нажать кнопку
«Сохранить»
(см. рис 17 приложения
2 стр. 17)
Окно тарифов
При выборе
пункта меню
«СЕРВИС»-«Тарифы»
– открывается
окно с меню для
выбора действий.
(см. рис 18 приложения
2 стр. 18). Пункт
меню «Добавить»
предъявляет
в окне поля для
занесения
данных по тарифу.
Для изменения
или удаления
уже существующего
тарифа нужно
его выбрать
в POPUP-меню,
которое раскрывается
при выборе
пункта «Просмотр»
(см. рис 22 приложения
2 стр. 22).
Окно
дополнения
жильцов
При
выборе пункта
меню «СЕРВИС»-«Дополнение»
– открывается
окно, в котором
нужно занести
информацию
о жильце (см.
рис 19 приложения
2 стр. 19). Работа
с этим окном
построена
следующим
образом:
Когда
курсор попадает
в поле ввода
фамилии, то
автоматически
включается
клавиша CAPSLOCK,
для ввода фамилии
прописными
буквами.
После
ввода табельного
номера и выхода
из этого поля,
проверяется
существование
такого номера
в БД и если такой
уже есть, то
появляется
окно предупреждение
с фамилией
того жильца,
который имеет
этот табельный
номер и выход
из поля невозможен,
пока не будет
изменен табельный
номер.
При
выборе кнопки
«[ ] Ордер»
также проверяется
БД и если за
данную квартиру
уже определен
плательщик
появляется
окно с его фамилией
и выбор этой
кнопки отменяется.
при
выборе кнопки
«[ ] Льгота»
появляется
окно и меню
выбора кода.
Можно выбрать
уже существующий
код либо ввести
новый, который
добавится в
базу льгот.
Если код не
будет выбран
(код=0), то выбор
льготы автоматически
отменяется.
После выбора
льготы становятся
доступны кнопки
выбора услуг
и верху над
ставками льготы,
появляется
информация
о номере льготы
и что возможно
его изменить
нажав клавишу
F7.
Период
начисления
льготы. В том
случае если
нужно определить
период льготы
то нужно заполнить
поля с какой
и по какую дату
она действительна,
здесь также
проверяется
корректность.
Так если дата
по которую
должна начисляться
льгота, будет
меньше даты
начала начисления,
то выход из
поля не возможен.
После
ввода всех
необходимых
данных нужно
нажать кнопку
сохранить,
информация
будет занесена
в БД и поля примут
пустые значения
для дальнейшего
заполнения.
BROWSE-окна
Следующая
группа окон
имеет ряд общих
характеристик
это BROWSE-окна,
открывающиеся
в окне размером
во весь экран,
кроме двух
последних
строк, которые
предназначены
для вывода
дополнительной
информации
- статус-строка.
Все поля недоступны
для редактирования,
при комбинации
клавиш: -выполняется
процедура
удаления,
-процедура
дополнения,
-процедура
поиска. Различие
состоит только
в отборе данных
и выводимыми
полями это:
Пункт меню
«КАДРЫ»-«Картотека
льготников»
- предъявляет
только тех
жильцов, которые
имеют льготу
и выводит следующие
поля: табельный
номер, фамилия,
период действия
льготы, улица,
дом, квартира,
телефон, категория,
номер удостоверения.
Пункт меню
«КАДРЫ»-«База
жильцов» –
предъявляет
всех жильцов
и выводит следующие
поля: табельный
номер, фамилия,
улица, дом, квартира,
телефон, категория,
номер удостоверения,
количество
проживающих.
Пункт меню
«КАДРЫ»-«Ввод
данных счетчика»
- предъявляет
только плательщиков
и выводит следующие
поля: табельный
номер, фамилия,
улица, дом, квартира,
телефон, старое
и новое значение
счетчика и
вычисляемое
поле к оплате,
которое автоматически
рассчитывается
при изменении
данных счетчика
и прибавляется
к общей сумме
платы за квартиру.
Статус-строка
для этих баз
имеет следующий
вид. Если жилец,
на котором
находится
курсор является
плательщиком,
то выводится
информация
о количестве
проживающих,
количестве
льготников,
сумме к оплате
и сальдо квартиросъемщика,
если это проживающий
в квартире, то
выводится
фамилия и табельный
номер того кто
платит за эту
квартиру.
Пункт меню
«КАДРЫ»-«Ввод
оплаты» - предъявляет
только плательщиков
и следующие
поля: табельный
номер, фамилия,
ввод оплаты,
начисленную
сумму за услуги,
сумму по льготе,
сумму к оплате,
дату оплаты,
остаток (задолженность)
а также вычисляемое
поле льготник
(см. рис 12 приложения
2 стр.12).
Пункт меню
«РАСЧЕТ»-«Слияние
квартплаты
с льготами»
– предъявляет
только плательщиков
и выводит следующие
поля: табельный
номер, фамилия,
сумма начислений,
сумма по льготе
и сумму к оплате
(см. рис 16 приложения
2 стр.16).
Статус-строка
для этих баз
имеет следующий
вид. В первой
строке выводится
адрес, во второй
количество
проживающих
и льготников.
Пункт меню
«РАСЧЕТ»-«Расчет
квартплаты»
- предъявляет
только плательщиков
и выводит следующие
поля: табельный
номер, фамилия
и суммы начислений
по каждой услуге
отдельно (см.
рис 14 приложения
2 стр.14).
Пункт меню
«РАСЧЕТ»-«Расчет
по льготам»
- предъявляет
только льготников
с учетом периода
начислений
и поля аналогичные
описанных выше
(см. рис 15 приложения
2 стр.15).
Статус-строка
для этих баз
имеет следующий
вид. В первой
строке кратко
описаны услуги
во второй
соответственно
под каждой
услугой общая
начисленная
сумма, при этом
каждая услуга
выделяется
цветом в зависимости
в каком поле
находится
курсор.
Окно помощи
(HELP)
Это окно предназначено
для вывода
помощи для
определенных
окон при работе
с данными по
нажатию клавиши
F1, а также
при выборе
пункта меню
«ПОМОЩЬ»-«Помощь»,
где дается
помощь по пунктам
меню и «Справка»,
где дается
информация
для чего предназначена
программа и
ее краткая
характеристика.
(см. рис 21 приложения
2 стр. 21).
Краткий
обзор Процедурного
языка – FoxPro
…………………
|
32
|
Техническое
описание работы
программы
………………………….
|
34
|
«СЕРВИС»-«Дополнение»………………………………………………..
|
36
|
«СЕРВИС»-«Дополнение
льгот»………………………………………….
|
39
|
«СЕРВИС»-«Тарифы»……………………………………………………
|
39
|
«СЕРВИС»-«Нормы
оплаты услуг»………………………………………
|
40
|
«СЕРВИС»-«Упаковка
данных»…………………………………………..
|
40
|
«СЕРВИС»-«Переиндексация»…………………………………………
|
40
|
Пункт меню
– «КАДРЫ»………………………………………
|
41
|
«КАДРЫ»-«Работа
с картотекой»………………………………………..
|
41
|
«КАДРЫ»-«Квартиросъемщики»…………………………………………
|
46
|
«КАДРЫ»-«Картотека
льготников»………………………………………
|
47
|
«КАДРЫ»-«База
жильцов»……………………………………………….
|
47
|
«КАДРЫ»-«Ввод
данных
счетчика»……………………………………
|
47
|
«КАДРЫ»-«Ввод
оплаты»
……………………………………………….
|
47
|
Пункт меню
«РАСЧЕТ»………………………………………..
|
48
|
«РАСЧЕТ»-«Расчет
квартплаты»
………………………………………………
|
48
|
«РАСЧЕТ»-«Расчет
по льготам»…………………………………………
|
49
|
«РАСЧЕТ»-«Слияние
квартплаты
с льготами»…………………………..
|
49
|
Функция
ПОИСКА……………………………………………..
|
50
|
Пункт меню
«ОТЧЕТЫ»………………………………………
|
52
|
«ОТЧЕТЫ»-«Списки
по начислению»
…………………………………..
|
52
|
«ОТЧЕТ»-«Списки
по льготам»………………………………………….
|
53
|
«ОТЧЕТ»-«Оплата
э\энергии»
………………………………………….
|
53
|
«ОТЧЕТ»-«Сальдо
по квартиросъемщикам»»……………………………
|
53
|
«ОТЧЕТ»-«Свод
по квартплате
за месяц»……………………………….
|
53
|
Пункт
меню «ПЕЧАТЬ»………………………………………..
|
54
|
«ПОМОЩЬ»-«Помощь»…………………………………………………
|
55
|
«ПОМОЩЬ»-«Справка»…………………………………………………
|
55
|
Создание
контексно-зависимой
экранной
подсказки……………………….
|
55
|
Пункт
меню «Выход»…………………………………………
|
56
|
Краткий
обзор Процедурного
языка - FoxPro
Программа в
FoxPro – это текстовый
файл, содержащий
набор команд,
написанных
в соответствии
с синтаксическими
правилами
языка. Программа
может иметь
подпрограмму
(процедуры), в
которых помещаются
часто повторяющиеся
фрагменты кода,
размещаемые
после основного
текста программы
или в отдельном
файле.
В FoxPro предусмотрена
широкая возможность
использования
процедур, которые
могу быть как
внешними (в
виде отдельных
программных
файлов), так и
внутренними
(внутри программы).
Эти средства
удобно использовать
для реализации
некоторых
одинаковых
процессов
обработки
данных, а также
вся программа
может состоять
из обращений
к процедурам
и функциям.
Кроме того,
модульное
программирование
позволяет
разработчику
гораздо лучше
ориентироваться
в своей системе,
а также сделать
более эффективным
процесс ее
написания и
отладки.
Разберем описание
процедуры,
функции и
процедурного
файла.
Подпрограмма
начинается
с ключевого
слова
И выполняется
пока не будет
выполнено одно
из следующих
условий:
Еще
раз встретят
слово PROCEDURE.
Будет
обноружено
команда RETURN
– возращение
в предыдущую
программу.
Будет
выдана команда
CANCEL –прерывание
работы программы.
Будет
выдана команда
QUIT- выход
из СУБД.
Встретится
новая команда
DO для запуска
другой программы.
Будет
достигнут
конец файла.
FoxPro
аналогично
подпрограмме
трактуется
понятие пользовательской
функции, которая
начинается
с ключевого
слова
и в отличии
от процедуры
может вернуть
необходимые
значения вызываемую
программу.
Имеются
4 способа вызвать
функцию:
Присвоить
возвращаемое
значение переменной.
Например, следующая
строка кода
запоминает
текущую системную
дату в переменой
dToday :
dToday=DATE()
Включить
вызов функцию
в команду.
Например, следующая
команда устанавливает
по умолчанию
каталог, имя
которого возвращает
функция GETDIR():
SET DEFAULT TO GETDIR()
Напечатать
возвращаемое
значение в
активное окно:
?
TIME()
Вызвать
функцию без
запоминания
где либо возвращаемого
значения:
= SYS(2002)
Для
прерывания
выполнения
программы
служит оператор
Который
возвращает
управление
вызывающую
программу, и
в ней выполняется
следующая
команда после
вызывающей;
если указана
опция TO MASTER, то
управление
возвращается
на самый верхний
уровень вызывающей
программы, а
эта же программа
с опцией TO
ProgramName передает
управление
в указанную
программу. При
использовании
функции команда
автоматически
возвращает
.Т. (истина), если
не указано
другое выражение
на месте Expression.
Действует
подобно команде
RETURN, но при
возвращении
управления
в вызывающую
программу
повторяется
выполнение
последней
команды.
Встречая обращение
в процедуре,
Fox Pro ищет ее
в следующей
последовательности:
1.в текущей
процедуре;
2.в процедурном
файле, если он
подключен;
3.снизу вверх
в старших процедурах
относительно
текущей, если
они есть;
4.на диске в виде
отельной программы.
Обращение
к процедуре
выполняется
команды
В процедуру
могут быть
переданы и из
нее получены
некоторые
величины, указанные
в списке параметров
после слова
WITH. Этими
величинами
могут быть не
только переменные
и константы,
но любые разрешенные
выражения. В
таком случае
первой командой
в вызываемой
процедуре
должна быть
команда, воспринимающая
их:
Процедурный
файл
Множество
внешних, обычно
«родственных»
процедур иногда
удобно объединить
в один процедурный
файл, (также
типа PRG), который
вызывается
(загружается
в память) командой
Только
после этого
можно командой
DO вызывать
из него отдельные
процедуры (в
данной программе
имя процедурного
файла FUNC.PRG)
В каждый
момент может
быть открыт
только один
процедурный
файл. Чтобы его
закрыть, нужно
использовать
команду SET
PROCEDURE TO без параметров.
Техническое
описание работы
программы
В приложении
используются
семь внешних
процедур. т.е.
7 файлов типа
.PRG из них
один процедурный.
Краткая характеристик
каждого из них:
MENU.PRG-главный
программный
файл (приложение
1.1)
FUNC.PRG-процедурный
файл (приложение
1.2)
OPEN.PRG-файл
открытия БД
(приложение
1.3)
BAZES.PRG-файл
BROWSE-окон
(приложение
1.4)
ADD_DEL.PRG-файл
дополнение
и изменения
данных (приложение
1.5)
RAS.PRG-файл
расчетов квартплаты,
льгот и их слияния
(приложение
1.6)
OTCHET.PRG-файл
формирование
отчетов (приложение
1.7)
При
старте программы
запускается
главный файл,
т.е. файл MENU.PRG,
который будет
запускать
работу всей
информационной
системы, он
состоит из
следующих
блоков:
Блок
установочных
команд SET
определяющих
параметры
конфигурации
рабочей среды;
Открытие
баз данных и
необходимых
индексных
файлов;
Определение
глобальных
переменных,
массивов и их
инициализация;
Определение
и описание
окон;
Описание
и активизация
работы главного
меню для выбора
основных вариантов
работы системы
и передача
управления
соответствующим
программным
файлам или
подпрограммам;
Закрытие
баз данных и
выход из СУБД.
Сейчас
рассмотрим
работу приложения
в той последовательности,
как она выполняется
по шаговом
выполнении
каждого кода
в окне трассировки.
Для чего, при
чтении данной
главы целеобразно
запустить среду
FoxPro, открыть
в окне трассировки
файл MENU.PRG в
режиме пошагового
выполнения,
либо обращаться
к приложению
1, где прилагаются
распечатки
файлов программ
В первых
строках файла
MENU.PRG с помощью
команд SET
устанавливается
операционная
среда:
Далее
определяются
и загружаются
в память цветовые
схемы, которые
используются
для раскраски
окон и некоторых
областей внутри
них.(SET COLOR OF SCHEME).
Подключается
процедурный
файл (FUNC.PRG),
командой ON
ERROR и функцией
ERROR() определяется
анализ возможных
ошибок в программе.
Далее
вызывается
процедура
находящаяся
в файле OPEN.PRG
(см. прилож.
1.3 стр. 1) для
открытия БД.
Здесь проверяется
наличие баз
на диске и если
их нет, то они
создаются с
помощью языка
SQL, при этом
в БД HELP, которая
состоит из
одного MEMO-поля,
копируются
текстовые файлы
помощи. Если
базы уже созданы
ранее, то они
открываются
в заданных
областях вместе
со структурными
индексами,
которые содержат
TAG’и для
связи БД и
систематизированного
предъявления
данных:
БД
(База
жильцов)
TAG-tab
– индексирование
по полю табельного
номера, для
связи с БД ставок
(TABLE_R.DBF).
TAG-fam
– индексирование
по полю фамилии,
для поиска
командой SEEK.
TAG-n_lg
– индексирование
по полю номера
льготы (код),
для связи с БД
льгот (LGOT.DBF).
TAG-date
– индексирование
по полям периода
действия льготы
(dat_c,dat_po), для
расчета сумм
по льготникам,
рассчитываются
только те льготники,
у кого период
входит в текущую
дату и кто не
имеет периода
действия льготы.
TAG-lgt
– индексирование
по полям адреса,
с условием, что
предъявляться
будут только
жильцы, имеющие
льготу.
TAG-ord
– индексирование
по полям адреса,
с условием, что
предъявляться
будут только
те жильцы, кто
платит за квартиру.
TAG-adrr
– индексирование
по полям адреса
и табельного
номера, для
связи с БД начислений
(OPLATA.DBF), а также
это главный
TAG при просмотре
данных.
БД
(База
начислений)
TAG-tab
–индексирование
по полю табельного
номера.
TAG-adr
– индексирование
по адресу, для
связи с БД жильцов
(RABOT.DBF)
БД
(БД
льгот)
БД
БД
ставок)
В том
случае, если
индексных
файлов не обнаружено,
то они создаются.
Здесь также
устанавливается
связь между
базами по ключевым
полям. Связь
между базами
имеет структуру
ОДИН КО МНОГИМ,
то есть БД жильцов
является родительской
по отношению
к другим.
Далее
объявляются
глобальные
перемены (PUBLIC)
_PAD_OTCH
- которое служит
для анализа
формирования
отчета если
ее значение
.T. то отчет
формируется,
если ее значение
.F., которая
присваивается
в процедуре
дополнения,
то при выборе
формирования
отчета программа
просит провести
слияние квартплаты
со льготами,
где данной
переменной
присваивается
значение .Т.
_REC-
запоминает
номер текущей
записи в БД
_FILTR-
имеет числовое
значение и в
зависимости
от значения
устанавливает
фильтр предъявления
данных в окне
«Работа с
картотекой».
Объявляется
массив, содержащий
имена месяцев
и определяются
переменные
для хранения
нормативных
ставок, которые
сохраняются
в файле M_ZAR.MEM
и в последующем
загружаются
в память из
этого файла.
После
этого командой
DEFINE WINDOW определяются
и описываются
окна. В основном
в программе
окна создаются
в сомой процедуре,
для того чтобы
можно было
использовать
опцию CLOSE то
есть возможность
закрытия окна
с помощью мыши.
А здесь в основном
определены
окна для вывода
подсказок-предупреждений
и выбора дальнейших
действий
пользователя.
Команды
DEFINE MENU, DEFINE POPUP и
DEFINE BAR определяют
и описывают
расположение
на экране и
работу основного
меню. Командой
ON SELECTION PAD (BAR) определяется
реакция пунктов
меню при их
выборе. Здесь
нужно сказать,
что команда
ON SELECTION PAD может
использоваться
в виде ON PAD в
этом случае,
при попадании
курсора на
такой PAD-пункт
сразу вызовет
действия определенные
при описании
этих пунктов,
а с добавлением
слова SELECTION,
чтобы
выполнилось
действие нужно
непосредственно
его выбрать,
то есть на
соответствующем
пункте нажать
клавишу ввода
(Enter).
Последней
командой в
файле MENI.PRG
является
команда активации
меню и вся дальнейшая
работа приложения
будет зависеть
от выбора пунктов
меню.
Любая
система работы
с базами данных
предполагает
наличия этих
данных, поэтому
работа с программой
нужно начинать
с дополнения
БД информацией.
В программе
предусмотрено,
что при выборе
пункта меню,
который предназначен
для работы с
данными, а база
пуста появится
окно с предупреждением
дополнить.
Рассмотрим
подробней эту
процедуру. (см
прилож. 1.6 стр.1).
Здесь
функцией RECCOUNT()
проверяется
наличие записей
в БД и если значение
равно нулю, то
активируется
окно VIB в
котором при
помощи команд
ввода-вывода
@…SAY…GET выводится
поясняющий
текст (SAY)
и кнопки для
выбора дальнейших
действий (GET),
которые
активируются
командой READ
с опцией CYCLE,
которая запрещает
выход из окна
по достижении
курсора последнего
GET-объекта
. GET–объекты
часто используется
в программе,
поэтому сейчас
разберем их
подробнее.
В данном
случае используются
кнопки меню,
которые определяются
в команде FUNCTION
и обработка
выбранной
кнопки с помощью
команды VALID.
В процедуре
INS2(), которая
описана в приложении
1.2 стр. Эти объекты
еще называют
как средства
управления
в стиле WINDOWS
все переменные,
определенные
командой GET
имеют или
числовые значения,
тогда переменной
присваивается
номер объекта
в порядке его
расположения
в команде, или
символьные,
тогда переменной
присваивается
символьное
описание кнопки,
а также для
кнопок-переключателей
и радио-кнопок
возможно логическое
значение переменной.
Затем
в процедуре
с именем определенной
командой VALID
или WHEN
осуществляется
в структуре
DO CASE выбор
дальнейших
действий в
зависимости
от значения
переменной.
Например, в
данном случае
в окне определены
две кнопки
Дополнить и
Отмена (FUNCTION
‘ * …’),
которые при
их выборе присваивают
числовое значение
переменной
ins1 и которая
при выборе
кнопки анализируется
в структуре
DO CASE в
процедуре INS2.
Eсли выбрана
кнопка Дополнить,
то переменная
ins1 принимает
значение 1 (потому
что эта кнопка
описана первой
в команде FUNCTION
‘* …’),
выполняется
условие CASE
ins1=1 и следовательно
выполняются
команды которые
следуют после
этого условия
(DO INS WITH 1).
Если выбор
не происходит
вообще, то и
процедура
игнорируется.
Теперь еще
раз пройдемся
по пунктам
меню, и разберем
его работу с
точки зрения
языка программирования.
Начнем с пункта
«СЕРВИС»
«СЕРВИС»-«Дополнение»
Итак
чтобы начать
с дополнения
БД нужно выбрать
в меню «СЕРВИС»-«Дополнение»
или в окне кнопку
Дополнить.
Выбор пункта
меню или кнопки
вызывает выполнение
процедуры
дополнения,
которая определяется
командой DO
INS WITH 1. Здесь параметр
1 определяет
что это процедура
дополнения.
В программе
предусмотрена
процедура
Изменения с
помощью выполнения
этой же процедуры,
но с параметром
2. Разберем эту
процедуру. (см.
прилож. 1.5 и прилож.
1.2).
В первых строках
процедуры
определяется
имя для параметра,
в переменной
"ord_a" запоминается
название тега
индекса, чтобы
после выхода
из процедуры
восстановить
параметры
системы.
Далее
закрепляются
за клавишами
"F1" и
"F7" действия
вызова помощи
и изменения
кода по льготе,
глобальной
переменной
"_PAD_OTCH" присваивается
значение ".F.",
определяется
POPUP-меню улиц
и массив элементы
которого в
цикле DO WHILE
преобразуются
в BAR-пункты
меню и с помощью
переменной
"m" массив
переопределяется,
чтобы в меню
не было пустых
строк. Определяется
окно "hp" для
вывода в нем
меню кодов и
описания льгот
их выбора и
занесения
номера или
описания документа
льготы.
Далее в структуре
DO CASE анализируется
номер параметра.
Если параметр
равен 1, то это
дополнение
и с помощью
команды SCATTER
MEMVAR BLANK создается
массив, содержащий
переменные
аналогичные
полям БД с пустыми
значениями,
если параметр
равен 2, то это
изменение и
массив будет
содержать
переменные
с данными текущей
записи БД (SCATTER
MEMVAR) и здесь также
определяются
переменные,
которым присваиваются
значения полей,
которые имеют
логический
формат и отображаются
на экране с
помощью GET-объектов
это кнопки-переключатели
для определения
начислений
услуг, кнопка-переключатель
выбора льготы
и кнопка-переключатель
выбора плательщика.
Также здесь
в переменных
запоминается
текущий адрес
плательщика
(yl_ins=yl, dom_ins=dom, k_ins=kw_ra), для
анализа изменения
адреса.
После того как
параметр определен
активируется
окно INS в
котором располагаются
переменные
из созданного
массива для
занесения
(изменения)
данных (см. рис.19
и рис 20 прилож.
2)
Схема отображения
данных реализовано
следующим
образом: в первой
строке после
активации окна
вызывается
функция POS_CH2(),
в которой
содержатся
SAY-объекты
комментарии
к GET-полям
(прилож.
1.2 стр.29). Далее
располагаются
GET-объекты
полей и выбора
кнопок для
большинства
которых предусмотрена
проверка при
выходе (VALID)
и входе (WHEN).
Поле-переменная
фамилия – при
входе выполняется
функция =CAPSLOCK(.T.),
для переключения
ввода фамилии
прописными
буквами.
Поле-переменная
табельный
номер - здесь
при выходе из
поля выполняется
процедура
unic(), которая
проверяет
уникальность
введенного
номера (прилож.
1.2 стр. 32). То
есть в структуре
DO CASE определяется
параметр если
он равен 2 то
возвращается
значение .Т. и
курсор входит
в следующее
поле, если он
равен 1, то с
помощью команды
поиска проверяется
наличие такого
номера в БД и
если такой
номер существует,
то функция
возвращает
значение .F.,
что означает,
что выход из
поля невозможен,
а также появляется
окно vib, в
котором с помощью
команды SAY
выводится
фамилия того
жильца, который
имеет этот
табельный
номер.
Поле-переменная
улица - при
входе выполняется
функция
yliz_s() (см. прилож.
1.2 стр.29), где
вначале выключается
клавиша CapLock,
а затем проверяется
условие, что
записей в БД
больше нуля
и параметр
равен 1 и если
это выполняется
то активируется
POPUP-меню улиц,
для выбора
нужной (см.
прилож. 1.2 стр.
29), или закрыть
меню и вести
улицу вручную.
Переменная
or1 - имеет
числовое значение
и соответствует
полю OR_R: 1 –
если выбрана
([x], 0 – не выбрана
([ ]) и служит для
выбора жильца
плательщиком.
Здесь также
предусмотрена
проверка при
выходе. (см.
прилож. 1.2 стр.
31 FUNC O_R()) в
структуре DO
CASE анализируется
выбор кнопки,
если она выбрана,
то сначала
объявляются
переменные
из полей-переменных
с удалением
из них пробелов,
затем ведется
поиск в базе
жильцов с таким
адресом и имеющих
поле OR_R со
значением 1.
Если поиск
удачный и это
не текущая
запись (например
при изменении),
то появляется
окно-предупреждение
с фамилией
жильца, который
уже определен
плательщиком
за эту квартиру.
Переменной
or1 присваивается
значение 0 и
GET-объект
обновляется.
Если при выборе
кнопки (or1=1)
поиск неудачный,
то полю-переменной
M.OR_R присваивается
значение 1 и
становятся
доступными
кнопки выбора
услуг.
Переменная
lg_ta – имеет
логическое
значение и
соответствует
полю LGOT: .F.- если
не выбрана ([
]), .T.- если выбрана
[x]. Здесь при
выходе, если
кнопка выбрана,
что проверяется
в структуре
DO CASE (см.
прилож. 2 стр.
30 FUNC VIB_LG), то
активируется
окно с полями-переменными
кода льготы
(M.N_LG) и описанием
(номером) документа
(M.N_YD), при этом
курсор попадает
в поле с выбором
кода, для которого
предусмотрено
проверка входа,
то есть при
входе в это
поле выполняется
функция LG1
(см. прилож
1.2 стр. 29), в которой
определяется
наличие данных
в БД льгот и
если они имеются
определяется
и активируется
меню из полей
БД льгот. Можно
выбрать имеющиеся
льготы или
добавить новую.
Если при выходе
поле кода льготы
будет иметь
нулевое значение,
то переменной
lg_ta и M.LGOT
присваивается
значение .F.,
иначе становятся
доступные для
редактирования
поля с периодом,
ставками и
описанием
льготы, а также
становятся
доступными
кнопки выбора
услуг.
Переменные
kw, gw, ks, ot, elc, tl, rd – все
эти поля имеют
логический
тип и соответствуют
полям базы
выбора для
начисления
по услугам.
Если это процедура
изменения то
они имеют значения
этих полей,
как описано
выше, если
дополнение
то все имеют
значение .F..При
этом они доступны
для редактирования,
только в том
случае, если
жилец является
(выбран) плательщиком
или (и) льготником.
При выходе
выполняется
процедура <имя
переменной>_INS
(см. прилож.
1.2 стр. 30-31), где
полю-переменной
присваивается
значение переменной.
Период
льготы, ставки
и ее описание
– данная группа
полей выделена
цветом в зависимости
от того доступны,
(M.LGOT=.T.) или не
доступны
(M.LGOT=.F.) для
редактирования.
Здесь контроль
данных проверяется
только в поле-переменной,
по какую дату
должна начисляться
льгота (M.DAT_PO)
то есть она
должна быть
больше даты
начала даты
начисления
(см. прилож. 1.5
стр. 2), остальные
поля – это поля
БД льгот.
Следующей
командой
определяющие
кнопки, которые
имеют числовое
значение, в
зависимости
их расположения,
при описании.
1-«Сохранить\Подтверждаю»,
2-«Выход», 3-«Удалить».
Обработка
выбора этих
кнопок осуществляется
в процедуре
ad_in() (см.
прилож. 1.2 стр.
32-35). В первых
строках выполняются
действия по
удалению возможных
начальных
пробелов (LTRIM())
в полях фамилии
и адреса, далее
определяется
категория
жильца и если
это не квартиросъемщик,
то удаляется
не нужная информация
(телефон и кв.
метры), и наоборот.
После этого
определяется
номер выбранной
кнопки (pod)
и номер параметра
входа в это
окно.
Кнопка
«Сохранить»,
параметр 1 (pod=1,
red=1) – добавляется
новая запись
(APPEND BLANK) и все
поля-переменные
переносятся
в эту запись
(GATHER MEMVAR). Далее
выполняются
действия по
заполнению
поля с количеством
жильцов. Ищется
первая запись
в БД с адресом
нового жильца,
в любом случае
поиск будет
удачным, но
это может быть
либо добавленная
запись, либо
другая. Если
кроме новой
записи больше
не обнаружено,
то полю количества
жильцов (KOL_VO),
присваивается
значение 1, иначе
значение найденной
записи, и в этом
случае сканируется
записи с этим
адресом, чтобы
увеличить
поле-количество
на 1. Затем открывается
БД, в которой
хранятся информация
о ставках по
услугам для
каждого жильца
(TABLE_R) и в нее
добавляется
новая запись
с копированием
табельного
номера новой
записи из БД
жильцов. Затем
ищется в БД
жильцов запись
с одинаковым
адресом и если
такая найдена,
то копируются
в переменные
значения полей
из БД ставок
(TABLE_R), которые
затем копируются
в поля БД ставок
новой записи,
иначе они имеют
нулевые значения.
После этого
командой SCATTER
MEMVAR BLANK создаются
новые переменные
полей, переменным
для выбора
услуг присваиваются
значения .F.
GET-поля обновляются
и можно редактировать
следующую
новую запись.
Кнопка
«Подтверждаю»,
параметр 2 (pod=1,
red=2) – первой командой
переменные
переносятся
в БД. После этого
проверяется
изменялся ли
адрес, с помощью
переменных
определенных
ранее (см. выше
yl_ins ,dom_ins, k_ins). Если
адрес не изменился,
то процедура
заканчивается
и возвращается
в окно изменения,
иначе устанавливается
фильтр работы
только с жильцами,
имеющими текущий
(измененный)
адрес, и корректируется
поле-количество.
Затем аналогичная
операция происходит
с жильцами
старого адреса.
Кнопка
«Выход» – завершает
работу процедуры,
и выполняются
команды следующие
за командой
READ, это закрытие
окна, переиндексация
данных и выход
с процедуры.
Кнопка
«Удалить» –
доступна только
в том случае,
если это процедура
изменения (см.
прилож. 1.2 стр.
35) и будет рассмотрена
ниже.
Теперь
рассмотрим
последнюю
команду обновления
GET-объектов
– это команда-опция
SHOW red(), входящая
в команду READ.
Она выполняется
всегда если
в какой-либо
процедуре
встретится
выражение SHOW
GETS, в данном случае
в процедурах,
вызываемых
в окне Дополнения\Изменения
данных, если
встречается
это выражение
выполняется
процедура
red() (см. прилож.
1.5 стр.3). здесь
в структуре
DO CASE анализируются
переменные
и в зависимости
от их значения
выполняются
следующие
действия:
если
параметр равен
1 (red=1), то кнопка
описанная для
сохранения
новых данных
будет иметь
название
«Сохранить»,
а кнопка удалить
будет не доступна
если
параметр равен
2 (red=2), то кнопка
«Сохранить»
изменит свое
название на
«Потверждаю».
Если
переменная
M.OR_R=0, то
кнопки-переключатели
выбора услуг
будут недоступны.
И наоборот
M.OR_R=1, то доступны.
Если
переменная
M.LGOT=.F., то то
кнопки-переключатели
выбора услуг
и поля редактирования
по льготе будут
недоступны.
И наоборот.
«СЕРВИС»-«Дополнение
льгот»
при
выборе данного
пункта запускается
процедура
INS_LG, которая
расположена
в файле ADD_DEL.PRG
(см. прилож.
1.5 стр. 5) и показана
на рис. 17 прилож.
2.
В первых строках
выбирается
БД, где содержится
информация
по льготам,
затем определяется
окно для работы
процедуры и
обращение к
помощи. Открывается
окно для редактирования
льгот, в окне
также используются
не сами поля,
а их переменные,
созданные
командой SCATTER
MEMEVAR.
После ввода
в поле «Код»
номера, при его
выходе выполняется
процедура
UNIC_LG (см. прилож.
1.2 стр. 36), в которой
в БД льгот ищется
код с веденным
кодом и если
найден то переменные
обновляются
информацией
по этому коду,
и доступны для
изменения или
удаления, если
нет то остаются
пустыми и готовы
к заполнению.
Так как работа
происходит
с переменными,
то для сохранения
сделанных
изменений или
дополнения,
нужно подтвердить,
нажав на кнопку
«Сохранить».
Работа кнопок
осуществляется
в процедуре
LG_INS, где в
структуре DO
CASE выполняются
действия в
зависимости
от числового
значения переменной
LG_INS:
LG_INS=1.
Из переменной
M.INFO (Категория)
удаляются
возможные
начальные
пробелы, затем
ищется код-переменная
в БД льгот, если
найден, то это
изменение и
поля переносятся
в БД. Если не
найден то дополнение
и здесь сначала
добавляется
запись в БД, а
затем в нее
переносятся
поля. Так как
работа на этом
не заканчивается,
то создаются
новые поля
переменные
и поля обновляются.
LG_INS=2.
Команда CLEAR READ
завершает
работу с этим
окном.
LG_INS=3.
Запись помечается
на удаление
(DELETE) и физически
удаляется
(PACK), после
этого создаются
новые поля,
поля обновляются
и работа продолжается.
«СЕРВИС»-«Тарифы»
при
выборе этого
пункта выполняется
процедура
TARIFS_ZAR, расположенная
в файле FUNC.PRG
(см. прилож. 1.2
стрю 55) и показано
окно на рис. 18
прилож. 2.
В первых
строках командой
HIDE POPUP убирается
с экрана меню
«СЕРВИС», затем
закрепляется
за клавишей
Esc процедура
выхода по клавише
Esc, в переменной
_REC запоминается
номер записи
в БД жильцов.
Выбирается
активной БД
тарифов и
определяется
окно для работы
данной процедуры
и горизонтальное
меню, которое
будет расположено
в этом окне и
с его помощью
будут выполняться
действия по
обработке
данных.
Данное
меню имеет три
PAD-пункта.:
PAD-пункт
«Просмотр»
– активируется
POPUP-меню,
которое состоит
из полей БД
тарифов, и выбор
любого BAR-пункта
выполняется
в процедуре
INS_REC, в которую
передаются
два параметра
это названия
тарифа (PROMPT()-mprompt),
и номер записи
в БД тарифов
(RECNO()-mrecno) (см.
прилож. 1.2 стр.
56), в которой в
зависимости
от параметра
выполняются
следующие
действия:
если
описание пустое
(empty(mprompt)), то эта
запись помечается
на удаление.
Иначе
создаются
поля-переменные
для изменения
данной записи
(рис. 22 прилож.
2) так как редактируются
переменные,
то в окне присутствуют
кнопки для
сохранения
сделанных
изменений
кнопка-«Сохранить»
(процедура
del_rec1, ras_on1=1), где
сначала, в
зависимости
от значения
переменной
M.K_CH (.T.,.F.) заполняется
переменная
M.INFO и затем
переменные
переносятся
в БД; выхода
без изменения
кнопка «Отказ»
(процедура
del_rec1, ras_on1=2), где
командой CLEAR
READ завершается
работа с
переменными-полями
без перенесения
их в БД; и удаления
текущей записи
(процедура
del_rec), текущая
запись командой
DELETE помечается
на удаление.
Если
выбран пункт
«Дополнить»,
то в процедуре
INS_ST создаются
поля-переменные
с пустыми значениями
и с помощью
кнопок дополняются
записи.
Если
выбран пункт
«Выйти», то в
процедуре
INS_ST закрывается
окно и деактивируется
меню.
«СЕРВИС»-«Нормы
оплаты услуг»
Данный
пункт открывает
окно M_ZAR, где
с помощью
команд @…SAY…GET
(см. прилож.
1.4 стр. 4) выводятся
переменные
ставок, определенные
в начале программы
в файле MENI.PRG
и после их
редактирования
они сохраняются
в файле M_ZAR.MEM.
чтобы их сохранить
необходимо
выйти из окна
по кнопке
«Сохранить»,
которая запустит
процедуру
сохранения
(см. прилож. 1.2
стр. 20).
«СЕРВИС»-«Упаковка
данных»
Выбор
этого пункта
запускает
процедуру
физического
удаления данных,
помеченных
ранее на удаление
(см. прилож. 1.2
стр. 22). В первых
строках сканируются
записи, помеченные
на удаление
в БД жильцов
и помечаются
записи во
вспомогательной
БД ставок, которая
связана с основной
БД по полю табельного
номера (TAB).
Затем снова
сканируется
БД жильцов с
целью проверки
недопущения
наличия жильцов
без плательщика.
Здесь перебираются
помеченные
записи, и в
переменные
заносятся
значения адреса
для поиска, и
фамилии для
возможного
предупреждения.
После
этого ищется
жильцы, проживающие
по этому адресу,
если такие
существуют,
то ищется плательщик
и если такого
нет выводится
окно, показанное
на рисунке, где
нужно выбрать
одно из трех
действий (см.
прилож. 1.2 стр.
23, процедура
D_IN).
«
Удалить
всех» – будут
помечены все
записи по этому
адресу.
«Изменить»
– запустится
процедура
изменения, для
найденного
жильца.
«Восстановить»
- восстановить
плательщика,
ранее помеченного
на удаление,
то есть снимет
пометку командой
RECALL.
«СЕРВИС»-«Переиндексация»
В этой
команде я не
пользовался
командой REINDEX,
а просто удалял
все индексы
и создавал
новые. Это и
проще и времени
уходит меньше
(см. прилож. 1.2
стр. 23). В первых
строках закрываются
все БД и вместе
с ними структурные
индексы, далее
с помощью команды
DOS удаляются
все файлы, имеющие
расширение
.CDX то есть структурные
индексы, потому
что другие
индексы в программе
не используются,
и затем выполняется
процедура
открытия баз
данных (см.
прилож. 1.3), где
индексы создаются
автоматически.
Здесь нужно
сказать, что
при таком подходе
FoxPro может
выдать ошибку,
и требование
явно указать
на БД, которую
нужно открыть.
Эта проблема
решается с
помощью функции
ON ERROR DO EROR WITH ERROR(), которая
передает код
ошибки в процедуру
EROR как параметр
(см. прилож. 1.2
стр. 53), и в ней
в зависимости
от области
открываются
нужные базы
данных.
Пункт
меню – «КАДРЫ»
После
того как в базе
жильцов имеются
записи, можно
работать с
процедурами,
осуществляющих
действия по
их обработке.
Эти процедуры
в основном
находятся в
первом пункте
меню «КАДРЫ».
«КАДРЫ»-«Работа
с картотекой»
При
выборе данного
пункта открывается
окно, представленное
как личная
карточка жильца,
в которой
отображается
необходимая
информация
и средства по
ее обработке
(см. прилож. 1.2 стр.
1-20).
Как уже описывалось
в главе 2 с работой
в этом окне,
вся информация,
расположенная
в этом окне
делится на две
части, поэтому
каждую часть
разберем по
отдельности.
Но прежде рассмотрим
заполнение
окна информацией
и другими объектами
(см. прилож. 1.2
стр. 1-2 и прилож.
2 рис. 2 ).
Итак в первых
строках выполняются
некоторые
технические
действия, а
именно это
проверка наличия
данных, которая
описывалась
выше, определение
и присвоение
переменным
“e” и ”b”
логических
значений для
анализа конца
и начала БД, и
в зависимости
от этого доступность
или недоступность
кнопок перемещения,
клавише F1
назначается
процедура
открытия
соответствующего
окна с помощью,
клавише F5
процедура
поиска. После
этого активируется
окно INS и в него
выводится
следующая
информация:
это поля БД,
имеющие символьные
и числовые
данные с помощью
команды GET
с опцией,
запрещающей
редактирование.
Это поля фамилии
(FAM), табельного
номера (TAB),
телефона
(TEL), адреса
(YL,DOM,KW_RA), квадратных
метров (KV_M),
суммы начисленной
квартплаты
из БД, в которой
хранятся все
начисления,
и доступные
для редактирования
GET-поля количества
(KOL_VO), код и описание
льготы из БД
льгот, периода
действия льготы
(DAT_C,DAT_PO) и поля выбора
услуг, имеющие
логические
значения,
представленные
с помощью переменных:
kw (KW_L)-квартплата,
gw (G_W_L)-горячая вода,
xw (X_W_L)-холодная
вода, ks (K_YS_L)-коммунальные
услуги, ot
(OTOP_L)-отопление,
elc (EL_C_L)-електричество,
tl (TEL_L)-телефон, rd
(RAD_L)-радио, которые
затем выводятся
на экран с помощью
GET-объектов
(кнопки-переключатели).
А также другие
GET-объекты,
которые будут
рассмотренны
позже.
Далее идут
SAY-объекты,
это подписи
к GET-полям,
а также результаты
возвращаемые
функциями,
которые выводятся
с помощью выполнения
функции POS_CH1
(=POS_CH1( )) (см.прилож.
1.2 стр.3). разберем
только выводимые
значения,
возвращаемые
функциями.
Количество
жильцов –
выполняется
функция KOL
(прилож. 1.2 стр.
19), где путем
сканирования
формируется
переменная
k и возвращается
ее значение
(RETURN k), так как
эта переменная
числового
типа, а команда
SAY выводит
только символьный
тип данных, то
необходимо
преобразовать
числовой тип
в символьный
и убрать первые
пробелы, что
позволяет
следующие
команды:
LTRIM(STR(KOL(0))), где
KOL(0) – полученное
значение, STR
– функция
преобразования
числовых данных
в символьные,
LTRIM – удаление
ведущих пробелов.
Количество
льготников
– аналогичная
функция, описанная
выше только
считает жильцов,
если поле LGOT
имеет значение
истины (.Т.).
Ставки
по которым
производится
расчет для
данного жильца.
(см. прилож. 1.2
стр 16-17). Здесь
сначала проверяется
поле ставок
БД ставок, так
как связь одна
ко многим то
при перемещении
курсора в основной
базе он перемещается
во всех вспомогательных
базах и если
поле в БД равно
нулю, то параметру,
который является
результатом
работы функции,
присваивается
значения нормативной
ставки, иначе
значения этого
поля. Затем в
команде SAY
тип возвращаемого
результата
преобразуется
в символьную
форму и после
вывода их на
экран они
накрываются
невидимыми
кнопками.
Числовые
поля из БД
начислений.
Здесь эти данные
просто преобразуются
в нужный формат
и выводятся
на экран.
И в этой же процедуре
раскрашиваются
области внутри
окна, для их
более выразительности
и выделения.
(@ … FILL TO …).
Также необходимость
заполнения
окна с помощью
выполнения
функции вызвано
тем, что информация
по каждому
жильцу является
не всегда одинаковой,
в окне предусмотрено
перемещение
по БД, а значит
и обновление
выводимой
информации.
Это достигается
с помощью этой
функции и опции
обновления
GET-объектов SHOW
<имя процедуры>,
которая входит
в команду READ,
которая будет
рассмотрена
ниже.
Вернемся
к окну. Как
уже описывалось
выше (глава 2
стр. 26) вся основная
информация
о жильце содержится
в первой части.
Рассмотрим
работу доступных
GET-объектов
в этой части.
Первый
GET-объект это
поле количества
проживающих
(@ 5,39 GET kol_vo),
при зтом как
бы для проверки
рядом выводится
SAY-объект
количества,
рассчитанный
программным
путем (см. выше).
Далее
SAY-объект
«СОСТАВ СЕМЬИ»
накрыт невидимой
кнопкой (@
6,27 GET family FUNCTION ‘*I ‘ VALID FAMILY( )
…).Невидимой
она называется
потому, что не
формируют
никаких текстовых
сообщений и
только выделяются
цветом, и при
нажатии клавиш
Ehter/Space могут
вызывать функцию
через опцию
VALID. Здесь
при нажатии
этих клавиш
происходит
процедура
FAMILY (прилож.
1.2 стр. 8) в которой
в переменные
заносятся
данные о текущем
TAG’e, и адресе,
устанавливается
фильтр доступа
к данным, имеющим
этот адрес и
активируется
меню, из полей
БД жильцов,
которое определено
ранее в файле-процедуре
MENI (прилож.
1.1) и пункты которого
состоят из
фамилии и двух
вспомогательных
полей, указывающих
на категорию
жильцов (плательщик,
льготник). Выбор
пункта этого
меню отобразит
в окне этого
жильца и обновится
информация
относительно
этого жильца,
также в зависимости
от категории
жильца переменной
_FILTR присваивается
значение 1-если
жилец является
плательщиком,
2- если льготник
и 3- если ни тот
ни другой (просто
проживающий).
Это нужно для
того, чтобы
при выполнении
процедуры
обновления
(SHOW) в зависимости
от значения
этой переменной,
будет установлен
соответствующий
TAG, влияющий
на предъявление
данных.
Далее
идут команды,
которые встречаются
в конце почти
всех процедур,
вызываемых
при работе с
этим окном. Это
следующие три
строчки-команды:
@
10,27 CLEAR TO 20,51
- стирается
область в окне,
где выводятся
данные о тарифных
ставках и
начислениях,
потому, что
начисления
могут отличаться
количеством
знаков и при
выводе новых
значений, есть
возможность
увидеть старые
значения, что
позволяет не
точно воспринимать
информацию.
=POS_CH1
– выводятся
SAY
объекты
и функции возвращают
результаты,
по тому жильцу,
который находится
в окне.
SHOW
GETS
– выполняется
процедура
tb_l,
которая
служит для
обновления
GET-объектов.
Следующая
группа GET-объектов
выводит поля
выбора услуг
с помощью
кнопок-перек-лючателей
(@ 10-17,2 GET
kw(gw,xw,ks,ot,elc,tl,rd) FUNCTION ‘*C <имя
услуги>
‘VALID KW( )(GW(),XW()…)).
Здесь переменные
и поля имеют
один и тот же
тип данных, а
именно логический
и в процедурах,
вызываемых
при выходе по
опции VALID просто
полю присваивается
значение переменной
(см. прилож. 1.2
стр. 17-18).
Чуть иначе
обстоит дела
с выбором телефона
и радио. Это
сделано для
того, что предполагается,
что в квартире
установлена
одна телефонная
и(или) одна
радиоточка,
поэтому если
в квартире
живут два или
более льготников,
которые пользуются
льготными
ставками на
эти услуги, то
при расчете
им обоим (или
более) будет
убавляться
плата по этим
услугам, что
в конечном
итого телефон
и(или) радио
будет бесплатно
или ЖКХ еще
будет доплачивать
за пользование
этими услугами,
что разумеется
недопустимо,
вот для этого
осуществляется
контроль выбора
услуг. По своему
содержанию
процедуры
одинаковы,
поэтому разберем
одну из них
(см. прилож. 1.2 стр.
18).
Итак при выборе
телефона (радио)
вызывается
процедура
TL1(RD1) в которую
передаются
три параметра:
1-OR_R (OR-в процедуре),
2-LGOT (LG-в процедуре),
которые имеют
значения полей
плательщика
(0,1) и льготы (.T.,.F.),
относительно
жильца которому
выбирают услугу,
3-RECNO( ) (R-в процедуре),
который имеет
значение номера
записи в БД
этого жильца
и 4-ORDER( ) (ORD-в процедуре),
который имеет
символьное
значение активного
индекса (TAG’a).
Далее в процедуре
в переменные
заносятся
значения адреса,
для включения
их в SCAN-условие,
а также,
только для
телефона, в
условие поиска,
где ищется
плательщик
и у него проверяется
поле телефона
и если оно пустое,
то предполагается,
что телефона
нет и выбрать
эту услугу
невозможно.
После
этого в структуре
DO CASE анализируются
переданные
параметры:
CASE
OR=1.AND.LG=.T. то есть
если это плательщик
и он также льготник.
В первой строке
активируется
TAG, при котором
доступны все
записи в БД,
затем сканируется
БД и у всех жильцов,
имеющих этот
адрес полю
выбора телефона(радио)
присваивается
значение «Ложь»
(.F.) и затем
этому жильцу
полю выбора
телефона(радио)
присваивается
значение «Истина»
(.Т.). то есть по
этому условию
плательщик
имеющий льготу
имеет преимущество
перед другими
жильцами, имеющими
льготу, по выбору
этих услуг.
CASE
OR=1.AND.LG=.F. то есть
если это плательщик,
не имеющий
льготу. Здесь
просто полю
выбора телефона(радио)
присваивается
значение «Истина».
CASE
OR=0.AND.LG=.T. то есть
если это не
плательщик,
а льготник. В
этом случае
сканируются
записи, имеющие
этот адрес и
льготу, и если
у кого-либо
поле выбора
телефона(радио)
имеет значение
«истины», то
переменной
TL(GET-объект)
присваивается
значение «Ложь»
и после завершения
сканирования
значение переменной
присваисвается
полю выбора
телефона(радио).
Следующие
GET-объекты, это
группа невидимых
кнопок, которые
накрывают
области, где
выводятся
значения стоимости
услуг (@
10,28 GET tar_s FUNCTION ‘*I ;;;;;;;’ VALID TARIFS( )…),
при выборе
которых выполняется
процедура
TARIFS (см. прилож.
1.2 стр. 11, прилож.
2 рис. 3), где можно
выбрать тарифную
ставку для
услуги на которой
был сделан
выбор, из имеющихся
в БД тарифов
или если нет,
то добавить.
При этом можно
установить
эту ставку
всем жильцам
дома, или можно
установить
норматив по
этой услуге
жильцу или
всему дому.
Работа, в окне
и с меню во многом
схожа с работой
описанной
ранее, при описании
«СЕРВИС»-«Тарифы».
Рассмотрим
отличия.
В первых строках
определяется
окно и меню
для работы
процедуры.
Далее
с помощью структуры
DO CASE определяется
на какой услуге
был сделан
выбор, и в зависимости
от этого устанавливается
ограничение
на предъявление
данных, например
если это горячая
вода, то появятся
тарифы, имеющие
значение
.Т. поля K_CH,
(расчет на одного
человека) и
наоборот, переменной
VIB_STAVOK присваивается
имя поля в БД
ставок, для
того, что в
дальнейшем
с помощью
макроподстановки
(&VIB_STAVOK) этим
полям будут
присвоены
соответствующие
значения. И
после этого
активируется
окно и меню для
выбора ставки
по этой услуге,
при этом в правом
углу появляется
системное
окно-подсказка,
с помощью команды
WAIT, с текстом
выбранной
услугой.
Пункт
«Выбрать»
предъявляет
POPUP-меню с
BAR-пунктами,
состоящими
из полей БД
тарифов, и при
выборе любого
пункта появляется
меню с выбором
установить
всем жильцам
дома или квартиры.
После этого
в процедуре
V_ST1 куда
передаются
параметры
номера BAR-пункта
(BAR( )) и номера
текущей записи
в БД (RECNO( )) (см.
прилож. 1.2 стр.14-15).
Здесь в структуре
DO CASE определяется
номер выбранного
BAR-пункта
и для всех жильцов
дома (параметр=1(«Установить
всем жильцам
дома») или для
данных жильцов
квартиры (параметр=2
«Установить
данному жильцу»),
в скан- условии,
полям БД ставок
этих жильцов
по выбранной
услуге присваивается
значения, которые
имеются в поле
ST_KA в БД тарифов
(REPLACE
&VIB_STAVOK
WITH ST,
где VIB_STAVOK-это
имя поля в БД
ставок (см. выше)
ST-ставка из
поля ST_KA в
БД тарифов
(ST=ST_KA))
Здесь
также добавлен
повый пункт
меню «Установить
норматив», при
выборе которого
появляется
POPUP-меню с
двумя BAR-пунктами
«Установить
всем жильцам
дома» и «Установить
данному жильцу»
выбор этих
пунктов осуществляется
в процедуре
V_ST2 куда
передаются
параметры
номера BAR-пункта
(BAR( )) (см.
прилож. 1.2 стр.15).
Здесь в структуре
DO CASE определяется
номер выбранного
BAR-пункта
и для всех жильцов
дома (параметр=1(«Установить
всем жильцам
дома») или для
данных жильцов
квартиры (параметр=2
«Установить
данному жильцу»),
в скан- условии,
полям БД ставок
этих жильцов
по выбранной
услуге присваивается
нулевые значения.
Кнопка «По
льготе» – открывает
окно (см. прилож.
2 рис 5), в котором
с помощью команды
@…SAY…GET, выводятся
поля из базы
льгот, по тому
коду, который
имеет данный
жилец, доступные
для редактирования.
(см. прилож. 1.2
стр. 9).
Кнопка «По
оплате» – открывает
окно (см. прилож.
2 стр. 6), в котором
с помощью команды
@…SAY…GET, выводятся
поля из базы
ставок для
данного жильца,
доступные для
редактирования
(см. прилож. 1.2
стр.10). при этом
после закрытия
этого окна или
после выхода
из последнего
(первого) GET-объекта
все значения
полей заносятся
в переменные,
появляется
это же окно с
информацией
о количестве
квартир в доме,
по адресу которому
живет плательщик,
и с помощью
команды WAIT
будет предложено
установить
такие ставки
всем жильцам
дома (WAIT
‘Установить
всем жильцам
(Y/N)’
TO Y
) и если
будет нажата
клавиша Y
(Н), то с помощью
фильтра и
сканирования
эти ставки
будут присвоены
всем жильцам,
проживающих
по этой улице
и дому, иначе
только жильцам
данной квартиры.
Это достигается
с помощью команды
REPLACE <имя поля>
WITH <имя переменной>,
так как связь
одна ко многим,
то перемещения
указателя в
основной БД
вызывает перемещение
во вспомогательной.
В части
второй этого
окна расположены
триггерные
кнопки (Push
Buttons), которые
при их выборе
выполняют
определенные
действия по
обработке
данных.
«Изменить»,
«Добавить»
- запускает
процедуру
изменения для
жильца находящегося
в окне, или
процедуру
дополнения
нового жильца,
которая описана
выше (см. «СЕРВИС»-«Добавить»
стр. 36).
«Удалить»
– запускает
процедуру
удаления текущей
записи (см.
прилож. 1.2 стр.35)
здесь вначале
проверяется
помечена ли
запись на удаление
и если помечена
то пометка
снимается и
процедура
заканчивается.
Это нужно для
того, что в окнах
«База жильцов»,
«Картотека
льготников»
также можно
удалять записи
комбинацией
клавиш ,
и этой же комбинацией
клавиш снимать
пометку на
удаление. Далее
идет команда
переноса переменных
в БД, если вызов
этой процедуры
пришел из функции
изменения,
затем в переменные
заносится
текущий адрес,
устанавливается
фильтр по этому
адресу и в
переменную
kol заносится
количество
записей (COUNT
TO kol), после этого
переменная
kol уменьшается
на одну единицу,
полученный
результат
присваивается
всем записям
по полю количества
жильцов, затем
эта запись
помечается
на удаление,
и если вызов
был с окна INS
(«Работа с
картотекой»),
то информация
и GET-объекты в
этом окне
обновляются.
«Печать
…» – формирует
квитанцию, с
данными о всех
произведенных
начислениях,
суммах к оплате,
по льготам,
дату когда
оплачено и
остаток
(задолженность).выбор
этой кнопки
запускает
процедуру
PRINT1 (см. прилож.
1.2 стр. 26; прилож.
3 стр. 1; прилож.
2 рис. 7 ), в
которой выполняются
следующие
действия:
сначала переопределяется
назначение
клавиши F1,
затем открывается
альтернативный
файл, в который
будут заноситься
формируемые
данные и в
последующем
он будет сохранен
на диске для
его распечатки.
В переменную
«Т» заносится
будущее имя
файла (‘tab’+’.’+’txt’=tab.txt),
затем объявляются
два массива
NACH(12,1)-для данных
по начислениям,
LG(9)-для данных
по льготным
начислениям.
После этого
в сканируется
БД с условием
только жильцов
с одинаковым
адресом и в
переменные
и элементы
массивов заносятся
необходимые
данные, которые
будут занесены
в файл с помощью
команды «?»,
«??». после окончания
формирования
квитанции этот
файл будет
открыт в окне
VEDOM для его
просмотра
(редактирования)
(см. прилож. 2
рис. 7).и после
его закрытия
будет предложено
распечатать
или отказаться
(см. прилож. 2
рис. 8)
Вначале переопределяется
назначение
на клавишу
помощи, затем
определяется
окно для работы,
затем анализируется
жилец, на котором
был вызов этой
процедуры и
если это не
плательщик,
то ищется плательщик
квартиры и
указатель
записи переходит
на эту запись,
и работа будет
производится
с этим жильцом.
Затем определяются
переменные
для работы это
адрес (y,d,kv),
текущая дата
(dat), переменная
для хранения
веденой суммы
(opl), погсле
этого активируется
окно (см. прилож.
2 рис.4) и в него
выводятся
поясняющие
записи такие
как фамилия,
табельный
номер, сумма
начислений,
сумма по льготам,
сумма к оплате,
остаток и GET-поле
для ввода суммы
оплаты, которая
имеет контроль
выхода (см.
прилож. 1.2 стр.
40) здесь проверяется
поле OPL_TA , содержащая
сумму оплаты
жильцами и
если она не
пуста, то появится
дополнительное
окно с пунктами-кнопками
«Дописать»,
«Переписать».
Выход с сохранением
осуществляется
выбором кнопки
в этом
окне, которая
описана в процедуре
SV3 (см. прилож.
1.2 стр. 40).
д
«Плательщики»
«Льготники»
«Все
жильцы»
анные кнопки
предназначены
для выбора
фильтра предъявления
данных в окне.
Их выбор обрабатывается
в процедуре
FILTR (см. прилож.
1.2 стр. 7), где
переменной
_FILTR присваиваются
числовые значения,
в зависимости
от которых в
процедуре
обновления
будет установлен
соответствующий
TAG.
«Вверх»,
«Вниз»– данная
группа кнопок
предназначена
для перемещения
по БД жильцов.
При этом по
достижении
конца(начала)
БД соответствующие
кнопки блокируются..
Обработка этих
кнопок осуществляется
в процедуре
PER (см. прилож.
1.2 стр. 6-7) с помощью
переменных
«e» и
«b», которые
определены
ранее (см.выше),
запоминается
факт достижения
конца/начала
файла. Первоначально
они имеют значение
.F., если была
предпринита
попытка продвинуться
за пределы БД
то одной из
них присваивается
значение .Т..
В остальных
случаях они
равны .F.
это нужно для
восстановления
в процедуре
tb_l() активности
кнопок если
указатель
записей находиться
не на последней/первой
записи. Также
здесь используется
системная
переменная
_CUROBJ, которая
содержит номер
GET-объекта.
Ее значение
изменяется
при выборе
кнопки и курсор
переходит на
другой объект.
Она служит для
того, что бы
при перемещении
с помощью клавиш
Enter/Space курсор
не покидал эти
кнопки.
«Начало»,
«Конец» - служат
для быстрого
перехода в
начало/конец
БД, при этом
соответствующие
кнопки блокируются.
«Расчет»
- позволяет
рассчитать
квартплату
на одного жильца,
который находится
в окне.выбор
этой кнопки
вызывает процедуру
RAS_ON_ONE (см .прилож.
1.2 стр. 53). Здесь
определяются
переменные
для работы это
R-номер
текущей записи
в БД жильцов,
Т-табельный
номер, ORD_R-активный
TAG в БД жильцов,
Y- улица,
D-дом, K-квартира.
После этого
активной выбирается
БД начислений
и в ней, по табельному
номеру, ищется
запись, для
которой делается
расчет (LOCATE
FOR t=tab). Если поиск
не удачный, то
для БД жильцов
устанавливается
фильтр, при
котором доступны
только записи
с текущим адресом
и командой
APPEND FROM
<БД жильцов>
FIELDS
<список одинаковых
полей в БД жильцов
и БД начислений>
добавляются
записи в БД
начислений.
Если поик удачный,
то разрывается
связь между
базами, для
работы команды
обновления,
с помощью которой
одинаковые
поля в БД начислений
принимают
значения такие
какие в БД жильцов:
UPDATE ON
<ключевое
поле> FROM
<область БД
жильцов>
REPLACE
<поле БД начислений>
WITH
<поле БД жильцов>.
Далее текущей
выбирается
БД начислений
и для нее устанавливается
связь ОДНА-КО-МНОГИМ
с БД ставок и
БД льгот, а также
фильтр для
обработке
данных имеющим
только адрес,
который ранее
был сохранен
в переменных.
Далее обнуляются
все поля начислений
по льготам, это
сделано для
того, что если
в окне изменен
период или
льгота отменена,
то при расчете
льгот эта запись
игнорируется,
но старые данные
расчета сохраняются
и чтобы этого
не допустить
они обнуляются.
После этого
в SCAN-цикле
рассчитывается
квартплата,
с помощью команды
REPLACE <поле>
WITH <выражение>,
то есть <полю>
присваивается
значение <выражения>.
Здесь в выражении
используется
расчет (REPLACE
kw_pl WITH
IIF(g.kwp_l=0, kv_pl,
g.kwp_l)*IIF(kw_l=.t.,kv_m,
0)..).
Функция
IIF(<условие>,<выражение1>,<выражение2>)
– выдает значение
<выражение1>,
если <условие>
истинно, и
<выражение2>
- если ложно. В
нашем случае
первый множитель
– это ставка,
и если поле
ставки для
этого жильца
равно нулю, то
применяется
нормативная
ставка, если
же оно имеет
значение, то
применяется
эта ставка.
Второй множитель
определяет
выбор этой
услуги, если
поле фиксирующие
выбор услуги
равен .Т., то есть
она выбрана
для начислений,
то умножение
идет на квадратные
метры(количество
человек), иначе
на 0.
После расчета
квартплаты
рассчитываются
льготы. Здесь
в SCAN-цикле
предусмотрено
условие при
котором в расчет
попадают только
те жильцы, у
которых либо
не имеется
периода действия
льготы, либо
текущая дата
лежит в промежутке
между началом
и концом действия
льготы. Расчет
аналогичный
описанному
выше, различие
только в том,
что если по
услуге расчет
идет по квадратным
метрам, то но
высчитывается
на одного человека
(kv_m/kol_vo), и все
значения умножаются
на (-1), чтобы показать
льготы с отрицательным
знаком.
После окончания
расчетов суммируются
все начисления
по льготам и
заносятся в
поля жильца,
который платит
за квартиру,
для просмотра
их в окнах, и
расчета суммы
к оплате. Затем
разрываются
все связи, отменяются
фильтры, выполняется
процедура
открытия баз
данных (см.
прилож. 1.3 стр.
1), обновляются
данные в окне
и процедура
завершается.
И теперь
рассмотрим
процедуру
обновления
окна tb_l(),
которая включена
в команду READ,
с помощью опции
SHOW (см. прилож.
1.2 стр.5-6). Здесь
в нескольких
циклах DO CASE
анализируются
значения переменных,
которые в процессе
выполнения
принимают
различные
значения, и в
зависимости
от этих значений
выполняются
определенные
действия.
Анализ
переменной
_FILTR – имеет
числовое значение
и служит для
фильтра доступа
к данным при
их просмотре
и редактирования.
Значение 1 –
устанавливается
главным TAG
ord, при котором
доступны жильцы,
которые платят
за квартиру,
2 - – устанавливается
главным TAG
lgt, при котором
доступны жильцы,
которые имеют
льготу, 3 - –
устанавливается
главным TAG
adrr, при котором
доступны
все жильцы.
А также на экран
выводится
строка-подсказка
с выбранным
фильтром
Далее
анализируются
категория
жильца, и если
это плательщик
или льготник,
то кнопки для
выбора услуг
– доступны для
редактирования,
если просто
жилец то недоступны,
при этом кнопки
и область их
расположения
выделяются
цветом.
Далее
также анализируются
категория
жильца, если
льготник –
доступна кнопка
«По льготе»,
если плательщик
– доступна
кнопка «По
оплате» и не
доступны, если
это не выполняется.
Анализ выполняется
в двух циклах
по каждой кнопки,
для того, что
если плательщик
имеет льготу,
то ему доступны
обе кнопки.
Здесь также
при анализе
категории
плательщика
выводится
разная информация
по начислениям
льгот (см. прилож.
1.2 стр. 4). Это –
если плательщик
выполняется
процедура
OB_NACH, которая
выводит на
экран общие
(суммированные)
начисления
по льготам,
если это жилец
то выполняется
процедура
LG_NACH, которая
выводит на
экран начисления
по льготе для
данного жильца.
И последнее
это анализ
переменных
“e” и “b”,
которые служат
для блокирования
кнопок перемещений
по БД в процедурах
перемещений,
при попытке
выйти за пределы
БД, а здесь они
раз блокируются
при удовлетворяющем
значениии,
которые присваиваются
в процедурах
перемещений.
«КАДРЫ»-«Квартиросъемщики»
При выборе
этого пункта
выводятся
данные из БД
жильцов в табличной
форме с помощью
команды BROWSE.
Записи выводятся
горизонтально
в окне определенном
ранее. Формат
полей может
настраиваться
с помощью опции
FIELDS <список
полей>, а
также иметь
так называемые
вычисляемые
поля. Эти поля
фактически
не являются
полями БД, но
могут быть их
функциями и
отображаются
на экране наравне
с настоящими
полями.
В данной процедуре
KDR_R (см. прилож.
1.4 стр. 1) в окне
KD открывается
BROWSE-окно с
полями табельного
номера (tab),
фамилии (fam), вычисляемым
полем со значком
‘’,
который появляется
у жильца, который
является плательщиком
и вычисляемым
полем со значком
‘’,
который появляется
у жильцов, имеющих
льготу – эти
поля являются
функциями от
фактических
полей, выполняемые
с помощью функции
IIF(<условие>,<выр1>,<выр2>).
Предъявление
данных часть
экрана, а на
свободной
части, выводятся
на экран информация
с помощью команд
@…SAY…GET остальная
интересующая
информация
(см. прилож. 2
рис. 9), которая
формируется
в процедуре
NACH (см. прилож.
1.2 стр. 37) , при этом
если при перемещении
по БД курсор
находится в
поле табельного
номера, то эта
информация
автоматически
обновляется
в зависимости
от активной
записи БД, во
всех других
полях эту информацию
необходимо
выбрать из
меню, которое
появляется
после нажатия
клавиши Enter
в любом поле.
Эти действия
достигаются
путем включения
в имена полей
ключей, которые
выполняют
контроль входа
(:W), контроль
выхода (:V),
а также проверку
постоянно (:F)
здесь:
Для поля табельного
номера с помощью
ключа -
:W=NACH() установлен
входной контроль,
при котором
обязательно
- :F выполняется
процедура
вывода информации
по жильцу
(выполняется
процедура NACH
).
Для остальных
полей контроль
входа - :W=EN(),
которая назначает
на выбор клавиши
Enter выполнение
процедуры
POP_VIB и при
выходе из поля
- :V=NE() это назначение
отменяется
(см. прилож.
1.2 стр. 38), при чем
это выполняется
всегда - :F.
Выполнение
процедуры
POP_VIB предъявляет
FOX-меню (см.
отличия в описании
меню), которое
показано на
рис. 10 прилож.
2 и описано в
прилож. 1.2 стр.
39. Рассмотрим
ее.
Сначала объявляется
массив, элементы
которого и
будут пунктами
меню, затем
каждому элементу
присваивается
символьный
тип с описанием
названия, которое
будет отображаться
в меню. Далее
с помощью команды
READ оно активируется.
После выбора
из меню выполняется
действие закрепленное
за каждым пунктом
в цикле DO
CASE и оно «умирает».
Все пункты меню
рассматривались
выше.
«КАДРЫ»-«Картотека
льготников»
Выбор
зтого пункта
также вызывает
BROWSE-окно,
открытое в окне
KD1, которое
открывается
на весь экран,
кроме двух
последних
строк, и предъявляет
тех жильцов,
которые имеют
льготу (BROWSE
FOR LGOT=.T.)
Здесь выводятся
поля фамилии,
табельного
номера, адреса,
телефона, периода
действия льготы,
категории и
номера удостоверения.
При входе в
поле выполняется
процедура INFO
(см. прилож.
1.2 стр. 41) с помощью
ключей - :W=INFO()
и - :F. Эта
процедура
выводит в нижних
строках следующую
информацию:
если это плательщик,
то суммы к оплате,
остатка, количество
льготников
и количество
жильцов, иначе
фамилию и табельный
номер того
жильца, кто
является
плательщиком.
«КАДРЫ»-«База
жильцов»
Работа
процедуры, при
выборе этого
пункта аналогична
описанной выше,
только предъявляются
все жильцы.
«КАДРЫ»-«Ввод
данных счетчика»
Открывает
в окне KD1
BROWSE-окно с плательщиками
и полями табельного
номера, фамилии,
адреса, данными
о старом и новом
значениях
счетчика и
полем суммы
начисленной
за пользование
электроэнергией
из БД начислений
(см. прилож. 1.4
стр. 3). Поля данных
счетчика доступны
к редактированию,
остальные
открыты только
для просмотра,
что достигается
включением
в имена полей
ключа - :R. Также
все поля имеют
входной контроль
- :W=INFO(), который
описан выше,
а поля данных
счетчика и
выходной контроль
- :V=R() (см. прилож.
1.2 стр. 42), где при
выходе рассчитывается
сумма к оплате
за электроэнергию
и корректируется
итоговые суммы.
«КАДРЫ»-«Ввод
оплаты»
здесь
в начале определяются
две переменные,
которые нужны
для работы, это
dat, которая
содержит текущую
дату (dat=DATE()) и
opl, которая
имеет нулевое
значение и
служит для
того, чтобы в
программе не
было ошибки
при обновлении
полей, потому
что используется
одна процедура
обновления
полей с процедурой
для ввода оплаты
для одного
жильца. Затем
открывается
в окне KD1
BROWSE-окно, в котором
предъявляются
поля из разных
баз, это табельный
номер, фамилия,
поле для хранения
суммы оплаты
(OPL_TA), поле для
хранения даты
оплаты (D_OPL),
и поле для хранения
остатка(задолженности)
(OST_K) из БД
жильцов и поле
итоговой суммы
начислений
(ITOG_N), итога
начислений
по льготам
(SUM_IT) и суммы
к оплате (ITOG)
из БД начислений.
(см. прилож. 1.4
стр. 3-4, прилож.
2 рис. 12). Доступные
к редактированию
является поле
суммы оплаты
которое имеет
выходной контроль
- :V=SV3() (см. прилож.
1.2 стр.40) , в которой
полю остатка
присваивается
рассчитанное
значение (введенная
сумма – сумма
к оплате), полю
даты значение
переменной
dat, то есть
текущая дата
и здесь не
используется
ключ - :F, это
значит, что
если в поле,
для которого
предусмотрен
контроль выхода
(opl - :V=SV3), данные
не изменялись
то процедура
игнорируется,
а выполняется
она только в
том случае если
данные изменялись.
Также здесь
используется
другая информация
в статус-строке
:W=INFO3() (см. прилож.
1.2 стр. 42), где
показывается
адрес жильца,
количество
проживающих
и количество
льготников.
Пункт
меню «РАСЧЕТ»
«РАСЧЕТ»-«Расчет
квартплаты»
При
выборе этого
пункта появляется
окно, где нужно
подтвердить
начало расчета
выбором кнопки
«Ок» (см. прилож.
1.6 стр.1). В окне
выводится
текущая дата
и строка подсказка
за какой месяц
будет рассчитываться
квартплата.
Название месяца
достигается
с помощью массива
и переменной
mess, которые
объявлены в
файле MENI.PRG это
массив mes(4,3),
элементы которого
содержат названия
месяца и переменная
mess содержит
номер текущего
месяца (=MONTH(DATE()))
и выражение
mes(mess) – выведет
элемент массива
по номеру, который
содержится
в переменной
mess.
Аналогичные
окна появляются
при выборе всех
пунктов этого
меню и далее
я не буду их
описывать.
При
подтверждении
расчета выполняется
процедура RAS_1
(см. прилож.
1.2 стр. 43-44). В первых
строках деактивируется
окно, выбирается
активной БД
начислений
и из нее удаляются
все записи
командой ZAP,
затем командой
APPEND FROM <БД
жильцов>
FIELDS <список
полей>
добавляются
все записи из
БД жильцов.
После этого
все БД закрываются
(CLOSE DATABASE) и в
области «а»
открывается
БД жильцов, для
которой устанавливается
фильтр по полю
OR_R то есть
доступны только
плательщики,
в области «b»
открывается
БД начислений.
После этого
командой JOIN
WITH <область>
TO <имя новой
БД> FOR <условие>FIELDS <список
полей>, создается
новая БД-RACH.DBF
содержащая
поля, которые
перечислены
после опции
FIELDS и количеством
равным в БД
жильцов, что
выполняется
с помощью условия.
Другими словами
новая БД расчета
содержит только
плательщиков,
с полями необходимыми
для проведения
расчета и хранения
рассчитанных
данных.
Далее
снова закрываются
все базы данных
и в области «а»
уже открывается
новая БД расчетов,
для которой
создается
структурный
индекс для
связи с другими
БД. Затем устанавливается
связь с БД жильцов
и БД ставок и
производится
расчет, который
аналогичен
описанному,
при рассмотрении
кнопки «Расчет»
в окне «Работа
с картотекой»
(«КАДРЫ»-«Работа
с картотекой»).
После завершения
расчета, с помощью
команды CALCULATE
SUM(поле в котором
храняться
данные расчета)
ТО <переменные
в которые заносится
результат
работы команды>
создаются
переменные
со значениями
общих сумм
начислений
для каждой
услуге, для
формирования
статус-строки
при просмотре
выполненного
расчета. Далее
с помощью команды
@ …SAY они
(переменные)
выводятся в
нижней части
экрана и в окне
KDR открывается
BROWSE-окно с данными
расчета и фамилией
жильцов.
С помощью
ключа входа
в поле - :W=INFO1()
внизу изменяет
цвет сумма,
которая относится
к данной услуге
(к примеру если
курсор в поле
горячая вода,
то внизу окрашена
область с общей
сумме по горячей
воде, как показано
на рис. 14 прилож.
2), а с помощью
контроля выхода
- :V=INFO2() цвет
принимает
прежний цвет
и с помощью
ключа - :F
выполняется
всегда, независимо
от изменения,
это в основном
нужно для ключа
:V.
Работа
этой процедуры
показана на
стр. 51 прилож.
1.2. здесь в структуре
DO CASE анализируется
в какое поле
входит курсор
(INFO1), и из какого
выходит (INFO2)
это достигается
с помощью применения
функции VARREAD()-которая
возвращает
прописными
буквами имя
поля(переменной),
а с использованием
с командой
BROWSE/CHANGE возвращает
имя поля строчными
(кроме первой)
буквами (см.
также SYS(18)),
и в зависимости
от названия
поля при входе,
окрашивается
определенная
область внизу
экрана, с помощью
команды @…FILL
TO … и цветовой
схемы 12, а при
выходе с помощью
этих же команд
этой области
возвращается
прежний цвет
из цветовой
схемы 1.
Перед
открытием окна
просмотра по
начислениям,
назначаются
на клавиши
выхода из
BROWSE-окна,
процедуры
выхода (ON KEY
LABEL ESC(CTRL+W,CTRL+Q) DO vib8), где
активируется
окно с кнопками
«Сохранить»
и «Отмена» (см.
прилож. 1.2 стр.
45) и при выборе
кнопки «Сохранить»
открывается
БД начислений,
с помощью команды
- UPDATE <ключевое
поле> FROM <область>
REPLACE <поле активной
БД начислений>
WITH <поле
из указанной
области (БД
расчетов)>,
переносятся
рассчитанные
данные в БД
начислений.
После этого
выбирается
активной БД
расчетов, закрывается
и удаляется
с диска вместе
со структурным
индексом.
«РАСЧЕТ»-«Расчет
по льготам»
Все
действия, выполняемые
при выборе
этого пункта
аналогичны
как описано
выше в расчете
квартплаты
за исключением
некоторых
отличий, которые
не влияют на
суть расчета
описанного
выше (см. прилож.
1.2 стр. 46).
Здесь
имеющиеся
записи не удаляются
из БД начислений,
так как предпологается,
что расчет
льгот производится
после расчета
квартплаты
и все записи
находящиеся
в БД жильцов
имеются в БД
начислений
(это достигается
командой APPEND
FROM описанной
выше).
Также
используется
другой TAG при
создании новой
БД расчетов,
а именно TAG
date (см. прилож.
1.3 стр. 2) который
делает доступными
жильцов у которых
текущая дата
попадает в
промежуток
периода действия
льготы и тех
у кого период
не определен.
При
определении
связи новая
БД расчетов
также имеет
связь с БД льгот,
для применения
в расчете
установленные
проценты льготы
по кодам.
Расчет
льгот аналогичен
описанному,
при рассмотрению
расчета на
одного жильца
в окне «Работа
с картотекой»
кнопка «Расчет».
(см. прилож. 1.2
стр.53)
И так
как имена полей
имеют разные
имена, то для
окрашивания
общих сумм
внизу экрана,
при просмотре
расчетов, применяется
процедура для
входа – INFO4,
для выхода
– INFO5 (см. прилож.
1.2 стр. 52 и рис. 15
прилож. 2)
«РАСЧЕТ»-«Слияние
квартплаты
с льготами»
Так
как в программе
отдельно
насчитываются
начисления
по квартплате
и льготам, то
необходимо
определить
сумму к оплате,
для чего и служит
этот пункт.
После выбора
кнопки «Ок»,
в окне описанном
выше, выполняется
процедура RAS_3
(см. прилож.
1.2 стр. 49).
Здесь
после закрытия
всех баз данных
в области «а»
открывается
БД начислений,
в области «b»
БД жильцов,
затем объявляется
переменная
«m», для
хранения количества
записей в БД
(m=RECCOUNT()), что
необходимо
для выхода из
цикла. Далее
организовываются
четыре цикла,
из которых
только самый
внутренний
SCAN-цикл
осуществляет
перемещение
указателя
записей. Остальные
WHILE-циклы
контролируют
заданные условия,
инициализируют,
формируют и
заносят данные
в поля БД.
Первый
WHILE-цикл имеет
условие !EOF(),
то есть цикл
выполняется
до тех пор пока
не будет достигнут
конец БД. Для
этого служит
функция EOF(),
котороя принимает
значение .F.
при попытке
указателя
записи выйти
за предел последней
записи БД. Следующей
командой служит
определения
переменной
содержащей
имя улицы, для
работы следующего
WHILE-цикла.
Также
при расчете
для баз данных
применяются
TAG’и, которые
позволяют
предъявлять
записи в
систематизированном
виде по адресу,
что позволяет
использовать
WHILE-циклы,
а также SCAN-цикл
с включением
в него WHILE-условия.
Второй
WHILE-цикл
предъявляет
те записи у
которых улица
совпадает с
переменной
определенной
в первом WHILE-цикле,
то есть жильцов
с одинаковой
улицей, а также
здесь определяется
переменная,
содержащая
номер дома,
для работы
следующего
WHILE-цикла.
Третий
WHILE-цикл предъявляет
те записи, у
которых улица
и дом совпадают,
то есть жильцов
проживающих
в одном доме.
И здесь определяется
переменная,
содержащая
номер квартиры,
для работы
следующего
SCAN-цикла и переменные
помогающие
формировать
данные, числового
типа, которым
присваивается
значение 0.
Четвертый
SCAN-цикл обрабатывает
записи для
одной квартиры.
Внутри этого
цикла используются
команды управления
(IF…[ELSE]…ENDIF),
которые позволяют
от удовлетворяющих
условий присваивать
переменным
нужные значения
и затем переносить
их в поля БД.
Так в первой
команде выявляется,
является ли
жилец плательщиком
и при истинном
значении, переменной
it присваивается
значение итоговой
суммы по начислению
квартплаты,
переменной
r-номер
записи, для
занесения в
нее, после окончания
цикла, в поля
плательщика
нужных результатов.
Во второй команде
анализируются
льготники и
с помощью переменных
(определенных
в третьем цикле)
присваиваются
результаты
сумм начислений
по льготам.
После завершения
цикла по квартире
указатель
записей устанавливается
на следующую
запись, которая
запоминается
в переменной
n, затем
в переменную
os заносится
сумма к оплате,
командой GO
r указатель
переходит на
запись плательщика
и в поля для
этой записи
переносятся
полученные
результаты.
Затем активной
делается БД
жильцов и в ней
ищется эта
запись и в
зависимости
от условий
корректируются
поля по остатку
и оплате. Так
если оплата
не производилась
(поле OPL пусто),
то остаток
будет рассчитанная
сумма к оплате
с отрицательным
значением,
иначе результат
остатка, полученный
при вычитании
из внесенной
суммы начисления,
рассчитанной
суммы по оплате.
После этого
выбирается
снова БД начислений,
проверяется
условие, при
котором если
переменная
n (номер
следующей
записи) больше
переменной
m (количество
записей) то
выполняется
процедура
просмотра и
слияние расчетов
заканчивается,
иначе расчет
продолжается
для следующих
записей. Для
чего нужно это
условие?
Дело в том, что
для просмотра
и формирования
отчетов целеобразно
хранить все
данные, относящиеся
к начисленным
суммам по начислениям
квартплаты
и льготам в
записи одного
жильца, являющегося
плательщиком,
для чего в цикле
осуществляется
переход на эту
запись. А так
как при начале
цикла в первом
WHILE-цикле определено
условие окончания,
если переменная
!EOF() примет
значение .F.,
то при таком
подходе (возврате
на нужную запись
в процессе
цикла) эта переменная
никогда не
примет этого
значения, так
как она изменяет
свое значение
не тогда когда
указатель
записи находится
на последней
записи, а когда
указатель
записи попытается
выйти за пределы
последней
записи, вот для
прекращения
цикла и используется
это условие.
А именно: переменная
m хранит
число всех
записей а n
хранит номер
последней
записи. И если
n будет
больше m,
то это
значит, что все
записи рассчитаны.
Единственным
недостатком
(по моему мнению)
такого подхода
является то,
что переменная
m ранит
все записи,
включая записи
помеченные
на удаление,
и в зтом случае
расчет для
последней
записи производится
столько раз,
сколько в БД
записей на
удаление, что
не влияет на
результат, а
только на скорость
обработки, но
это ограничение
не касается
моего расчета,
по той причине,
что записи
помечаются
только в БД
жильцов, а в БД
начислений
их не существует,
так как БД начислений
формируется
из БД жильцов,
для которой
определено
игнорирование
записей на
удаление (SET
DELETE ON).
И последняя
команда, которая
выполняется
при истинном
условии описанном
выше, это просмотр
расчетов. Он
осуществляется
с помощью команды
BROWSE (см.
прилож. 2 рис.
16) со следующими
полями: фамилия,
табельный номер
из БД жильцов
и результаты
начислений
по квартплате,
льготам и сумме
к оплате из БД
начислений,
также используются
три вычисляемых
поля. Это поле-функция
от полей, со
значком «»,показывающая
жильцов, имеющих
льготу и поля
со значками:
«+», «=»,показывающих
суть расчета.
В нижней части
в статус-строке
показывается
адрес жильца,
количество
проживающих
и льготников
(см. прилож. 1.2
стр. 42). А также
здесь переменной
_PAD_OTCH, присваивается
значение .Т.,
которая позволяет
формировать
отчеты по выполненным
данным.
Функция
ПОИСКА
На этом
пункты меню
по работе с
данными заканчиваются
и сейчас рассмотрим
функцию поиска,
которая выполняется
во всех процедурах,
предназначенных
для обработки
и просмотра
данных. Эта
процедура
закреплена
за клавишей
F5, а в окне,
которое вызывается
при выборе
«КАДРЫ»-«Квартиросъемщики»,
закреплена
за пунктом в
Fox-меню «Поиск».
Для выполнения
этой функции
используется:
меню,
с пунктами
определяющим
по каким значениям
будет производиться
поиск (по фамилии,
по табельному
номеру, по адресу
и отмена поиска),
которое определено
в файле MENI.PRG
(см. прилож.
1.1 стр. 4).
Окно
для задания
критерия поиска,
с помощью команды
@…GET и переменной
«а», имеющей
тип, в зависимости
от выбора пункта
меню. Окно также
определено
в начальном
файле (см. прилож.
1.1 стр. 2).
А также
используются
разные процедуры.
Для поиска по
фамилии и табельному
номеру – POISK,
по адресу –
PO_ADR. Это сделано
для того, чтобы
при поиске по
адресу возможно
оставлять
пустыми значения
номера дома
и(или) квартиры.
Выполнение
функции поиска
построена таким
образом, что
при нажатии
клавиши (пункта
меню) активируется
меню поиска
(ON KEY LABEL
F5 ACTIVATE POPUP POISK (ACTIVATE POPUP POISK))
, где нужно
выбрать необходимый
пункт, как показано
на рис. 13 прилож.
2, где при работе
с картотекой
льготников
нажата клавиша
F5 и выбран
пункт «По адресу».
Для пунктов
меню POISK’a
командой ON
SELECTION BAR определено
выполнение
процедуры
POISK (см. прилож.
1.2 стр. 24)
Здесь
в переменной
_REC запоминается
номер текущей
записи, для
возврата при
неудачном
поиске. Далее
в структуре
DO CASE анализируется
выбранный
пункт.
Если
PROMPT()=’По
фамилии’(‘По
табелю’),
то главным
выбирается
TAG fam (tab), для
поиска с помощью
команды SEEK(),
в команде @…GET
определяется
переменная
«а» имеющая
символьный
тип (DEFAULT SPASE(25)) а
для табеля
числовой тип
из четырех
знаков (PICTURE
‘9999’), предъявляется
окно POISK в
котором расположено
поле GET для
занесения
ключа поиска.
После ввода
искомого значения
из него удаляются
возможные
пробелы (ALLTRIM(a))
для поиска
по фамилии,
что позволяет
вести поиск
и по не полному
ключу (фамилии).
Также значение
переменной
«а» запоминается
в переменной
«d», а для
табельного
номера переменная
«а» преобразуется
в символьный
тип (d=STR(a,4)),
которая нужна
для включения
ключа поиска
в сообщение
WAIT о неудачном
поиске. Сам
поиск осуществляется
после окончания
команды DO
CASE в команде
IF…ENDIF - IF
BAR()#4.AND.!EMPTY(a).AND.!SEEK(a)
– если пункт
не отмена и
если переменная
«а» не пуста
и поиск неудачный,
то выводится
системное окно
с помощью команды
WAIT–WAIT
‘Поиск’+PROMPT+’:’+d+’
НЕУДАЧНЫЙ’
WINDOW – которое
показано на
рисунке:
К
Поиск
По фамилии:
Васин НЕУДАЧНЫЙ
оторое
затем удаляется
нажатием любой
клавиши, и указатель
записей возвращается
на (GO _REC) старое
место. Потом
происходит
возврат в команду
из которой был
вызов. Если в
результате
поиска была
найдена нужная
запись, то в
команде BROWSE,
курсор будет
стоять на ней,
если в команде
READ, то будет
переход на эту
запись и обновление
информации
и GET-объектов
для этой записи.
Если
PROMPT()=’По адресу’,
то выполняется
процедура
PO_ADR (см. прилож.
1.2 стр. 25). Здесь
вначале определяется
меню, массив
и переменные
с помощью которых
в WHILE-цикле будут
формироваться
BAR-пункты
из названий
улиц. Затем
массив переопределяется
и его элементы
– это пункты
меню, которое
активируется
при входе в
поле для ввода
улицы и его
выбор осуществляется
в процедуре
YLIZ (см. прилож.
1.2 стр. 29), где переменной
m.yl присваивается
значение
параметра-mprompt.
(ON
SELECTION POPUP YL DO YLIZ WITH PROMPT()),
где передаваемый
параметр (PROMPT())
это название
BAR-пункта,
то есть название
улицы. Работа
с окном POISK
осуществляется
с помощью переменных
полей адреса,
которые создаются
с помощью команды
– SCATTER
FIELDS yl, dom, kw_ra MEMVAR BLANK. После
заполнения
полей и нажатии
клавиши Enter
(начать поиск)
в структуре
DO CASE анализируется
сколько полей
заполнено и
с помощью команды
LOCATE c FOR условием
ведется поиск.
Если он удачный
то осуществляется
переход на
найденную
запись, и если
это READ-окно
то информация
о жильце обновляется,
иначе указатель
записи возвращается
на прежнюю
запись.
Пункт
меню «ОТЧЕТЫ»
Подготовка
и оформление
отчетных данных
без сомнения
являются кульминацией
любого делового
приложения.
Так что стоит
приложить
усилия для
того, чтобы все
многообразие
данных, записанных
в БД приложения,
нашло достойное
отображение
в отчетах,
напечатанных
на принтере.
FoxPro
имеет мощные
средства построения
отчетов для
вывода данных
в желательном
для пользователя
виде на принтер,
экран или в
текстовый файл,
но в своей дипломной
работе я не
пользовался
этими средствами,
а попытался
программированием
вручную создать
нужные выводимые
данные. Это
связано с тем,
что я не преследовал
коммерческой
цели, создавая
приложение,
а также для
того, что бы
лучше освоить
язык программирования
и задействовать
как можно больше
команд и функций
FoxPro.
Все
отчеты формируемые
с помощью данных
баз построены
по одной схеме,
поэтому я разберу
одну из них
более подробно,
а в остальных
только кратко
дам описание.
«ОТЧЕТЫ»-«Списки
по начислению»
При выборе
этого пункта
формируется
отчет для каждого
жильца с суммами
начислений
по каждой услуге
и отдельно
начисления
по льготам,
показывается
сколько оплачено
и остаток если
остаток положительный,
то это сумму
необходимо
заплатить
плательщику
за пользование
услугами, если
отрицательный
то эта сумма
должна перейти
на следующий
месяц в счет
будующих платежей
за услуги. Также
в шапке по каждому
жильцу выводится
дата оплаты,
количество
проживающих,
из них количество
льготников,
занимаемая
площадь. (см.
прилож. 3 стр.1).
формирование
отчета выполняется
в процедуре
SP_NACH (см. прилож.
1.7 стр. 1). В первых
строках убирается
меню отчетов
с экрана (HIDE
POPUP VIEV), затем проверяется
значение переменной
_PAD_OTCH, она должна
иметь значение
«Истины» (.T.),
если ее значение
«Ложь» (.F.),
то значит выполнялась
процедура
«Дополнения\Изменения»
и появится
системное окно,
с просьбой
сделать слияния
расчетов. (см.
выше).
Затем переопределяется
клавиша F1
для открытия
в окне помощь
подсказку по
этой процедуре,
в переменную
«i» заносится
номер текущего
месяца (MONTH(DATE())),
для включения
его в имя файла,
чтобы в последующем
было легко
опознать данные
файла по его
имени. Например
в переменной
формируется
имя за март
месяц
(T=’NACH-’+ALLTRIM(STR(i)))+’.’+’txt’,
где «i» это
цифра три и в
результате
получится файл
NACH-3.TXT, что означает
отчет за март
(3) по начислениям
(NACH). Эта переменная
нужна чтобы
после завершения
формирования
отчета его, с
помощью макроподстановки
(EVALUATE(‘T’)или(&T))
, можно было
открыть в окне
для просмотра
и(или) редактирования.
Ниже определяется
это окно, оно
не определяется
заранее, для
того чтобы его
можно было
закрыть с помощью
мыши, щелкнув
в левом углу
по прямоугольнику
(Опции «SYSTEM
CLOSE»).
Далее с помощью
команды SET
ALTERNATE TO <имя файла>
создается
альтернативный
файл и командой
SET ALTERNATE ON он открывается
для внесения
в него данных,
одновременно
командой SET
CONSOLE OFF выдача на
экран формируемых
данных не
производится.
Формирование
отчета выполняется
с помощью циклов,
а так как некоторые
данные хранятся
только в полях
плательщика,
то используются
переменные
для хранения
данных которые
будут выводится
в файл и переменные
позволяющие
организовать
циклы это:
Определяются
два массива
и переменные
для вывода
данных в файл:
NACH(12,1)-для хранения
сумм начислений
по квартплате
каждой услуге,
итоговых сумм
и оплаты, LG(9)
– для хранения
сумм по начислениям
по льготам
каждой услуге,
PL- содержит
количество
жильцов, L
– количество
льготников,
FM-фамилия
плательщика,
OS-значение
поля-OST_K (остатка),
TB-табельный
номер плательщика,
KV_MET – значение
поля KV_M (квадратные
метры), DAT_OP –
значения поля
D_OPL (дата
оплаты).
В циклах определяются
переменные
для систематизированного
предъявления
данных:
Y-значение
поля YL (улицы),
D-значение
поля DOM (дома)
и K- значение
поля KW_RA (квартира).
В процедуре
используются
четыре цикла,
аналогичных
описанным в
процедуре
слияния квартплаты
с льготами. То
есть используются
четыре цикла,
где первый
WHILE-цикл определяет,
что циклы будут
работать пока
не будет попытки
выйти за последнюю
запись в БД (DO
WHILE !EOF()). Второй предъявляет
записи жильцов,
живущих на
одной улице
(DO WHILE y=yl). Третий
предъявляет
записи жильцов
(DO WHILE y=yl AND d=dom). И четвертый
SCAN-цикл предъявляет
жильцов одной
квартиры (SCAN
WHILE yl=y.and.dom=d.and.kw_ra=k), внутри
которого, с
помощью команды
управления
IF…ENDIF в зависимости
от категории
жильцов, переменным
присваиваются
соответствующие
значения, которые
затем с помощью
команды ?\??
[<выр1>[PICTURE<символы
шаблона
предъявления
данных>][FUNCTION<формат
выводимых
данных>]][АТ<номер
столбца, с которого
должен начинаться
вывод>][,<выр2>]…]
заполняют
открытый
альтернативный
файл.
После обработки
всех записей
БД вывод в
альтернативный
файл запрещается
(SET ALTERNATE OFF) и он
закрывается
(SET ALTERNATE TO). И созданный
файл открывается
в окне VEDOM для
просмотра(редактирования)
(MODIFY COMMAND EVALUATE(‘T’) WINDOW
vedom).
После закрытия
окна просмотра
отчета появляется
окно с предложением
отправить
документ на
печать. В случае
согласия (кнопка
«Да») опрашивается
готовность
принтера
(PRITSTATUS=.T.) и документ
распечатывается
(TYPE (T) TO PRINT) иначе
(кнопка «Нет»)
работа процедуры
заканчивается
и печать отчета
возможна из
пункта меню
«Печать».
«ОТЧЕТ»-«Списки
по льготам»
Формирует
отчет по льготникам
не зависимо
от периода
действия льготы
(см. прилож. 1.7
стр 3). Здесь
переменные
почти не используются,
в переменные
заносится
только фамилия
и табельный
номер плательщика
и переменные
для предъявления
данных в циклах.
Данные выводятся
с помощью полей
льготников
в БД жильцов
и БД начислений,
где хранятся
нужные данные.
Распечатка
отчета показана
в прилож. 3 стр.
4.
«ОТЧЕТ»-«Оплата
э\энергии»
Формируется
отчет по оплате
за электроэнергию,
исходя из данных
счетчика (см.
прилож 1.7 стр.5).
Здесь используются
переменные
только для
систематизированного
предъявления
данных в циклах.
Данные выводятся
из полей плательщиков,
так как льгота
по этой услуге
не предусмотрена.
Распечатка
показана в
прилож. 3 стр.
5.
«ОТЧЕТ»-«Сальдо
по квартиросъемщикам»
Формируется
отчет по плательщикам
с указанием
суммы начислений
по квартплате,
сумме к оплате
и суммы остатка
(см.прилож. 1.7
стр. 7). Здесь
также используются
переменные
только для
систематизированного
предъявления
данных в циклах.
Распечатка
показана в
прилож. 3 стр.
6.
«ОТЧЕТ»-«Свод
по квартплате
за месяц»
Формируется
отчет по общим
суммам всех
начислений
по каждой услуге
и итоговые
суммы за месяц
(см. прилож. 1.7
стр. 8). В этой
процедуре не
используются
циклы. Данные
получаются
с помощью команды
математической
обработки БД:
CALCULATE
[<границы>][WHILE<условие>][FOR<условие>]<список
выражений>[TO
<переменные>/TO
ARRAY <массив>]. Эта
команда позволяет
вести математические
расчеты в БД.
<Список
выражений>
может содержать
любую комбинацию
внутренних
для данной
команды функций,
которые также
выполняют
матаматическую
обработку
(AVG(<вырN>),
CNT(), MAX(<выр>), MIN(<выр>),
STD(<вырN>), SUM(<вырN>),
VAR(<вырN>), NPV(…)). Здесь
приведена
полный перечень
возможности
для данной
команды, а жирным
шрифтом выделены
опции, которые
используются
в процедуре.
Так первая
команда CALCULATE
подчитывает
общие начисления
по квартплате
(SUM<поле с
суммой начислений
квартплаты
по услуге>),
вторая общие
начисления
по льготам
(SUM<поле с
суммой начислений
льготы по услуге>)
и полученные
результаты
заносятся
в переменные.
Затем в переменные
заносятся
общие суммы
начислений
для получения
организацией
за предоставления
услуг квартиросъемщикам
за месяц. Они
рассчитывается
путем вычета
из общих начислений
квартплаты
по услугам
начисления
льгот по услугам
и полученные
результаты
выводятся в
файл. Распечатка
показана в
прилож. 3 стр.7).
Пункт
меню «ПЕЧАТЬ»
При выборе
данного пункта
активируется
POPUP-меню
описанное с
опцией PROMPT
FILES [LIKE<маска>]
– элементами
которого будут
названия файлов,
ограниченных
маской (DEFINE
POPUP prin_t FROM 1,31 PROMPT
FILES LIKE *-1.TXT см.прилож.
1.1 стр.3), которое
формирует меню
из имен файлов,
созданных при
выборе соответствующего
пункта «ОТЧЕТА»
и определение
реакции меню
выполняется
в процедуре
print3 (ON SELECTION
POPUP prin_t DO print3 WITH
PROMPT(),LASTKEY()), куда
передаются
два параметра
это-имя файла
(vv - PROMPT()) и
код нажатия
клавиши (lk
- LASTKEY()).
В процедуре
(см. прилож.
1.2 стр. 28) в структуре
DO CASE анализируются
переданные
параметры. Если
нажата клавиша
«Enter» (ВВОД),
то код 13 (CASE
lk=13) и осуществляется
вызов соответствующего
текстового
файла в окно
VEDOM для просмотра
с возможностью
редактирования
(MODIFY COMMAND (vv) WINDOW VEDOM).
Если нажата
клавиша «Spacebar»
(ПРОБЕЛ), тол
код 32 (CASE lk=32),
происходит
опрос готовности
принтера
(PRINTSTATUS()) и если
он готов, файл
печатается
(TYPE (vv) TO PRINT), если
нет – выдается
соответствующее
сообщение.
Ниже приводятся
мена файлов:
файл
NACH-xx.TXT «Списки
по начислению»
файл
LG_KW-xx.TXT «Списки
по льготам»
файл
ELC_V-xx.TXT «Списки
с показанием
счетчика»
файл
EL_PL-xx.TXT «Оплата
электроэнергии»
файл
SALDO-xx.TXT «Сальдо
по квартиросъемщикам»
файл
SVOD-xx.TXT «Свод
по квартплате
за месяц»
Где
хх – это
номер месяца,
за который
сформирован
отчет (см. прилож.
2 рис 1).
Пункт
меню «ПОМОЩЬ»
Все
файлы помощи
хранятся в базе
данных HELP.DBF,
которая имеет
только одно
MEMO-поле. И
по умолчанию
имеет восемь,
заполненных
информацией,
полей.
«ПОМОЩЬ»-«Помощь»
при
выборе этого
пункта командой
ON SELECTION … DO HELP WIHT 6 выполняется
процедура, в
которой в окне
открывается
текст подсказки
записанной
в 6-ой записи
MEMO-поля. Здесь
описывается
помощь по пунктам
меню. (см прилож.
2 рис. 21)
«ПОМОЩЬ»-«Справка»
при
выборе этого
пункта командой
ON SELECTION … DO HELP WIHT 3 выполняется
процедура, в
которой в окне
открывается
текст подсказки
записанной
в 3-ей записи
MEMO-поля. Здесь
описывается
общее назначение
и характеристика
приложения.
Работа
процедуры
помощи будет
рассмотрена
ниже.
Создание
контексно-зависимой
экранной подсказки.
Каждое
MEMO-поле в
БД помощи (HELP.DBF),
содержит
конкретное
описание помощи
по работе с
отдельными
окнами. В начале
работы программы,
когда баз данных
еще нет, описание
помощи хранится
в текстовых
файлах. И при
первом запуске
приложения,
с помощью языка
SQL (см.
прилож. 1.3 стр.
2), они создаются
и в БД помощи
последовательно
в MEMO-поля
переносятся
содержимое
текстовых
файлов (APPEND
MEMO HLP FROM HELP1.TXT).
Для
экрана помощи
определяется
окно также с
именем HELP, а
клавиша F1 и
два пункта
данного меню
закрепляются
за процедурой
с именем HELP,
в которую передается
один параметр
К (ON
KEY LABEL f1 DO help WITH k)
Этот
параметр в
дальнейшем
будет указывать
номер записи
в файле HELP.DBF,
где содержится
нужная подсказка.
В самой процедуре
(см. прилож. 1.2
стр. 21) осуществляется
перевод указателя
записей в области
I (в которой
открыта БД
помощи) на запись
номер К.
Здесь
же определяется
окно HELP, в которое
с помощью
команды MODIFY
MEMO I.HLP WINDOW HELP NOEDIT выводится
текст подсказки.
Чтобы исключить
случайную
возможность
порчи содержимого
HELP пользователем,
возможность
редактирования
исключена
опцией NOEDIT.
В процедурах
работы с приложением
вначале переопределяется
клавиша F1
для открытия
соответствующей
подсказки (ON
KEY LABEL f1 DO help WITH 1(2,4,5,7,8)),
а по завершении
работы с любым
окном клавише
F1 определяется
параметр 6 (…WITH
6). Это позволяет
из любого места
программы можно
вызвать свою
помощь нажатием
клавиши F1.
Доступ к нужной
записи в файле
помощи происходит
очень быстро,
поскольку ее
не приходиться
искать. Для
этого нужно
в соответствующих
местах программы
делать присвоения
переменной
К, то есть указывать
номер нужной
записи из файла
HELP.DBF. В процедурах,
где помощь не
предусмотрена,
переменной
К задается
значение 6, для
вывода общей
помощи по программе,
которая также
закреплена
за пунктом меню
«Помощь».
Пункт
меню «Выход»
Для
корректного
закрытия БД
и завершения
работы необходимо
проконтролировать
запросом попытку
пользователя
выйти из программы.
Данная функция
будет содержать
обычный запрос
на подтверждение
выхода, и при
положительном
ответе (кнопка
«Да») осуществит
закрытие всех
активных файлов
БД, сохранит
в файле M_ZAR.MEM
все переменные
начинающиеся
с символа «_»
(SAVE TO m_zar ALL LIKE _*). В
приложении
зти переменные
определены
как глобальные
и переменные
нормативных
ставок и после
этого происходит
выход из приложения
(QUIT). При выборе
кнопки «Нет»
происходит
возврат в приложение.
Процедура
выхода описана
в приложении
1.2 стр. 21.
III-й
раздел
ЗАКЛЮЧЕНИЕ
Заключение
В процессе
работы над
дипломным
проектом был
создан комплекс
программных
средств для
обеспечения
работы бухгалтера-расчетчика.
Кроме того была
разработана
концепция
проектирования
информационно
- справочных
систем с применением
функций экранного
интерфейса,
разработанных
в рамках дипломного
проекта. Применение
специализированных
функций позволило
сократить время
разработки
основного
модуля программы
и обеспечило
высвобождение
времени на
создание процедур
обработки
данных. В дипломном
проекте представлен
один из множества
подходов к
проектированию
программного
обеспечения
информационного
плана, дающий
возможность
на ранних этапах
разработки
учесть все
нюансы будущей
программы,
необходимый
набор функций,
состав и структуру
баз данных, что
в дальнейшем
исключает
необходимость
переработки
уже написанных
компонентов
программы.
Данный
дипломный
проект разрабатывался
не с коммерческой
целью, а с целью
показать возможности
СУБД FoxPro,
используя в
приложении
как можно больше
команд и функций
данной СУБД.
Поэтому работа
приложения
не предусматривает
сохранения
и просмотра
раннее сделанных
расчетов и
работа осуществляется
только с текущим
месяцем.
Хотя
принцип работы
приложения
и язык программирования
не исключают
и коммерческое
распространение.
Достаточно
лишь добавить
модули сохранения
данных при
переходе на
следующий месяц
и просмотра
из архивов этих
данных.
Список
используемой
литературы.
Попов
А.А «Создание
приложений
для FoxPro 2.5/2.6 в DOS
и WINDOWS.” – М.: Издательство
“ДЕСС”, 1999 г. –
672 стр.
Горев
А., Ахаян Р., Макашарипов
С. «Эффективная
работа с СУБД»
- СПб.: Питер, 1997.
–704 стр.: ил.
Горев
А. «Разработка
приложений
в Microsoft Visual FoxPro 3.0»
– М: Журнал «The
Printer FoxPro Letter» ТОО «Эдэль»,
1996 – 392 с.:ил.
Файлы
помощи при
работе с СУБД
FoxPro For DOS 2.6. – Microsoft (Fox
Software).
Процедурный
файл
FUNC.PRG
***********************************************************************************
** Функция
- Постоянная
часть (Работа
с картотекой)
**
***********************************************************************************
PROCEDURE
pos_ch
HIDE POPUP kadr
IF RECCOUNT()=0
ACTIVATE WINDOW vib
@ 1,10 SAY 'Б
а з а п у с т а'
@ 2,9 SAY 'Начните
с дополнения'
@ 0,0 FILL TO 8,43
COLOR W+/R
@ 5,3 GET ins1
FUNCTION '*TH Дополнить;Отмена'
valid ins2() defa 1 size 1,10,4;
COLOR
,,,,w+/n,w+/n,w+/n,,W+/R,
read cycle OBJECT 1
DEACTIVATE WINDOW
vib
ELSE
GO _REC
RELEASE
KW,GW,XW,KS,ELC,TL,RD,OT
ACTIVATE WINDOW ins
STORE .F. TO e,b
T=TAB
ON KEY LABEL F1 DO
HELP WITH 5
ON KEY LABEL F5
ACTIVATE POPUP POISK
@ 1,10 get fam
disable COLOR SCHEME 15
@ 2,10 get tab
disable COLOR SCHEME 15
@ 2,28 get tel
disable COLOR SCHEME 15
@ 3,10 get yl
disable COLOR SCHEME 15
@ 3,30 get dom
picture 'xxxx' disable COLOR SCHEME 15
@ 3,40 get kw_ra
picture 'xxxx' disable COLOR SCHEME 15
@ 4,10 get kv_m
picture '###.##' disable COLOR SCHEME 15
@ 5,39 get kol_vo
picture '99' COLOR SCHEME 12
@ 6,27 GET family
FUNCTION '*I ' VALID FAMILY() DEFA 1 SIZE 1,12
=POS_CH1()
kw=kw_l
gw=g_w_l
xw=x_w_l
ks=k_ys_l
ot=otop_l
elc=el_c_l
tl=tel_l
rd=rad_l
@ 10,2 GET kw
FUNCTION '*C Квартплата'
DEFAULT .F. VALID KW()
COLOR
SCHEME 16
@ 10,36 get c.kw_pl
PICTURE '####.##' disable color scheme 16
@ 11,2 GET gw
FUNCTION '*C Горячая вода'
VALID GW() defa .f.
COLOR
SCHEME 16
@ 11,36 get c.g_w
disable color scheme 16
@ 12,2 GET xw
FUNCTION '*C Холодная
вода' VALID XW() DEFA .F.
COLOR
SCHEME 16
@ 12,36 get c.x_w
disable color scheme 16
@ 13,2 GET ks
FUNCTION '*C Комунальные
услуги' VALID KS() DEFA .F. COLOR
SCHEME 16
@ 13,36 get c.k_ysl
disable color scheme 16
@ 14,2 GET ot
FUNCTION '*C Отопление'
VALID OT() DEFA .F.
COLOR
SCHEME 16
@ 14,36 get c.otopl
disable color scheme 16
@ 15,2 GET elc
FUNCTION '*C Электроэнергия'
VALID ELC() DEFA .F.COLOR SCHEME 16
@ 15,36 get c.el_c
disable color scheme 16
@ 16,2 GET tl
FUNCTION '*C Телефон' VALID
TL() DEFA .F. COLOR SCHEME 16
@ 16,36 get c.tel_r
disable color scheme 16
@ 17,2 GET rd
FUNCTION '*C Радио' VALID rd() DEFA .F.
COLOR
SCHEME 16
@ 17,36 get c.rad_r
disable color scheme 16
@ 10,28 GET tar_s
FUNCTION '*I ;;;;;;;' VALID TARIFS() DEFA 1;
COLOR
,,,,GR/BG,GR/BG,,,GR+/BG SIZE 1,7
@ 8,52 GET pros_lg
FUNCTION '*N []' VALID PROS_LG() DEFA 1;
COLOR
,,,,gr+/b,w+/n,r+/b,,W+/GR,w/w+
@ 21,1 GET d.n_lg
@ 21,3 GET d.info
COLOR ,R/G
@ 21,26 GET dat_c
COLOR ,B/G
@ 21,40 GET dat_po
COLOR ,B/G
@ 22,10 GET tabl_ras
FUNCTION '*N По льготам'
valid tab_rslg() DEFAULT 2;
COLOR
,,,,gr+/b,w+/n,r+/b,,W+/GR,w/w+
@ 22,25 GET
tabl_ras1 FUNCTION '*N По оплате'
valid tabl_rasop() DEFAULT 2;
COLOR
,,,,gr+/b,w+/n,r+/b,,W+/GR,w/w+
@ 16,59 GET PEREM
FUNCTION '*N Вверх;Вниз'
VALID PER() DEFA 1;
SIZE 1,8,1 COLOR
,,,,gr+/b,w+/n,r+/b,,W+/GR,w/w+
@ 10,65 GET FILTR
FUNCTION '*N Плательщики;Льготники;Все
жильцы ' valid filtr();
defa 3
@ 16,69 GET PEREM1
FUNCTION '*N Начало;Конец'
VALID PER1() DEFA 1;
SIZE 1,8,1 COLOR
,,,,gr+/b,w+/n,r+/b,,W+/GR,w/w+
@ 0,63 GET attrib
FUNCTION '*T Изменить;Добавить'
valid attr() defa 2;
COLOR
,,,,gr+/b,w+/n,r+/b,,W+/GR,w/w+ SIZE 2,14,1
@ 4,63 GET attrib1
FUNCTION '*N Удалить;Печать;Ввод
оплаты' valid attr1() defa 2;
COLOR
,,,,gr+/b,w+/n,r+/b,,W+/GR,w/w+ SIZE 2,14,1
@ 20,63 GET ALL_L
FUNCTION '*T Выйти;Расчет'valid
vib1_7() default 1;
size 2,10,1 COLOR
,,,,gr+/b,w+/n,r+/b,,W+/GR,w/gr+
READ CYCLE SHOW tb_l() OBJECT 42
with M_ZAR,VEDOM COLOR SCHEME 7
DEACTIVATE WINDOW
INS
ENDIF
SET ORDER TO adrr
ON KEY LABEL F1 DO
HELP WITH 6
RETURN
FUNCTION POS_CH1
&& SAY - Объекты
kw=kw_l
gw=g_w_l
xw=x_w_l
ks=k_ys_l
ot=otop_l
elc=el_c_l
tl=tel_l
rd=rad_l
@ 0,1 to 7,55 double
@ 1,2 say 'Фамилия'
COLOR SCHEME 12
@ 2,2 say 'Табель'
COLOR SCHEME 12
@ 2,20 say 'Телефон'
COLOR SCHEME 12
@ 3,2 say 'Адрес:
'COLOR SCHEME 12
@ 3,26 say 'Дом'
COLOR SCHEME 12
@ 3,35 say
'Кв-ра'COLOR SCHEME 12
@ 4,2 say
'Площадь'COLOR SCHEME 12
@ 5,2 say
'Количество
жильцов - '
+ltrim(str(kol(0))) COLOR SCHEME 12
@ 5,27 say
'Начисляется'
COLOR SCHEME 12
@ 5,43 say 'чел.'
COLOR SCHEME 12
@ 6,2 say 'Из
них льготников
- ' +ltrim(str(kl_l(0))) COLOR SCHEME 12
@ 6,27 SAY 'СОСТАВ
СЕМЬИ'
@ 8,3 SAY 'Услуга'
@ 8,28 say 'Тариф'
@ 8,36 say 'Расчет'
@ 8,45 say 'Льготы'
@ 9,2 to 9,55
@ 11,56 SAY
'ФИЛЬТР:'
@ 10,28 say
LTRIM(STR(kw1(0),5,2))
@ 11,28 SAY
LTRIM(STR(GW1(0),5,2))
@ 12,28 SAY
LTRIM(STR(XW1(0),5,2))
@ 13,28 SAY
LTRIM(STR(KS1(0),5,2))
@ 14,28 SAY
LTRIM(STR(OT1(0),5,2))
@ 15,28 SAY
LTRIM(STR(ELC1(0),5,2))
@ 16,28 SAY
LTRIM(STR(TL3(0),5,2))
@ 17,28 say
LTRIM(STR(RD3(0),5,2))
@ 18,2 to 18,55
@ 19,20 SAY 'ИТОГО'
@ 19,36 SAY
LTRIM(STR(C.ITOG_N,7,2))
@ 20,2 TO 20,55
DOUBLE
@ 20,20 SAY 'К
ОПЛАТЕ -
'+LTRIM(STR(C.ITOG,8,2)) color w+/n
@ 21,23 SAY 'C'
@ 21,37 say 'по'
@ 0,4 say 'F5 -
Поиск' color w+/r
@ 0,40 say 'F1 -
Помощь' color w+/r
@ 0,56 FILL TO 23,80
COLOR SCHEME 15
@ 9,2 FILL TO 18,55
COLOR SCHEME 16
FUNCTION OB_NACH &&
SAY – Объекты
начислений
по льготам
@ 10,45 say
LTRIM(STR(c.sum_kw,6,2)) COLOR R/W,,,,,,,,,
@ 11,45 say
ltrim(str(c.sum_gw,6,2)) color r/W,,,,,,,,,
@ 12,45 say
ltrim(str(c.sum_xw,6,2)) color r/W,,,,,,,,,
@ 13,45 say
ltrim(str(c.sum_kysl,6,2)) color r/W,,,,,,,,,
@ 14,45 say
ltrim(str(c.sum_ot,6,2)) color r/W,,,,,,,,,
@ 16,45 say
ltrim(str(c.sum_tl,6,2)) color r/W,,,,,,,,,
@ 17,45 say
ltrim(str(c.sum_rd,6,2)) color r/W,,,,,,,,,
@ 19,45 SAY
LTRIM(STR(C.SUM_IT,7,2))
@ 9,45 FILL TO 18,55
COLOR SCHEME 16
FUNCTION LG_NACH &&
SAY – Объекты
начислений
по льготам
@ 10,45 say
LTRIM(STR(c.kw_pll,6,2)) COLOR R/W,,,,,,,,,
@ 11,45 say
ltrim(str(c.g_wl,6,2)) color r/W,,,,,,,,,
@ 12,45 say
ltrim(str(c.x_wl,6,2)) color r/W,,,,,,,,,
@ 13,45 say
ltrim(str(c.k_ysll,6,2)) color r/W,,,,,,,,,
@ 14,45 say
ltrim(str(c.otopll,6,2)) color r/W,,,,,,,,,
@ 16,45 say
ltrim(str(c.tel_rl,6,2)) color r/W,,,,,,,,,
@ 17,45 say
ltrim(str(c.rad_rl,6,2)) color r/W,,,,,,,,,
@ 19,45 SAY
LTRIM(STR(C.ITOG_L,7,2))
@ 9,45 FILL TO 18,55
COLOR SCHEME 16
FUNCTION PROS_LG &&
Просмотр
начислений
по льготам
DEFINE WINDOW
PROSMOTR FROM 10,55 TO 20,75
DO CASE
CASE pros_lg=1
ACTIVATE WINDOW
PROSMOTR
@ 0,1 SAY 'Кв-та
'
@ 0,11 SAY
LTRIM(STR(C.KW_PLL,6,2)) COLOR N/W
@ 1,1 SAY 'Гор.вода
'
@ 1,11 SAY
LTRIM(STR(C.G_WL,6,2)) COLOR N/W
@ 2,1 SAY 'Хол.вода
'
@ 2,11 SAY
LTRIM(STR(C.X_WL,6,2)) COLOR N/W
@ 3,1 SAY 'Ком.усл.
'
@ 3,11 SAY
LTRIM(STR(C.K_YSLL,6,2)) COLOR N/W
@ 4,1 SAY 'Отопление
'
@ 4,11 SAY
LTRIM(STR(C.OTOPLL,6,2)) COLOR N/W
@ 5,1 SAY 'Телефон
'
@ 5,11 SAY
LTRIM(STR(C.TEL_RL,6,2)) COLOR N/W
@ 6,1 SAY 'Радио
'
@ 6,11 SAY
LTRIM(STR(C.RAD_RL,6,2)) COLOR N/W
@ 8,2 SAY 'ИТОГ
'+LTRIM(STR(C.ITOG_L,8,2)) COLOR R/W
READ
RELEASE WINDOW
PROSMOTR
RETURN
FUNCTION tb_l && Функция
обновления
кнопок(GET) в Процедуре
Постоянная
часть
DO CASE
CASE _FILTR=1
SET ORDER TO ord
@ 14,57 CLEAR TO
14,76
@ 14,57 SAY 'ФИЛЬТР
- ' COLOR W+/B
@ 14,66 SAY
'Плательщики'
COLOR W+/N
CASE _FILTR=2
SET ORDER TO lgt
@ 14,57 CLEAR TO
14,76
@ 14,57 SAY 'ФИЛЬТР
- ' COLOR W+/B
@ 14,66 SAY
'Льготники '
COLOR W+/R
CASE _FILTR=3
SET ORDER TO adrr
@ 14,57 CLEAR TO
14,76
@ 14,57 SAY 'ФИЛЬТР
- ' COLOR W+/B
@ 14,66 SAY 'Все
жильцы ' COLOR W+/B
ENDCASE
DO CASE
CASE
or_r=1.OR.lgot=.T.
SHOW GET kw ENABLE
COLOR SCHEME 16
SHOW GET gw ENABLE
COLOR SCHEME 16
SHOW GET xw ENABLE
COLOR SCHEME 16
SHOW GET ks ENABLE
COLOR SCHEME 16
SHOW GET ot ENABLE
COLOR SCHEME 16
SHOW GET elc ENABLE
COLOR SCHEME 16
SHOW GET tl ENABLE
COLOR SCHEME 16
SHOW GET rd ENABLE
COLOR SCHEME 16
@ 10,2 FILL TO
18,29 COLOR SCHEME 16
CASE
or_r=0.OR.lgot=.F.
SHOW GET kw DISABLE
COLOR ,,,,,,,,,W+/W
SHOW GET gw DISABLE
COLOR ,,,,,,,,,W+/W
SHOW GET xw DISABLE
COLOR ,,,,,,,,,W+/W
SHOW GET ks DISABLE
COLOR ,,,,,,,,,W+/W
SHOW GET ot DISABLE
COLOR ,,,,,,,,,W+/W
SHOW GET elc
DISABLE COLOR ,,,,,,,,,W+/W
SHOW GET tl DISABLE
COLOR ,,,,,,,,,W+/W
SHOW GET rd DISABLE
COLOR ,,,,,,,,,W+/W
@ 10,2 FILL TO
17,26 COLOR SCHEME 12
ENDCASE
DO CASE
CASE lgot=.f.
SHOW GET tabl_ras
DISABLE
@ 21,1 clear to
21,55
CASE lgot=.t.
SHOW GET tabl_ras
ENABLE
@ 21,1 FILL TO
21,54 COLOR SCHEME 17
ENDCASE
DO CASE
CASE or_r=0
SHOW GET tabl_ras1
DISABLE
SHOW GET pros_lg
DISABLE
=LG_NACH()
CASE or_r=1
SHOW GET tabl_ras1
ENABLE
SHOW GET pros_lg
ENABLE
=OB_NACH()
ENDCASE
DO CASE
CASE e=.F.
SHOW GET perem,1
ENABLE
SHOW GET perem1,1
ENABLE
CASE b=.F.
SHOW GET perem,2
ENABLE
SHOW GET perem1,2
ENABLE
ENDCASE
RETURN
FUNCTION PER &&
Перемещения
в Базе жильцов
(<Вверх><Вниз>)
SELE A
DO CASE
CASE perem=1
cyr=_CUROBJ
SKIP -1
IF BOF()
show get perem,1
DISABLE
GO TOP
b=.t.
WAIT 'НАЧАЛО
БАЗЫ' WIND NOWAIT
ELSE
STORE .F. TO e,b
ENDIF
_REC=RECNO()
_CUROBJ=cyr
CASE perem=2
cyr=_CUROBJ
SKIP
IF EOF()
SHOW GET perem,2
DISABLE
GO BOTTOM
e=.t.
WAIT 'КОНЕЦ
БАЗЫ' WIND NOWAIT
ELSE
store .f. to e,b
ENDIF
_REC=RECNO()
_CUROBJ=cyr
ENDCASE
SET ORDER TO 0
@ 10,27 CLEAR TO
20,51
=POS_CH1()
SHOW GETS
RETURN
FUNCTION PER1 &&
Перемещения
в Базе жильцов
(<Начало><Конец>)
DO CASE
CASE perem1=2
SHOW GET perem,2
DISABLE
SHOW GET perem1,2
DISABLE
GO BOTTOM
e=.t.
WAIT 'КОНЕЦ
БАЗЫ' WIND NOWAIT
CASE perem1=1
show get perem,1
DISABLE
SHOW GET perem1,1
DISABLE
GO TOP
b=.t.
WAIT 'НАЧАЛО
БАЗЫ' WIND NOWAIT
ENDCASE
SET ORDER TO 0
@ 10,27 CLEAR TO
20,51
=POS_CH1()
SHOW GETS
RETURN
FUNCTION FILTR
&& Выбор фильтра
(Льготники,Плат-щики,Все
жильцы)
DO
CASE
CASE FILTR=1
_FILTR=1
CASE FILTR=2
_FILTR=2
CASE FILTR=3
_FILTR=3
ENDCASE
SHOW GETS
RETURN
FUNCTION
FAMILY && Меню жильцов
(СОСТАВ СЕМЬИ)
SELE
A
F=ORDER()
SET
ORDER TO 0
Y=YL
D=DOM
K=KW_RA
SET
FILTER TO Y=YL.AND.D=DOM.AND.K=KW_RA
ACTIVATE
POPUP FAMIL
IF
LASTKEY()=13
_REC=RECNO()
GO
_REC
_FILTR=IIF(or_r=1,1,IIF(lgot=.T.,2,3))
SET
FILTER TO
@
10,27 CLEAR TO 20,51
=POS_CH1()
SHOW
GETS
ENDIF
RETURN
FUNCTION ATTR &&
Выбор кнопок
(Добавить,Изменить)
DO CASE
CASE attrib=1
DO INS WITH 2 IN
ADD_DEL
CASE attrib=2
DO INS WITH 1 IN
ADD_DEL
ENDCASE
RETURN
FUNCTION ATTR1 &&
Выбор кнопок
(Печать,Удалить,Ввод
оплаты)
DO CASE
CASE attrib1=1
DO DEL
CASE attrib1=2
DO PRINT1
CASE attrib1=3
DO VVV IN bazes
ENDCASE
RETURN
FUNCTION TAB_RSLG
&& Таблица ставок
по льготам
SELE d
ON KEY LABEL F1 DO
HELP WITH 5
DEFINE WINDOW m_zar
FROM 5,15 TO 23,55 SHADOW;
TITLE 'Сегодня
- '+dtoc(date())
ACTIVATE WINDOW
M_ZAR
LOCATE FOR
n_lg=a.n_lg
IF FOUND()=.F.
APPEND BLANK
REPLACE N_LG WITH
a.n_lg
@ 14,2 SAY
'Заполните
льготные ставки
для кода
№'+ALLTRIM(STR(A.N_LG))
@ 15,3 SAY 'Введите
описание льготы
в поле'
@ 16,3 SAY
'КАТЕГОРИЯ
(н-р: ВЕТЕРАН
ТРУДА)'
ENDIF
@ 1,0 to 1,33 double
@ 1,5 SAY
a.fam+'Таб.' +ALLTRIM(STR(a.tab)) COLOR SCHEME 13
@ 2,1 to 2,31
@ 2,7 say 'Ввод
ставок по льготам'
@ 3,5 SAY 'КОД
- ' GET n_lg disable
@ 4,3 say
'%начислений
кв.платы'
@ 4,29 get kwp_l
PICTURE '#.##'
@ 4,35 SAY '%'
@ 5,3 SAY
'%начислений
телефона'
@ 5,29 get tl_l
PICTURE '#.##'
@ 5,35 SAY '%'
@ 6,3 say
'%начислений
радио'
@ 6,29 get rd_l
PICTURE '#.##'
@ 6,35 SAY '%'
@ 7,3 say
'%начислений
ком. услуг'
@ 7,29 get k_l_l
PICTURE '#.##'
@ 7,35 SAY '%'
@ 8,3 say
'%начислений
Гор.воды'
@ 8,29 get gw_l
PICTURE '#.##'
@ 8,35 SAY '%'
@ 9,3 say
'%начислений
Хол.воды'
@ 9,29 get xw_l
PICTURE '#.##'
@ 9,35 SAY '%'
@ 10,3 say
'%начислений
отопления'
@ 10,29 get ot_l
PICTURE '#.##'
@ 10,35 SAY '%'
@ 12,3 SAY
'КАТЕГОРИЯ' GET
info
read
RELEASE WINDOWS
M_ZAR
RETURN
FUNCTION tabl_rasop &&
Таблица ставок
по оплате
SELE g
ON KEY LABEL F1 DO
HELP WITH 5
DEFINE WINDOW m_zar
FROM 5,15 TO 23,55 SHADOW;
TITLE 'Сегодня
- '+dtoc(date())
ACTIVATE WINDOW
M_ZAR
@ 1,0 to 1,33 double
@ 1,5 SAY
a.fam+'Таб.' +ALLTRIM(STR(tab)) COLOR SCHEME 13
@ 2,1 to 2,31
@ 2,7 say 'Ввод
ставок по начислению'
@ 3,3 say
'начисления
кв.платы'
@ 3,29 get kwp_l
PICTURE '##.##'
@ 4,3 SAY
'начисления
телефона'
@ 4,29 get tl_l
PICTURE '##.##'
@ 5,3 say
'начисления
радио'
@ 5,29 get rd_l
PICTURE '##.##'
@ 6,3 say
'начисления
ком. услуг'
@ 6,29 get k_l_l
PICTURE '##.##'
@ 7,3 say
'начисления
Гор.воды'
@ 7,29 get gw_l
PICTURE '##.##'
@ 8,3 say
'начисления
Хол.воды'
@ 8,29 get xw_l
PICTURE '##.##'
@ 9,3 say
'начисления
отопления'
@ 9,29 get ot_l
PICTURE '##.##'
@ 10,3 say
'начисления
э\энергии'
@ 10,29 get el_l
read
kwar_ta=kwp_l
telef=tl_l
radio=rd_l
kom_ysl=k_l_l
gor_water=gw_l
xol_water=xw_l
otopl_e=ot_l
electr_vo=el_l
clear
SELE a
@ 2,2 SAY 'Улица
- '+yl
@ 3,2 SAY 'Дом
'+dom
@ 4,2 SAY 'Кол-во
квартир -
'+LTRIM(STR(kl_kvartir(0)))
WAIT
'Установить
всем жильцам
(Y/N) ' TO Y
SET
ORDER TO 0
d=dom
y=yl
k=kw_ra
IF
LASTKEY()=89.OR.LASTKEY()=121.OR.LASTKEY()=141
SET
FILTER TO d=dom.AND.y=yl
SCAN
REPLACE
g.kwp_l WITH kwar_ta,g.tl_l WITH telef,g.rd_l WITH radio,;
g.k_l_l
WITH kom_ysl,g.gw_l WITH gor_water,g.xw_l WITH xol_water,;
g.ot_l
WITH otopl_e,g.el_l WITH electr_vo
ENDSCAN
ELSE
SET
FILTER TO d=dom.AND.y=yl.AND.k=kw_ra
SCAN
REPLACE
g.kwp_l WITH kwar_ta,g.tl_l WITH telef,g.rd_l WITH radio,;
g.k_l_l
WITH kom_ysl,g.gw_l WITH gor_water,g.xw_l WITH xol_water,;
g.ot_l
WITH otopl_e,g.el_l WITH electr_vo
ENDSCAN
ENDIF
RELEASE
WINDOWS M_ZAR
SET
FILTER TO
@
10,27 CLEAR TO 20,50
GO
_REC
=POS_CH1()
SHOW
GETS
RETURN
FUNCTION
kl_kvartir &&
Количество
квартир
para k
k=0
d=dom
y=yl
R=RECNO()
set filter to
d=dom.AND.y=yl
COUNT TO k
set filter to
GO R
RETURN k
FUNCTION TARIFS
&& Окно для
выбора ставок
по оплате
sele a
_REC=RECNO()
sele f
DEFINE WINDOW m_zar1
FROM 5,12 TO 20,66 COLOR SCHEME 12
DEFINE MENU TARIFS
DEFINE PAD vibor OF
TARIFS PROMPT 'Выбрать'
DEFINE PAD apend OF
TARIFS PROMPT 'Добавить'
DEFINE PAD exit OF
TARIFS PROMPT 'Выйти'
DEFINE PAD DEF OF
TARIFS PROMPT 'Установить
норматив'
ON PAD vibor OF
TARIFS ACTIVATE POPUP TAR_S
ON SELECTION PAD
apend OF TARIFS DO INS_ST WITH PROMPT()
ON SELECTION PAD
exit OF TARIFS DO INS_ST WITH PROMPT()
ON PAD DEF OF TARIFS
ACTIVATE POPUP DEF1
DEFINE POPUP
vib_komy FROM 7,12 COLOR SCHEME 1
DEFINE BAR 1 OF
vib_komy PROMPT 'Установить
всем жильцам
дома'
DEFINE BAR 2 OF
vib_komy PROMPT 'Установить
данному жильцу'
ON SELECTION POPUP
vib_komy DO v_st1 WITH BAR(),RECNO()
DEFINE POPUP DEF1
FROM 1,20
DEFINE BAR 1 OF DEF1
PROMPT 'Установить
всем жильцам
дома'
DEFINE BAR 2 OF DEF1
PROMPT 'Установить
данному жильцу'
ON SELECTION POPUP
DEF1 DO v_st2 WITH BAR()
DEFINE POPUP TAR_S
FROM 1,1 TITLE;
'Описание
тарифа--------|-Ставка-|-Расчен
на-|';
PROMPT FIELD
info+'|'+STR(st_ka,8,2)+'|'+k_info
ON SELECTION POPUP
TAR_S ACTIVATE POPUP vib_komy
DO CASE
CASE tar_s=1
SET FILTER TO
k_ch=.F.
vib_stavok='KWP_L'
yslyga='Квартплата'
ACTIVATE WINDOW
M_ZAR1
WAIT 'Квартплата'
WIND NOWAIT
ACTIVATE MENU TARIFS
@ 10,28 say
LTRIM(STR(kw1(0),5,2))
SET FILTER TO
CASE tar_s=2
SET FILTER TO
k_ch=.T.
vib_stavok='GW_L'
WAIT 'Горячая
вода' WIND NOWAIT
ACTIVATE WINDOW
M_ZAR1
ACTIVATE MENU TARIFS
@ 11,28 SAY
LTRIM(STR(GW1(0),5,2))
SET FILTER TO
CASE tar_s=3
SET FILTER TO
k_ch=.T.
vib_stavok='XW_L'
WAIT 'Холодная
вода' WIND NOWAIT
ACTIVATE WINDOW
M_ZAR1
ACTIVATE MENU TARIFS
@ 12,28 SAY
LTRIM(STR(XW1(0),5,2))
SET FILTER TO
CASE tar_s=4
SET FILTER TO
k_ch=.T.
vib_stavok='K_L_L'
WAIT 'Коммунальные
услуги' WIND NOWAIT
ACTIVATE WINDOW
M_ZAR1
ACTIVATE MENU TARIFS
@ 13,28 SAY
LTRIM(STR(KS1(0),5,2))
SET FILTER TO
CASE tar_s=5
SET FILTER TO
k_ch=.F.
vib_stavok='OT_L'
WAIT 'Отопление'
WIND NOWAIT
ACTIVATE WINDOW
M_ZAR1
ACTIVATE MENU TARIFS
@ 14,28 SAY
LTRIM(STR(OT1(0),5,2))
SET FILTER TO
CASE tar_s=6
SET FILTER TO
k_ch=.F.
vib_stavok='EL_L'
WAIT
'Электроэнергия'
WIND NOWAIT
ACTIVATE WINDOW
M_ZAR1
ACTIVATE MENU TARIFS
@ 15,28 SAY
LTRIM(STR(ELC1(0),5,2))
SET FILTER TO
CASE tar_s=7
SET FILTER TO
k_ch=.T.
vib_stavok='TL_L'
WAIT 'Телефон'
WIND NOWAIT
ACTIVATE WINDOW
M_ZAR1
ACTIVATE MENU TARIFS
@ 16,28 SAY
LTRIM(STR(TL3(0),5,2))
SET FILTER TO
CASE tar_s=8
SET FILTER TO
k_ch=.T.
vib_stavok='RD_L'
WAIT 'Радио'
WIND NOWAIT
ACTIVATE WINDOW
M_ZAR1
ACTIVATE MENU TARIFS
@ 17,28 say
LTRIM(STR(RD3(0),5,2))
SET FILTER TO
ENDCASE
RETURN
FUNCTION INS_ST
&&
Выбор пунктов
меню
PARAMETERS mprompt
DO CASE
CASE
mprompt='Добавить'
SELE F
SCATTER MEMVAR
BLANK
@ 2,2 SAY 'Введите
описание тарифа'
@ 3,2 get m.info
@ 4,2 SAY 'Ставка
- 'get m.st_ka PICTURE '##.##'
@ 6,2 GET ras_on
FUNCTION '*R На 1 кв.метр;На
1-го чел' VALID kv_chel() defa 1 COLOR
SCHEME 16
@ 10,2 GET ras_on1
FUNCTION '*H Сохранить;Отказ'
VALID kv_chel1() defa 1;
COLOR SCHEME 15
size 1,10,4
READ CYCLE
CASE mprompt='Выйти'
DEACTIVATE WINDOW
m_zar1
DEACTIVATE MENU
SELE A
ENDCASE
RETURN
FUNCTION kv_chel
do case
CASE ras_on=1
m.k_ch=.f.
CASE ras_on=2
m.k_ch=.t.
endcase
FUNCTION kv_chel1
DO CASE
CASE ras_on1=1
PAR='Добавить'
IF m.k_ch=.t.
m.k_info='На
1-го чел.'
ELSE
m.k_info='На
1 кв.метр'
ENDIF
APPEND BLANK
GATHER MEMVAR
DO ins_st WITH PAR
CASE ras_on1=2
CLEAR read
clear
ENDCASE
RETURN
FUNCTION
v_st1
PARAMETER
B,N
HIDE
POPUP TAR_S
HIDE
POPUP vib_komy
SELE
a
r=RECNO()
y=yl
d=dom
k=kw_ra
ORD_A=ORDER()
SET
ORDER TO 0
SELE
f
DO
CASE
CASE
B=1
GO
N
ST=ST_KA
SELE
A
GO
r
SCAN
FOR y=yl.AND.d=dom
sele
G
REPLACE
&VIB_STAVOK WITH ST
SELE
a
ENDSCAN
CASE
B=2
GO
N
ST=ST_KA
SELE
A
GO
r
SCAN
FOR y=yl.AND.d=dom.AND.k=kw_ra
sele
G
REPLACE
&VIB_STAVOK WITH ST
SELE
a
ENDSCAN
ENDCASE
SELE
A
SET
ORDER TO &ORD_A
GO
r
DEACTIVATE
WINDOW m_zar1
DEACTIVATE
MENU
RETURN
FUNCTION
v_st2
PARAMETER
B
HIDE
POPUP DEF1
SELE
A
GO
_REC
ST=0
y=yl
d=dom
k=kw_ra
ORD_A=ORDER()
SET
ORDER TO 0
DO
CASE
CASE
B=1
SCAN
FOR y=yl.AND.d=dom
sele
G
REPLACE
&VIB_STAVOK WITH ST
SELE
a
ENDSCAN
CASE
B=2
SCAN
FOR y=yl.AND.d=dom.AND.k=kw_ra
sele
G
REPLACE
&VIB_STAVOK WITH ST
SELE
a
ENDSCAN
ENDCASE
SELE
A
SET
ORDER TO &ORD_A
GO
_REC
DEACTIVATE
WINDOW m_zar1
DEACTIVATE
MENU
RETURN
** Отображение
SAY
стоимости
услуг
**
******************************************************************************************
FUNCTION kw1
PARAMETER ST
IF !EMPTY(g.kwp_l)
ST=g.kwp_l
ELSE
ST=_kv_pl
ENDIF
RETURN ST
FUNCTION GW1
PARAMETER ST
IF !EMPTY(g.gw_l)
ST=g.gw_l
ELSE
ST=_gor_w
ENDIF
RETURN ST
FUNCTION xw1
PARAMETER ST
IF !EMPTY(g.xw_l)
ST=g.xw_l
ELSE
ST=_xol_w
ENDIF
RETURN ST
FUNCTION ks1
PARAMETER ST
IF !EMPTY(g.k_l_l)
ST=g.k_l_l
ELSE
ST=_kom
ENDIF
RETURN ST
FUNCTION ot1
PARAMETER ST
IF !EMPTY(g.ot_l)
ST=g.ot_l
ELSE
ST=_otopl
ENDIF
RETURN ST
FUNCTION elc1
PARAMETER ST
IF !EMPTY(g.el_l)
ST=g.el_l
ELSE
ST=_elek
ENDIF
RETURN ST
FUNCTION tl3
PARAMETER ST
IF !EMPTY(g.tl_l)
ST=g.tl_l
ELSE
ST=_tel
ENDIF
RETURN ST
FUNCTION rd3
PARAMETER ST
IF !EMPTY(g.rd_l)
ST=g.rd_l
ELSE
ST=_rad
ENDIF
RETURN ST
***********************************************************************************
**
Функции
выбора индикаторов
(GET[])
**
***********************************************************************************
FUNCTION KW
REPLACE KW_L WITH kw
FUNCTION GW
REPLACE G_W_L WITH
gw
FUNCTION XW
REPLACE X_W_L WITH
xw
FUNCTION KS
REPLACE K_YS_L WITH
ks
FUNCTION OT
REPLACE OTOP_L WITH
ot
FUNCTION
TL
DO
CASE
CASE
tl=.T.
DO
TL1 WITH OR_R,LGOT,RECNO(),ORDER()
CASE
tl=.F.
REPLACE
TEL_L WITH tl
ENDCASE
FUNCTION
RD
DO
CASE
CASE
rd=.T.
DO
RD1 WITH OR_R,LGOT,RECNO(),ORDER()
CASE
rd=.F.
REPLACE
RAD_L WITH rd
ENDCASE
FUNCTION
ELC
REPLACE
EL_C_L WITH elc
***********************************************************************************
** Выбор
начисления
телефона и
радио
**
***********************************************************************************
FUNCTION
TL1
PARA
OR,LG,R,ORD
SELE
a
*GO
_REC
Y=YL
D=DOM
KV=KW_RA
LOCATE
FOR Y=YL AND D=DOM AND KV=KW_RA AND OR_R=1
IF
FOUND().AND.EMPTY(tel)
tl=.F.
GO
R
SHOW
GET tl
RETURN
ELSE
DO
CASE
CASE
OR=1.AND.LG=.T.
SET
ORDER TO ADRR
SCAN
FOR Y=YL AND D=DOM AND KV=KW_RA
REPLACE
TEL_L WITH .F.
ENDSCAN
GO
R
REPLACE
TEL_L WITH .T.
SET
ORDER TO &ORD
RETURN
CASE
OR=1.AND.LG=.F.
GO
R
REPLACE
TEL_L WITH .T.
RETURN
CASE
LG=.T..AND.OR=0
SCAN
FOR Y=YL AND D=DOM AND KV=KW_RA AND LGOT=.T.
IF
TEL_L=.T.
TL=.F.
SHOW
GET TL
GO
R
RETURN
ENDIF
ENDSCAN
GO
R
REPLACE
TEL_L WITH tl
ENDCASE
ENDIF
RETURN
FUNCTION
RD1 && Выбор начисления
радио
PARA
OR,LG,R,ORD
SELE
a
Y=YL
D=DOM
KV=KW_RA
DO
CASE
CASE
OR=1.AND.LG=.T.
SET
ORDER TO ADRR
SCAN
FOR Y=YL AND D=DOM AND KV=KW_RA
REPLACE
RAD_L WITH .F.
ENDSCAN
GO
R
REPLACE
RAD_L WITH .T.
SET
ORDER TO &ORD
RETURN
CASE
OR=1.AND.LG=.F.
GO
R
REPLACE
RAD_L WITH .T.
RETURN
CASE
LG=.T..AND.OR=0
SCAN
FOR Y=YL AND D=DOM AND KV=KW_RA AND LGOT=.T.
IF
RAD_L=.T.
rd=.F.
SHOW
GET rd
GO
R
RETURN
ENDIF
ENDSCAN
GO
R
REPLACE
RAD_L WITH rd
ENDCASE
RETURN
***********************************************************************************
FUNCTION kol
&& Функция кол-ва
жильцов (SAY)
PARAMETERS k
_REC=RECNO()
k=0
y_l=yl
d=dom
kv=kw_ra
scan for
yl=y_l.and.dom=d.and.kw_ra=kv
k=k+1
endscan
go _REC
RETURN k
FUNCTION KL_l
&& Функция кол-ва
льготников
(SAY)
parameters k
_REC=RECNO()
y=0
y_l=yl
d=dom
kv=kw_ra
scan for
yl=y_l.and.dom=d.and.kw_ra=kv.and.lgot=.t.
k=k+1
endscan
go _REC
RETURN
k
FUNCTION vib1_7
do case
case all_l=1
clear read
case all_l=2
CLEAR READ
DEACTIVATE WINDOW
INS
DO RAS
endcase
RETURN
**
Конец
Процедуре
Квартиросъемщики
(Постоянная
Часть)
**
***********************************************************************************
**
Функция
сохранения
норм в файле
m_zar.mem
**
***********************************************************************************
FUNCTION cf
do case
case c=1
DEACTIVATE WINDOW
m_zar
SAVE TO m_zar ALL
LIKE _*
case c=2
clear read
RELEASE windows
m_zar
endcase
RETURN
***********************************************************************************
**
Процедура
помощи по F1
**
***********************************************************************************
PROCEDURE HELP
PARAMETERS k
DEFINE WINDOW HELP
FROM 4,7 TO 20,73 shadow;
TITLE
'PgUp,PgDn-листание'
FOOTER 'Esc-выход без
сохранения,Ctrl+W-c
сохранением';
color scheme 12
IF k#0
GO K IN i
MODIFY MEMO i.HLP
WINDOW HELP noedit
ENDIF
release WINDOWS HELP
RETURN
*************************************************************************************
Процедура
выхода
**
***********************************************************************************
PROCEDURE quit
DEFINE WINDOW QUIT
FROM 9,30 TO 14,50
ACTIVATE WINDOW QUIT
@ 1,4 SAY 'Вы
уверены?'
@ 3,2 GET q FUNCTION
'*HN Да;Нет;DOS' VALID qt();
DEFAULT 2 COLOR
,,,,gr+/b,w+/n,r+/b,,n+/w,w/gr+
READ CYCLE
RELEASE WINDOW quit
RETURN
FUNCTION qt && Функция
выхода
DO CASE
CASE q=1
CLEAR WINDOWS
SAVE TO m_zar ALL
LIKE _*
ON KEY
! DEL TAB*.TXT
CLOSE DATA
CLEAR MEMORY
CLEAR
CANCEL
CASE q=2
CLEAR READ
RELEASE WINDOWS QUIT
CASE q=3
SAVE TO m_zar ALL
LIKE _*
! DEL TAB*.TXT
QUIT
ENDCASE
RETURN
***********************************************************************************
**
Процедура
Упаковки
**
***********************************************************************************
PROCEDURE SERV
SET ORDER TO TAB
SET DELETE OFF
SCAN FOR DELETE()
SELECT g
IF SEEK(a.tab)
DELETE FOR
a.tab=g.tab
ENDIF
SELE a
ENDSCAN
SET ORDER TO ADRR
SCAN FOR DELETE()
y=yl
d=dom
kv=kw_ra
r=recno()
fm=fam
tb=tab
SET DELETE ON
LOCATE FOR
yl=y.and.dom=d.and.kw_ra=kv.AND.or_r=0
IF FOUND()
n_ins=RECNO()
LOCATE FOR
yl=y.and.dom=d.and.kw_ra=kv.and.or_r=1
IF FOUND()=.F.
ACTIVATE WINDOW vib
@ 0,1 SAY 'За
квартиру по
адресу:'
@ 1,2 say
alltrim(y)+' '+'Дом-'+ALLTRIM(d)+'
'+'Кв-'+ALLTRIM(kv)
@ 2,3 SAY 'Не
начисляется
плата'
@ 3,2 say
'Платил-'+ALLTRIM(fm)+'
'+'Таб-'+ALLTRIM(STR(tb))
@ 4,1 GET D_IN
FUNCTION '*H Удалить
всех;Изменить;Восстановить'
valid d_in() defa READ
CYCLE
DEACTIVATE WINDOW
vib
ENDIF
ENDIF
GO R
SET DELETE OFF
ENDSCAN
SELECT g
PACK
SELE a
PACK
SET DELETE ON
DO P_INDEX
RETURN
FUNCTION d_in &&
Выбор
кнопок в процедуре
Упаковки
DO CASE
CASE d_in=1
SET DELETE OFF
SCAN FOR
yl=y.and.dom=d.and.kw_ra=kv
DELETE
ENDSCAN
SET DELETE ON
CASE d_in=2
GO n_ins
DO INS WITH 2 IN
ADD_DEL
CASE d_in=3
SET DELETE OFF
GO r
RECALL
SET FILTER TO
yl=y.and.dom=d.and.kw_ra=kv
COUNT TO kol
GO TOP
SCAN
REPLACE kol_vo WITH
kol
ENDSCAN
SET FILTER TO
sele g
SEEK(a.tab)
RECALL
SET DELETE ON
ENDCASE
RETURN
***********************************************************************************
**
Переиндексация
**
***********************************************************************************
PROCEDURE P_INDEX
CLOSE DATA
!DEL *.CDX
DO OPEN
RETURN
***********************************************************************************
**
Процедура
поиска
**
***********************************************************************************
PROCEDURE poisk
_REC=RECNO()
&&
Запоминается
номер текущей
записи
DO CASE
CASE
PROMPT()="Отмена
сортировки" &&
Если "Отмена"
SET ORDER TO
0 &&
Отказ от главного
индекса
CASE PROMPT()='По
фамилии'
SET ORDER TO fam
ACTIVATE WINDOW
poisk
@ 0,0 GET a DEFA
SPAC(25) &&
Задание фамилии
@ 1,2 SAY
'Соблюдайте
РЕГИСТР'
READ
a=ALLTRIM(a) &&
Удаление пробелов
d=a
CASE PROMPT()='По
табелю'
set order to tab
ACTIVATE WINDOW
poisk
@ 0,0 GET a PICTURE
'9999' DEFAULT 0&&
Задание табеля
READ
d=str(a,4) &&
Сохранить
запрос
CASE PROMPT()='По
адресу'
DO po_adr
ENDCASE
DEACTIVATE WINDOW
poisk
IF
BAR()#4.AND.!EMPTY(a).AND.!SEEK(a)
* Если
Поиск,'a' не пуста
и поиск неудачный
WAIT 'Поиск
'+PROMPT()+':'+d+' НЕУДАЧНЫЙ'
WINDOW
GO _REC &&
Выдается сообщение
и возврат на
предыдущую
запись
ELSE
_REC=RECNO()
GO _REC
IF WONTOP()='INS'
@ 10,27 CLEAR TO
20,50
=POS_CH1()
SHOW GETS
ENDIF
ENDIF
set order to adrr
DEACTIVATE POPUP
RETURN
FUNCTION
po_adr &&
Поиск
по адресу
DEFINE
POPUP YL FROM 1,0
n=recno()
m=1
br=1
d_ins=1
DIMENSION
yl_za(100,1)
go
top
i=1
yl_za(i,1)=yl
DO
WHILE !EOF()
DEFINE
BAR (br) OF YL PROMPT yl_za(i,1)
IF
yl=yl_za(i,1)
skip
loop
ENDIF
m=m+1
i=i+1
yl_za(i,1)=yl
br=br+1
ENDDO
DIMENSION
yl_za(m,1)
ON
SELECTION POPUP YL DO YLIZ WITH PROMPT()
go
n
SCATTER FIELDS
yl,dom,kw_ra MEMVAR BLANK
ACTIVATE WINDOW
poisk
@ 0,0 GET m.yl
WHEN yliz_s()
@ 1,2 SAY 'Дом
' GET m.dom
@ 1,12 SAY 'Кв-ра
' GET m.kw_ra
READ COLOR ,n/w
DO CASE
CASE
!EMPTY(m.yl).AND.EMPTY(m.dom).AND.EMPTY(m.kw_ra)
LOCATE FOR
m.yl=a.yl
CASE
!EMPTY(m.yl).AND.!EMPTY(m.dom).AND.EMPTY(m.kw_ra)
LOCATE FOR
m.yl=a.yl.AND.m.dom=a.dom
CASE
!EMPTY(m.yl).AND.!EMPTY(m.dom).AND.!EMPTY(m.kw_ra)
LOCATE FOR
m.yl=a.yl.AND.m.dom=a.dom.AND.m.kw_ra=a.kw_ra.AND.a.or_r=1
ENDCASE
IF FOUND()
DEACTIVATE WINDOW
poisk
_REC=RECNO()
GO _REC
IF WONTOP()='INS'
@ 10,27 CLEAR TO
20,50
=POS_CH1()
SHOW GETS
ENDIF
ELSE
GO n
ENDIF
***********************************************************************************
**
Формирование
квитанции
**
***********************************************************************************
FUNCTION PRINT1
ON KEY LABEL F1 DO
HELP WITH 7
SET ALTERNATE TO tab
T='tab'+'.'+'txt'
DIMENSION NACH(12,1)
DIMENSION LG(9)
STORE 0 TO
LG(1),LG(2),LG(3),LG(4),LG(5),LG(6),LG(7),LG(8),LG(9)
SET ALTERNATE ON
SET CONSOLE OFF
r=RECNO()
y=yl
d=dom
kv=kw_ra
PL=0
L=0
scan for
yl=y.and.dom=d.and.kw_ra=kv.and.c.yl=y.and.c.dom=d.and.c.kw_ra=kv
IF OR_R=1
FM=FAM
OS=OST_K
TB=TAB
KV_MET=KV_M
NACH(1)=C.KW_PL
NACH(2)=C.G_W
NACH(3)=C.X_W
NACH(4)=C.K_YSL
NACH(5)=C.OTOPL
NACH(6)=C.RAD_R
NACH(7)=C.TEL_R
NACH(8)=C.EL_C
NACH(9)=C.ITOG_N
NACH(10)=C.ITOG
NACH(11)=OPL_TA
endif
IF lgot=.t.
LG(1)=LG(1)+C.KW_PLL
LG(2)=LG(2)+C.G_WL
LG(3)=LG(3)+C.X_WL
LG(4)=LG(4)+C.K_YSLL
LG(5)=LG(5)+C.OTOPLL
LG(6)=LG(6)+C.RAD_RL
LG(7)=LG(7)+C.TEL_RL
LG(8)=LG(8)+C.EL_CL
LG(9)=LG(9)+C.ITOG_L
L=L+1
ENDIF
PL=PL+1
ENDSCAN
GO R
? 'КВИТАНЦИЯ
ПО ОПЛАТЕ КВАРТИРЫ
ЗА ',MES(mess)
?
? FM AT(4)
? 'Табель
- ' AT(4),TB PICTURE('9999'),' Дата оплаты
',D_OPL FUNCTION('T')
? 'Кол-во
жильцов ' at(4),pl
picture('99'),' Площадь
',KV_MET PICTURE('###.##')
? 'Льготников
' at(4),l picture('99')
?
? REPLICATE('-',69)
? '|','Сальдо
','|','кв.плата
','|','гор.вода
','|','ком.услуги
','|','радио ','|','телефон
','|','Начислено
','|'
? '|',' Пени
','|','излишки
','|','хол.вода
','|','отопление
','|',' ','|','э\энергия','|','
','|'
? REPLICATE('-',69)
? OS PICTURE
('####.##') AT(1) &&Остаток
?? NACH(1) PICTURE
('###.##') AT(10) && кв.плата
?? NACH(2) PICTURE
('###.##') AT(19) && гор.вода
?? NACH(4) PICTURE
('###.##') AT(30) && ком.услуги
?? NACH(6) PICTURE
('##.##') AT(40) && радио
?? NACH(7) PICTURE
('###.##') AT(50) && телефон
? NACH(3) PICTURE
('###.##') AT(19) && хол.вода
?? NACH(5) PICTURE
('###.##') AT(30) && отопление
?? NACH(8) PICTURE
('###.##') AT(50) && электричество
?? NACH(9) PICTURE
('###.##') AT(60) && итог
IF L>0
? 'Льгота'
? LG(1) PICTURE
('###.##') AT(10) && кв.плата
?? LG(2) PICTURE
('###.##') AT(19) && гор.вода
?? LG(4) PICTURE
('###.##') AT(30) && ком.услуги
?? LG(6) PICTURE
('##.##') AT(40) && радио
?? LG(7) PICTURE
('###.##') AT(50) && телефон
? LG(3) PICTURE
('###.##') AT(19) && хол.вода
?? LG(5) PICTURE
('###.##') AT(30) && отопление
?? LG(8) PICTURE
('###.##') AT(50) && электричество
?? LG(9) PICTURE
('###.##') AT(60) && итого
STORE 0 TO
LG(1),LG(2),LG(3),LG(4),LG(5),LG(6),LG(7),LG(8),LG(9)
ENDIF
?
?
REPLICATE('-',30),'ИТОГО НАЧИСЛЕНО
- ',NACH(10) picture('####.##')
? 'ОПЛАЧЕНО
В КАССУ - ' AT(30),NACH(11)
PICTURE('####.##')
? 'ОСТАТОК
' AT(30),OS PICTURE('####.##')
? 'Kассир
','___________',' / '
?? _pod
PICTURE(REPLICATE('x',AT(' ',_pod)-1)),' /'
SET ALTERNATE OFF
SET ALTERNATE TO
SET CONSOLE ON
MODIFY COMMAND
EVALUATE('T') WINDOW vedom
ACTIVATE WINDOW vib
@ 2,5 SAY 'Р а
с п е ч а т а т ь
?'
@ 0,0 FILL TO 8,43
COLOR W+/R
@ 5,6 GET pr
FUNCTION '*H Да;Нет' VALID print4()
DEFA 2 SIZE 1,6,4;
COLOR
,,,,w+/n,w+/n,w+/n,,W+/R,
READ
DEACTIVATE WINDOW
vib
RETURN
FUNCTION print4 &&
Печать квитанции
DO CASE
CASE pr=1
SET HEADING OFF
IF PRINTSTATUS()
TYPE (T) TO PRINT
ELSE
WAIT 'Подготовьте
принтер' WINDOW
ENDIF
CASE pr=2
CLEAR READ
ENDCASE
ON KEY LABEL F1 DO
HELP WITH 1
RETURN
***********************************************************************************
**
Функция
печати отчетов
**
***********************************************************************************
PROCEDURE print3
&&
Пункт
Меню <Печать>
PARAMETER vv,lk
IF
RIGHT(vv,1)#':'.OR.RIGHT(vv,1)#']'
DO CASE
CASE lk=13
MODIFY FILE (vv)
WINDOW vedom
CASE lk=32
SET HEADING OFF
IF PRINTSTATUS()
TYPE (vv) TO PRINT
ELSE
WAIT 'Подготовьте
принтер' WINDOW
ENDIF
ENDCASE
ENDIF
RETURN
***********************************************************************************
**
Функции
к дополнению
(add_del.prg)
**
***********************************************************************************
FUNCTION POS_CH2 &&
SAY - Объекты
@ 0,1 to 7,55 double
@ 1,2 say 'Фамилия
' COLOR SCHEME 12
@ 2,2 say 'Табель
-' COLOR SCHEME 12
@ 2,20 say 'Телефон
' COLOR SCHEME 12
@ 3,2 say 'Адрес:
'
@ 3,26 say 'Дом
'
@ 3,35 say 'Кв-ра
'
@ 4,2 say 'Площадь
' COLOR SCHEME 12
@ 6,3 SAY 'ДАННЫЕ
СЧЕТЧИКА:' COLOR
SCHEME 16
@ 5,20 SAY 'Старое
значение'
@ 6,20 SAY 'Новое
значение'
FUNCTION YLIZ1 &&
Функция выхода
из поля m.yl(выбор
улицы)
HIDE POPUP YL
FUNCTION
yliz_s && Меню для
выбора улицы
=CAPSLOCK(.F.)
IF
RECCOUNT()>0.and.d_ins=1
ACTIVATE
POPUP YL
ENDIF
FUNCTION
YLIZ && Выбор улицы
PARA
mprompt
m.yl=mprompt
show
get m.yl
DEACTIVATE
POPUP YL
RETURN
FUNCTION LG1 &&
Меню для выбора
льготы
SELE D
IF RECCOUNT()>0
DEFINE POPUP LGOT
FROM 2,27 PROMPT FIELD LTRIM(STR(N_LG))+' | '+INFO
ON SELECTION POPUP
LGOT DO LG_T WITH RECNO()
ACTIVATE POPUP LGOT
ENDIF
FUNCTION LG_T && Выбор
кода льготы
PARA R
N=RECNO()
SELE D
GO R
m.n_lg=n_lg
sele a
show get m.n_lg
DEACTIVATE POPUP
LGOT
FUNCTION vib_lg
&& Выбор льготы
(дополнение
льготы)
DO CASE
CASE lg_ta=.t.
m.lgot=.T.
activate window hp
@ 0,0 to 4,0 double
@ 0,26 to 5,26
double
@ 1,2 say 'Укажите
группу'
@ 1,18 get m.n_lg
picture '99' WHEN LG1() default 2
@ 3,2 say 'N
удостоверения'
@ 3,18 get m.n_yd
read color scheme 7
deactivate window hp
IF m.n_lg=0
lg_ta=.f.
m.lgot=.f.
show get lg_ta
SHOW GETS
else
LOCATE FOR
m.n_lg=d.n_lg
IF FOUND()=.F.
SELE d
APPEND BLANK
REPLACE N_LG WITH
m.n_lg
SELE a
ENDIF
@ 8,30 say 'Ввод
ставок по льготам'
@ 9,30 SAY 'КОД
- ' GET m.n_lg disable
SHOW GETS
endif
CASE lg_ta=.f.
m.lgot=.F.
SHOW GETS
ENDCASE
RETURN
***********************************************************************************
**
Выбор
начислений
на услуги
**
***********************************************************************************
FUNCTION
KW_INS
M.KWP_L=KW
FUNCTION
GW_INS
M.G_W_L=GW
FUNCTION
XW_INS
M.X_W_L=XW
FUNCTION
KS_INS
M.K_YS_L=KS
FUNCTION
ELC_INS
M.EL_C_L=ELC
FUNCTION
OT_INS
M.OTOP_L=OT
***********************************************************************************
FUNCTION TL2 && Определение
выбора телефона
IF or1=2
m.tel=0
else
m.tel_l=.t.
tl=.t.
endif
RETURN
FUNCTION O_R &&
Недопущение
повтора плательщика
DO CASE
CASE or1=1
r=recno()
y_l=LTRIM(m.yl)
d=LTRIM(m.dom)
k=LTRIM(m.kw_ra)
locate for
yl=y_l.and.dom=d.and.kw_ra=k.and.or_r=1
if found()
if tab#m.tab
activate window vib
@ 0,0 say 'Двое
за 1 квартиру
платить не
могут' color scheme 12
@ 2,1 say 'За
квартиру платит:'
@ 3,2 say fam+
'Таб.'+STR(tab,4)
READ
deactivate window
vib
if red=2
go r
ENDIF
m.or_r=0
or1=0
show get or1,1
RETURN .F.
ENDIF
endif
if red=2
go r
ENDIF
deactivate window
vib
m.or_r=1
@ 8,5 SAY 'ВЫБЕРИТЕ
УСЛУГИ'
SHOW GETS
case or1=0
m.or_r=0
@ 8,0 CLEAR TO
23,29
SHOW GETS
ENDCASE
RETURN
FUNCTION unic &&
Недопущение
повтора табеля
do case
case red=1
SELE a
locate for tab=m.tab
if found()
activate window vib
@ 0,1 say 'Ошибка
ввода табельного
номера' color scheme 12
@ 2,1 say 'Такая
запись в базе
уже есть'
@ 3,2 say
fam+STR(tab,4)
READ
deactivate window
vib
RETURN .F.
ENDIF
ENDCASE
deactivate window
vib
RETURN
PROCEDURE ad_in
&& Процедура
Дополнения/Изменения
m.fam=LTRIM(m.fam)
m.yl=LTRIM(m.yl)
m.dom=LTRIM(m.dom)
m.kw_ra=LTRIM(m.kw_ra)
k_v=m.kv_m
IF m.or_r=0
m.tel=0
m.tel_l=.f.
k_v=0
ENDIF
IF
m.or_r=1.and.!empty(m.tel)
m.tel_l=.t.
tl=.t.
ELSE
m.tel_l=.f.
ENDIF
DO CASE
CASE pod=1
DO CASE
CASE red=1
SELE a
GO top
APPEND BLANK
GATHER MEMVAR
t=tab
r=RECNO()
_REC=RECNO()
y_l=yl
d=dom
k=kw_ra
skip
LOCATE ALL FOR
y_l=yl.and.d=dom.and.k=kw_ra
DO CASE
CASE FOUND()
IF
recno()=r
REPLACE kol_vo WITH
1
ELSE
store kol_vo to
k_l_vo
GO r
REPLACE kol_vo WITH
k_l_vo
go 1
SCAN for
y_l=yl.and.d=dom.and.k=kw_ra
REPLACE kol_vo WITH
kol_vo + 1
IF or_r=1
k_v=kv_m
ENDIF
ENDSCAN
ENDIF
ENDCASE
GO r
REPLACE kv_m WITH
k_v
SELE g
USE TABLE_R
LOCATE ALL FOR tab=t
IF FOUND()=.F.
go top
APPEND BLANK
REPLACE g.tab WITH
a.tab
endif
R_G=RECNO()
SELE a
go r
LOCATE ALL FOR
y_l=yl.and.d=dom.and.k=kw_ra.AND.or_r=1
IF FOUND()
SELE G
GO R_G
KP=KWP_L
G=GW_L
X=XW_L
KY=K_L_L
O=OT_L
R_D=RD_L
T_L=TL_L
E=EL_L
SELE a
GO r
SELE g
REPLACE g.kwp_l WITH
KP,g.tl_l WITH T_L,g.rd_l WITH R_D,;
g.gw_l WITH G,g.xw_l
WITH X,g.k_l_l WITH KY,g.ot_l WITH O,g.el_l WITH E
ENDIF
SELE a
SCATTER MEMVAR BLANK
kw=.F.
gw=.F.
xw=.F.
ks=.F.
ot=.F.
elc=.F.
tl=.F.
rd=.F.
lg_ta=.F.
or1=0
SHOW GETS
_CUROBJ=1
CASE red=2
GO _REC
GATHER MEMVAR
IF
yl_ins=yl.AND.dom_ins=dom.AND.k_ins=kw_ra
RETURN
ELSE
y=yl
d=dom
k=kw_ra
SET FILTER TO
y=yl.AND.d=dom.AND.k=kw_ra
COUNT TO kol
SCAN
REPLACE kol_vo WITH
kol
ENDSCAN
GO TOP
SET FILTER TO
yl_ins=yl.AND.dom_ins=dom.AND.k_ins=kw_ra
COUNT TO kol
SCAN
REPLACE kol_vo WITH
kol
ENDSCAN
SET FILTER TO
GO _REC
ENDIF
ENDCASE
CASE pod=2
CLEAR READ
CASE pod=3
DO DEL
ENDCASE
RETURN
PROCEDURE del &&
Удаление записи
в БАЗЕ RABOT
n=RECNO()
SET DELETE OFF
IF DELETE()
RETURN
ENDIF
GATHER MEMVAR
y_l=yl
d=dom
k=kw_ra
GO TOP
SET FILTER TO
y_l=yl.and.d=dom.and.k=kw_ra
COUNT TO kol
GO TOP
kol=kol-1
SCAN
REPLACE kol_vo WITH
kol
ENDSCAN
SET FILTER TO
GO n
DELETE
SET DELETE ON
SKIP
IF EOF()=.T.
GO TOP
ENDIF
IF WONTOP()='INS'
@ 10,27 CLEAR TO
20,50
=POS_CH1()
SHOW GETS
ENDIF
RETURN
***********************************************************************************
**
Функции
к дополнению
по льготам
(ADD_DEL.PRG)
**
***********************************************************************************
FUNCTION LG_INS
DO CASE
CASE LG_INS=1
m.info=LTRIM(m.info)
LOCATE FOR
m.n_lg=d.n_lg
IF FOUND()
GATHER MEMVAR
SCATTER MEMVAR BLANK
SHOW GETS
ELSE
APPEND BLANK
GATHER MEMVAR
SCATTER MEMVAR BLANK
SHOW GETS
ENDIF
CASE LG_INS=2
CLEAR READ
CASE LG_INS=3
GATHER MEMVAR
DELETE
PACK
SCATTER MEMVAR BLANK
SHOW GETS
ENDCASE
RETURN
FUNCTION UNIC_LG
m=m.n_lg
LOCATE FOR
m.n_lg=d.n_lg
IF FOUND()
SCATTER MEMVAR
SHOW GETS
ELSE
SCATTER MEMVAR BLANK
m.n_lg=m
SHOW GETS
ENDIF
RETURN
***********************************************************************************
**
Функции
К Базам (Bazes.Prg)
**
***********************************************************************************
FUNCTION ins2 && Выбор
Дополнения,
при пустой БАЗЕ
DO CASE
CASE ins1=1
DO INS WITH 1 IN
ADD_DEL
CASE ins1=2
CLEAR READ
ENDCASE
RETURN
PROCEDURE NACH && Функция
отображения
начислений
@ 0,31 clear to
23,79
@ 3,31 to 23,78
double
set color of scheme
13 to N/W,GR/W, N/W, N/W,Gr/W,Gr/W,Gr/W,Gr/W,Gr/W,Gr/W
@ 4,32 fill to 22,77
color scheme 13
@ 3,45 say
'Произведенные
начисления'
@ 4,34 say 'Фамилия'
color scheme 13
@ 4,46 get fam
disable color scheme 13
@ 5,34 say 'Табель'
color scheme 13
@ 5,45 get tab
disable color scheme 13
@ 6,45 get kv_m
picture '###.##' disable color scheme 13
@ 6,34 say
'Площадь'color scheme 13
@ 7,34 say
'Категория'
color scheme 13
@ 7,45 get d.info
disable color scheme 13
@ 8,34 say 'Кол-во
жильцов -
'+ltrim(str(kol(0))) color scheme 13
@ 9,34 say 'Из
них льготников
- ' +ltrim(str(kl_l(0))) COLOR SCHEME 12
@ 7,60 say 'удостов.
N'color scheme 13
@ 7,68 get n_yd
disable color scheme 13
@ 10,58 SAY 'Сумма'
COLOR B/W,,,,,,,,,
@ 10,67 SAY 'На
одного' COLOR B/W,,,,,,,,,
@ 11,35 say
'Сальдо'color scheme 13
@ 11,47 SAY ost_k
color r/W,,,,,,,,,
@ 12,35 say
'Кв-плата'color scheme 13
@ 12,47 get c.kw_pl
disable color scheme 13
@ 12,58 say
LTRIM(STR(c.sum_kw,6,2)) color r/W,,,,,,,,,
@ 13,35 say
'Гор.вода'color scheme 13
@ 13,47 get c.g_w
disable color scheme 13
@ 13,58 say
ltrim(str(c.sum_gw,6,2)) color r/W,,,,,,,,,
@ 14,35 say
'Хол.вода'color scheme 13
@ 14,47 get c.x_w
disable color scheme 13
@ 14,58 say
ltrim(str(c.sum_xw,6,2)) color r/W,,,,,,,,,
@ 15,35 say
'Ком.услуги'color
scheme 13
@ 15,47 get c.k_ysl
disable color scheme 13
@ 15,58 say
ltrim(str(c.sum_kysl,6,2)) color r/W,,,,,,,,,
@ 16,35 say
'Отопление'color
scheme 13
@ 16,47 get c.otopl
disable color scheme 13
@ 16,58 say
ltrim(str(c.sum_ot,6,2)) color r/W,,,,,,,,,
@ 17,35 say
'Радио'color scheme 13
@ 17,47 get c.rad_r
disable color scheme 13
@ 17,58 say
ltrim(str(c.sum_rd,6,2)) color r/W,,,,,,,,,
@ 18,35 say
'Телефон'color scheme 13
@ 18,47 get c.tel_r
disable color scheme 13
@ 18,58 say
ltrim(str(c.sum_tl,6,2)) color r/W,,,,,,,,,
@ 19,35 say
'Э-энергия' color
scheme 13
@ 19,47 get c.el_c
disable color scheme 13
@ 20,35 say
'Начисл.'color scheme 13
@ 20,47 get c.itog_n
disable color scheme 13
@ 20,58 say
LTRIM(STR(C.SUM_IT,7,2)) color r/W,,,,,,,,,
@ 21,32 to 21,77
color scheme 13
@ 22,35 say 'К
оплате' color scheme 13
@ 22,47 get c.itog
disable color scheme 13
@ 12,68 say
LTRIM(STR(c.kw_pll,6,2)) COLOR N/W,,,,,,,,,
@ 13,67 say
ltrim(str(c.g_wl,6,2)) color N/W,,,,,,,,,
@ 14,67 say
ltrim(str(c.x_wl,6,2)) color N/W,,,,,,,,,
@ 15,67 say
ltrim(str(c.k_ysll,6,2)) color N/W,,,,,,,,,
@ 16,67 say
ltrim(str(c.otopll,6,2)) color N/W,,,,,,,,,
@ 18,67 say
ltrim(str(c.tel_rl,6,2)) color N/W,,,,,,,,,
@ 17,67 say
ltrim(str(c.rad_rl,6,2)) color N/W,,,,,,,,,
@ 20,67 SAY
LTRIM(STR(C.ITOG_L,7,2)) color n/w
READ
RETURN
FUNCTION EN &&
Функция для
полей базы
пункта-Работа
с картотекой
ON KEY LABEL enter
DO pop_vib
ON KEY LABEL
rightmouse DO pop_vib && KEYBOARD '{enter}'
RETURN
FUNCTION NE
ON KEY LABEL enter
ON KEY LABEL
rightmouse
RETURN
FUNCTION pop_vib &&
READ-меню
ON KEY LABEL enter
dimension pop(10,1)
store ' Постоянная
часть ' to pop(1)
store ' Начисления
' to pop(2)
store ' Жильцы
' to pop(3)
store ' Плательщики
' to pop(4)
STORE ' Печать
' TO pop(5)
store ' Поиск
' to pop(6)
STORE ' Дополнение
' TO pop(7)
STORE ' Изменение
' TO pop(8)
STORE ' Ввод
оплаты' TO pop(9)
STORE ' Выход
из системы '
TO pop(10)
store 0 to mpop
set color to
w/r,r/w, b/n,r*
@ 8,28 menu
pop(10),10 TITLE 'Выбор за
Вами'
read menu to mpop
set color to
DO CASE
CASE MPOP=1
DO pos_ch
CASE mpop=2
DO nach
CASE mpop=3
DO kv_sch
CASE mpop=4
DO KDR_R
CASE mpop=5
DO print1
CASE mpop=6
ACTIVATE POPUP
POISK
CASE mpop=7
DO ins WITH 1 IN
ADD_DEL
CASE mpop=8
DO ins WITH 2 IN
ADD_DEL
CASE mpop=9
DO vvv IN bazes
CASE mpop=10
DO QUIT
ENDCASE
RETURN
FUNCTION sal &&
Функция отображения
в (поле SAY) остатка
PARAMETERS s
SELE a
DO CASE
CASE EMPTY(opl_ta)
S=c.itog*(-1)
CASE !EMPTY(opl_ta)
op=opl_ta
it=c.itog
S=op-it
REPLACE OST_K WITH
S
ENDCASE
RETURN S
FUNCTION SM &&
Функция сохранения
предыдущего
остатка
IF
!EMPTY(opl_ta).AND.AVS=.F.
ACTIVATE WINDOW vib
@ 0,1 SAY 'Уплачено
' COLOR G+/B
@ 0,10 SAY
ALLTRIM(DTOC(D_OPL))
@ 0,21 SAY ' Сумма
- ' COLOR G+/B
@ 0,30 SAY
LTRIM(STR(opl_ta,7,2))
@ 2,2 GET SV2
FUNCTION '*h Дописать;Переписать'
VALID sv2() DEFAULT 1;
SIZE 1,10,2 color
scheme 7
@ 4,3 GET AVS
FUNCTION '*C Сохранять
автоматически'
READ CYCLE OBJECT 1
DEACTIVATE WINDOWS
VIB
ENDIF
RETURN
FUNCTION SV2 &&
Функция выбора
кнопок
_
DO CASE
CASE SV2=1
CLEAR READ
SHOW GETS
CASE SV2=2
REPLACE OPL_TA WITH
0
SHOW GETS
ENDCASE
RETURN
FUNCTION SV3 &&
Сохранение
os=(opl_ta+opl)-c.itog
REPLACE opl_ta WITH
opl_ta+opl,d_opl WITH dat,ost_k WITH os
RETURN
FUNCTION SAV &&
Выбор кнопок
DO CASE
CASE SAV=1
DO SV3
RELEASE WINDOW
M_ZAR
CASE SAV=2
CLEAR READ
RELEASE WINDOW
M_ZAR
ENDCASE
RETURN
***********************************************************************************
** Статус-строка
в: Картотеке
льготников,
База жильцов,Ввод
оплаты,счетчика
**
***********************************************************************************
FUNCTION INFO
@ 21,0 clear to
24,80
@ 21,1 TO 24,79
DOUBLE
SELE a
R=RECNO()
Y=YL
D=DOM
KV=KW_RA
LOCATE FOR
YL=Y.AND.DOM=D.AND.KW_RA=KV.AND.OR_R=1
IF RECNO()=R
@ 21,1 fill to 24,79
color scheme 12
@ 22,3 say 'Кол-во
жильцов -
'+ltrim(str(kol(0))) color scheme 12
@ 23,3 say 'Из
них льготников
- ' +ltrim(str(kl_l(0))) COLOR SCHEME 12
@ 22,30 say 'К
оплате - ' color scheme 12
@ 22,41 get c.itog
disable color scheme 12
@ 23,30 say 'Сальдо
- 'color scheme 12
@ 23,41 get ost_k
disable color scheme 12
ELSE
@ 21,1 fill to 24,79
color scheme 12
@ 22,5 SAY 'Привязан
к - ' color scheme 12
@ 22,20 SAY
ALLTRIM(FAM)
@ 23,5 SAY 'Табель
- ' color scheme 12
@ 23,20 SAY
ALLTRIM(STR(tab))
endif
GO R
RETURN
FUNCTION INFO3 &&
Статус-строка
в процедуре:
Ввод оплаты
@ 21,0 clear to
24,80
@ 21,1 TO 24,79
DOUBLE
R=RECNO()
Y=YL
D=DOM
KV=KW_RA
@ 21,1 fill to 24,79
color scheme 12
@ 22,3 SAY 'Адрес:
'+YL+' Дом '+dom+' Кв-ра
'+kw_ra
@ 23,3 say 'Кол-во
жильцов -
'+ltrim(str(kol(0))) color scheme 12
@ 23,26 say 'Из
них льготников
- ' +ltrim(str(kl_l(0))) COLOR SCHEME 12
FUNCTION r &&
Функция обновления
при работе с
базой по оплате
счетчика
REPLACE for
tab=c.tab c.el_c WITH _elek*(a.elec1-a.elec),;
c.itog_n WITH
c.itog_n+c.el_c,c.itog WITH c.itog+c.el_c
RETURN
** Функции
к Процедурам
РАСЧЕТОВ
**
***********************************************************************************
**
Процедура
расчета по
квартплате
**
***********************************************************************************
FUNCTION ras_1
DEACTIVATE WINDOW
vib
DO CASE
CASE rs_n=1
CLEAR READ
SELE c
ZAP
APPEND FROM rabot
FIELDS tab,yl,dom,kw_ra,lgot,n_lg,or_r,kol_vo,kw_l,;
tel_l,g_w_l,x_w_l,k_ys_l,el_c_l,otop_l,kv_m
reindex
CLOSE DATA
USE rabot IN a
SET FILTER TO or_r=1
SELECT b
USE oplata
******Создание
новой базы из
двух имеющихся
(RABOT
and OPLATA)*********************
JOIN WITH a TO rach
FOR yl=a.yl.and.dom=a.dom.and.kw_ra=a.kw_ra.and.tab=a.tab;
FIELDS
a.fam,a.yl,a.dom,a.kw_ra,a.tel,a.elec,a.elec1,tab,kw_pl,itog_n,tel_r,;
rad_r,g_w,x_w,k_ysl,otopl,el_c,a.kol_vo,a.kw_l,a.tel_l,a.rad_l,a.g_w_l,a.x_w_l,;
a.k_ys_l,a.el_c_l,a.otop_l,a.kv_m &&
Вспомогательная
база (слияние
двух баз)
***********************************************************************************
CLOSE DATA
SELE a
USE rach
IF .NOT.
FILE('rach.cdx')
INDEX ON tab TAG
tab
INDEX ON fam TAG
fam
INDEX ON
yl+dom+kw_ra+str(tab) TAG adrr UNIQUE
ENDIF
SELE c
USE rabot
SET ORDER TO ADRR
SELE g
USE table_r
SET ORDER TO tab
SELE rach
SET RELA TO
yl+dom+kw_ra+str(tab) INTO c ADDI
SET RELA TO TAB INTO
g ADDI
**
РАСЧЕТ
**
REPLACE ALL kw_pl
WITH IIF(g.kwp_l=0,_kv_pl,g.kwp_l)*IIF(kw_l=.t.,kv_m,0),;
g_w WITH
IIF(g.gw_l=0,_gor_w,g.gw_l)*IIF(g_w_l=.t.,kol_vo,0),;
x_w WITH
IIF(g.xw_l=0,_xol_w,g.xw_l) *IIF(x_w_l=.t.,kol_vo,0),;
k_ysl WITH
IIF(g.k_l_l=0,_kom,g.k_l_l)*IIF(k_ys_l=.t.,kol_vo,0),;
otopl WITH
IIF(g.ot_l=0,_otopl,g.ot_l)*IIF(otop_l=.t.,kv_m,0),;
tel_r WITH
IIF(g.tl_l=0,_tel,g.tl_l)*IIF(tel_l=.t.,IIF(empty(tel),0,1),0),;
rad_r WITH
IIF(g.rd_l=0,_rad,g.rd_l)*IIF(rad_l=.t.,1,0),;
el_c WITH
IIF(g.el_l=0,_elek,g.el_l)*IIF(el_c_l=.t.,(elec1-elec),0)
REPLACE ALL itog_n
WITH kw_pl+tel_r+rad_r+g_w+x_w+k_ysl+el_c+otopl
CALCULATE
SUM(KW_PL),SUM(G_W),SUM(X_W),SUM(K_YSL),SUM(OTOPL),SUM(RAD_R),;
SUM(TEL_R),SUM(EL_C),SUM(ITOG_N)
TO
SKW,SG,SX,SK,SOT,SR,ST,SEL,SM
@ 22,0 SAY 'Кв.плата
Гор.вода Хол.вода
Ком.усл Отопление
Э\энер.Телеф.
Радио;
ИТОГ '
@ 23,0 SAY
LTRIM(STR(SKW,9,2))
@ 23,9 SAY
LTRIM(STR(SG,9,2))
@ 23,18 SAY
LTRIM(STR(SX,9,2))
@ 23,27 SAY
LTRIM(STR(SK,9,2))
@ 23,36 SAY
LTRIM(STR(SOT,9,2))
@ 23,46 SAY
LTRIM(STR(SEL,9,2))
@ 23,53 SAY
LTRIM(STR(ST,9,2))
@ 23,61 SAY
LTRIM(STR(SR,7,2))
@ 23,68 SAY
LTRIM(STR(SM,9,2))
ON KEY LABEL esc DO
vib_8
ON KEY LABEL ctrl+w
DO vib_8
ON KEY LABEL ctrl+q
DO vib_8
ON KEY LABE F5
ACTIVATE POPUP poisk
BROWSE TITLE 'F1 -
Помощь ESC - выход
F5 - Поиск' FIELDS;
tab :h='Таб',;
fam
:h='Фамилия' ,;
kw_pl
:h='Кв.пл.' :W=INFO1() :V=INFO2() :F,;
g_w
:h='Гор.вода' :W=INFO1()
:V=INFO2() :F,;
x_w
:h='Хол.вода' :W=INFO1()
:V=INFO2() :F,;
k_ysl
:h='Ком.усл' :W=INFO1()
:V=INFO2() :F,;
otopl
:h='Отопл.' :W=INFO1() :V=INFO2() :F,;
tel_r
:h='Телефон' :W=INFO1()
:V=INFO2() :F,;
rad_r
:h='Радио' :W=INFO1() :V=INFO2() :F,;
el_c
:h='Энергия' :W=INFO1()
:V=INFO2() :F,;
itog_n
:H='Итог' :W=INFO1() :V=INFO2() :F;
WIND KDR COLOR
SCHEME 12
RELEASE
SKW,SG,SX,SK,SOT,SR,ST,SEL,SM,F
clear
CASE rs_n=2
CLEAR READ
DEACTIVATE WINDOW
vib
ENDCASE
RETURN
***********************************************************************************
PROCEDURE vib_8 && выбор
сохранение
данных расчета
ON KEY LABE esc
ON KEY LABEL ctrl+w
ON KEY LABEL ctrl+q
DEACTIVATE WINDOW
kdr
ACTIVATE WINDOW vib
@ 2,10 SAY
'Сохранить
данные'
@ 0,0 FILL TO 8,43
COLOR W+/R
@ 5,7 GET rs_1
FUNCTION '*TH Сохранить;Отмена'
VALID ras_2() DEFAULT 1;
SIZE 1,9,4 COLOR
,,,,w+/n,w+/n,w+/n,,W+/R,
READ CYCLE OBJECT
1
RETURN
FUNCTION ras_2 &&
сохранение
данных расчета
DO CASE
CASE rs_1=1
DEACTIVATE WINDOW
vib
CLEAR READ
SELE f
use oplata
UPDATE ON tab FROM a
REPLACE kw_pl WITH a.kw_pl, g_w WITH a.g_w,;
tel_r WITH
a.tel_r,rad_r WITH a.rad_r,k_ysl WITH a.k_ysl, el_c WITH a.el_c,;
otopl WITH
a.otopl,x_w WITH a.x_w,itog_n WITH a.itog_n RANDOM
SELE a
set rela to
USE
ERASE rach.dbf
ERASE rach.cdx
close data
do open
ACTIVATE WINDOW VIB
@ 2,10 SAY
'Рассчитать
льготы'
@ 0,0 FILL TO 8,43
COLOR W+/R
@ 5,12 GET rs_l
FUNCTION '*TH Да;Нет' DEFA 1 SIZE
1,4,4;
COLOR
,,,,w+/n,w+/n,w+/n,,w+/r,
READ CYCLE OBJECT 1
DO CASE
CASE rs_l=1
DEACTIVATE WINDOW
vib
CLEAR READ
DO ras_l
CASE rs_l=2
CLEAR READ
DEACTIVATE WINDOW
vib
ENDCASE
CASE rs_1=2
DEACTIVATE WINDOW
vib
SET RELA TO
USE
CLEAR READ
DEACTIVATE WINDOW
kdr
ERASE rach.dbf
ERASE rach.cdx
CLOSE DATA
DO open
ENDCASE
RETURN
***********************************************************************************
**
Процедура
расчета по
льготам
**
***********************************************************************************
FUNCTION ras_lg
DEACTIVATE WINDOW
vib
DO CASE
CASE rs_lg=1
CLEAR READ
CLOSE DATA
USE rabot IN a
**********************************Альтернатива*************************************
** SET FILTER TO
lgot=.t..AND.EMPTY(dat_c).AND.; ** **
EMPTY(dat_po).OR.BETWEEN(date(),dat_c,dat_po)
**
SET ORDER TO DATE
SELECT b
USE oplata
******Создание
новой базы из
двух имеющихся
(RABOT
and OPLATA)*********************
JOIN WITH a TO
rach_l FOR yl=a.yl.and.dom=a.dom.and.kw_ra=a.kw_ra.and.tab=a.tab;
FIELDS
a.fam,a.yl,a.dom,a.kw_ra,a.tel,a.elec,a.elec1,a.n_lg,tab,kw_pll,itog_l,;
kv_m,tel_rl,rad_rl,g_wl,x_wl,k_ysll,otopll,el_cl,a.kol_vo,a.kw_l,a.tel_l,a.rad_l,;
a.g_w_l,a.x_w_l,a.k_ys_l,a.el_c_l,a.otop_l
***********************************************************************************
CLOSE DATA
SELE a
USE rach_l
IF .NOT.
FILE('rach_l.cdx')
INDEX ON tab TAG
tab
INDEX ON fam TAG
fam
INDEX ON n_lg TAG
n_lg
INDEX ON
yl+dom+kw_ra+str(tab) TAG adrr
ENDIF
SET ORDER TO tab
SELE c
USE rabot
SET ORDER TO adrr
SELE d
USE lgot
SET ORDER TO n_lg
SELE g
USE TABLE_R
SET ORDER TO tab
SELE rach_l
SET RELA TO n_lg
INTO d ADDI
SET RELA TO
yl+dom+kw_ra+str(tab) into c ADDI
SET RELA TO tab INTO
g ADDI
***********************************************************************************
**
РАСЧЕТ
**
***********************************************************************************
REPLACE ALL kw_pll
WITH
(IIF(g.kwp_l=0,_kv_pl,g.kwp_l)*IIF(kw_l=.t.,(kv_m/kol_vo),0))*d.kwp_l*(-1),;
g_wl WITH
(IIF(g.gw_l=0,_gor_w,g.gw_l)*IIF(g_w_l=.t.,(-1),0))*d.gw_l,x_wl WITH;
(IIF(g.xw_l=0,_xol_w,g.xw_l)*IIF(x_w_l=.t.,(-1),0))*d.xw_l,k_ysll
WITH;
(IIF(g.k_l_l=0,_kom,g.k_l_l)*IIF(k_ys_l=.t.,(-1),0))*d.k_l_l,otopll
WITH;
(IIF(g.ot_l=0,_otopl,g.ot_l)*IIF(otop_l=.t.,(kv_m/kol_vo),0))*d.ot_l*(-1),;
rad_rl WITH
(IIF(g.rd_l=0,_rad,g.rd_l)*IIF(rad_l=.t.,1,0))*d.rd_l*(-1),tel_rl
WITH;
(IIF(g.tl_l=0,_tel,g.tl_l)*IIF(tel_l=.t.,1,0))*d.tl_l*(-1)
REPLACE ALL itog_l
WITH kw_pll+g_wl+x_wl+k_ysll+otopll+tel_rl+rad_rl
CALCULATE
SUM(KW_PLL),SUM(G_WL),SUM(X_WL),SUM(K_YSLL),SUM(OTOPLL),SUM(RAD_RL),;
SUM(TEL_RL),SUM(EL_CL),SUM(ITOG_L)
TO
SKW,SG,SX,SK,SOT,SR,ST,SEL,SM
CLEAR
@ 22,0 SAY 'Кв.плата
Гор.вода Хол.вода
Ком.усл Отопление
Э\энер.Телеф.
Радио;
ИТОГ '
@ 23,0 SAY
LTRIM(STR(SKW,9,2))
@ 23,9 SAY
LTRIM(STR(SG,9,2))
@ 23,18 SAY
LTRIM(STR(SX,9,2))
@ 23,27 SAY
LTRIM(STR(SK,9,2))
@ 23,36 SAY
LTRIM(STR(SOT,9,2))
@ 23,46 SAY
LTRIM(STR(SEL,9,2))
@ 23,53 SAY
LTRIM(STR(ST,9,2))
@ 23,61 SAY
LTRIM(STR(SR,7,2))
@ 23,68 SAY
LTRIM(STR(SM,9,2))
ON KEY LABEL esc DO
vib_9
ON KEY LABEL F5
ACTIVATE POPUP poisk
ON KEY LABEL ctrl+w
DO vib_8
ON KEY LABEL ctrl+q
DO vib_8
BROWSE TITLE ' F1 -
Помощь ESC - выход
F5 - Поиск' FIELDS;
tab :h='Таб',;
fam
:h='Фамилия',;
kw_pll
:h='Кв.пл.' :W=INFO4() :V=INFO5() :F,;
g_wl
:h='Гор.вода':W=INFO4()
:V=INFO5() :F,;
x_wl
:h='Хол.вода' :W=INFO4()
:V=INFO5() :F,;
k_ysll
:h='Ком.усл' :W=INFO4()
:V=INFO5() :F,;
otopll
:h='Отопл.' :W=INFO4() :V=INFO5() :F,;
tel_rl
:h='Телефон' :W=INFO4()
:V=INFO5() :F,;
rad_rl
:h='Радио' :W=INFO4() :V=INFO5() :F,;
el_cl
:h='Энергия' :W=INFO4()
:V=INFO5() :F,;
itog_l
:H='Итог' :W=INFO4() :V=INFO5() :F;
WIND KDR COLOR
SCHEME 12
RELEASE
SKW,SG,SX,SK,SOT,SR,ST,SEL,SM,F
CASE rs_lg=2
CLEAR READ
DEACTIVATE WINDOW
vib
ENDCASE
PROCEDURE vib_9
ON KEY LABE esc
ON KEY LABEL ctrl+w
ON KEY LABEL ctrl+q
DEACTIVATE WINDOW
kdr
ACTIVATE WINDOW vib
@ 2,10 SAY
'Сохранить
данные'
@ 0,0 FILL TO 8,43
COLOR W+/R
@ 5,7 GET rs_lg_1
FUNCTION '*h Сохранить;Отмена'
DEFAULT 1;
SIZE 1,9,4 COLOR
,,,,w+/n,w+/n,w+/n,,W+/R,
READ CYCLE OBJECT 1
DO CASE
CASE rs_lg_1=1
DEACTIVATE WINDOW
vib
SELE f
USE OPLATA
UPDATE ON tab FROM a
REPLACE kw_pll WITH a.kw_pll, g_wl WITH a.g_wl,;
tel_rl WITH
a.tel_rl,rad_rl WITH a.rad_rl,k_ysll WITH a.k_ysll,;
el_cl WITH
a.el_cl,otopll WITH a.otopll,x_wl WITH a.x_wl,itog_l WITH a.itog_l
SELE a
USE
ERASE rach_l.dbf
ERASE rach_l.cdx
ERASE date.idx
CLOSE DATA
CLEAR
DO open
CASE rs_lg_1=2
DEACTIVATE WINDOW
vib
SELE a
USE
ERASE rach_l.dbf
ERASE rach_l.cdx
ERASE date.idx
ENDCASE
DO open
***********************************************************************************
** Расчет
(квартплата
- льготы = к оплате)
**
***********************************************************************************
PROCEDURE ras_3
DO CASE
CASE rs_i=1
DEACTIVATE WINDOW
vib
CLEAR READ
CLEAR
@ 12,35 SAY 'Идет
расчет'
close data
use oplata in a
set order to adr
sele b
use rabot
set order to adrr
sele a
m=RECCOUNT()
go top
DO WHILE !EOF()
y_l=yl
do while y_l=yl
d=dom
do while y_l=yl AND
d=dom
k=kw_ra
STORE 0 TO
it_l,s_kw,s_gw,s_xw,s_kysl,s_ot,s_tl,s_rd
scan while
yl=y_l.and.dom=d.and.kw_ra=k
&&.and.a.yl=y_l.and.a.dom=d.and.a.kw_ra=k
IF or_r=1
it=itog_n
r=RECNO()
ENDIF
IF lgot=.T.
it_l=itog_l+it_l
s_kw=kw_pll+s_kw
s_gw=g_wl+s_gw
s_xw=x_wl+s_xw
s_kysl=k_ysll+s_kysl
s_ot=otopll+s_ot
s_tl=tel_rl+s_tl
s_rd=rad_rl+s_rd
ENDIF
ENDSCAN
n=RECNO()
os=it+it_l
GO r
t=tab
REPLACE itog WITH
os,sum_it WITH it_l,sum_kw WITH s_kw,sum_gw WITH s_gw,;
sum_xw WITH
s_xw,sum_ot WITH s_ot,sum_tl WITH s_tl,sum_rd WITH s_rd,;
sum_kysl WITH s_kysl
sele b &&
Определение
остатка(задолженности)
locate for
tab=t &&
квартиросъемщика
if
found().and.empty(opl_ta)
replace ost_k WITH
os*(-1)
else
REPLACE ost_k WITH
opl_ta-os
ENDIF
sele a
IF N>M
DO BROW_OPL
RETURN
ELSE
GO n
ENDIF
enddo
enddo
enddo
deactivate window
vib
CASE rs_i=2
clear read
deactivate window
vib
ENDCASE
RETURN
FUNCTION BROW_OPL &&
Просмотр начислений
DO open
SET PROCEDURE TO
func
ON KEY LABE F5
ACTIVATE POPUP poisk
STORE .T. TO
_PAD_OTCH
BROWSE FOR or_r=1
TITLE 'ESC - выход F5 - Поиск'
FIELDS;
tab :h='Таб.'
:W=INFO3(),;
fam :h='Фамилия'
:W=INFO3() :25,;
lg=IIF(lgot=.t.,'v','')
:1 :h='' :W=INFO3(),;
c.itog :h='К
оплате':10 :W=INFO3(),;
x=iif(or_r=1,'=','')
:h='' :W=INFO3(),;
c.itog_n
:h='Начислен':10
:W=INFO3(),;
y=iif(or_r=1,'+','')
:h='' :W=INFO3(),;
c.sum_it :h='По
льготе' :10 :W=INFO3();
WIND kdr COLOR
SCHEME 12
ON KEY
CLEAR
RETURN
**
Функция
отображения
суммы начислений
по квартплате
**
** в
процедуре
расчета по
квартплате
(просмотр начислений)
**
***********************************************************************************
FUNCTION INFO1
DO CASE
CASE
VARREAD()='Kw_pl'
@ 22,0 fill to
23,8 COLOR SCHEME 12
CASE
VARREAD()='G_w'
@ 22,8 fill to
23,17 COLOR SCHEME 12
CASE
VARREAD()='X_w'
@ 22,17 fill to
23,26 COLOR SCHEME 12
CASE
VARREAD()='K_ysl'
@ 22,26 fill to
23,35 COLOR SCHEME 12
CASE
VARREAD()='Otopl'
@ 22,35 fill to
23,45 COLOR SCHEME 12
CASE
VARREAD()='El_c'
@ 22,45 fill to
23,52 COLOR SCHEME 12
CASE
VARREAD()='Tel_r'
@ 22,52 fill to
23,60 COLOR SCHEME 12
CASE
VARREAD()='Rad_r'
@ 22,60 fill to
23,67 COLOR SCHEME 12
CASE
VARREAD()='Itog_n'
@ 22,67 fill to
23,79 COLOR SCHEME 12
ENDCASE
RETURN
FUNCTION INFO2 && Функция
отображения
суммы начислений
по квартплате
DO CASE &&
в процедуре
расчета по
квартплате
(просмотр начислений)
CASE
VARREAD()='Kw_pl'
@ 22,0 fill to
23,8 COLOR SCHEME 1
CASE
VARREAD()='G_w'
@ 22,8 fill to
23,17 COLOR SCHEME 1
CASE
VARREAD()='X_w'
@ 22,17 fill to
23,26 COLOR SCHEME 1
CASE
VARREAD()='K_ysl'
@ 22,26 fill to
23,35 COLOR SCHEME 1
CASE
VARREAD()='Otopl'
@ 22,35 fill to
23,45 COLOR SCHEME 1
CASE
VARREAD()='El_c'
@ 22,45 fill to
23,52 COLOR SCHEME 1
CASE
VARREAD()='Tel_r'
@ 22,52 fill to
23,60 COLOR SCHEME 1
CASE
VARREAD()='Rad_r'
@ 22,60 fill to
23,67 COLOR SCHEME 1
CASE
VARREAD()='Itog_n'
@ 22,67 fill to
23,79 COLOR SCHEME 1
ENDCASE
FUNCTION INFO4
&& Функция
отображения
суммы начислений
по квартплате
DO CASE
&& в процедуре
расчета по
квартплате
(просмотр начислений)
CASE
VARREAD()='Kw_pll'
@ 22,0 fill to
23,8 COLOR SCHEME 12
CASE
VARREAD()='G_wl'
@ 22,8 fill to
23,17 COLOR SCHEME 12
CASE
VARREAD()='X_wl'
@ 22,17 fill to
23,26 COLOR SCHEME 12
CASE
VARREAD()='K_ysll'
@ 22,26 fill to
23,35 COLOR SCHEME 12
CASE
VARREAD()='Otopll'
@ 22,35 fill to
23,45 COLOR SCHEME 12
CASE
VARREAD()='El_cl'
@ 22,45 fill to
23,52 COLOR SCHEME 12
CASE
VARREAD()='Tel_rl'
@ 22,52 fill to
23,60 COLOR SCHEME 12
CASE
VARREAD()='Rad_rl'
@ 22,60 fill to
23,67 COLOR SCHEME 12
CASE
VARREAD()='Itog_l'
@ 22,67 fill to
23,79 COLOR SCHEME 12
ENDCASE
RETURN
FUNCTION INFO5 &&
Функция отображения
суммы начислений
по квартплате
DO CASE &&
в процедуре
расчета по
квартплате
(просмотр начислений)
CASE
VARREAD()='Kw_pll'
@ 22,0 fill to
23,8 COLOR SCHEME 1
CASE
VARREAD()='G_wl'
@ 22,8 fill to
23,17 COLOR SCHEME 1
CASE
VARREAD()='X_wl'
@ 22,17 fill to
23,26 COLOR SCHEME 1
CASE
VARREAD()='K_ysll'
@ 22,26 fill to
23,35 COLOR SCHEME 1
CASE
VARREAD()='Otopll'
@ 22,35 fill to
23,45 COLOR SCHEME 1
CASE
VARREAD()='El_cl'
@ 22,45 fill to
23,52 COLOR SCHEME 1
CASE
VARREAD()='Tel_rl'
@ 22,52 fill to
23,60 COLOR SCHEME 1
CASE
VARREAD()='Rad_rl'
@ 22,60 fill to
23,67 COLOR SCHEME 1
CASE
VARREAD()='Itog_l'
@ 22,67 fill to
23,79 COLOR SCHEME 1
ENDCASE
RETURN
***********************************************************************************
**
Функция
перехвата
ошибок
**
***********************************************************************************
FUNCTION EROR
PARAMETERS ER
DO CASE
CASE ER=114
! DEL *.CDX
DO OPEN
CASE ER=1707
DO CASE
CASE SELECT()=1
USE RABOT
CASE SELE()=3
USE OPLATA
CASE SELE()=4
USE LGOT
CASE SELE()=7
USE TABLE_R
ENDCASE
ENDCASE
RETURN
FUNCTION
RAS_ON_ONE && Расчет
на одного жильца
в окне (INS-Работа
с картотекой)
IF
OR_R=0
RETURN
ELSE
R=RECNO()
t=tab
ORD_R=ORDER()
SET
ORDER TO 0
Y=YL
D=DOM
K=KW_RA
SELE
c
ORD_C=ORDER()
set
order to tab
locate
for t=tab
DO
CASE
CASE
FOUND()=.F.
SELE
a
SET
FILTER TO YL=Y.AND.DOM=D.AND.KW_RA=K
GO
TOP
SELE
c
APPEND
FROM rabot FIELDS tab,yl,dom,kw_ra,lgot,n_lg,or_r,kol_vo,kw_l,tel,;
tel_l,rad_l,g_w_l,x_w_l,k_ys_l,el_c_l,otop_l,kv_m,elec,elec1,dat_c,dat_po
CASE
FOUND()
sele
a
SET
SKIP TO
SET
RELA TO
SET
ORDER TO tab
SELE
c
UPDATE
ON tab FROM a REPLACE lgot WITH a.lgot,n_lg WITH a.n_lg,or_r WITH
a.or_r,;
kol_vo
WITH a.kol_vo,kw_l WITH a.kw_l,tel_l WITH a.tel_l,g_w_l WITH
a.g_w_l,;
x_w_l
WITH a.x_w_l,k_ys_l WITH a.k_ys_l,el_c_l WITH a.el_c_l,otop_l WITH
a.otop_l,;
rad_l
WITH a.rad_l,kv_m WITH a.kv_m,elec WITH a.elec,elec1 WITH a.elec1,;
dat_c
WITH a.dat_c,;
dat_po
WITH a.dat_po,tel WITH a.tel
endcase
SELE
a
SET
SKIP TO
SET
RELA TO
SELE
c
set
rela to tab into g
set
rela to n_lg into d ADDI
SET
SKIP TO g,d
SET
FILTER TO YL=Y.AND.DOM=D.AND.KW_RA=K
GO
TOP
REPLACE
ALL kw_pll WITH 0,g_wl WITH 0,x_wl WITH 0,k_ysll WITH 0,;
otopll
WITH 0,rad_rl WITH 0,tel_rl WITH 0,itog_l WITH 0,;
itog
WITH 0,sum_it WITH 0,sum_kw WITH 0,sum_gw WITH 0,;
sum_xw
WITH 0,sum_ot WITH 0,sum_tl WITH 0,sum_rd WITH 0,sum_kysl WITH 0
GO
TOP
SCAN
IF
OR_R=1
REPLACE
c.kw_pl WITH IIF(g.kwp_l=0,_kv_pl,g.kwp_l)*IIF(kw_l=.t.,kv_m,0),;
c.g_w
WITH IIF(g.gw_l=0,_gor_w,g.gw_l)*IIF(g_w_l=.t.,kol_vo,0),;
c.x_w
WITH IIF(g.xw_l=0,_xol_w,g.xw_l) *IIF(x_w_l=.t.,kol_vo,0),;
c.k_ysl
WITH IIF(g.k_l_l=0,_kom,g.k_l_l)*IIF(k_ys_l=.t.,kol_vo,0),;
c.otopl
WITH IIF(g.ot_l=0,_otopl,g.ot_l)*IIF(otop_l=.t.,kv_m,0),;
c.tel_r
WITH IIF(g.tl_l=0,_tel,g.tl_l)*IIF(tel_l=.t.,IIF(empty(tel),0,1),0),;
c.rad_r
WITH IIF(g.rd_l=0,_rad,g.rd_l)*IIF(rad_l=.t.,1,0),;
c.el_c
WITH IIF(g.el_l=0,_elek,g.el_l)*IIF(el_c_l=.t.,(elec1-elec),0)
REPLACE
c.itog_n WITH
c.kw_pl+c.tel_r+c.rad_r+c.g_w+c.x_w+c.k_ysl+c.el_c+c.otopl
ENDIF
ENDSCAN
SET
FILTER TO
go
top
SET
FILTER TO YL=Y.AND.DOM=D.AND.KW_RA=K.AND.lgot=.t.
go
top
scan
FOR EMPTY(dat_c).AND.EMPTY(dat_po).OR.BETWEEN(date(),dat_c,dat_po)
REPLACE
kw_pll WITH;
(IIF(g.kwp_l=0,_kv_pl,g.kwp_l)*IIF(kw_l=.t.,(kv_m/kol_vo),0))*d.kwp_l*(-1),;
g_wl
WITH (IIF(g.gw_l=0,_gor_w,g.gw_l)*IIF(g_w_l=.t.,(-1),0))*d.gw_l,x_wl;
WITH
(IIF(g.xw_l=0,_xol_w,g.xw_l)*IIF(x_w_l=.t.,(-1),0))*d.xw_l,;
k_ysll
WITH (IIF(g.k_l_l=0,_kom,g.k_l_l)*IIF(k_ys_l=.t.,(-1),0))*d.k_l_l,;
otopll
WITH (IIF(g.ot_l=0,_otopl,g.ot_l)*IIF(otop_l=.t.,(kv_m/kol_vo),0))*;
d.ot_l*(-1),rad_rl
WITH (IIF(g.rd_l=0,_rad,g.rd_l)*IIF(rad_l=.t.,1,0))*;
d.rd_l*(-1),tel_rl
WITH (IIF(g.tl_l=0,_tel,g.tl_l)*IIF(tel_l=.t.,1,0))*d.tl_l*(-1)
REPLACE
itog_l WITH kw_pll+g_wl+x_wl+k_ysll+otopll+tel_rl+rad_rl
endscan
go
top
CALCULATE
SUM(KW_PLL),SUM(G_WL),SUM(X_WL),SUM(K_YSLL),SUM(OTOPLL),;
SUM(RAD_RL),SUM(TEL_RL),SUM(EL_CL),SUM(ITOG_L);
TO
SKW,SG,SX,SK,SOT,SR,ST,SEL,SM
go
top
set
filter to
os=0
OST=0
SET
FILTER TO YL=Y.AND.DOM=D.AND.KW_RA=K
go
top
scan
IF
or_r=1
os=itog_n+SM
REPLACE
itog WITH os,sum_it WITH SM,sum_kw WITH SKW ,sum_gw WITH SG,;
sum_xw
WITH SX,sum_ot WITH SOT,sum_tl WITH ST,sum_rd WITH SR,;
sum_kysl
WITH SK
ENDIF
ENDSCAN
SET
FILTER TO
SET
SKIP TO
set
rela to
set
order to &ord_c
SELE
a
SET
FILTER TO
go
r
REPLACE
ost_k WITH os-opl_ta
DO
OPEN
GO
R
@
10,27 CLEAR TO 20,51
=POS_CH1()
SHOW
GETS
SET
ORDER TO &ORD_R
ENDIF
RETURN
***********************************************************************************
** Функция
заполнения
и изменения
тарифов («СЕРВИС»-«Тарифы»)
**
***********************************************************************************
FUNCTION
TARIFS_zar && Окно
тарифов, при
выборе пункта
меню «СЕРВИС»-«Тарифы»
HIDE
POPUP serv
ON
KEY
on
key label ESC do ret_ecs
sele
a
_REC=RECNO()
sele
f
DEFINE
WINDOW m_zar1 FROM 5,12 TO 20,66 FILL '-'COLOR SCHEME 18
DEFINE
MENU TARIFS
DEFINE
PAD vibor OF TARIFS PROMPT 'Просмотр'
DEFINE
PAD apend OF TARIFS PROMPT 'Добавить'
DEFINE
PAD exit OF TARIFS PROMPT 'Выйти'
ON
PAD vibor OF TARIFS ACTIVATE POPUP TAR_S
ON
SELECTION PAD apend OF TARIFS DO INS_ST WITH PROMPT()
ON
SELECTION PAD exit OF TARIFS DO INS_ST WITH PROMPT()
DEFINE
POPUP TAR_S FROM 1,1 TITLE;
'Описание
тарифа--------|-Ставка-|-Расчен
на-|';
PROMPT
FIELD info+'|'+STR(st_ka,8,2)+'|'+k_info
ON
SELECTION POPUP TAR_S DO INS_REC WITH PROMPT(),RECNO()
ACTIVATE
WINDOW M_ZAR1
ACTIVATE
MENU TARIFS
on
key label ESC
DEACTIVATE
WINDOW M_ZAR1
RETURN
FUNCTION
INS_rec
PARAMETERS
mprompt,mrecno
hide
popup TAR_S
SELE
F
if
empty(mprompt)
go
mrecno
delete
else
go
mrecno
SCATTER
MEMVAR
@
2,2 SAY 'Введите описание
тарифа'
@
3,2 get m.info
@
5,2 SAY 'Ставка - 'get m.st_ka
PICTURE '##.##'
@
7,2 GET ras_on FUNCTION '*R На 1 кв.метр;На
1-го чел' VALID kv_chel() defa 1 COLOR
SCHEME 16
@
10,2 GET ras_on1 FUNCTION '*H Сохранить;Отказ'
VALID del_rec1() defa 1;
COLOR
SCHEME 15 size 1,10,4
@
12,8 GET del_rec FUNCTION '*H Удалить'
VALID del_rec() defa 1;
size
1,10,4
READ
CYCLE
ENDIF
PACK
FUNCTION
ret_ecs
DEACTIVATE
WINDOW M_ZAR1
DEACTIVATE
MENU
FUNCTION
DEL_REC
delete
clear
RETURN
FUNCTION
DEL_REC1
DO
CASE
CASE
ras_on1=1
IF
m.k_ch=.t.
m.k_info='На
1-го чел.'
ELSE
m.k_info='На
1 кв.метр'
ENDIF
GATHER
MEMVAR
CASE
ras_on1=2
clear
READ
ENDCASE
CLEAR
RETURN
Страница
-
58
Приложение
№ 1.2 из
- 58
Стартующий
файл
– MENI.PRG
***********************************************************************
** Основной
загрузочный
модуль
**
***********************************************************************
SET
ESCAPE OFF
CLEAR
MACROS
SET
DELETE ON
SET
SAFETY OFF
SET
DATE GERMAN
SET
HEADING OFF
SET
TALK OFF
SET
STATUS OFF
SET
CENTURY ON
SET
COLOR OF SCHEME 12 TO N/W,GR/W,
GR+/B,GR+/B,GR+/B,GR/N,GR/W,GR/W,GR/W,GR/W
SET
COLOR OF SCHEME 14 TO N/W,GR/W, N/W,
N/W,GR/W,W/GR,GR/W,GR/W,GR/W,W+/W
SET
COLOR OF SCHEME 15 TO W/B,W/BG, N/W,
N/W,GR/W,W/GR+,GR/W,GR/W,GR/W,B/W+
SET
COLOR OF SCHEME 16 TO W+/BG,W+/BG,
R/BG,N/BG,W+/BG,W+/GR,W+/BG,W+/BG,W+/BG,N/BG
SET
COLOR OF SCHEME 17 TO N/G,B/W+, N/W,
N/W,GR/W,W/GR+,GR/W,GR/W,GR/W,W/BG
SET
COLOR OF SCHEME 18 TO W+/B,N/W, N/W, N/W,GR/W,B/W,B/W,GR/W,GR/W,B/W+
SET
COLOR OF SCHEME 19 TO GR+/RB,W+/R, N/R,
N/R,GR/W,B/R,GR/W,GR/W,N/R,W+/RB
SET
PROC TO FUNC
ON
ERROR DO EROR WITH ERROR()
DO
open
PUBLIC
_PAD_OTCH, _REC,_FILTR,
DIMENSION
mes(4,3)
mes(1,1)='Январь'
mes(1,2)='Февраль'
mes(1,3)='Март'
mes(2,1)='Апрель'
mes(2,2)='Май'
mes(2,3)='Июнь'
mes(3,1)='Июль'
mes(3,2)='Август'
mes(3,3)='Сентябрь'
mes(4,1)='Октябрь'
mes(4,2)='Ноябрь'
mes(4,3)='Декабрь'
mess=month(date())
_tel=0 &&
телефон
_pod=SPACE(15) &&
подпись
_rad=0 &&
радио-точка
_kom=0 &&
коммунальные
услуги
_gor_w=0 &&
горячая вода
_xol_w=0 &&
холодная вода
_otopl=0 &&
отопление
_elek=0 &&
электро-энергия
_kv_pl=0 &&
квартплата
avs=.f. &&
автосохранение
в функции ввода
оплаты
IF
FILE('M_ZAR.MEM')
RESTORE
FROM m_zar ADDITIVE
ENDIF
_POS_CH=.T. &&
Переменная
для формирования
отчета
***(Принимает
значение - .F. в
процедуре
ДОПОЛНЕНИЕ/ИЗМЕНЕНИЕ
***
в процедуре
РАСЧЕТА(СЛИЯНИЯ)
принимает
значение - .T.)
_REC=RECNO()
_FILTR=1
***********************************************************************
**
Определение
окон
**
***********************************************************************
DEFINE
WINDOW poisk SHADOW FROM 15,20 TO 18,50;
TITLE
'Укажите ключ'
DEFINE
WINDOW kdr FROM 1,0 TO 20,80 DOUBLE;
FOOTER
'F3 - Меню F5 - Поиск'
COLOR W+/B,N/BG,n/w,W+/W+,N+/GR,N/BG,N/BG,N/BG,N/BG,N/BG
DEFINE
WINDOW INS FROM 0,0 TO 24,80 GROW MINIMIZE FLOAT;
FOOTER
'F1 - помощь' COLOR SCHEME 12
DEFINE
WINDOW vib FROM 8,14 TO 16,57 SHADOW COLOR SCHEME 7
***********************************************************************
**
Определение
меню
**
***********************************************************************
DEFINE MENU ZAR KEY
F3
DEFINE PAD kadr OF
zar PROMPT '\<Кадры';
message 'Работа
с картотекой'
DEFINE PAD norm OF
zar PROMPT '\<Нормативы';
message
'Ввод\просмотр
нормативно-справочной
информации'
DEFINE PAD prin OF
zar PROMPT '\<Просмотр';
message
'БУХГАЛТЕРСКАЯ
информация'
DEFINE PAD print OF
zar PROMPT 'П\<ечать'
DEFINE PAD serv OF
zar PROMPT '\<Сервис'
DEFINE PAD ras OF
zar PROMPT '\<Расчет';
MESSAGE 'Расчет
услуг'
DEFINE PAD help OF
zar PROMPT 'П\<омощь';
MESSAGE 'Нажмите
- F1'
DEFINE PAD konec OF
zar PROMPT '\<Выход';
MESSAGE 'Выход
из системы'
ON SELECTION PAD
kadr OF zar activate popup kadr
ON SELECTION PAD
prin OF zar ACTIVATE POPUP viev
ON SELECTION PAD
print OF zar ACTIVATE POPUP prin_t
ON SELECTION PAD
serv OF zar ACTIVATE POPUP serv
ON SELECTION PAD ras
OF zar ACTIVATE POPUP ras
ON SELECTION PAD
help OF zar ACTIVATE POPUP hlp
ON SELECTION PAD
konec OF zar do QUIT
DEFINE POPUP KADR FROM 1,0 SHADOW
DEFINE BAR 1 OF kadr
PROMPT '\<Работа
с картотекой'
DEFINE BAR 2 OF kadr
PROMPT 'К\<вартиросъемщики'
DEFINE BAR 3 OF kadr
PROMPT '\<Картотека
льготников'
DEFINE BAR 4 OF kadr
PROMPT '\<База
жильцов'
DEFINE BAR 5 OF kadr
PROMPT 'Вв\<од
данных счетчика'
DEFINE BAR 6 OF kadr
PROMPT '\<Ввод
оплаты'
ON SELECTION BAR 1
OF kadr DO pos_ch
ON SELECTION BAR 2
OF kadr DO kdr_r IN bazes
ON SELECTION BAR 3
OF kadr DO kdr_l IN bazes
ON SELECTION BAR 4
OF kadr DO baza IN bazes
ON SELECTION BAR 5
OF kadr DO ent_sch IN bazes
ON SELECTION BAR 6
OF kadr DO ent_opl IN bazes
DEFINE POPUP VIEV FROM 1,8 color
scheme 1 SHADOW
DEFINE BAR 1 OF viev
PROMPT 'Списки
по начислению'
DEFINE BAR 2 OF viev
PROMPT 'Списки
по льготам'
DEFINE BAR 3 OF viev
PROMPT 'Списки
с показаниями
счетчика'
DEFINE BAR 4 OF viev
PROMPT 'Оплата
э\энергии по
квартиросъёмщикам'
DEFINE BAR 5 OF viev
PROMPT 'Сальдо
по квартиросъемщикам'
DEFINE BAR 6 OF viev
PROMPT 'Свод
по квартплате
за месяц'
ON SELECTION BAR 1
OF viev DO SP_NACH IN OTCHET
ON SELECTION BAR 2
OF viev DO SP_lg_kw IN OTCHET
ON SELECTION BAR 3
OF viev DO SP_SCHET IN OTCHET
ON SELECTION BAR 4
OF viev DO SP_SCHET_PL IN OTCHET
ON SELECTION BAR 5
OF viev DO SP_OST IN OTCHET
ON SELECTION BAR 6
OF viev DO SVOD IN OTCHET
DEFINE POPUP
prin_t FROM 1,16 PROMPT FILES LIKE *-1.TXT SHADOW;
MESSAGE 'Enter -
Просмотр,Space -
Печать'
ON SELECTION POPUP
prin_t DO print3 WITH
PROMPT(),LASTKEY()
DEFINE POPUP serv FROM 1,26 SHADOW
DEFINE BAR 1 OF SERV
PROMPT '\<Дополнение'
DEFINE BAR 2 OF SERV
PROMPT 'Дополнение
\<льгот'
DEFINE BAR 3 OF SERV
PROMPT '\<Тарифы'
DEFINE BAR 4 OF serv
PROMPT '\<Нормы
оплаты услуг'
DEFINE BAR 5 OF SERV
PROMPT '\-'
DEFINE BAR 6 OF serv
PROMPT 'Упаковка
данных';
MESSAGE 'Сжатие
и переиндексация
данных' color ,r/w
DEFINE BAR 7 OF SERV
PROMPT 'Переиндексация'
color
,r/w
ON SELECTION BAR 1
OF serv DO ins WITH 1 IN add_del
ON SELECTION BAR 2
OF serv DO ins_lg IN add_del
ON SELECTION BAR 3
OF serv DO TARIFS_zar
ON SELECTION BAR 4
OF serv DO norms IN bazes
ON SELECTION BAR 6
OF serv DO SERV
ON SELECTION BAR 7
OF serv DO P_INDEX
DEFINE POPUP ras FROM 1,35 SHADOW
DEFINE BAR 1 OF ras
PROMPT '\<Расчет
квартплаты'
DEFINE BAR 2 OF ras
PROMPT 'Р\<аcчет
по льготам'
DEFINE BAR 3 OF ras
PROMPT '\-'
DEFINE BAR 4 OF ras
PROMPT '\<Слияние
квартплаты
с льготами'
ON SELECTION BAR 1
OF ras DO ras in ras
ON SELECTION BAR 2
OF ras DO ras_l in ras
ON SELECTION BAR 4
OF ras DO ras_i in ras
DEFINE POPUP hlp FROM 1,44 SHADOW
DEFINE BAR 1 OF hlp
PROMPT '\<Помощь'
DEFINE BAR 2 OF hlp
PROMPT '\<Справка'
ON SELECTION BAR 1
OF HLP DO HELP WITH
6
ON SELECTION BAR 2
OF HLP DO HELP WITH
3
DEFINE POPUP
poisk FROM 3,14 TITLE;
'Выберите
критерий поска'
shadow
DEFINE BAR 1 OF
poisk PROMPT 'По
фамилии'
DEFINE BAR 2 OF
poisk PROMPT 'По
табелю'
DEFINE BAR 3 OF
poisk PROMPT 'По
адресу'
DEFINE BAR 4 OF
poisk PROMPT 'Отмена
сортировки';
COLOR ,R/W
ON SELECTION POPUP
poisk DO poisk
DEFINE POPUP
FAMIL FROM 7,0 TITLE;
'-------Ф-А-М-И-Л-И-Я----------------|-Льгота-|-Пл-к';
PROMPT FIELD
LEFT(FAM,38)+'|'+IIF(LGOT=.T.,' ДА ',' ---- ')+;
'|'+IIF(OR_R=1,' v
',' ') COLOR SCHEME 16
ON SELECTION POPUP
FAMIL DEACTIVATE POPUP FAMIL
ACTIVATE MENU ZAR
Приложение
№ 1.1
-
4 -
CLOSE
DATA
IF
!FILE('rabot.dbf')
DO
create
ELSE
DO
open1
ENDIF
************************************************************************************* Открытие
Баз Данных и
установление
связей
**
***********************************************************************************
PROCEDURE open1
ON
ERROR DO EROR WITH ERROR()
SELE
a
USE
rabot
IF
.NOT. FILE( 'rabot.cdx')
INDEX
ON tab TAG tab UNIQUE
INDEX
ON fam TAG fam
INDEX
ON n_lg TAG n_lg
INDEX
ON lgot FOR lgot=.t..AND.EMPTY(dat_c).AND.EMPTY(dat_po).OR.;
BETWEEN(date(),dat_c,dat_po)
TAG date
INDEX
ON yl+dom+kw_ra+str(tab) FOR LGOT=.T. tag lgt
INDEX
ON yl+dom+kw_ra+str(tab) FOR OR_R=1 tag ord
INDEX
ON yl+dom+kw_ra+str(tab) tag adrr UNIQUE
ENDIF
SET
ORDER TO adrr
SELE
c
USE
oplata
IF
.NOT.
FILE(
'oplata.cdx')
INDEX
ON
tab TAG
tab UNIQUE
INDEX
ON yl+dom+kw_ra+str(tab) TAG
adr UNIQUE
ENDIF
SET
ORDER TO
adr
SELECT
d
USE
lgot
IF
.NOT.FILE('lgot.cdx')
INDEX
ON
n_lg TAG
n_lg UNIQUE
ENDIF
SET
ORDER TO
n_lg
SELE
g
USE
table_r
IF
.NOT.
FILE(
'table_r.cdx')
INDEX
ON
tab TAG
tab UNIQUE
ENDIF
SET
ORDER TO
tab
USE
HELP IN i
USE
TARIF IN
f
SELE
rabot
SET
RELA TO
yl+dom+kw_ra+str(tab) INTO c
SET
RELA TO
n_lg INTO
d addi
SET
RELA TO
tab INTO g addi
SET
SKIP TO c,d,g
RETURN
************************************************************************************* Язык
– SQL
Создание
Баз Данных
**
***********************************************************************************
PROCEDURE CREATE
CREATE
DBF RABOT
(FAM C(40),TAB N(4),TEL N(8),YL C(15),DOM C(4), KW_RA C(4),KV_M
N(6,2),;
N_LG
N(1),N_YD C(9),ELEC N(6),ELEC1 N(6),OR_R N(1),KOL_VO N(2),D_OPL
D,OST_K N(8,2),;
PENI
N(8,2),OPL_TA N(8,2), LGOT L,RAD_L L,TEL_L L,KW_L L,G_W_L L,X_W_L
L,K_YS_L L,;
EL_C_L
L,OTOP_L L,DAT_C D,DAT_PO D)
USE
CREATE
DBF OPLATA
(TAB N(4),YL C(15),DOM C(4), KW_RA C(4),KV_M N(6,2),KW_PL
N(8,2),TEL_R N(8,2),;
RAD_R
N(8,2),K_YSL N(8,2),OTOPL N(8,2),EL_C N(8,2),G_W N(8,2),X_W
N(8,2),KW_PLL N(8,2),;
TEL_RL
N(8,2),RAD_RL N(8,2),K_YSLL N(8,2),OTOPLL N(8,2),EL_CL N(8,2),G_WL
N(8,2),;
X_WL
N(8,2),N_LG N(1),ITOG_N N(9,2),ITOG_L N(9,2),ITOG N(9,2),OR_R
N(1),KOL_VO N(2),;
SUM_KW
N(8,2),SUM_GW N(8,2),SUM_XW N(8,2),SUM_KYSL N(8,2),SUM_OT
N(8,2),SUM_TL N(8,2),SUM_RD N(8,2),;
SUM_IT
N(9,2),LGOT L,RAD_L L,TEL_L L,KW_L L,G_W_L L,X_W_L L,K_YS_L L,EL_C_L
L,OTOP_L L)
USE
CREATE
DBF TABLE_R
(TAB N(4),KWP_L N(5,2),TL_L N(5,2),RD_L N(5,2),GW_L N(5,2),;
XW_L
N(5,2),K_L_L N(5,2),OT_L N(5,2),EL_L N(5,2))
USE
CREATE
DBF LGOT
(N_LG N(1),INFO C(20),KWP_L N(4,2),TL_L N(4,2),RD_L N(4,2),;
GW_L
N(4,2),XW_L N(4,2),K_L_L N(4,2),OT_L N(4,2))
USE
CREATE
DBF TARIF
(INFO C(25),ST_KA N(5,2),K_INFO C(11),K_CH L)
USE
CREATE
DBF HELP
(HLP M)
APPEND
BLANK
APPEND
MEMO HLP FROM HELP1.TXT
APPEND
BLANK
APPEND
MEMO HLP FROM HELP2.TXT
APPEND
BLANK
APPEND
MEMO HLP FROM HELP3.TXT
APPEND
BLANK
APPEND
MEMO HLP FROM HELP4.TXT
APPEND
BLANK
APPEND
MEMO HLP FROM HELP5.TXT
APPEND
BLANK
APPEND
MEMO HLP FROM HELP6.TXT
APPEND
BLANK
APPEND
MEMO HLP FROM HELP7.TXT
APPEND
BLANK
APPEND
MEMO HLP FROM HELP8.TXT
USE
!
del help?.txt
DO
OPEN1
RETURN
П риложение
№ 1.3
- 3 -
Формирование
отчетов
– OTCHET.PRG
*************************************************************************************
Формирование
списков по
начислению
**
***********************************************************************************
PROCEDURE
SP_NACH && Списки по
начислению
HIDE
POPUP VIEV
IF
_PAD_OTCH=.F.
WAIT
'СДЕЛАЙТЕ СЛИЯНИЕ
РАСЧЕТОВ' WINDOW
RETURN
ENDIF
DEFINE
WINDOW vedom FROM 0,0 TO 24,79 system float grow close zoom shadow;
TITLE
'ESC - Выход без
сохранения
Ctrl+W - с сохранением';
FOOTER
'F1 - Помощь' COLOR SCHEME 12
ON
KEY LABEL F1 DO HELP WITH 7
i=MONTH(DATE())
T='nach-'+alltrim(str(i))+'.'+'txt'
SET
ALTERNATE TO ('nach-'+alltrim(str(i))) && ADDI
DIMENSION
NACH(12,1)
DIMENSION
LG(9)
STORE
0 TO LG(1),LG(2),LG(3),LG(4),LG(5),LG(6),LG(7),LG(8),LG(9)
SET
ALTERNATE ON
SET
CONSOLE OFF
set
space off
SELE
A
go
top
DO
WHILE !EOF()
y=yl
do
while y=yl
d=dom
do
while y=yl AND d=dom
k=kw_ra
PL=0
L=0
scan
while yl=y.and.dom=d.and.kw_ra=k.and.c.yl=y.and.c.dom=d.and.c.kw_ra=k
IF
OR_R=1
FM=FAM
OS=OST_K
TB=TAB
KV_MET=KV_M
dat_op=D_OPL
NACH(1)=C.KW_PL
NACH(2)=C.G_W
NACH(3)=C.X_W
NACH(4)=C.K_YSL
NACH(5)=C.OTOPL
NACH(6)=C.RAD_R
NACH(7)=C.TEL_R
NACH(8)=C.EL_C
NACH(9)=C.ITOG_N
NACH(10)=C.ITOG
NACH(11)=OPL_TA
endif
IF
lgot=.t.
&&.and.!EMPTY(C.KW_PLL).OR.!EMPTY(C.G_WL).OR.!EMPTY(C.X_WL).OR.!EMPTY(C.K_YSL).OR.!EMPTY(C.OTOPL).OR.!EMPTY(C.RAD_R).OR.!EMPTY(C.TEL_R)
LG(1)=LG(1)+C.KW_PLL
LG(2)=LG(2)+C.G_WL
LG(3)=LG(3)+C.X_WL
LG(4)=LG(4)+C.K_YSLL
LG(5)=LG(5)+C.OTOPLL
LG(6)=LG(6)+C.RAD_RL
LG(7)=LG(7)+C.TEL_RL
LG(8)=LG(8)+C.EL_CL
LG(9)=LG(9)+C.ITOG_L
L=L+1
ENDIF
PL=PL+1
ENDSCAN
?
REPLICATE('_',70)
?
FM AT(4)
?
'Табель - ' AT(4),TB
PICTURE('9999'),' Дата оплаты
',dat_op FUNCTION('T')
?
'Кол-во жильцов
' at(4),pl picture('99'),' Площадь
',KV_MET PICTURE('###.##')
?
'Льготников
' at(4),l picture('99')
?
?
REPLICATE('-',69)
?
'|','Сальдо ','|','кв.плата
','|','гор.вода
','|','ком.услуги
','|','радио ','|','телефон
','|','Начислено
','|'
?
'|',' Пени ','|','излишки
','|','хол.вода
','|','отопление
','|',' ','|','э\энергия','|','
','|'
?
REPLICATE('-',69)
?
OS PICTURE ('####.##') AT(1) &&Остаток
??
NACH(1) PICTURE ('###.##') AT(10) && кв.плата
??
NACH(2) PICTURE ('###.##') AT(19) && гор.вода
??
NACH(4) PICTURE ('###.##') AT(30) && ком.услуги
??
NACH(6) PICTURE ('###.##') AT(40) && радио
??
NACH(7) PICTURE ('###.##') AT(50) && телефон
?
NACH(3) PICTURE ('###.##') AT(19) && хол.вода
??
NACH(5) PICTURE ('###.##') AT(30) && отопление
??
NACH(8) PICTURE ('###.##') AT(50) && электричество
??
NACH(9) PICTURE ('####.##') AT(60) && итог
IF
L>0
?
'Льгота'
?
LG(1) PICTURE ('####.##') AT(10) && кв.плата
??
LG(2) PICTURE ('####.##') AT(19) && гор.вода
??
LG(4) PICTURE ('####.##') AT(30) && ком.услуги
??
LG(6) PICTURE ('###.##') AT(40) && радио
??
LG(7) PICTURE ('####.##') AT(50) && телефон
?
LG(3) PICTURE ('####.##') AT(19) && хол.вода
??
LG(5) PICTURE ('####.##') AT(30) && отопление
??
LG(8) PICTURE ('####.##') AT(50) && электричество
??
LG(9) PICTURE ('#####.##') AT(60) && итого
STORE
0 TO LG(1),LG(2),LG(3),LG(4),LG(5),LG(6),LG(7),LG(8),LG(9)
ENDIF
?
?
REPLICATE('-',30),'ИТОГО НАЧИСЛЕНО
- ',NACH(10) picture('####.##')
?
'ОПЛАЧЕНО В
КАССУ - ' AT(30),NACH(11)
PICTURE('####.##')
?
'ОСТАТОК '
AT(30),OS PICTURE('####.##')
ENDDO
enddo
enddo
SET
ALTERNATE OFF
SET
ALTERNATE TO
MODIFY
COMMAND EVALUATE('T') WINDOW vedom
CLEAR
ACTIVATE
WINDOW vib
@
2,5 SAY 'Р а с п е ч а т
а т ь ?'
@
0,0 FILL TO 8,43 COLOR W+/R
@
5,6 GET pr FUNCTION '*H Да;Нет' DEFA 2
SIZE 1,6,4;
COLOR
,,,,w+/n,w+/n,w+/n,,W+/R,
READ
DEACTIVATE
WINDOW vib
DO
CASE
CASE
pr=1
SET
HEADING OFF
IF
PRINTSTATUS()
TYPE
(T) TO PRINT
ELSE
WAIT
'Подготовьте
принтер' WINDOW
ENDIF
CASE
pr=2
CLEAR
READ
ENDCASE
CLEAR
ON
KEY LABEL F1 DO HELP WITH 6
RETURN
*************************************************************************************
Формирование
списков по
льготам
**
***********************************************************************************
PROCEDURE SP_lg_kw &&
Списки по льготам
HIDE
POPUP VIEV
IF
_PAD_OTCH=.F.
WAIT
'СДЕЛАЙТЕ СЛИЯНИЕ
РАСЧЕТОВ' WINDOW
RETURN
ENDIF
DEFINE
WINDOW vedom FROM 0,0 TO 24,79 system float grow close zoom shadow;
TITLE
'ESC - Выход без
сохранения
Ctrl+W - с сохранением';
FOOTER
'F1 - Помощь' COLOR SCHEME 12
ON
KEY LABEL F1 DO HELP WITH 7
i=MONTH(DATE())
SET
ALTERNATE TO ('lg_kw-'+alltrim(str(i))) && ADDI
T='lg_kw-'+alltrim(str(i))+'.'+'txt'
DIMENSION
LG(9)
SET
ALTERNATE ON
SET
CONSOLE OFF
SELE
A
go
top
DO
WHILE !EOF()
y=yl
do
while y=yl
d=dom
do
while y=yl AND d=dom
k=kw_ra
scan
while yl=y.and.dom=d.and.kw_ra=k.and.c.yl=y.and.c.dom=d.and.c.kw_ra=k
IF
OR_R=1
FM=FAM
TB=TAB
endif
IF
lgot=.t.
?
REPLICATE('_',48)
?
'АДРЕС: ',YL,'Дом
',dom picture('999'),' Кв-ра ',kw_ra
picture('999')
?
'ДЕЙСТВИТЕЛЬНА
С - ',DAT_C,' ПО - ',DAT_PO
?
FAM ,'Табель - ',tab
PICTURE('9999')
?
'Категория -
',d.info,'№ удостов.',n_yd,'
КОД № - ',N_LG
?
'кв.плата -
',c.kw_pll PICTURE('####.##')
?
'гор.вода - ',c.g_wl
PICTURE('####.##')
?
'хол.вода - ',c.x_wl
PICTURE('####.##')
?
'отопление
- ',c.otopll PICTURE('####.##')
?
'ком.услуги
- ',c.k_ysll PICTURE('####.##')
?
'радио - ',c.rad_rl
PICTURE('####.##')
?
'телефон -
',c.tel_rl PICTURE('####.##')
?
'Начислено
- ',c.itog_l PICTURE('#####.##')
?
REPLICATE ('-',48)
?
'Привязан к
',fm,' Таб № ',tb PICTURE('9999')
ENDIF
ENDSCAN
ENDDO
ENDDO
ENDDO
SET
ALTERNATE OFF
SET
ALTERNATE TO
SET
CONSOLE ON
MODIFY
COMMAND EVALUATE('T') WINDOW vedom
CLEAR
ACTIVATE
WINDOW vib
@
2,5 SAY 'Р а с п е ч а т
а т ь ?'
@
0,0 FILL TO 8,43 COLOR W+/R
@
5,6 GET pr FUNCTION '*H Да;Нет' DEFA 2
SIZE 1,6,4;
COLOR
,,,,w+/n,w+/n,w+/n,,W+/R,
READ
DEACTIVATE
WINDOW vib
DO
CASE
CASE
pr=1
SET
HEADING OFF
IF
PRINTSTATUS()
TYPE
(T) TO PRINT
ELSE
WAIT
'Подготовьте
принтер' WINDOW
ENDIF
CASE
pr=2
CLEAR
READ
ENDCASE
CLEAR
ON
KEY LABEL F1 DO HELP WITH 6
RETURN
*************************************************************************************
Формирование
списков с показаниями
счетчика
**
***********************************************************************************
PROCEDURE SP_SCHET &&
Списки с показанием
счетчика
HIDE
POPUP VIEV
IF
_PAD_OTCH=.F.
WAIT
'СДЕЛАЙТЕ СЛИЯНИЕ
РАСЧЕТОВ' WINDOW
RETURN
ENDIF
DEFINE
WINDOW vedom FROM 0,0 TO 24,79 system float grow close zoom shadow;
TITLE
'ESC - Выход без
сохранения
Ctrl+W - с сохранением';
FOOTER
'F1 - Помощь' COLOR SCHEME 12
ON
KEY LABEL F1 DO HELP WITH 7
i=MONTH(DATE())
SET
ALTERNATE TO ('ELC_V-'+alltrim(str(i))) && ADDI
t='ELC_V-'+alltrim(str(i))+'.'+'txt'
SET
ALTERNATE ON
SET
CONSOLE OFF
SELE
A
go
top
DO
WHILE !EOF()
y=yl
do
while y=yl
d=dom
do
while y=yl AND d=dom
k=kw_ra
scan
while yl=y.and.dom=d.and.kw_ra=k.and.c.yl=y.and.c.dom=d.and.c.kw_ra=k
IF
OR_R=1
?
REPLICATE('-',60)
?
'АДРЕС: ',YL,'Дом
',dom picture('999'),' Кв-ра ',kw_ra
picture('999')
?
FAM AT(5)
?
'Табель - ' AT(5),tab
PICTURE('9999')
?
?
'Старое значение
- ',elec PICTURE('9999999')
?
'Новое значение
- ',elec1 PICTURE('9999999')
ENDIF
ENDSCAN
ENDDO
ENDDO
ENDDO
SET
ALTERNATE OFF
SET
ALTERNATE TO
SET
CONSOLE ON
MODIFY
COMMAND EVALUATE('T') WINDOW vedom
CLEAR
ACTIVATE
WINDOW vib
@
2,5 SAY 'Р а с п е ч а т
а т ь ?'
@
0,0 FILL TO 8,43 COLOR W+/R
@
5,6 GET pr FUNCTION '*H Да;Нет' DEFA 2
SIZE 1,6,4;
COLOR
,,,,w+/n,w+/n,w+/n,,W+/R,
READ
DEACTIVATE
WINDOW vib
DO
CASE
CASE
pr=1
SET
HEADING OFF
IF
PRINTSTATUS()
TYPE
(T) TO PRINT
ELSE
WAIT
'Подготовьте
принтер' WINDOW
ENDIF
CASE
pr=2
CLEAR
READ
ENDCASE
CLEAR
ON
KEY LABEL F1 DO HELP WITH 6
RETURN
*************************************************************************************
Формирование
списков по
оплате электроэнергии
**
***********************************************************************************
PROCEDURE SP_SCHET_PL &&
Оплата э/энергии
HIDE
POPUP VIEV
IF
_PAD_OTCH=.F.
WAIT
'СДЕЛАЙТЕ СЛИЯНИЕ
РАСЧЕТОВ' WINDOW
RETURN
ENDIF
DEFINE
WINDOW vedom FROM 0,0 TO 24,79 system float grow close zoom shadow;
TITLE
'ESC - Выход без
сохранения
Ctrl+W - с сохранением';
FOOTER
'F1 - Помощь' COLOR SCHEME 12
ON
KEY LABEL F1 DO HELP WITH 7
i=MONTH(DATE())
PG=0
T='EL_PL-'+alltrim(str(i))+'.'+'txt'
SET
ALTERNATE TO ('EL_PL-'+alltrim(str(i))) && ADDI
SET
ALTERNATE ON
SET
CONSOLE OFF
?
REPLICATE('-',55)
?
'|','Таб. ','|',' Фамилия
','|','Ст.знач
','|','Нов.знач','|','Начислено'
?
REPLICATE('-',55)
SELE
A
go
top
DO
WHILE !EOF()
y=yl
do
while y=yl
d=dom
do
while y=yl AND d=dom
k=kw_ra
scan
while yl=y.and.dom=d.and.kw_ra=k.and.c.yl=y.and.c.dom=d.and.c.kw_ra=k
IF
OR_R=1
?
tab PICTURE('9999') AT(1),'|' AT(6),FAM AT(8)
PICTURE('xxxxxxxxxxxxxxxxxx')
??
'|' AT(27),elec PICTURE('9999999'),'|' AT(36),elec1
PICTURE('9999999'),'|' AT(44)
??
c.el_c PICTURE('####.##'),'|' AT(55)
PG=PG+1
ENDIF
ENDSCAN
IF
PG=45
?
REPLICATE('-',55)
?
'Таб. ','|',' Фамилия
','|','Ст.знач
','|','Нов.знач','|','Начислено'
?
REPLICATE('-',55)
ENDIF
ENDDO
ENDDO
ENDDO
SET
ALTERNATE OFF
SET
ALTERNATE TO
SET
CONSOLE ON
MODIFY
COMMAND EVALUATE('T') WINDOW vedom
CLEAR
ACTIVATE
WINDOW vib
@
2,5 SAY 'Р а с п е ч а т
а т ь ?'
@
0,0 FILL TO 8,43 COLOR W+/R
@
5,6 GET pr FUNCTION '*H Да;Нет' DEFA 2
SIZE 1,6,4;
COLOR
,,,,w+/n,w+/n,w+/n,,W+/R,
READ
DEACTIVATE
WINDOW vib
DO
CASE
CASE
pr=1
SET
HEADING OFF
IF
PRINTSTATUS()
TYPE
(T) TO PRINT
ELSE
WAIT
'Подготовьте
принтер' WINDOW
ENDIF
CASE
pr=2
CLEAR
READ
ENDCASE
CLEAR
ON
KEY LABEL F1 DO HELP WITH 6
RETURN
*************************************************************************************
Формирование
остатков
квартиросъёмщиков
**
***********************************************************************************
PROCEDURE SP_OST && Сальдо
по квартиросъемщикам
HIDE
POPUP VIEV
IF
_PAD_OTCH=.F.
WAIT
'СДЕЛАЙТЕ СЛИЯНИЕ
РАСЧЕТОВ' WINDOW
RETURN
ENDIF
DEFINE
WINDOW vedom FROM 0,0 TO 24,79 system float grow close zoom shadow;
TITLE
'ESC - Выход без
сохранения
Ctrl+W - с сохранением';
FOOTER
'F1 - Помощь' COLOR SCHEME 12
ON
KEY LABEL F1 DO HELP WITH 7
i=MONTH(DATE())
PG=0
T='saldo-'+alltrim(str(i))+'.'+'txt'
SET
ALTERNATE TO ('saldo-'+alltrim(str(i))) && ADDI
SET
ALTERNATE ON
SET
CONSOLE OFF
?
REPLICATE('-',58)
?
'|','Таб. ','|',' Фамилия
','|','Начисл.
','|','К оплате
','|','Остаток '
?
REPLICATE('-',58)
SELE
A
go
top
DO
WHILE !EOF()
y=yl
do
while y=yl
d=dom
do
while y=yl AND d=dom
k=kw_ra
scan
while yl=y.and.dom=d.and.kw_ra=k.and.c.yl=y.and.c.dom=d.and.c.kw_ra=k
IF
OR_R=1
?
tab PICTURE('9999') AT(1),'|' AT(6),FAM AT(8)
PICTURE('xxxxxxxxxxxxxxxxxx'),'|' AT(27)
?? c.itog_n PICTURE('#####.##'),'|'
AT(39),c.itog PICTURE('#####.##'),'|' AT(49),ost_k
PICTURE('####.##'),'|' AT(58)
PG=PG+1
ENDIF
ENDSCAN
IF
PG=45
?
REPLICATE('-',58)
?
'Таб. ','|',' Фамилия
','|','Начисл.
','|','К оплате
','|','Остаток '
?
REPLICATE('-',58)
ENDIF
ENDDO
enddo
enddo
SET
ALTERNATE OFF
SET
ALTERNATE TO
SET
CONSOLE ON
MODIFY
COMMAND EVALUATE('T') WINDOW vedom
CLEAR
ACTIVATE
WINDOW vib
@
2,5 SAY 'Р а с п е ч а т
а т ь ?'
@
0,0 FILL TO 8,43 COLOR W+/R
@
5,6 GET pr FUNCTION '*H Да;Нет' DEFA 2
SIZE 1,6,4;
COLOR
,,,,w+/n,w+/n,w+/n,,W+/R,
READ
DEACTIVATE
WINDOW vib
DO
CASE
CASE
pr=1
SET
HEADING OFF
IF
PRINTSTATUS()
TYPE
(T) TO PRINT
ELSE
WAIT
'Подготовьте
принтер' WINDOW
ENDIF
CASE
pr=2
CLEAR
READ
ENDCASE
CLEAR
ON
KEY LABEL F1 DO HELP WITH 6
RETURN
*************************************************************************************
Формирование
отчета по суммам
всех начислений
**
***********************************************************************************
PROCEDURE SVOD
HIDE
POPUP VIEV
IF
_PAD_OTCH=.F.
WAIT
'СДЕЛАЙТЕ СЛИЯНИЕ
РАСЧЕТОВ' WINDOW
RETURN
ENDIF
DEFINE
WINDOW vedom FROM 0,0 TO 24,79 system float grow close zoom shadow;
TITLE
'ESC - Выход без
сохранения
Ctrl+W - с сохранением';
FOOTER
'F1 - Помощь' COLOR SCHEME 12
ON
KEY LABEL F1 DO HELP WITH 7
sele
c
CALCULATE
SUM(KW_PL),SUM(G_W),SUM(X_W),SUM(K_YSL),SUM(OTOPL),SUM(RAD_R),SUM(TEL_R),SUM(EL_C),SUM(ITOG_N);
TO
SKWN,SGN,SXN,SKN,SOTN,SRN,STN,SELN,SMN
CALCULATE
SUM(KW_PLL),SUM(G_WL),SUM(X_WL),SUM(K_YSLL),SUM(OTOPLL),SUM(RAD_RL),SUM(TEL_RL),SUM(EL_CL),SUM(ITOG_L);
TO
SKWL,SGL,SXL,SKL,SOTL,SRL,STL,SELL,SML
SKW=SKWN+SKWL
SG=SGN+SGL
SX=SXN+SXL
SK=SKN+SKL
SOT=SOTN+SOTL
SR=SRN+SRL
ST=STN+STL
SEL=SELN+SELL
SM=SMN+SML
i=MONTH(DATE())
SET
ALTERNATE TO ('SVOD-'+alltrim(str(i)))
T='svod-'+alltrim(str(i))+'.'+'txt'
SET
ALTERNATE ON
?
'СВОД ПО КВАРТПЛАТЕ
ЗА - ',mes(i),year(date())
?
REPLICATE('-',52)
?
' ', '|', ' Начисл.
', '|', ' По льготе
'
??
'|', ' Итог ','|'
?
REPLICATE('-',52)
?
' квартплата
','|',SKWN PICTURE('########.##'),'|'
??
SKWL PICTURE('########.##'),'|',SKW PICTURE('########.##'),'|'
?
' горячая вода
','|',SGN PICTURE('########.##'),'|'
??
SGL PICTURE('########.##'),'|',SG PICTURE('########.##'),'|'
?
' холодная вода
','|',SXN PICTURE('########.##'),'|'
??
SXL PICTURE('########.##'),'|',SX PICTURE('########.##'),'|'
?
' ком. услуги
','|',SKN PICTURE('########.##'),'|'
??
SKL PICTURE('########.##'),'|',SK PICTURE('########.##'),'|'
?
' отопление
','|',SOTN PICTURE('########.##'),'|'
??
SOTL PICTURE('########.##'),'|',SOT PICTURE('########.##'),'|'
?
' э/энергия
','|',SELN PICTURE('########.##'),'|'
??
SELL PICTURE('########.##'),'|',SEL PICTURE('########.##'),'|'
?
REPLICATE('-',52)
?
' ИТОГО ','|',SMN
PICTURE('########.##'),'|'
??
SML PICTURE('########.##'),'|',SM PICTURE('########.##'),'|'
SET
ALTERNATE OFF
SET
ALTERNATE TO
MODIFY
COMMAND EVALUATE('T') WINDOW vedom
CLEAR
ACTIVATE
WINDOW vib
@
2,5 SAY 'Р а с п е ч а т
а т ь ?'
@
0,0 FILL TO 8,43 COLOR W+/R
@
5,6 GET pr FUNCTION '*H Да;Нет' DEFA 2
SIZE 1,6,4;
COLOR
,,,,w+/n,w+/n,w+/n,,W+/R,
READ
DEACTIVATE
WINDOW vib
DO
CASE
CASE
pr=1
SET
HEADING OFF
IF
PRINTSTATUS()
TYPE
(T) TO PRINT
ELSE
WAIT
'Подготовьте
принтер' WINDOW
ENDIF
CASE
pr=2
CLEAR
READ
ENDCASE
CLEAR
ON
KEY LABEL F1 DO HELP WITH 6
RETURN
П риложение
№ 1.7
- 9 -
*************************************************************************************
Пункт
Меню – РАСЧЕТ
– Расчет квартплаты
**
*********************************************************************
PROCEDURE ras && выбор
расчета по
квартплате
HIDE
POPUP ras
IF
RECCOUNT()=0
ACTIVATE
WINDOW vib
@
1,10 SAY 'Б а з а п у с т
а'
@
2,9 SAY 'Начните с
дополнения'
@
0,0 FILL TO 8,43 COLOR W+/R
@
5,3 GET ins1 FUNCTION '*TH Дополнить;Отмена';
valid
ins2() defa 1 size 1,10,4;
COLOR
,,,,w+/n,w+/n,w+/n,,W+/R,
read
cycle OBJECT 1
DEACTIVATE
WINDOW vib
RETURN
ENDIF
ON
KEY
ACTIVATE
WINDOW vib
@
0,0 to 6,38
@
0,1 SAY 'Сегодня -
'+dtoc(date())
@
2,2 SAY 'Расчет квартплаты
за - '+mes(mess)+' месяц'
@
5,8 GET rs_n FUNCTION '*TH Ok;Отмена'
VALID ras_1() DEFAULT 1 SIZE 1,6,4
READ
OBJECT 1
DEACTIVATE
WINDOW vib
ON
KEY LABEL F1 DO HELP WITH 6
RETURN
*************************************************************************************
Пункт
Меню – РАСЧЕТ
– Расчет по
льготам
**
*********************************************************************
PROCEDURE RAS_L && выбор
расчета льгот
HIDE
POPUP ras
IF
RECCOUNT()=0
ACTIVATE
WINDOW vib
@
1,10 SAY 'Б а з а п у с т
а'
@
2,9 SAY 'Начните с
дополнения'
@
0,0 FILL TO 8,43 COLOR W+/R
@
5,3 GET ins1 FUNCTION '*TH Дополнить;Отмена';
valid
ins2() defa 1 size 1,10,4;
COLOR
,,,,w+/n,w+/n,w+/n,,W+/R,
read
cycle OBJECT 1
DEACTIVATE
WINDOW vib
RETURN
ENDIF
ON
KEY
ACTIVATE
WINDOW vib
@
0,0 to 6,38
@
0,1 SAY 'Сегодня -
'+dtoc(date())
@
2,2 SAY 'Расчет по
льготам за -
'+mes(mess)+' месяц'
@
5,8 get rs_lg function '*TH Ok;Отмена'
VALID ras_lg() DEFAULT 1 SIZE 1,6,4
READ
OBJECT 1
DEACTIVATE
WINDOW vib
ON
KEY LABEL F1 DO HELP WITH 6
RETURN
*************************************************************************************
Пункт
Меню – РАСЧЕТ
– Слияние расчетов
**
*********************************************************************
PROCEDURE ras_i && Выбор
расчета к оплате
HIDE
POPUP ras
IF
RECCOUNT()=0
ACTIVATE
WINDOW vib
@
1,10 SAY 'Б а з а п у с т
а'
@
2,9 SAY 'Начните с
дополнения'
@
0,0 FILL TO 8,43 COLOR W+/R
@
5,3 GET ins1 FUNCTION '*TH Дополнить;Отмена';
valid
ins2() defa 1 size 1,10,4;
COLOR
,,,,w+/n,w+/n,w+/n,,W+/R,
read
cycle OBJECT 1
DEACTIVATE
WINDOW vib
RETURN
ENDIF
ON
KEY
ACTIVATE
WINDOW vib
@
0,0 to 6,38
@
0,2 SAY 'Сегодня -
'+DTOC(DATE())
@
2,2 SAY 'Слияние расчетов
за - '+mes(mess)+' месяц'
@
5,8 GET rs_i function '*TH Ok;Отмена'
VALID ras_3() DEFAULT 1 SIZE 1,6,4
READ OBJECT 1
DEACTIVATE
WINDOW vib
clear
ON
KEY LABEL F1 DO HELP WITH 6
RETURN
П риложение
№ 1.6
- 2 -
КАК РАБОТАТЬ С ДИСКЕТОЙ
Для работы необходимо создать каталог на жестком
диске (например: MD C:\KW_PLATA).
После этого распаковать в созданный каталог
содержимое архива BAZA.ZIP.
Если предполагается работа с помощью пакета FoxPro,
то в этот же каталог нужно распаковать содержимое
архива KOD.DBF и командой DO (системное меню-пункт
"Program") запустить файл MENI.PRG или в командном
окне выполнить следующие команды:
SET DEFAULT TO <ИМЯ ДИСКА:\<СОЗДАННЫЙ КАТАЛОГ>>
DO MENI.PRG
А также при чтении дипломной работы, главы 3 части 2
можно открыть окно трассировки (системное меню-пункт
"Window"-"Trace") и в нем открыть файл MENI.PRG в
пошаговом исполнении.
Если работа предполагается без пакета FoxPro, то в
созданный каталог нужно распаковать содержимое архива
KW_DEMO.ZIP и после этого запустить файл KW_PLATA.EXE
ОПИСАНИЕ ПРИЛАГАЕМОЙ ДИСКЕТЫ.
К данному дипломному проекту прилагается дискета, на
которой расположены следующие файлы.
Архив - BAZA.ZIP - содержит заполненные БД.
Содержание архива
RABOT.DBF- БД жильцов(25 жильцов из них 10-плательщиков, 8-льготников)
OPLATA.DBF- БД начислений
LGOT.DBF- БД с описанием льгот и ставок по ним
TABLE_R.DBF- БД ставок для каждого жильца
TARIF.DBF- БД тарифов (описание тарифа, ставка, метод расчета(1 кв.м\1 чел))
HELP.DBF- БД, содержащая MEMO-поля помощи
HELP.FPT- Файл хранения описания MEMO-полей из БД помощи
M_ZAR.MEM- Файл, в котором хранятся переменные, сохраняемые в программе (_*)
Архив - KOD.ZIP - содержит файлы-коды программы.
Содержание архива
MENI.PRG- Стартующий файл, запускающий приложение из среды FoxPro 2.6 (прилож.
1.2)
FUNC.PRG- Процедурный файл (прилож. 1.2)
OPEN.PRG- Файл открытия БД, а также их создания при первом запуске приложения и
создания структурных индексов для каждой БД (прилож. 1.3)
BAZES.PRG- Файл, содержащий команды просмотра данных с помощью BROWSE-окон
(прилож. 1.4)
ADD_DEL.PRG- Файл, описывающий процедуры дополнения\изменения (прилож. 1.5)
RAS.PRG- Файл, описывающий начало расчетов (прилож. 1.6)
OTCHET.PRG- Файл, описывающий формирования отчетов (прилож. 1.7)
HELP1.TXT- Файл помощи работы с окном "Квартиросъемщики"
HELP2.TXT- Файл помощи работы с BROWSE-окнами
HELP3.TXT- Файл, описывающий краткую характеристику системы
HELP4.TXT- Файл помощи работы с окнами дополнения льгот, тарифов и нормативных
ставок
HELP5.TXT- Файл помощи работы с окном "Работа с картотекой"
HELP6.TXT- Файл помощи работы с пунктами меню
HELP7.TXT- Файл помощи работы с отчетами
HELP8.TXT- Файл помощи работы при дополнении\изменении жильцов
Эти файлы в последующем заносятся в MEMO-поля БД HELP.DBF
Архив - KW_DEMO.ZIP - содержит исполняющий файл
приложения, без использования пакета FoxPro.
Содержание архива
KW_PLATA.EXE- Исполняющийся файл, при запуске создает
все нужные компоненты системы.
(Если файл понадобится направте запрос по адресу: pazov@chat.ru)
|