Смекни!
smekni.com

Автоматизированное рабочее место

ФайлДополнения\Изменения– ADD_DEL.PRG

************************************************************************************* Дополнение\Изменениеданных **

*********************************************************************

PROCEDURE ins && ПроцедураДополнения\Изменения

PARAMETERSd_ins

ord_a=order()

CLEAR

RELEASEKW,GW,XW,KS,ELC,TL,RD,OT,OR1,LG_TA

HIDEPOPUP serv

ONKEY LABEL F1 DO HELP WITH 8

ONKEY LABEL F7 DO N_YDOS_AND_KOD

selea

STORE.F. TO _PAD_OTCH

DEFINEPOPUP YL FROM 4,10

n=recno()

m=1

br=1

DIMENSIONyl_za(100,1)

gotop

i=1

yl_za(i,1)=yl

DOWHILE !EOF()

DEFINEBAR (br) OF YL PROMPT yl_za(i,1)

IFyl=yl_za(i,1)

skip

loop

ENDIF

m=m+1

i=i+1

yl_za(i,1)=yl

br=br+1

ENDDO

DIMENSIONyl_za(m,1)

ONSELECTION POPUP YL DO YLIZ WITH PROMPT()

definewindow hp from 12,28 to 20,60 shadow color scheme 16

DOCASE

CASEd_ins=1

SCATTERMEMVAR BLANK

STORE1 TO red

setskip to

CLOSEDATA

SELEi

USEHELP

SELEa

USERABOT

SELEd

USELGOT

CASEd_ins=2

IFRECCOUNT()=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

STORE2 TO red

ENDIF

ENDCASE

ACTIVATEWINDOW 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 Ордер' VALIDO_R() DEFA0COLOR SCHEME 16

@6,43 GET lg_ta FUNC '*C Льгота'VALID vib_lg() DEFA.f.COLORSCHEME 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 SCHEME16

@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 Радио' VALIDrd() 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 '%начисленийтелефона' COLORSCHEME 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 '%начисленийком. услуг' COLORSCHEME 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;

size1,15,1 COLOR ,,,,gr+/b,w+/n,r+/b,,W+/GR,w/b

READCYCLE SHOW red() color scheme 9

DEACTIVATEWINDOW INS

releasewindows hp

IFd_ins=1

DOP_INDEX

ENDIF

GO_REC

DOPOS_CH

ONKEY

ONKEY LABEL F1 DO HELP WITH 6

RETURN


FUNCTION red

DOCASE

CASEred=1

SHOWGET pod,1 PROMPT 'Cохранить'

SHOWGET pod,3 DISABLE

CASEred=2

SHOWGET pod,1 PROMPT 'Подтверждаю'

ENDCASE

DOCASE

CASEm.or_r=1

SHOWGET kw ENABLE COLOR SCHEME 16

SHOWGET gw ENABLE COLOR SCHEME 16

SHOWGET xw ENABLE COLOR SCHEME 16

SHOWGET ks ENABLE COLOR SCHEME 16

SHOWGET ot ENABLE COLOR SCHEME 16

SHOWGET elc ENABLE COLOR SCHEME 16

SHOWGET tl DISABLE COLOR ,,,,,,,,,BG+/BG


SHOWGET rd DISABLE COLOR ,,,,,,,,,BG+/BG

@10,2 FILL TO 20,29 COLOR SCHEME 16

DOCASE

CASEm.lgot=.F.

SHOWGET m.dat_c DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET m.dat_po DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET d.kwp_l DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET d.gw_l DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET d.xw_l DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET d.k_l_l DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET d.ot_l DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET d.tl_l DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET d.rd_l DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET d.info DISABLE COLOR ,,,,,,,,,W+/W

@8,29 clear to 9,60

@10,30 FILL TO 20,70 COLOR W+/BG

CASEm.lgot=.T.

SHOWGET m.dat_c ENABLE

SHOWGET m.dat_po ENABLE

SHOWGET d.kwp_l ENABLE

SHOWGET d.gw_l ENABLE

SHOWGET d.xw_l ENABLE

SHOWGET d.k_l_l ENABLE

SHOWGET d.ot_l ENABLE

SHOWGET d.tl_l ENABLE

SHOWGET d.rd_l ENABLE

SHOWGET d.info ENABLE

SHOWGET kw ENABLE COLOR SCHEME 16

SHOWGET gw ENABLE COLOR SCHEME 16

SHOWGET xw ENABLE COLOR SCHEME 16

SHOWGET ks ENABLE COLOR SCHEME 16

SHOWGET ot ENABLE COLOR SCHEME 16

SHOWGET elc ENABLE COLOR SCHEME 16

@10,30 FILL TO 20,70 COLOR SCHEME 17

ENDCASE

CASEm.or_r=0

SHOWGET kw DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET gw DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET xw DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET ks DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET ot DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET elc DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET tl DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET rd DISABLE COLOR ,,,,,,,,,W+/W

DOCASE

CASEm.lgot=.F.

SHOWGET m.dat_c DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET m.dat_po DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET d.kwp_l DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET d.gw_l DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET d.xw_l DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET d.k_l_l DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET d.ot_l DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET d.tl_l DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET d.rd_l DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET d.info DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET kw DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET gw DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET xw DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET ks DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET ot DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET elc DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET tl DISABLE COLOR ,,,,,,,,,W+/W

SHOWGET rd DISABLE COLOR ,,,,,,,,,W+/W

@8,29 clear to 9,60

@10,30 FILL TO 20,70 COLOR W+/BG

CASEm.lgot=.T.

SHOWGET m.dat_c ENABLE

SHOWGET m.dat_po ENABLE

SHOWGET d.kwp_l ENABLE

SHOWGET d.gw_l ENABLE

SHOWGET d.xw_l ENABLE

SHOWGET d.k_l_l ENABLE

SHOWGET d.ot_l ENABLE

SHOWGET d.tl_l ENABLE

SHOWGET d.rd_l ENABLE

SHOWGET d.info ENABLE

SHOWGET kw ENABLE COLOR SCHEME 16

SHOWGET gw ENABLE COLOR SCHEME 16

SHOWGET xw ENABLE COLOR SCHEME 16

SHOWGET ks ENABLE COLOR SCHEME 16

SHOWGET ot ENABLE COLOR SCHEME 16

SHOWGET 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

SELEd

ONKEY LABEL F1 DO HELP WITH 5

DEFINEWINDOW m_zar FROM 5,14 TO 23,58 SHADOW;

TITLE'Сегодня - '+dtoc(date())COLOR SCHEME 17

ACTIVATEWINDOW M_ZAR

@1,0 to 1,33 double

SCATTERMEMVAR BLANK

@3,1 to 3,31

@3,7 say 'Ввод ставокпо льготам'

@2,1 SAY 'КОД - ' GET m.n_lg PICTURE '99';

VALIDUNIC_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

readCYCLE COLOR SCHEME 5

SELEa

ONKEY

ONKEY LABEL F1 DO HELP WITH 6

RELEASEWINDOWS M_ZAR

RETURN


П


риложение№ 1.5

-6 -


Просмотрс помощью командыBROWSE– BAZES.PRG

************************************************************************************* Пунктменю - КАДРЫ **

***********************************************************************************

PROCEDUREKDR_r && Пункт меню- Работа с картотекой

HIDEPOPUP kadr

IFRECCOUNT()=0

ACTIVATEWINDOW vib

@1,10 SAY 'Б а з а п у с та'

@2,9 SAY 'Начните сдополнения'

@0,0 FILL TO 8,43 COLOR W+/R

@5,3 GET ins1 FUNCTION '*TH Дополнить;Отмена'VALID ins2();

DEFA1 SIZE 1,10,4 COLOR ,,,,w+/n,w+/n,w+/n,,W+/R,

READCYCLE OBJECT 1

DEACTIVATEWINDOW vib

RETURN

ENDIF

DEFINEWINDOW kd FROM 3,0 TO 23,30 system float grow close zoom shadow

ONKEY LABEL F1 DO HELP WITH 1

SELECTA

BROWSFOR 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 ;

WINDkd COLOR SCHEME 12

CLEAR

releasewindow kd

ONKEY LABEL F1 DO HELP WITH 6

RETURN


PROCEDURE kv_sch && Пунктменю(pop_vib) - жильцы

SELECTA

SETORDER TO ADRR

DEFINEWINDOW kd FROM 3,0 TO 23,30 system float grow close zoom shadow

ONKEY LABEL F1 DO HELP WITH 1

tr=recno()

_y=yl

_d=dom

_kv=kw_ra

BROWSFOR 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 ;

WINDkd COLOR SCHEME 12

CLEAR

releasewindow kd

ONKEY LABEL F1 DO HELP WITH 6

RETURN


PROCEDUREkdr_l && пункт меню- Картотекальготников

HIDEPOPUP kadr

IFRECCOUNT()=0

ACTIVATEWINDOW vib

@1,10 SAY 'Б а з а п у с та'

@2,9 SAY 'Начните сдополнения'

@0,0 FILL TO 8,43 COLOR W+/R

@5,3 GET ins1 FUNCTION '*TH Дополнить;Отмена'VALID ins2();

DEFA1 SIZE 1,10,4 COLOR ,,,,w+/n,w+/n,w+/n,,W+/R,

READCYCLE OBJECT 1

DEACTIVATEWINDOW vib

RETURN

ENDIF

DEFINEWINDOW kd1 FROM 1,0 TO 20,79 system float grow close zoom

ONKEY LABEL F1 DO HELP WITH 2

ONKEY LABEL F5 ACTIVATE POPUP POISK

ONKEY LABEL CTRL+T DO DEL

ONKEY LABEL CTRL+N DO INS WITH 1 IN ADD_DEL

GOTOP

BROWSFOR 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

ONKEY LABEL F1 DO HELP WITH 6

RETURN

PROCEDURE BAZA && пунктменю - База жильцов

HIDEPOPUP kadr

IFRECCOUNT()=0

ACTIVATEWINDOW vib

@1,10 SAY 'Б а з а п у с та'

@2,9 SAY 'Начните сдополнения'

@0,0 FILL TO 8,43 COLOR W+/R

@5,3 GET ins1 FUNCTION '*TH Дополнить;Отмена'VALID ins2();

DEFA1 SIZE 1,10,4 COLOR ,,,,w+/n,w+/n,w+/n,,W+/R,

READCYCLE OBJECT 1

DEACTIVATEWINDOW vib

RETURN

ENDIF

DEFINEWINDOW kd1 FROM 1,0 TO 20,79 system float grow close zoom

ONKEY LABEL F1 DO HELP WITH 2

ONKEY LABEL F5 ACTIVATE POPUP POISK

ONKEY LABEL CTRL+T DO DEL

ONKEY LABEL CTRL+N DO INS WITH 1 IN ADD_DEL

GOTOP

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

ONKEY LABEL F1 DO HELP WITH 6

RETURN


PROCEDURE ent_sch && пунктменю - Ввод оплатысчетчика

HIDEPOPUP kadr

IFRECCOUNT()=0

ACTIVATEWINDOW vib

@1,10 SAY 'Б а з а п у с та'

@2,9 SAY 'Начните сдополнения'

@0,0 FILL TO 8,43 COLOR W+/R

@5,3 GET ins1 FUNCTION '*TH Дополнить;Отмена'VALID ins2();

DEFA1 SIZE 1,10,4 COLOR ,,,,w+/n,w+/n,w+/n,,W+/R,

READCYCLE OBJECT 1

DEACTIVATEWINDOW vib

RETURN

ENDIF

DEFINEWINDOW kd1 FROM 1,0 TO 20,79 system float grow close zoom

GOTOP

SELECTA

ONKEY LABEL F1 DO HELP WITH 2

ONKEY LABE F5 ACTIVATE POPUP POISK

BROWSEfor 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;

WINDkd1 color scheme 18

CLEAR

ONKEY LABEL F1 DO HELP WITH 6

RETURN


PROCEDURE ent_opl && пунктменю - Ввод оплаты

HIDEPOPUP kadr

IFRECCOUNT()=0

ACTIVATEWINDOW vib

@1,10 SAY 'Б а з а п у с та'

@2,9 SAY 'Начните сдополнения'

@0,0 FILL TO 8,43 COLOR W+/R

@5,3 GET ins1 FUNCTION '*TH Дополнить;Отмена'VALID ins2();

DEFA1 SIZE 1,10,4 COLOR ,,,,w+/n,w+/n,w+/n,,W+/R,

READCYCLE OBJECT 1

DEACTIVATEWINDOW vib

RETURN

ENDIF

DEFINEWINDOW kd1 FROM 1,0 TO 20,79 system float grow close zoom

dat=DATE()

opl=0

SELECTA

GOTOP

ONKEY LABEL F1 DO HELP WITH 2

ONKEY LABEL F5 ACTIVATE POPUP POISK

BROWSFOR 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;

WINDkd1 COLOR W+/RB,GR+/RB,N/g,GR+/g,GR+/N,GR+/RB,GR+/RB,,,

ONKEY LABEL F1 DO HELP WITH 6

CLEAR

RETURN

************************************************************************************* Пунктменю – СЕРВИС **

***********************************************************************************

PROCEDURENORMS && пункт меню- Ввод нормативовоплаты (стоимостиуслуг)

HIDEPOPUP serv

ONKEY LABEL F1 DO HELP WITH 4

DEFINEWINDOW m_zar FROM 5,15 TO 23,55 SHADOW;

TITLE'Сегодня - '+dtoc(date())color scheme 19

ACTIVATEWINDOW 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();

DEFAULT1 SIZE 1,6,7 COLOR SCHEME 12

READCYCLE COLOR ,N/W

RELEASEWINDOWS M_ZAR

ONKEY LABEL F1 DO HELP WITH 6

RETURN


********************************************************************************

PROCEDURE VVV && пунктменю - Ввод оплатыдля олногоквартиросъемщика

ONKEY LABEL F1 DO HELP WITH 2

SELEa

R=RECNO()

y=yl

d=dom

kv=kw_ra

dat=DATE()

opl=0

DEFINEWINDOW m_zar FROM 5,15 TO 23,55 SHADOW;

TITLE'Сегодня - '+dtoc(date())color scheme 19

ACTIVATEWINDOW M_ZAR

IFor_r=0

LOCATEFOR y=yl.AND.d=dom.AND.kv=kw_ra.AND.or_r=1

IFFOUND()=.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

READCYCLE COLOR ,N/W

DEACTIVATEWINDOW M_ZAR

GOr

ONKEY LABEL F1 DO HELP WITH 1

IFWONTOP()='INS'

@10,27 CLEAR TO 20,50

setorder to adrr

=POS_CH1()

SHOWGETS

ONKEY 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. Определениесущностей

Исходяиз задачи, описаннойвыше, выделимследующиесущности:


  1. Жильцы – БД, содержащаяинформациюо жильцах(RABOT.DBF)

  2. Начисления - БД, содержащаяинформациюо начислениях(OPLATA.DBF)

  3. Льготы - БД,содержащаяинформациюо льготах(LGOT.DBF)

  4. Ставки - БД, содержащаяинформациюо ставках дляконкретногожильца и (или)о жильцах,проживающихв одном доме(TABLE_R.DBF)

  5. Тарифы - БД, содержащаяинформациюописания тарифови ставок поним (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).


Функцииподдержки базыданных.

Дляобслуживаниябазы необходимыследующиефункции.

  1. перемещениевперед\назадна одну запись(SKIP\SKIP–1). Приэтом должныблокироватьсяпопытки выйтиза первую\последнююзапись базы.Достижениеверхней\нижнейграницы желательноотображатьна экране(READ-окно).

  2. Переходна начало\конецбазы (GOTOP\BOTTOM).

  3. Пометказаписей, предназначенныхдля удаления,и снятие пометки(DELETE\RECALL).

  4. Дополнениебазы новойзаписью (APPENDBLANK).

  5. Выходизокна редактирования.

  6. Поискпо ключу (SEEK,LOCATE). Вслучае неудачногопоиска указательзаписей долженвернуться наисходную запись.

  7. Вывод\печатьданных.

  8. Упаковкаданных (PACK).

  9. Переиндексациябазы (REINDEXилиINDEX).

  10. Полнаяочисткабазы от данных(вспомогательнаябаза oplata.dbf)(ZAP).


Средствапредъявленияданных.

  1. КомандаBROWSE\CHANGEудобнатем, что даетпанораму данныхи не требуетпрограммированияперемещенияв БД. В даннойпрограммекоманда BROWSE в основномиспользуетсядля просмотраданных и результатоввычислений.

  2. Команда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-менюи работы с нимнеобходимопредусмотретьследующиеэлементы:

Определениеменю. Здесьописываютсясодержание,«горячие»клавиши, клавишибыстрого доступа,форма и реакциименю. Определениеменю можетсделано одинраз в началепрограммы идалее толькоиспользоваться.

Активацияменю. Команды\клавишиактивациипредъявляютменю на экранеи делают егочувствительнымк выбору пользователя.

Деактивацияменю. Удаляетего с экрана,сохраняя впамяти дляследующеговозможногоиспользования.

Удалениеменю. Этодействие очищаетпамять от определенияменю, и болееоно не можетбыть использованобез новогоопределения.


Имеютсядва типаэлементарныхменю:

  1. Вертикальное(«всплывающее»,или POPUP-меню),

  2. Горизонтальное(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-пункт«Выход» –позволяетвыйти из программы.


Работаокнами.

В приложениииспользуютсядва вида оконэто:

  1. Окна,предназначеныдля обработкиданных.

  2. Окна,предназначеныдля выборадействия илиотказа, либовыводят дополнительнуюпоясняющуюинформацию.Такие окна ещеназывают диалоговыеокна.


Приначальномзапуске приложения,когда базаданных пуста,любой выборпункта меню,для работыкоторого необходимыданные о жильцах,вызовет диалоговоеокно с предложениемначать работус дополнения.Это окно содержитпоясняющийтекст и двекнопки и .


Окно«Работа с картотекой»(INS)


Привыборе пунктаменю «КАДРЫ»-«Работас картотекой»открываетсяокно размеромво весь экран,в котором размещаетсявся основнаяинформацияо жильце. Окновизуальноделится повертикали надве части, гдев первой части(около 2\3 окна)располагаетсясведения ожильце, а воставшейсячасти, котораявыделена цветом,располагаютсякнопки длявыбора определенныхдействий. Рисунококна показанна рисунке2 приложения2. Рассмотримэти частипоподробней.


1 часть«Сведения ожильце»

Впервых строкахрасположеналичная информация:фамилия, таб.№,адрес, телефон,площадь квартиры,которые недоступныдля редактирования,дата рождения,а также автоматическивычисляемаяинформацияо количестволет.

Количествопроживающихи количествольготниковвычисляютсяв зависимостиот записей вБД и в ней несохраняются,напротив этихполей находитсяполе с количествомпроживающих,которое сохраняетсяв БД и служитоснованиемдля расчетаквартплаты.

Далее идетнадпись «СОСТАВСЕМЬИ», котораянакрыта невидимойкнопкой, привыборе которой выпадает POPUP-менюс фамилиямипроживающихв данной квартирес указаниемкто за неё платити кто являетсяльготниками.При выбореэлемента меню,окно обновляетсяинформациейоб этом жильце.

Далее идетстрока с информациейо льготе: код,наименованиельготы, а такжес какого и покакой периодона действует.Если периодне указан, топредполагается,что льгота неимеет ограничения.

Далее идетинформация,расположеннаяв табличнойформе, как показанона рисунке,где:


УслугаТарифРасчет Льготы []

7

[x]Квартплата1.1791.26 -15.21 6

[] Горячаявода 10.00 0.00 0.00


1 2 3 4 5


  1. Кнопкивыбора начисленийуслуг ( [ ]-неначисляется,[x]-начисляется)

  2. Поясняющийтекст к кнопки(для какой услуги,которую нужновыбирать)

  3. Ставкиза услуги, этинадписи накрытыневидимымикнопками, выборкоторых открываетокно и меню,где можно изменитьставки дляжильцов квартиры(дома). Описаниятарифов отображаетсяв окне в зависимостиот выбора тарифа:так если расчетуслуги производитсяв зависимостиот количествапроживающихв квартире, тоотображаютсятолько тарифына одного человека,если рассчитываетсяот занимаемойжилплощади,то на 1 квадратныйметр. (см. рис.3 прилож. №2, атакже см. описаниепунктов меню«Сервис»-«Тарифы»).

  4. Показываютсясуммы начисленийпо услугам

  5. Показываютсясуммы начислений по услугам сучетом льготы.

  6. Заголовкистолбцов.

  7. В столбце«Льготы»предоставленаобщая сумманачисленийпо льготам дляданной квартирыи чтобы получитьинформациюо начисленияхпо льготе жильца,информацияпо которомупредставленав окне, предназначенакнопка «[]»,которая доступнатолько в томслучае еслижилец имеетльготу и приего выборепоявляетсямини окно, гдепоказаны егоначисленияпо льготе.

На следующейстроке представленыитоговые суммыпо начислению,льготам и коплате.

Далее датаоплаты, суммауплаты и остаток или задолженность.

И на последнейстроке расположеныдве кнопки «Польготам» и «Пооплате», которыедоступны в томслучае еслиданный жилецимеет льготулибо имеетордер, либо ито и другое.


«По льготе»– при ее выборепоявляетсяокно, котороепоказано нарис. 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

И выполняетсяпока не будетвыполнено одноиз следующихусловий:

  • Ещераз встретятслово PROCEDURE.

  • Будетобноруженокоманда RETURN– возращениев предыдущуюпрограмму.

  • Будетвыдана командаCANCEL –прерываниеработы программы.

  • Будетвыдана командаQUIT- выходиз СУБД.

  • Встретитсяновая командаDO для запускадругой программы.

  • Будетдостигнутконец файла.

FoxProаналогичноподпрограмметрактуетсяпонятие пользовательскойфункции, котораяначинаетсяс ключевогослова

  • FUNCTION

и в отличииот процедурыможет вернутьнеобходимыезначения вызываемуюпрограмму.

Имеются4 способа вызватьфункцию:

  1. Присвоитьвозвращаемоезначение переменной.Например, следующаястрока кодазапоминаеттекущую системнуюдату в переменойdToday :

dToday=DATE()

  1. Включитьвызов функцию в команду.Например, следующаякоманда устанавливаетпо умолчаниюкаталог, имякоторого возвращаетфункция GETDIR():

SET DEFAULT TO GETDIR()

  1. Напечататьвозвращаемоезначение вактивное окно:

?TIME()

  1. Вызватьфункцию беззапоминаниягде либо возвращаемогозначения:

= SYS(2002)

Дляпрерываниявыполненияпрограммыслужит оператор

  • RETURN[Expression | TO MASTER | TO ProgramName]

Которыйвозвращаетуправлениевызывающуюпрограмму, ив ней выполняется следующаякоманда послевызывающей;если указанаопция TO MASTER, тоуправлениевозвращаетсяна самый верхнийуровень вызывающейпрограммы, аэта же программас опцией TOProgramName передаетуправлениев указаннуюпрограмму. Прииспользованиифункции командаавтоматическивозвращает.Т. (истина), еслине указанодругое выражениена месте Expression.

  • RETRY

Действуетподобно командеRETURN, но привозвращенииуправленияв вызывающуюпрограммуповторяетсявыполнениепоследнейкоманды.

Встречая обращениев процедуре,Fox Pro ищет еев следующейпоследовательности:

1.в текущейпроцедуре;

2.в процедурномфайле, если онподключен;

3.снизу вверхв старших процедурахотносительнотекущей, еслиони есть;

4.на диске в видеотельной программы.

Обращениек процедуревыполняетсякоманды

  • DO [WITH][IN]

В процедурумогут бытьпереданы и изнее полученынекоторыевеличины, указанныев списке параметровпосле словаWITH. Этимивеличинамимогут быть нетолько переменныеи константы,но любые разрешенныевыражения. Втаком случаепервой командойв вызываемойпроцедуредолжна бытькоманда, воспринимающаяих:

  • PARAMETERS


Процедурныйфайл


Множествовнешних, обычно«родственных»процедур иногдаудобно объединитьв один процедурныйфайл, (такжетипа PRG), которыйвызывается(загружаетсяв память) командой

  • SETPROCEDURE TO

Толькопосле этогоможно командойDO вызыватьиз него отдельныепроцедуры (вданной программеимя процедурногофайла FUNC.PRG)

В каждыймомент можетбыть открыттолько одинпроцедурныйфайл. Чтобы егозакрыть, нужноиспользоватькоманду SETPROCEDURE 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),командой ONERROR и функцией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)

БД(БДльгот)

  • TAG-n_lg– индексированиепо полю номеральготы (код),для связи с БДжильцов (RABOT.DBF).

БД

БДставок)
  • TAG-tab– индексированиепо полю табельногономера, длясвязи с БД жильцов(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‘* …’), выполняетсяусловие CASEins1=1 и следовательновыполняютсякоманды которыеследуют послеэтого условия(DO INS WITH 1).Если выборне происходитвообще, то ипроцедураигнорируется.

Теперь ещераз пройдемсяпо пунктамменю, и разберемего работу сточки зренияязыка программирования.Начнем с пункта«СЕРВИС»


«СЕРВИС»-«Дополнение»


Итакчтобы начатьс дополненияБД нужно выбратьв меню «СЕРВИС»-«Дополнение»или в окне кнопкуДополнить.Выбор пунктаменю или кнопкивызывает выполнениепроцедурыдополнения,которая определяетсякомандой DOINS WITH 1. Здесь параметр1 определяетчто это процедурадополнения.В программепредусмотренапроцедураИзменения спомощью выполненияэтой же процедуры,но с параметром2. Разберем этупроцедуру. (см.прилож. 1.5 и прилож.1.2).


В первых строкахпроцедурыопределяетсяимя для параметра,в переменной"ord_a" запоминаетсяназвание тегаиндекса, чтобыпосле выходаиз процедурывосстановитьпараметрысистемы.

Далеезакрепляютсяза клавишами"F1" и"F7" действиявызова помощии изменениякода по льготе,глобальнойпеременной"_PAD_OTCH" присваиваетсязначение ".F.",определяетсяPOPUP-меню улици массив элементыкоторого вцикле DO WHILEпреобразуютсяв BAR-пунктыменю и с помощьюпеременной"m" массивпереопределяется,чтобы в менюне было пустыхстрок. Определяетсяокно "hp" длявывода в немменю кодов иописания льготих выбора изанесенияномера илиописания документальготы.

Далее в структуреDO CASE анализируетсяномер параметра.Если параметрравен 1, то этодополнениеи с помощьюкоманды SCATTERMEMVAR BLANK создаетсямассив, содержащийпеременныеаналогичныеполям БД с пустымизначениями,если параметрравен 2, то этоизменение имассив будетсодержатьпеременныес данными текущейзаписи БД (SCATTERMEMVAR) и здесь такжеопределяютсяпеременные,которым присваиваютсязначения полей,которые имеютлогическийформат и отображаютсяна экране спомощью 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()) вструктуре DOCASE анализируетсявыбор кнопки,если она выбрана,то сначалаобъявляютсяпеременныеиз полей-переменныхс удалениемиз них пробелов,затем ведетсяпоиск в базежильцов с такимадресом и имеющихполе 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), которыезатем копируютсяв поля БД ставокновой записи,иначе они имеютнулевые значения.После этогокомандой SCATTERMEMVAR BLANK создаютсяновые переменныеполей, переменнымдля выборауслуг присваиваютсязначения .F.GET-поля обновляютсяи можно редактироватьследующуюновую запись.

  • Кнопка«Подтверждаю»,параметр 2 (pod=1,red=2) – первой командойпеременныепереносятсяв БД. После этогопроверяетсяизменялся лиадрес, с помощьюпеременныхопределенныхранее (см. вышеyl_ins ,dom_ins, k_ins). Еслиадрес не изменился,то процедуразаканчиваетсяи возвращаетсяв окно изменения,иначе устанавливаетсяфильтр работытолько с жильцами,имеющими текущий(измененный)адрес, и корректируетсяполе-количество.Затем аналогичнаяоперация происходитс жильцамистарого адреса.

  • Кнопка«Выход» – завершаетработу процедуры,и выполняютсякоманды следующиеза командойREAD, это закрытиеокна, переиндексацияданных и выходс процедуры.

  • Кнопка«Удалить» –доступна тольков том случае,если это процедураизменения (см.прилож. 1.2 стр.35) и будет рассмотренаниже.

  • Теперьрассмотримпоследнююкоманду обновленияGET-объектов– это команда-опцияSHOW red(), входящаяв команду READ.Она выполняетсявсегда еслив какой-либопроцедуревстретитсявыражение SHOWGETS, в данном случаев процедурах,вызываемыхв окне Дополнения\Измененияданных, есливстречаетсяэто выражениевыполняетсяпроцедура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.

В первых строкахвыбираетсяБД, где содержитсяинформацияпо льготам,затем определяетсяокно для работыпроцедуры иобращение кпомощи. Открываетсяокно для редактированияльгот, в окнетакже используютсяне сами поля,а их переменные,созданныекомандой SCATTERMEMEVAR.

После вводав поле «Код»номера, при еговыходе выполняетсяпроцедураUNIC_LG (см. прилож.1.2 стр. 36), в которойв БД льгот ищетсякод с веденнымкодом и еслинайден то переменныеобновляютсяинформациейпо этому коду,и доступны дляизменения илиудаления, еслинет то остаютсяпустыми и готовык заполнению.

Так как работапроисходитс переменными,то для сохранениясделанныхизменений илидополнения,нужно подтвердить,нажав на кнопку«Сохранить».

Работа кнопокосуществляетсяв процедуреLG_INS, где вструктуре DOCASE выполняютсядействия взависимостиот числовогозначения переменной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), гдекомандой CLEARREAD завершаетсяработа спеременными-полямибез перенесенияих в БД; и удалениятекущей записи(процедураdel_rec), текущаязапись командойDELETE помечаетсяна удаление.

  • PAD-пункт«Дополнить»и PAD-пункт«Выйти» - обрабатываютсяв процедуреINS_ST, в которуюпередаютсяпараметры,содержащиетекст-приглашениеданных пунктов.

  • Есливыбран пункт«Дополнить»,то в процедуре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объектыи функции возвращаютрезультаты, по тому жильцу,который находитсяв окне.

  • SHOWGETS– выполняетсяпроцедураtb_l,котораяслужит дляобновленияGET-объектов.


  • Следующаягруппа GET-объектоввыводит полявыбора услугс помощьюкнопок-перек-лючателей(@ 10-17,2 GETkw(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 анализируютсяпереданныепараметры:

  • CASEOR=1.AND.LG=.T. то естьесли это плательщики он также льготник.В первой строкеактивируетсяTAG, при которомдоступны всезаписи в БД,затем сканируетсяБД и у всех жильцов,имеющих этотадрес полювыбора телефона(радио)присваиваетсязначение «Ложь»(.F.) и затемэтому жильцуполю выборателефона(радио)присваиваетсязначение «Истина»(.Т.). то есть поэтому условиюплательщикимеющий льготуимеет преимуществоперед другимижильцами, имеющимильготу, по выборуэтих услуг.

  • CASEOR=1.AND.LG=.F. то естьесли это плательщик,не имеющийльготу. Здесьпросто полювыбора телефона(радио)присваиваетсязначение «Истина».

  • CASEOR=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_STAVOKWITH ST,где VIB_STAVOK-этоимя поля в БДставок (см. выше)ST-ставка изполя ST_KA вБД тарифов(ST=ST_KA))


Здесьтакже добавленповый пунктменю «Установитьнорматив», привыборе которогопоявляетсяPOPUP-меню сдвумя BAR-пунктами«Установитьвсем жильцамдома» и «Установитьданному жильцу»выбор этихпунктов осуществляетсяв процедуреV_ST2 кудапередаютсяпараметрыномера BAR-пункта(BAR( )) (см.прилож. 1.2 стр.15).Здесь в структуреDO CASE определяетсяномер выбранногоBAR-пунктаи для всех жильцовдома (параметр=1(«Установитьвсем жильцамдома») или дляданных жильцовквартиры (параметр=2«Установитьданному жильцу»),в скан- условии,полям БД ставокэтих жильцовпо выбраннойуслуге присваиваетсянулевые значения.


  • ПоследниеGET-объекты вэтой частиэкрана этокнопки «Польготе» и «Пооплате», которыедоступны еслижилец являетсяплательщиком(«По оплате»)и(или) льготником(«По льготе»).

Кнопка «Польготе» – открываетокно (см. прилож.2 рис 5), в которомс помощью команды@…SAY…GET, выводятсяполя из базыльгот, по томукоду, которыйимеет данныйжилец, доступныедля редактирования.(см. прилож. 1.2стр. 9).

Кнопка «Пооплате» – открываетокно (см. прилож.2 стр. 6), в которомс помощью команды@…SAY…GET, выводятсяполя из базыставок дляданного жильца,доступные дляредактирования(см. прилож. 1.2стр.10). при этомпосле закрытияэтого окна илипосле выходаиз последнего(первого) GET-объектавсе значенияполей заносятсяв переменные,появляетсяэто же окно синформациейо количествеквартир в доме,по адресу которомуживет плательщик,и с помощьюкоманды WAITбудет предложеноустановитьтакие ставкивсем жильцамдома (WAIT‘Установитьвсем жильцам(Y/N)’TO Y) и еслибудет нажатаклавиша Y(Н), то с помощьюфильтра исканированияэти ставкибудут присвоенывсем жильцам,проживающихпо этой улицеи дому, иначетолько жильцамданной квартиры.Это достигаетсяс помощью командыREPLACE WITH ,так как связьодна ко многим,то перемещенияуказателя восновной БДвызывает перемещениево вспомогательной.


В частивторой этогоокна расположенытриггерныекнопки (PushButtons), которыепри их выборевыполняютопределенныедействия пообработкеданных.

  • «Изменить»,«Добавить»- запускаетпроцедуруизменения дляжильца находящегосяв окне, илипроцедурудополнениянового жильца,которая описанавыше (см. «СЕРВИС»-«Добавить»стр. 36).

  • «Удалить»– запускаетпроцедуруудаления текущейзаписи (см.прилож. 1.2 стр.35)здесь вначалепроверяетсяпомечена лизапись на удалениеи если помеченато пометкаснимается ипроцедуразаканчивается.Это нужно длятого, что в окнах«База жильцов»,«Картотекальготников»также можноудалять записикомбинациейклавиш ,и этой же комбинациейклавиш сниматьпометку наудаление. Далееидет командапереноса переменныхв БД, если вызовэтой процедурыпришел из функцииизменения,затем в переменныезаноситсятекущий адрес,устанавливаетсяфильтр по этомуадресу и впеременнуюkol заноситсяколичествозаписей (COUNTTO 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)

  • «Вводоплаты» – открываетокно для вводаоплаты дляодного квартиросъемщика.Выполняетсяпроцедура VVVрасположеннаяв файлеBAZES.PRG (см. прилож.1.4 стр. 5).

Вначале переопределяетсяназначениена клавишупомощи, затемопределяетсяокно для работы,затем анализируетсяжилец, на которомбыл вызов этойпроцедуры иесли это неплательщик,то ищется плательщикквартиры иуказательзаписи переходитна эту запись,и работа будетпроизводитсяс этим жильцом.Затем определяютсяпеременныедля работы этоадрес (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-квартира.

После этогоактивной выбираетсяБД начисленийи в ней, по табельномуномеру, ищетсязапись, длякоторой делаетсярасчет (LOCATEFOR t=tab). Если поискне удачный, тодля БД жильцовустанавливаетсяфильтр, прикотором доступнытолько записис текущим адресоми командойAPPEND FROM FIELDSдобавляютсязаписи в БДначислений.Если поик удачный,то разрываетсясвязь междубазами, дляработы командыобновления,с помощью которойодинаковыеполя в БД начисленийпринимаютзначения такиекакие в БД жильцов:UPDATE ON FROMREPLACEWITH.

Далее текущейвыбираетсяБД начисленийи для нее устанавливаетсясвязь ОДНА-КО-МНОГИМс БД ставок иБД льгот, а такжефильтр дляобработкеданных имеющимтолько адрес,который ранеебыл сохраненв переменных.

Далее обнуляютсявсе поля начисленийпо льготам, этосделано длятого, что еслив окне измененпериод илильгота отменена,то при расчетельгот эта записьигнорируется,но старые данныерасчета сохраняютсяи чтобы этогоне допуститьони обнуляются.

После этогов SCAN-циклерассчитываетсяквартплата,с помощью командыREPLACE WITH ,то есть присваиваетсязначение .Здесь в выражениииспользуетсярасчет (REPLACEkw_pl WITHIIF(g.kwp_l=0, kv_pl,g.kwp_l)*IIF(kw_l=.t.,kv_m,0)..).

ФункцияIIF(,,)– выдает значение,если истинно, и- если ложно. Внашем случаепервый множитель– это ставка,и если полеставки дляэтого жильцаравно нулю, топрименяетсянормативнаяставка, еслиже оно имеетзначение, топрименяетсяэта ставка.Второй множительопределяетвыбор этойуслуги, еслиполе фиксирующиевыбор услугиравен .Т., то естьона выбранадля начислений,то умножениеидет на квадратныеметры(количествочеловек), иначена 0.

После расчетаквартплатырассчитываютсяльготы. Здесьв SCAN-циклепредусмотреноусловие прикотором в расчетпопадают толькоте жильцы, укоторых либоне имеетсяпериода действияльготы, либотекущая даталежит в промежуткемежду началоми концом действияльготы. Расчетаналогичныйописанномувыше, различиетолько в том,что если поуслуге расчетидет по квадратнымметрам, то новысчитываетсяна одного человека(kv_m/kol_vo), и всезначения умножаютсяна (-1), чтобы показатьльготы с отрицательнымзнаком.

После окончаниярасчетов суммируютсявсе начисленияпо льготам изаносятся вполя жильца,который платитза квартиру,для просмотраих в окнах, ирасчета суммык оплате. Затемразрываютсявсе связи, отменяютсяфильтры, выполняетсяпроцедураоткрытия базданных (см.прилож. 1.3 стр.1), обновляютсяданные в окнеи процедуразавершается.

  • Выйти»– заканчиваетработу с этимокном.

И теперьрассмотримпроцедуруобновленияокна tb_l(),которая включенав команду READ,с помощью опцииSHOW (см. прилож.1.2 стр.5-6). Здесьв несколькихциклах DO CASEанализируютсязначения переменных,которые в процессевыполненияпринимаютразличныезначения, и взависимостиот этих значенийвыполняютсяопределенныедействия.

  • Анализпеременной_FILTR – имеетчисловое значениеи служит дляфильтра доступак данным приих просмотреи редактирования.Значение 1 –устанавливаетсяглавным TAGord, при которомдоступны жильцы,которые платятза квартиру,2 - – устанавливаетсяглавным TAGlgt, при которомдоступны жильцы,которые имеютльготу, 3 - –устанавливаетсяглавным TAGadrr, при которомдоступнывсе жильцы.А также на экранвыводитсястрока-подсказкас выбраннымфильтром

  • Далееанализируютсякатегорияжильца, и еслиэто плательщикили льготник,то кнопки длявыбора услуг– доступны дляредактирования,если простожилец то недоступны,при этом кнопкии область ихрасположениявыделяютсяцветом.

  • Далеетакже анализируютсякатегорияжильца, еслильготник –доступна кнопка«По льготе»,если плательщик– доступнакнопка «Пооплате» и недоступны, еслиэто не выполняется.Анализ выполняетсяв двух циклахпо каждой кнопки,для того, чтоесли плательщикимеет льготу,то ему доступныобе кнопки.Здесь такжепри анализекатегорииплательщикавыводитсяразная информацияпо начислениямльгот (см. прилож.1.2 стр. 4). Это –если плательщиквыполняетсяпроцедураOB_NACH, котораявыводит наэкран общие(суммированные)начисленияпо льготам,если это жилецто выполняетсяпроцедураLG_NACH, котораявыводит наэкран начисленияпо льготе дляданного жильца.

  • И последнееэто анализпеременных“e” и “b”,которые служатдля блокированиякнопок перемещенийпо БД в процедурахперемещений,при попыткевыйти за пределыБД, а здесь онираз блокируются при удовлетворяющемзначениии,которые присваиваютсяв процедурахперемещений.


«КАДРЫ»-«Квартиросъемщики»


При выбореэтого пунктавыводятсяданные из БДжильцов в табличнойформе с помощьюкоманды BROWSE.Записи выводятсягоризонтальнов окне определенномранее. Форматполей можетнастраиватьсяс помощью опцииFIELDS , атакже иметьтак называемыевычисляемыеполя. Эти поляфактическине являютсяполями БД, номогут быть ихфункциями иотображаютсяна экране наравнес настоящимиполями.

В данной процедуреKDR_R (см. прилож.1.4 стр. 1) в окнеKD открываетсяBROWSE-окно сполями табельногономера (tab),фамилии (fam), вычисляемымполем со значком‘’,который появляетсяу жильца, которыйявляется плательщикоми вычисляемымполем со значком‘’,который появляетсяу жильцов, имеющихльготу – этиполя являютсяфункциями отфактическихполей, выполняемыес помощью функцииIIF(,,).Предъявлениеданных частьэкрана, а насвободнойчасти, выводятсяна экран информацияс помощью команд@…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 оно активируется.После выбораиз меню выполняетсядействие закрепленноеза каждым пунктомв цикле DOCASE и оно «умирает».Все пункты менюрассматривалисьвыше.


«КАДРЫ»-«Картотекальготников»

Выборзтого пунктатакже вызываетBROWSE-окно,открытое в окнеKD1, котороеоткрываетсяна весь экран,кроме двухпоследнихстрок, и предъявляеттех жильцов,которые имеютльготу (BROWSEFOR LGOT=.T.)Здесь выводятсяполя фамилии,табельногономера, адреса,телефона, периодадействия льготы,категории иномера удостоверения.При входе вполе выполняетсяпроцедура INFO(см. прилож.1.2 стр. 41) с помощьюключей - :W=INFO() и - :F. Этапроцедуравыводит в нижнихстроках следующуюинформацию:если это плательщик,то суммы к оплате,остатка, количествольготникови количествожильцов, иначефамилию и табельныйномер тогожильца, ктоявляетсяплательщиком.


«КАДРЫ»-«Базажильцов»

Работапроцедуры, привыборе этогопункта аналогичнаописанной выше,только предъявляютсявсе жильцы.


«КАДРЫ»-«Вводданных счетчика»

Открываетв окне KD1BROWSE-окно с плательщикамии полями табельногономера, фамилии,адреса, даннымио старом и новомзначенияхсчетчика иполем суммыначисленнойза пользованиеэлектроэнергиейиз БД начислений(см. прилож. 1.4стр. 3). Поля данныхсчетчика доступнык редактированию,остальныеоткрыты толькодля просмотра,что достигаетсявключениемв имена полейключа - :R. Такжевсе поля имеютвходной контроль- :W=INFO(), которыйописан выше,а поля данныхсчетчика ивыходной контроль- :V=R() (см. прилож.1.2 стр. 42), где привыходе рассчитываетсясумма к оплатеза электроэнергиюи корректируетсяитоговые суммы.


«КАДРЫ»-«Вводоплаты»

здесьв начале определяютсядве переменные,которые нужныдля работы, этоdat, котораясодержит текущуюдату (dat=DATE()) иopl, котораяимеет нулевоезначение ислужит длятого, чтобы впрограмме небыло ошибкипри обновленииполей, потомучто используетсяодна процедураобновленияполей с процедуройдля ввода оплатыдля одногожильца. Затемоткрываетсяв окне KD1BROWSE-окно, в которомпредъявляютсяполя из разныхбаз, это табельныйномер, фамилия,поле для хранениясуммы оплаты(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»открываетсяБД начислений.После этогокомандой JOINWITH TO FOR FIELDS , создаетсяновая БД-RACH.DBFсодержащаяполя, которыеперечисленыпосле опцииFIELDS и количествомравным в БДжильцов, чтовыполняетсяс помощью условия.Другими словаминовая БД расчетасодержит толькоплательщиков,с полями необходимымидля проведениярасчета и хранениярассчитанныхданных.

Далееснова закрываютсявсе базы данныхи в области «а»уже открываетсяновая БД расчетов,для которойсоздаетсяструктурныйиндекс длясвязи с другимиБД. Затем устанавливаетсясвязь с БД жильцови БД ставок ипроизводитсярасчет, которыйаналогиченописанному,при рассмотрениикнопки «Расчет»в окне «Работас картотекой»(«КАДРЫ»-«Работас картотекой»).После завершениярасчета, с помощьюкоманды CALCULATESUM(поле в которомхранятьсяданные расчета)ТО создаютсяпеременныесо значениямиобщих суммначисленийдля каждойуслуге, дляформированиястатус-строкипри просмотревыполненногорасчета. Далеес помощью команды@ …SAY они(переменные)выводятся внижней частиэкрана и в окнеKDR открываетсяBROWSE-окно с даннымирасчета и фамилиейжильцов.

С помощьюключа входав поле - :W=INFO1()внизу изменяетцвет сумма,которая относитсяк данной услуге(к примеру есликурсор в полегорячая вода,то внизу окрашенаобласть с общейсумме по горячейводе, как показанона рис. 14 прилож.2), а с помощьюконтроля выхода- :V=INFO2() цветпринимаетпрежний цвети с помощьюключа - :Fвыполняетсявсегда, независимоот изменения,это в основномнужно для ключа:V.

Работаэтой процедурыпоказана настр. 51 прилож.1.2. здесь в структуреDO CASE анализируетсяв какое полевходит курсор(INFO1), и из какоговыходит (INFO2)это достигаетсяс помощью примененияфункции VARREAD()-котораявозвращаетпрописнымибуквами имяполя(переменной),а с использованиемс командойBROWSE/CHANGE возвращаетимя поля строчными(кроме первой)буквами (см.также SYS(18)),и в зависимостиот названияполя при входе,окрашиваетсяопределеннаяобласть внизуэкрана, с помощьюкоманды @…FILLTO … и цветовойсхемы 12, а привыходе с помощьюэтих же командэтой областивозвращаетсяпрежний цветиз цветовойсхемы 1.

Передоткрытием окнапросмотра поначислениям,назначаютсяна клавишивыхода изBROWSE-окна,процедурывыхода (ON KEYLABEL ESC(CTRL+W,CTRL+Q) DO vib8), гдеактивируетсяокно с кнопками«Сохранить»и «Отмена» (см.прилож. 1.2 стр.45) и при выборекнопки «Сохранить»открываетсяБД начислений,с помощью команды- UPDATE FROM REPLACE WITH ,переносятсярассчитанныеданные в БДначислений.После этоговыбирается активной БДрасчетов, закрываетсяи удаляетсяс диска вместесо структурныминдексом.


«РАСЧЕТ»-«Расчетпо льготам»


Вседействия, выполняемыепри выбореэтого пунктааналогичныкак описановыше в расчетеквартплатыза исключениемнекоторыхотличий, которыене влияют насуть расчетаописанноговыше (см. прилож.1.2 стр. 46).

Здесьимеющиесязаписи не удаляютсяиз БД начислений,так как предпологается,что расчетльгот производитсяпосле расчетаквартплатыи все записинаходящиесяв БД жильцовимеются в БДначислений(это достигаетсякомандой APPENDFROM описаннойвыше).

Такжеиспользуетсядругой TAG присоздании новойБД расчетов,а именно TAGdate (см. прилож.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 заноситсясумма к оплате,командой GOr указательпереходит назапись плательщикаи в поля дляэтой записипереносятсяполученныерезультаты.Затем активнойделается БДжильцов и в нейищется этазапись и взависимостиот условийкорректируютсяполя по остаткуи оплате. Такесли оплатане производилась(поле OPL пусто),то остатокбудет рассчитаннаясумма к оплатес отрицательнымзначением,иначе результатостатка, полученныйпри вычитаниииз внесеннойсуммы начисления,рассчитаннойсуммы по оплате.После этоговыбираетсяснова БД начислений,проверяетсяусловие, прикотором еслипеременнаяn (номерследующейзаписи) большепеременнойm (количествозаписей) товыполняетсяпроцедурапросмотра ислияние расчетовзаканчивается,иначе расчетпродолжаетсядля следующихзаписей. Длячего нужно этоусловие?

Дело в том, чтодля просмотраи формированияотчетов целеобразнохранить вседанные, относящиесяк начисленнымсуммам по начислениямквартплатыи льготам взаписи одногожильца, являющегосяплательщиком,для чего в циклеосуществляетсяпереход на этузапись. А таккак при началецикла в первомWHILE-цикле определеноусловие окончания,если переменная!EOF() приметзначение .F.,то при такомподходе (возвратена нужную записьв процессецикла) эта переменнаяникогда непримет этогозначения, таккак она изменяетсвое значениене тогда когдауказательзаписи находитсяна последнейзаписи, а когдауказательзаписи попытаетсявыйти за пределыпоследнейзаписи, вот дляпрекращенияцикла и используетсяэто условие.А именно: переменнаяm хранитчисло всехзаписей а nхранит номерпоследнейзаписи. И еслиn будетбольше m,то этозначит, что всезаписи рассчитаны.Единственнымнедостатком(по моему мнению)такого подходаявляется то,что переменнаяm ранитвсе записи,включая записипомеченныена удаление,и в зтом случаерасчет дляпоследнейзаписи производитсястолько раз,сколько в БДзаписей наудаление, чтоне влияет нарезультат, атолько на скоростьобработки, ноэто ограничениене касаетсямоего расчета,по той причине,что записипомечаютсятолько в БДжильцов, а в БДначисленийих не существует,так как БД начисленийформируетсяиз БД жильцов,для которойопределеноигнорированиезаписей наудаление (SETDELETE ON).

И последняякоманда, котораявыполняетсяпри истинномусловии описанномвыше, это просмотррасчетов. Оносуществляетсяс помощью командыBROWSE (см.прилож. 2 рис.16) со следующимиполями: фамилия,табельный номериз БД жильцови результатыначисленийпо квартплате,льготам и суммек оплате из БДначислений,также используютсятри вычисляемыхполя. Это поле-функцияот полей, созначком «»,показывающаяжильцов, имеющихльготу и полясо значками:«+», «=»,показывающихсуть расчета.В нижней частив статус-строкепоказываетсяадрес жильца,количествопроживающихи льготников(см. прилож. 1.2стр. 42). А такжездесь переменной_PAD_OTCH, присваиваетсязначение .Т.,которая позволяетформироватьотчеты по выполненнымданным.


ФункцияПОИСКА

На этомпункты менюпо работе сданными заканчиваютсяи сейчас рассмотримфункцию поиска,которая выполняетсяво всех процедурах,предназначенныхдля обработкии просмотраданных. Этапроцедуразакрепленаза клавишейF5, а в окне,которое вызываетсяпри выборе«КАДРЫ»-«Квартиросъемщики»,закрепленаза пунктом вFox-меню «Поиск».

Для выполненияэтой функциииспользуется:

  1. меню,с пунктамиопределяющимпо каким значениямбудет производитьсяпоиск (по фамилии,по табельномуномеру, по адресуи отмена поиска),которое определенов файле MENI.PRG(см. прилож.1.1 стр. 4).

  2. Окнодля заданиякритерия поиска,с помощью команды@…GET и переменной«а», имеющейтип, в зависимостиот выбора пунктаменю. Окно такжеопределенов начальномфайле (см. прилож.1.1 стр. 2).

А такжеиспользуютсяразные процедуры.Для поиска пофамилии и табельномуномеру – POISK,по адресу –PO_ADR. Это сделанодля того, чтобыпри поиске поадресу возможнооставлятьпустыми значенияномера домаи(или) квартиры.

Выполнениефункции поискапостроена такимобразом, чтопри нажатииклавиши (пунктаменю) активируетсяменю поиска(ON KEY LABELF5 ACTIVATE POPUP POISK (ACTIVATE POPUP POISK)), где нужновыбрать необходимыйпункт, как показанона рис. 13 прилож.2, где при работес картотекойльготниковнажата клавишаF5 и выбранпункт «По адресу».Для пунктовменю POISK’aкомандой ONSELECTION 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 о неудачномпоиске. Сампоиск осуществляетсяпосле окончаниякоманды DOCASE в командеIF…ENDIF - IFBAR()#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.(ONSELECTION POPUP YL DO YLIZ WITH PROMPT()),где передаваемыйпараметр (PROMPT())это названиеBAR-пункта,то есть названиеулицы. Работас окном POISKосуществляетсяс помощью переменныхполей адреса,которые создаютсяс помощью команды– SCATTERFIELDS yl, dom, kw_ra MEMVAR BLANK. Послезаполненияполей и нажатииклавиши Enter(начать поиск)в структуреDO CASE анализируетсясколько полейзаполнено ис помощью командыLOCATE c FOR условиемведется поиск.Если он удачныйто осуществляетсяпереход нанайденнуюзапись, и еслиэто READ-окното информацияо жильце обновляется,иначе указательзаписи возвращаетсяна прежнююзапись.


Пунктменю «ОТЧЕТЫ»

Подготовкаи оформлениеотчетных данныхбез сомненияявляются кульминациейлюбого деловогоприложения.Так что стоитприложитьусилия длятого, чтобы всемногообразиеданных, записанныхв БД приложения,нашло достойноеотображениев отчетах,напечатанныхна принтере.

FoxProимеет мощныесредства построенияотчетов длявывода данныхв желательномдля пользователявиде на принтер,экран или втекстовый файл,но в своей дипломнойработе я непользовалсяэтими средствами,а попыталсяпрограммированиемвручную создатьнужные выводимыеданные. Этосвязано с тем,что я не преследовалкоммерческойцели, создаваяприложение,а также длятого, что былучше освоитьязык программированияи задействоватькак можно большекоманд и функцийFoxPro.

Всеотчеты формируемыес помощью данныхбаз построеныпо одной схеме,поэтому я разберуодну из нихболее подробно,а в остальныхтолько краткодам описание.


«ОТЧЕТЫ»-«Спискипо начислению»

При выбореэтого пунктаформируетсяотчет для каждогожильца с суммаминачисленийпо каждой услугеи отдельноначисленияпо льготам,показываетсясколько оплаченои остаток еслиостаток положительный,то это суммунеобходимозаплатитьплательщикуза пользованиеуслугами, еслиотрицательный то эта суммадолжна перейтина следующиймесяц в счетбудующих платежейза услуги. Такжев шапке по каждомужильцу выводитсядата оплаты,количествопроживающих,из них количествольготников,занимаемаяплощадь. (см.прилож. 3 стр.1).формированиеотчета выполняетсяв процедуреSP_NACH (см. прилож.1.7 стр. 1). В первыхстроках убираетсяменю отчетовс экрана (HIDEPOPUP VIEV), затем проверяетсязначение переменной_PAD_OTCH, она должнаиметь значение«Истины» (.T.),если ее значение«Ложь» (.F.),то значит выполняласьпроцедура«Дополнения\Изменения»и появитсясистемное окно,с просьбойсделать слияниярасчетов. (см.выше).

Затем переопределяетсяклавиша F1для открытияв окне помощьподсказку поэтой процедуре,в переменную«i» заноситсяномер текущегомесяца (MONTH(DATE())),для включенияего в имя файла,чтобы в последующембыло легкоопознать данныефайла по егоимени. Напримерв переменнойформируетсяимя за мартмесяц(T=’NACH-’+ALLTRIM(STR(i)))+’.’+’txt’,где «i» этоцифра три и врезультатеполучится файлNACH-3.TXT, что означаетотчет за март(3) по начислениям(NACH). Эта переменнаянужна чтобыпосле завершенияформированияотчета его, спомощью макроподстановки(EVALUATE(‘T’)или(&T)), можно былооткрыть в окнедля просмотраи(или) редактирования.Ниже определяетсяэто окно, ононе определяетсязаранее, длятого чтобы егоможно былозакрыть с помощьюмыши, щелкнувв левом углупо прямоугольнику(Опции «SYSTEMCLOSE»).

Далее с помощьюкоманды SETALTERNATE TO создаетсяальтернативныйфайл и командойSET ALTERNATE ON он открываетсядля внесенияв него данных,одновременнокомандой SETCONSOLE 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-цикл определяет,что циклы будутработать покане будет попыткивыйти за последнююзапись в БД (DOWHILE !EOF()). Второй предъявляетзаписи жильцов,живущих наодной улице(DO WHILE y=yl). Третийпредъявляетзаписи жильцов(DO WHILE y=yl AND d=dom). И четвертыйSCAN-цикл предъявляетжильцов однойквартиры (SCANWHILE 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’) WINDOWvedom).

После закрытияокна просмотраотчета появляетсяокно с предложениемотправитьдокумент напечать. В случаесогласия (кнопка«Да») опрашиваетсяготовностьпринтера(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/TOARRAY ]. Этакоманда позволяетвести математическиерасчеты в БД.может содержатьлюбую комбинациювнутреннихдля даннойкоманды функций,которые такжевыполняютматаматическуюобработку(AVG(),CNT(), MAX(), MIN(), STD(), SUM(),VAR(), NPV(…)). Здесьприведенаполный переченьвозможностидля даннойкоманды, а жирнымшрифтом выделеныопции, которыеиспользуютсяв процедуре.Так перваякоманда CALCULATEподчитываетобщие начисленияпо квартплате(SUM),вторая общиеначисленияпо льготам(SUM)и полученныерезультатызаносятсяв переменные.Затем в переменныезаносятся общие суммыначисленийдля полученияорганизациейза предоставленияуслуг квартиросъемщикамза месяц. Они рассчитываетсяпутем вычетаиз общих начисленийквартплатыпо услугамначисленияльгот по услугами полученныерезультатывыводятся вфайл. Распечаткапоказана вприлож. 3 стр.7).


Пунктменю «ПЕЧАТЬ»

При выбореданного пунктаактивируетсяPOPUP-менюописанное сопцией PROMPTFILES [LIKE]– элементамикоторого будутназвания файлов,ограниченныхмаской (DEFINEPOPUP prin_t FROM 1,31 PROMPTFILES LIKE *-1.TXT см.прилож.1.1 стр.3), котороеформирует менюиз имен файлов,созданных привыборе соответствующегопункта «ОТЧЕТА»и определениереакции менювыполняетсяв процедуреprint3 (ON SELECTIONPOPUP prin_t DO print3 WITHPROMPT(),LASTKEY()), кудапередаютсядва параметраэто-имя файла(vv - PROMPT()) икод нажатияклавиши (lk- LASTKEY()).

В процедуре(см. прилож.1.2 стр. 28) в структуреDO CASE анализируютсяпереданныепараметры. Еслинажата клавиша«Enter» (ВВОД),то код 13 (CASElk=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-поляпереносятсясодержимоетекстовыхфайлов (APPENDMEMO HLP FROM HELP1.TXT).

Дляэкрана помощиопределяетсяокно также сименем HELP, аклавиша F1 идва пунктаданного менюзакрепляютсяза процедуройс именем HELP,в которую передаетсяодин параметрК (ONKEY LABEL f1 DO help WITH k)

Этотпараметр вдальнейшембудет указыватьномер записив файле HELP.DBF,где содержитсянужная подсказка.В самой процедуре(см. прилож. 1.2стр. 21) осуществляетсяперевод указателязаписей в областиI (в которойоткрыта БДпомощи) на записьномер К.

Здесьже определяетсяокно HELP, в котороес помощьюкоманды MODIFYMEMO I.HLP WINDOW HELP NOEDIT выводитсятекст подсказки.Чтобы исключитьслучайнуювозможностьпорчи содержимогоHELP пользователем,возможностьредактированияисключенаопцией NOEDIT.

В процедурахработы с приложениемвначале переопределяетсяклавиша F1для открытиясоответствующейподсказки (ONKEY LABEL f1 DO help WITH 1(2,4,5,7,8)),а по завершенииработы с любымокном клавишеF1 определяетсяпараметр 6 (…WITH6). Это позволяетиз любого местапрограммы можновызвать своюпомощь нажатиемклавиши F1.Доступ к нужнойзаписи в файлепомощи происходиточень быстро,поскольку еене приходитьсяискать. Дляэтого нужнов соответствующихместах программыделать присвоенияпеременнойК, то есть указыватьномер нужнойзаписи из файлаHELP.DBF. В процедурах,где помощь непредусмотрена,переменнойК задаетсязначение 6, длявывода общейпомощи по программе,которая такжезакрепленаза пунктом меню«Помощь».

Пунктменю «Выход»

Длякорректногозакрытия БДи завершенияработы необходимопроконтролироватьзапросом попыткупользователявыйти из программы.Данная функциябудет содержатьобычный запросна подтверждениевыхода, и приположительномответе (кнопка«Да») осуществитзакрытие всехактивных файловБД, сохранитв файле M_ZAR.MEMвсе переменныеначинающиесяс символа «_»(SAVE TO m_zar ALL LIKE _*). Вприложениизти переменныеопределеныкак глобальныеи переменныенормативныхставок и послеэтого происходитвыход из приложения(QUIT). При выборекнопки «Нет»происходитвозврат в приложение.

Процедуравыхода описанав приложении1.2 стр. 21.


III-йраздел


ЗАКЛЮЧЕНИЕ





Заключение

В процессеработы наддипломнымпроектом былсоздан комплекспрограммныхсредств дляобеспеченияработы бухгалтера-расчетчика.Кроме того быларазработанаконцепцияпроектированияинформационно- справочныхсистем с применениемфункций экранногоинтерфейса,разработанныхв рамках дипломногопроекта. Применениеспециализированныхфункций позволилосократить времяразработкиосновногомодуля программыи обеспечиловысвобождениевремени насоздание процедуробработкиданных. В дипломномпроекте представленодин из множестваподходов кпроектированиюпрограммногообеспеченияинформационногоплана, дающийвозможностьна ранних этапахразработкиучесть всенюансы будущейпрограммы,необходимыйнабор функций,состав и структурубаз данных, чтов дальнейшемисключаетнеобходимостьпереработкиуже написанныхкомпонентовпрограммы.

Данныйдипломныйпроект разрабатывалсяне с коммерческойцелью, а с цельюпоказать возможностиСУБД FoxPro,используя вприложениикак можно большекоманд и функцийданной СУБД.Поэтому работаприложенияне предусматриваетсохраненияи просмотрараннее сделанныхрасчетов иработа осуществляетсятолько с текущиммесяцем.

Хотяпринцип работыприложенияи язык программированияне исключаюти коммерческоераспространение.Достаточнолишь добавитьмодули сохраненияданных припереходе наследующий месяци просмотраиз архивов этихданных.

Списокиспользуемойлитературы.

  1. ПоповА.А «Созданиеприложенийдля FoxPro 2.5/2.6 в DOSи WINDOWS.” – М.: Издательство“ДЕСС”, 1999 г. –672 стр.

  2. ГоревА., Ахаян Р., МакашариповС. «Эффективнаяработа с СУБД»- СПб.: Питер, 1997.–704 стр.: ил.

  3. ГоревА. «Разработкаприложенийв Microsoft Visual FoxPro 3.0»– М: Журнал «ThePrinter FoxPro Letter» ТОО «Эдэль»,1996 – 392 с.:ил.

  4. Файлыпомощи приработе с СУБДFoxPro For DOS 2.6. – Microsoft (FoxSoftware).




Процедурныйфайл FUNC.PRG

***********************************************************************************

** Функция- Постояннаячасть (Работас картотекой) **

***********************************************************************************

PROCEDUREpos_ch

HIDE POPUP kadr

IF RECCOUNT()=0

ACTIVATE WINDOW vib

@ 1,10 SAY 'Ба з а п у с т а'

@ 2,9 SAY 'Начнитес дополнения'

@ 0,0 FILL TO 8,43COLOR W+/R

@ 5,3 GET ins1FUNCTION '*TH Дополнить;Отмена'valid ins2() defa 1 size 1,10,4;

COLOR,,,,w+/n,w+/n,w+/n,,W+/R,

read cycle OBJECT 1

DEACTIVATE WINDOWvib

ELSE

GO _REC

RELEASEKW,GW,XW,KS,ELC,TL,RD,OT

ACTIVATE WINDOW ins

STORE .F. TO e,b

T=TAB

ON KEY LABEL F1 DOHELP WITH 5

ON KEY LABEL F5ACTIVATE POPUP POISK

@ 1,10 get famdisable COLOR SCHEME 15

@ 2,10 get tabdisable COLOR SCHEME 15

@ 2,28 get teldisable COLOR SCHEME 15

@ 3,10 get yldisable COLOR SCHEME 15

@ 3,30 get dompicture 'xxxx' disable COLOR SCHEME 15

@ 3,40 get kw_rapicture 'xxxx' disable COLOR SCHEME 15

@ 4,10 get kv_mpicture '###.##' disable COLOR SCHEME 15

@ 5,39 get kol_vopicture '99' COLOR SCHEME 12

@ 6,27 GET familyFUNCTION '*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 kwFUNCTION '*C Квартплата'DEFAULT .F. VALID KW()COLORSCHEME 16

@ 10,36 get c.kw_plPICTURE '####.##' disable color scheme 16

@ 11,2 GET gwFUNCTION '*C Горячая вода'VALID GW() defa .f.COLORSCHEME 16

@ 11,36 get c.g_wdisable color scheme 16

@ 12,2 GET xwFUNCTION '*C Холоднаявода' VALID XW() DEFA .F.COLORSCHEME 16

@ 12,36 get c.x_wdisable color scheme 16

@ 13,2 GET ksFUNCTION '*C Комунальныеуслуги' VALID KS() DEFA .F. COLORSCHEME 16

@ 13,36 get c.k_ysldisable color scheme 16

@ 14,2 GET otFUNCTION '*C Отопление'VALID OT() DEFA .F.COLORSCHEME 16

@ 14,36 get c.otopldisable color scheme 16

@ 15,2 GET elcFUNCTION '*C Электроэнергия'VALID ELC() DEFA .F.COLOR SCHEME 16

@ 15,36 get c.el_cdisable color scheme 16

@ 16,2 GET tlFUNCTION '*C Телефон' VALIDTL() DEFA .F. COLOR SCHEME 16

@ 16,36 get c.tel_rdisable color scheme 16

@ 17,2 GET rdFUNCTION '*C Радио' VALID rd() DEFA .F.COLORSCHEME 16

@ 17,36 get c.rad_rdisable color scheme 16

@ 10,28 GET tar_sFUNCTION '*I ;;;;;;;' VALID TARIFS() DEFA 1;

COLOR,,,,GR/BG,GR/BG,,,GR+/BG SIZE 1,7

@ 8,52 GET pros_lgFUNCTION '*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.infoCOLOR ,R/G

@ 21,26 GET dat_cCOLOR ,B/G

@ 21,40 GET dat_poCOLOR ,B/G

@ 22,10 GET tabl_rasFUNCTION '*N По льготам'valid tab_rslg() DEFAULT 2;

COLOR,,,,gr+/b,w+/n,r+/b,,W+/GR,w/w+

@ 22,25 GETtabl_ras1 FUNCTION '*N По оплате'valid tabl_rasop() DEFAULT 2;

COLOR,,,,gr+/b,w+/n,r+/b,,W+/GR,w/w+

@ 16,59 GET PEREMFUNCTION '*N Вверх;Вниз'VALID PER() DEFA 1;

SIZE 1,8,1 COLOR,,,,gr+/b,w+/n,r+/b,,W+/GR,w/w+

@ 10,65 GET FILTRFUNCTION '*N Плательщики;Льготники;Всежильцы ' valid filtr();defa 3

@ 16,69 GET PEREM1FUNCTION '*N Начало;Конец'VALID PER1() DEFA 1;

SIZE 1,8,1 COLOR,,,,gr+/b,w+/n,r+/b,,W+/GR,w/w+

@ 0,63 GET attribFUNCTION '*T Изменить;Добавить'valid attr() defa 2;

COLOR,,,,gr+/b,w+/n,r+/b,,W+/GR,w/w+ SIZE 2,14,1

@ 4,63 GET attrib1FUNCTION '*N Удалить;Печать;Вводоплаты' valid attr1() defa 2;

COLOR,,,,gr+/b,w+/n,r+/b,,W+/GR,w/w+ SIZE 2,14,1

@ 20,63 GET ALL_LFUNCTION '*T Выйти;Расчет'validvib1_7() default 1;

size 2,10,1 COLOR,,,,gr+/b,w+/n,r+/b,,W+/GR,w/gr+

READ CYCLE SHOW tb_l() OBJECT 42with M_ZAR,VEDOM COLOR SCHEME 7

DEACTIVATE WINDOWINS

ENDIF

SET ORDER TO adrr

ON KEY LABEL F1 DOHELP 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 sayLTRIM(STR(kw1(0),5,2))

@ 11,28 SAYLTRIM(STR(GW1(0),5,2))

@ 12,28 SAYLTRIM(STR(XW1(0),5,2))

@ 13,28 SAYLTRIM(STR(KS1(0),5,2))

@ 14,28 SAYLTRIM(STR(OT1(0),5,2))

@ 15,28 SAYLTRIM(STR(ELC1(0),5,2))

@ 16,28 SAYLTRIM(STR(TL3(0),5,2))

@ 17,28 sayLTRIM(STR(RD3(0),5,2))

@ 18,2 to 18,55

@ 19,20 SAY 'ИТОГО'

@ 19,36 SAYLTRIM(STR(C.ITOG_N,7,2))

@ 20,2 TO 20,55DOUBLE

@ 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,80COLOR SCHEME 15

@ 9,2 FILL TO 18,55COLOR SCHEME 16


FUNCTION OB_NACH&&SAY – Объектыначисленийпо льготам

@ 10,45 sayLTRIM(STR(c.sum_kw,6,2)) COLOR R/W,,,,,,,,,

@ 11,45 sayltrim(str(c.sum_gw,6,2)) color r/W,,,,,,,,,

@ 12,45 sayltrim(str(c.sum_xw,6,2)) color r/W,,,,,,,,,

@ 13,45 sayltrim(str(c.sum_kysl,6,2)) color r/W,,,,,,,,,

@ 14,45 sayltrim(str(c.sum_ot,6,2)) color r/W,,,,,,,,,

@ 16,45 sayltrim(str(c.sum_tl,6,2)) color r/W,,,,,,,,,

@ 17,45 sayltrim(str(c.sum_rd,6,2)) color r/W,,,,,,,,,

@ 19,45 SAYLTRIM(STR(C.SUM_IT,7,2))

@ 9,45 FILL TO 18,55COLOR SCHEME 16

FUNCTION LG_NACH&&SAY – Объектыначисленийпо льготам

@ 10,45 sayLTRIM(STR(c.kw_pll,6,2)) COLOR R/W,,,,,,,,,

@ 11,45 sayltrim(str(c.g_wl,6,2)) color r/W,,,,,,,,,

@ 12,45 sayltrim(str(c.x_wl,6,2)) color r/W,,,,,,,,,

@ 13,45 sayltrim(str(c.k_ysll,6,2)) color r/W,,,,,,,,,

@ 14,45 sayltrim(str(c.otopll,6,2)) color r/W,,,,,,,,,

@ 16,45 sayltrim(str(c.tel_rl,6,2)) color r/W,,,,,,,,,

@ 17,45 sayltrim(str(c.rad_rl,6,2)) color r/W,,,,,,,,,

@ 19,45 SAYLTRIM(STR(C.ITOG_L,7,2))

@ 9,45 FILL TO 18,55COLOR SCHEME 16

FUNCTION PROS_LG&&Просмотрначисленийпо льготам

DEFINE WINDOWPROSMOTR FROM 10,55 TO 20,75

DO CASE

CASE pros_lg=1

ACTIVATE WINDOWPROSMOTR

@ 0,1 SAY 'Кв-та '

@ 0,11 SAYLTRIM(STR(C.KW_PLL,6,2)) COLOR N/W

@ 1,1 SAY 'Гор.вода '

@ 1,11 SAYLTRIM(STR(C.G_WL,6,2)) COLOR N/W

@ 2,1 SAY 'Хол.вода '

@ 2,11 SAYLTRIM(STR(C.X_WL,6,2)) COLOR N/W

@ 3,1 SAY 'Ком.усл. '

@ 3,11 SAYLTRIM(STR(C.K_YSLL,6,2)) COLOR N/W

@ 4,1 SAY 'Отопление'

@ 4,11 SAYLTRIM(STR(C.OTOPLL,6,2)) COLOR N/W

@ 5,1 SAY 'Телефон '

@ 5,11 SAYLTRIM(STR(C.TEL_RL,6,2)) COLOR N/W

@ 6,1 SAY 'Радио '

@ 6,11 SAYLTRIM(STR(C.RAD_RL,6,2)) COLOR N/W

@ 8,2 SAY 'ИТОГ '+LTRIM(STR(C.ITOG_L,8,2)) COLOR R/W

READ

RELEASE WINDOWPROSMOTR

RETURN


FUNCTION tb_l && Функцияобновлениякнопок(GET) в ПроцедуреПостояннаячасть

DO CASE

CASE _FILTR=1

SET ORDER TO ord

@ 14,57 CLEAR TO14,76

@ 14,57 SAY 'ФИЛЬТР- ' COLOR W+/B

@ 14,66 SAY'Плательщики'COLOR W+/N

CASE _FILTR=2

SET ORDER TO lgt

@ 14,57 CLEAR TO14,76

@ 14,57 SAY 'ФИЛЬТР- ' COLOR W+/B

@ 14,66 SAY'Льготники 'COLOR W+/R

CASE _FILTR=3

SET ORDER TO adrr

@ 14,57 CLEAR TO14,76

@ 14,57 SAY 'ФИЛЬТР- ' COLOR W+/B

@ 14,66 SAY 'Всежильцы ' COLOR W+/B

ENDCASE

DO CASE

CASEor_r=1.OR.lgot=.T.

SHOW GET kw ENABLECOLOR SCHEME 16

SHOW GET gw ENABLECOLOR SCHEME 16

SHOW GET xw ENABLECOLOR SCHEME 16

SHOW GET ks ENABLECOLOR SCHEME 16

SHOW GET ot ENABLECOLOR SCHEME 16

SHOW GET elc ENABLECOLOR SCHEME 16

SHOW GET tl ENABLECOLOR SCHEME 16

SHOW GET rd ENABLECOLOR SCHEME 16

@ 10,2 FILL TO18,29 COLOR SCHEME 16

CASEor_r=0.OR.lgot=.F.

SHOW GET kw DISABLECOLOR ,,,,,,,,,W+/W

SHOW GET gw DISABLECOLOR ,,,,,,,,,W+/W

SHOW GET xw DISABLECOLOR ,,,,,,,,,W+/W

SHOW GET ks DISABLECOLOR ,,,,,,,,,W+/W

SHOW GET ot DISABLECOLOR ,,,,,,,,,W+/W

SHOW GET elcDISABLE COLOR ,,,,,,,,,W+/W

SHOW GET tl DISABLECOLOR ,,,,,,,,,W+/W

SHOW GET rd DISABLECOLOR ,,,,,,,,,W+/W

@ 10,2 FILL TO17,26 COLOR SCHEME 12

ENDCASE

DO CASE

CASE lgot=.f.

SHOW GET tabl_rasDISABLE

@ 21,1 clear to21,55

CASE lgot=.t.

SHOW GET tabl_rasENABLE

@ 21,1 FILL TO21,54 COLOR SCHEME 17

ENDCASE

DO CASE

CASE or_r=0

SHOW GET tabl_ras1DISABLE

SHOW GET pros_lgDISABLE

=LG_NACH()

CASE or_r=1

SHOW GET tabl_ras1ENABLE

SHOW GET pros_lgENABLE

=OB_NACH()

ENDCASE

DO CASE

CASE e=.F.

SHOW GET perem,1ENABLE

SHOW GET perem1,1ENABLE

CASE b=.F.

SHOW GET perem,2ENABLE

SHOW GET perem1,2ENABLE

ENDCASE

RETURN


FUNCTION PER &&Перемещенияв Базе жильцов()

SELE A

DO CASE

CASE perem=1

cyr=_CUROBJ

SKIP -1

IF BOF()

show get perem,1DISABLE

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,2DISABLE

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 TO20,51

=POS_CH1()

SHOW GETS

RETURN


FUNCTION PER1&&Перемещенияв Базе жильцов()

DO CASE

CASE perem1=2

SHOW GET perem,2DISABLE

SHOW GET perem1,2DISABLE

GO BOTTOM

e=.t.

WAIT 'КОНЕЦБАЗЫ' WIND NOWAIT

CASE perem1=1

show get perem,1DISABLE

SHOW GET perem1,1DISABLE

GO TOP

b=.t.

WAIT 'НАЧАЛОБАЗЫ' WIND NOWAIT

ENDCASE

SET ORDER TO 0

@ 10,27 CLEAR TO20,51

=POS_CH1()

SHOW GETS

RETURN


FUNCTION FILTR && Выбор фильтра(Льготники,Плат-щики,Всежильцы)

DOCASE

CASE FILTR=1

_FILTR=1

CASE FILTR=2

_FILTR=2

CASE FILTR=3

_FILTR=3

ENDCASE

SHOW GETS

RETURN


FUNCTIONFAMILY && Меню жильцов(СОСТАВ СЕМЬИ)

SELEA

F=ORDER()

SETORDER TO 0

Y=YL

D=DOM

K=KW_RA

SETFILTER TO Y=YL.AND.D=DOM.AND.K=KW_RA

ACTIVATEPOPUP FAMIL

IFLASTKEY()=13

_REC=RECNO()

GO_REC

_FILTR=IIF(or_r=1,1,IIF(lgot=.T.,2,3))

SETFILTER TO

@10,27 CLEAR TO 20,51

=POS_CH1()

SHOWGETS

ENDIF

RETURN


FUNCTION ATTR &&Выбор кнопок(Добавить,Изменить)

DO CASE

CASE attrib=1

DO INS WITH 2 INADD_DEL

CASE attrib=2

DO INS WITH 1 INADD_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 DOHELP WITH 5

DEFINE WINDOW m_zarFROM 5,15 TO 23,55 SHADOW;

TITLE 'Сегодня- '+dtoc(date())

ACTIVATE WINDOWM_ZAR

LOCATE FORn_lg=a.n_lg

IF FOUND()=.F.

APPEND BLANK

REPLACE N_LG WITHa.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 SAYa.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_lPICTURE '#.##'

@ 4,35 SAY '%'

@ 5,3 SAY'%начисленийтелефона'

@ 5,29 get tl_lPICTURE '#.##'

@ 5,35 SAY '%'

@ 6,3 say'%начисленийрадио'

@ 6,29 get rd_lPICTURE '#.##'

@ 6,35 SAY '%'

@ 7,3 say'%начисленийком. услуг'

@ 7,29 get k_l_lPICTURE '#.##'

@ 7,35 SAY '%'

@ 8,3 say'%начисленийГор.воды'

@ 8,29 get gw_lPICTURE '#.##'

@ 8,35 SAY '%'

@ 9,3 say'%начисленийХол.воды'

@ 9,29 get xw_lPICTURE '#.##'

@ 9,35 SAY '%'

@ 10,3 say'%начисленийотопления'

@ 10,29 get ot_lPICTURE '#.##'

@ 10,35 SAY '%'

@ 12,3 SAY'КАТЕГОРИЯ' GETinfo

read

RELEASE WINDOWSM_ZAR

RETURN


FUNCTION tabl_rasop &&Таблица ставокпо оплате

SELE g

ON KEY LABEL F1 DOHELP WITH 5

DEFINE WINDOW m_zarFROM 5,15 TO 23,55 SHADOW;

TITLE 'Сегодня- '+dtoc(date())

ACTIVATE WINDOWM_ZAR

@ 1,0 to 1,33 double

@ 1,5 SAYa.fam+'Таб.' +ALLTRIM(STR(tab)) COLOR SCHEME 13

@ 2,1 to 2,31

@ 2,7 say 'Вводставок по начислению'

@ 3,3 say'начислениякв.платы'

@ 3,29 get kwp_lPICTURE '##.##'

@ 4,3 SAY'начислениятелефона'

@ 4,29 get tl_lPICTURE '##.##'

@ 5,3 say'начислениярадио'

@ 5,29 get rd_lPICTURE '##.##'

@ 6,3 say'начисленияком. услуг'

@ 6,29 get k_l_lPICTURE '##.##'

@ 7,3 say'начисленияГор.воды'

@ 7,29 get gw_lPICTURE '##.##'

@ 8,3 say'начисленияХол.воды'

@ 8,29 get xw_lPICTURE '##.##'

@ 9,3 say'начисленияотопления'

@ 9,29 get ot_lPICTURE '##.##'

@ 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

SETORDER TO 0

d=dom

y=yl

k=kw_ra

IFLASTKEY()=89.OR.LASTKEY()=121.OR.LASTKEY()=141

SETFILTER 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_lWITH kom_ysl,g.gw_l WITH gor_water,g.xw_l WITH xol_water,;

g.ot_lWITH otopl_e,g.el_l WITH electr_vo

ENDSCAN

ELSE

SETFILTER 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_lWITH kom_ysl,g.gw_l WITH gor_water,g.xw_l WITH xol_water,;

g.ot_lWITH otopl_e,g.el_l WITH electr_vo

ENDSCAN

ENDIF

RELEASEWINDOWS M_ZAR

SETFILTER TO

@10,27 CLEAR TO 20,50

GO_REC

=POS_CH1()

SHOWGETS

RETURN


FUNCTIONkl_kvartir&&Количествоквартир

para k

k=0

d=dom

y=yl

R=RECNO()

set filter tod=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_zar1FROM 5,12 TO 20,66 COLOR SCHEME 12

DEFINE MENU TARIFS

DEFINE PAD vibor OFTARIFS PROMPT 'Выбрать'

DEFINE PAD apend OFTARIFS PROMPT 'Добавить'

DEFINE PAD exit OFTARIFS PROMPT 'Выйти'

DEFINE PAD DEF OFTARIFS PROMPT 'Установитьнорматив'

ON PAD vibor OFTARIFS ACTIVATE POPUP TAR_S

ON SELECTION PADapend OF TARIFS DO INS_ST WITH PROMPT()

ON SELECTION PADexit OF TARIFS DO INS_ST WITH PROMPT()

ON PAD DEF OF TARIFSACTIVATE POPUP DEF1

DEFINE POPUPvib_komy FROM 7,12 COLOR SCHEME 1

DEFINE BAR 1 OFvib_komy PROMPT 'Установитьвсем жильцамдома'

DEFINE BAR 2 OFvib_komy PROMPT 'Установитьданному жильцу'

ON SELECTION POPUPvib_komy DO v_st1 WITH BAR(),RECNO()

DEFINE POPUP DEF1FROM 1,20

DEFINE BAR 1 OF DEF1PROMPT 'Установитьвсем жильцамдома'

DEFINE BAR 2 OF DEF1PROMPT 'Установитьданному жильцу'

ON SELECTION POPUPDEF1 DO v_st2 WITH BAR()


DEFINE POPUP TAR_SFROM 1,1 TITLE;

'Описаниетарифа--------|-Ставка-|-Расченна-|';

PROMPT FIELDinfo+'|'+STR(st_ka,8,2)+'|'+k_info

ON SELECTION POPUPTAR_S ACTIVATE POPUP vib_komy

DO CASE

CASE tar_s=1

SET FILTER TOk_ch=.F.

vib_stavok='KWP_L'

yslyga='Квартплата'

ACTIVATE WINDOWM_ZAR1

WAIT 'Квартплата'WIND NOWAIT

ACTIVATE MENU TARIFS

@ 10,28 sayLTRIM(STR(kw1(0),5,2))

SET FILTER TO

CASE tar_s=2

SET FILTER TOk_ch=.T.

vib_stavok='GW_L'

WAIT 'Горячаявода' WIND NOWAIT

ACTIVATE WINDOWM_ZAR1

ACTIVATE MENU TARIFS

@ 11,28 SAYLTRIM(STR(GW1(0),5,2))

SET FILTER TO

CASE tar_s=3

SET FILTER TOk_ch=.T.

vib_stavok='XW_L'

WAIT 'Холоднаявода' WIND NOWAIT

ACTIVATE WINDOWM_ZAR1

ACTIVATE MENU TARIFS

@ 12,28 SAYLTRIM(STR(XW1(0),5,2))

SET FILTER TO

CASE tar_s=4

SET FILTER TOk_ch=.T.

vib_stavok='K_L_L'

WAIT 'Коммунальныеуслуги' WIND NOWAIT

ACTIVATE WINDOWM_ZAR1

ACTIVATE MENU TARIFS

@ 13,28 SAYLTRIM(STR(KS1(0),5,2))

SET FILTER TO

CASE tar_s=5

SET FILTER TOk_ch=.F.

vib_stavok='OT_L'

WAIT 'Отопление'WIND NOWAIT

ACTIVATE WINDOWM_ZAR1

ACTIVATE MENU TARIFS

@ 14,28 SAYLTRIM(STR(OT1(0),5,2))

SET FILTER TO

CASE tar_s=6

SET FILTER TOk_ch=.F.

vib_stavok='EL_L'

WAIT'Электроэнергия'WIND NOWAIT

ACTIVATE WINDOWM_ZAR1

ACTIVATE MENU TARIFS

@ 15,28 SAYLTRIM(STR(ELC1(0),5,2))

SET FILTER TO

CASE tar_s=7

SET FILTER TOk_ch=.T.

vib_stavok='TL_L'

WAIT 'Телефон'WIND NOWAIT

ACTIVATE WINDOWM_ZAR1

ACTIVATE MENU TARIFS

@ 16,28 SAYLTRIM(STR(TL3(0),5,2))

SET FILTER TO

CASE tar_s=8

SET FILTER TOk_ch=.T.

vib_stavok='RD_L'

WAIT 'Радио'WIND NOWAIT

ACTIVATE WINDOWM_ZAR1

ACTIVATE MENU TARIFS

@ 17,28 sayLTRIM(STR(RD3(0),5,2))

SET FILTER TO

ENDCASE

RETURN


FUNCTION INS_ST &&Выбор пунктовменю

PARAMETERS mprompt

DO CASE

CASEmprompt='Добавить'

SELE F

SCATTER MEMVARBLANK

@ 2,2 SAY 'Введитеописание тарифа'

@ 3,2 get m.info

@ 4,2 SAY 'Ставка- 'get m.st_ka PICTURE '##.##'

@ 6,2 GET ras_onFUNCTION '*R На 1 кв.метр;На1-го чел' VALID kv_chel() defa 1 COLORSCHEME 16

@ 10,2 GET ras_on1FUNCTION '*H Сохранить;Отказ'VALID kv_chel1() defa 1;

COLOR SCHEME 15size 1,10,4

READ CYCLE

CASE mprompt='Выйти'

DEACTIVATE WINDOWm_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


FUNCTIONv_st1

PARAMETERB,N

HIDEPOPUP TAR_S

HIDEPOPUP vib_komy

SELEa

r=RECNO()

y=yl

d=dom

k=kw_ra

ORD_A=ORDER()

SETORDER TO 0

SELEf

DOCASE

CASEB=1

GON

ST=ST_KA

SELEA

GOr

SCANFOR y=yl.AND.d=dom

seleG

REPLACE&VIB_STAVOK WITH ST

SELEa

ENDSCAN

CASEB=2

GON

ST=ST_KA

SELEA

GOr

SCANFOR y=yl.AND.d=dom.AND.k=kw_ra

seleG

REPLACE&VIB_STAVOK WITH ST

SELEa

ENDSCAN

ENDCASE

SELEA

SETORDER TO &ORD_A

GOr

DEACTIVATEWINDOW m_zar1

DEACTIVATEMENU

RETURN


FUNCTIONv_st2

PARAMETERB

HIDEPOPUP DEF1

SELEA

GO_REC

ST=0

y=yl

d=dom

k=kw_ra

ORD_A=ORDER()

SETORDER TO 0

DOCASE

CASEB=1

SCANFOR y=yl.AND.d=dom

seleG

REPLACE&VIB_STAVOK WITH ST

SELEa

ENDSCAN

CASEB=2

SCANFOR y=yl.AND.d=dom.AND.k=kw_ra

seleG

REPLACE&VIB_STAVOK WITH ST

SELEa

ENDSCAN

ENDCASE

SELEA

SETORDER TO &ORD_A

GO_REC

DEACTIVATEWINDOW m_zar1

DEACTIVATEMENU

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 WITHgw

FUNCTION XW

REPLACE X_W_L WITHxw

FUNCTION KS

REPLACE K_YS_L WITHks

FUNCTION OT

REPLACE OTOP_L WITHot

FUNCTIONTL

DOCASE

CASEtl=.T.

DOTL1 WITH OR_R,LGOT,RECNO(),ORDER()

CASEtl=.F.

REPLACETEL_L WITH tl

ENDCASE

FUNCTIONRD

DOCASE

CASErd=.T.

DORD1 WITH OR_R,LGOT,RECNO(),ORDER()

CASErd=.F.

REPLACERAD_L WITH rd

ENDCASE

FUNCTIONELC

REPLACEEL_C_L WITH elc

*********************************************************************************** ** Выборначислениятелефона ирадио **

***********************************************************************************

FUNCTIONTL1

PARAOR,LG,R,ORD

SELEa

*GO_REC

Y=YL

D=DOM

KV=KW_RA

LOCATEFOR Y=YL AND D=DOM AND KV=KW_RA AND OR_R=1

IFFOUND().AND.EMPTY(tel)

tl=.F.

GOR

SHOWGET tl

RETURN

ELSE

DOCASE

CASEOR=1.AND.LG=.T.

SETORDER TO ADRR

SCANFOR Y=YL AND D=DOM AND KV=KW_RA

REPLACETEL_L WITH .F.

ENDSCAN

GOR

REPLACETEL_L WITH .T.

SETORDER TO &ORD

RETURN

CASEOR=1.AND.LG=.F.

GOR

REPLACETEL_L WITH .T.

RETURN

CASELG=.T..AND.OR=0

SCANFOR Y=YL AND D=DOM AND KV=KW_RA AND LGOT=.T.

IFTEL_L=.T.

TL=.F.

SHOWGET TL

GOR

RETURN

ENDIF

ENDSCAN

GOR

REPLACETEL_L WITH tl

ENDCASE

ENDIF

RETURN


FUNCTIONRD1 && Выбор начислениярадио

PARAOR,LG,R,ORD

SELEa

Y=YL

D=DOM

KV=KW_RA

DOCASE

CASEOR=1.AND.LG=.T.

SETORDER TO ADRR

SCANFOR Y=YL AND D=DOM AND KV=KW_RA

REPLACERAD_L WITH .F.

ENDSCAN

GOR

REPLACERAD_L WITH .T.

SETORDER TO &ORD

RETURN

CASEOR=1.AND.LG=.F.

GOR

REPLACERAD_L WITH .T.

RETURN

CASELG=.T..AND.OR=0

SCANFOR Y=YL AND D=DOM AND KV=KW_RA AND LGOT=.T.

IFRAD_L=.T.

rd=.F.

SHOWGET rd

GOR

RETURN

ENDIF

ENDSCAN

GOR

REPLACERAD_L WITH rd

ENDCASE

RETURN


***********************************************************************************

FUNCTION kol&&Функция кол-важильцов (SAY)

PARAMETERS k

_REC=RECNO()

k=0

y_l=yl

d=dom

kv=kw_ra

scan foryl=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 foryl=y_l.and.dom=d.and.kw_ra=kv.and.lgot=.t.

k=k+1

endscan

go _REC

RETURNk


FUNCTION vib1_7

do case

case all_l=1

clear read

case all_l=2

CLEAR READ

DEACTIVATE WINDOWINS

DO RAS

endcase

RETURN

** КонецПроцедуреКвартиросъемщики(ПостояннаяЧасть) **

***********************************************************************************

** Функциясохранениянорм в файлеm_zar.mem **

***********************************************************************************

FUNCTION cf

do case

case c=1

DEACTIVATE WINDOWm_zar

SAVE TO m_zar ALLLIKE _*

case c=2

clear read

RELEASE windowsm_zar

endcase

RETURN


***********************************************************************************

** Процедурапомощи по F1 **

***********************************************************************************

PROCEDURE HELP

PARAMETERS k

DEFINE WINDOW HELPFROM 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.HLPWINDOW HELP noedit

ENDIF

release WINDOWS HELP

RETURN

************************************************************************************* Процедуравыхода **

***********************************************************************************

PROCEDURE quit

DEFINE WINDOW QUITFROM 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 ALLLIKE _*

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 ALLLIKE _*

! 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 FORa.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 FORyl=y.and.dom=d.and.kw_ra=kv.AND.or_r=0

IF FOUND()

n_ins=RECNO()

LOCATE FORyl=y.and.dom=d.and.kw_ra=kv.and.or_r=1

IF FOUND()=.F.

ACTIVATE WINDOW vib

@ 0,1 SAY 'Заквартиру поадресу:'

@ 1,2 sayalltrim(y)+' '+'Дом-'+ALLTRIM(d)+''+'Кв-'+ALLTRIM(kv)

@ 2,3 SAY 'Неначисляетсяплата'

@ 3,2 say'Платил-'+ALLTRIM(fm)+''+'Таб-'+ALLTRIM(STR(tb))

@ 4,1 GET D_INFUNCTION '*H Удалитьвсех;Изменить;Восстановить'valid d_in() defa READCYCLE

DEACTIVATE WINDOWvib

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 FORyl=y.and.dom=d.and.kw_ra=kv

DELETE

ENDSCAN

SET DELETE ON

CASE d_in=2

GO n_ins

DO INS WITH 2 INADD_DEL

CASE d_in=3

SET DELETE OFF

GO r

RECALL

SET FILTER TOyl=y.and.dom=d.and.kw_ra=kv

COUNT TO kol

GO TOP

SCAN

REPLACE kol_vo WITHkol

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

CASEPROMPT()="Отменасортировки"&&Если "Отмена"

SET ORDER TO0&&Отказ от главногоиндекса

CASE PROMPT()='Пофамилии'

SET ORDER TO fam

ACTIVATE WINDOWpoisk

@ 0,0 GET a DEFASPAC(25) &&Задание фамилии

@ 1,2 SAY'СоблюдайтеРЕГИСТР'

READ

a=ALLTRIM(a)&&Удаление пробелов

d=a

CASE PROMPT()='Потабелю'

set order to tab

ACTIVATE WINDOWpoisk

@ 0,0 GET a PICTURE'9999' DEFAULT 0&&Задание табеля

READ

d=str(a,4)&&Сохранитьзапрос

CASE PROMPT()='Поадресу'

DO po_adr

ENDCASE

DEACTIVATE WINDOWpoisk

IFBAR()#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 TO20,50

=POS_CH1()

SHOW GETS

ENDIF

ENDIF

set order to adrr

DEACTIVATE POPUP

RETURN


FUNCTIONpo_adr&&Поискпо адресу

DEFINEPOPUP YL FROM 1,0

n=recno()

m=1

br=1

d_ins=1

DIMENSIONyl_za(100,1)

gotop

i=1

yl_za(i,1)=yl

DOWHILE !EOF()

DEFINEBAR (br) OF YL PROMPT yl_za(i,1)

IFyl=yl_za(i,1)

skip

loop

ENDIF

m=m+1

i=i+1

yl_za(i,1)=yl

br=br+1

ENDDO

DIMENSIONyl_za(m,1)

ONSELECTION POPUP YL DO YLIZ WITH PROMPT()

gon

SCATTER FIELDSyl,dom,kw_ra MEMVAR BLANK

ACTIVATE WINDOWpoisk

@ 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 FORm.yl=a.yl

CASE!EMPTY(m.yl).AND.!EMPTY(m.dom).AND.EMPTY(m.kw_ra)

LOCATE FORm.yl=a.yl.AND.m.dom=a.dom

CASE!EMPTY(m.yl).AND.!EMPTY(m.dom).AND.!EMPTY(m.kw_ra)

LOCATE FORm.yl=a.yl.AND.m.dom=a.dom.AND.m.kw_ra=a.kw_ra.AND.a.or_r=1

ENDCASE

IF FOUND()

DEACTIVATE WINDOWpoisk

_REC=RECNO()

GO _REC

IF WONTOP()='INS'

@ 10,27 CLEAR TO20,50

=POS_CH1()

SHOW GETS

ENDIF

ELSE

GO n

ENDIF


***********************************************************************************

** Формированиеквитанции **

***********************************************************************************

FUNCTION PRINT1

ON KEY LABEL F1 DOHELP WITH 7

SET ALTERNATE TO tab

T='tab'+'.'+'txt'

DIMENSION NACH(12,1)

DIMENSION LG(9)

STORE 0 TOLG(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 foryl=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),plpicture('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 TOLG(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ассир','___________',' / '

?? _podPICTURE(REPLICATE('x',AT(' ',_pod)-1)),' /'

SET ALTERNATE OFF

SET ALTERNATE TO

SET CONSOLE ON

MODIFY COMMANDEVALUATE('T') WINDOW vedom

ACTIVATE WINDOW vib

@ 2,5 SAY 'Р ас п е ч а т а т ь?'

@ 0,0 FILL TO 8,43COLOR W+/R

@ 5,6 GET prFUNCTION '*H Да;Нет' VALID print4()DEFA 2 SIZE 1,6,4;

COLOR,,,,w+/n,w+/n,w+/n,,W+/R,

READ

DEACTIVATE WINDOWvib

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 DOHELP WITH 1

RETURN

***********************************************************************************

** Функцияпечати отчетов **

***********************************************************************************

PROCEDURE print3 &&ПунктМеню Печать>

PARAMETER vv,lk

IFRIGHT(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 'ДАННЫЕСЧЕТЧИКА:' COLORSCHEME 16

@ 5,20 SAY 'Староезначение'

@ 6,20 SAY 'Новоезначение'


FUNCTION YLIZ1 &&Функция выходаиз поля m.yl(выборулицы)

HIDE POPUP YL

FUNCTIONyliz_s && Меню длявыбора улицы

=CAPSLOCK(.F.)

IFRECCOUNT()>0.and.d_ins=1

ACTIVATEPOPUP YL

ENDIF

FUNCTIONYLIZ && Выбор улицы

PARAmprompt

m.yl=mprompt

showget m.yl

DEACTIVATEPOPUP YL

RETURN


FUNCTION LG1 &&Меню для выборальготы

SELE D

IF RECCOUNT()>0

DEFINE POPUP LGOTFROM 2,27 PROMPT FIELD LTRIM(STR(N_LG))+' | '+INFO

ON SELECTION POPUPLGOT 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 POPUPLGOT


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,26double

@ 1,2 say 'Укажитегруппу'

@ 1,18 get m.n_lgpicture '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 FORm.n_lg=d.n_lg

IF FOUND()=.F.

SELE d

APPEND BLANK

REPLACE N_LG WITHm.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

***********************************************************************************

** Выборначисленийна услуги **

***********************************************************************************

FUNCTIONKW_INS

M.KWP_L=KW

FUNCTIONGW_INS

M.G_W_L=GW

FUNCTIONXW_INS

M.X_W_L=XW


FUNCTIONKS_INS

M.K_YS_L=KS

FUNCTIONELC_INS

M.EL_C_L=ELC

FUNCTIONOT_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 foryl=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 windowvib

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 windowvib

m.or_r=1

@ 8,5 SAY 'ВЫБЕРИТЕУСЛУГИ'

SHOW GETS

case or1=0

m.or_r=0

@ 8,0 CLEAR TO23,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 sayfam+STR(tab,4)

READ

deactivate windowvib

RETURN .F.

ENDIF

ENDCASE

deactivate windowvib

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

IFm.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 FORy_l=yl.and.d=dom.and.k=kw_ra

DO CASE

CASE FOUND()

IFrecno()=r

REPLACE kol_vo WITH1

ELSE

store kol_vo tok_l_vo

GO r

REPLACE kol_vo WITHk_l_vo

go 1

SCAN fory_l=yl.and.d=dom.and.k=kw_ra

REPLACE kol_vo WITHkol_vo + 1

IF or_r=1

k_v=kv_m

ENDIF

ENDSCAN

ENDIF

ENDCASE

GO r

REPLACE kv_m WITHk_v

SELE g

USE TABLE_R

LOCATE ALL FOR tab=t

IF FOUND()=.F.

go top

APPEND BLANK

REPLACE g.tab WITHa.tab

endif

R_G=RECNO()

SELE a

go r

LOCATE ALL FORy_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 WITHKP,g.tl_l WITH T_L,g.rd_l WITH R_D,;

g.gw_l WITH G,g.xw_lWITH 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

IFyl_ins=yl.AND.dom_ins=dom.AND.k_ins=kw_ra

RETURN

ELSE

y=yl

d=dom

k=kw_ra

SET FILTER TOy=yl.AND.d=dom.AND.k=kw_ra

COUNT TO kol

SCAN

REPLACE kol_vo WITHkol

ENDSCAN

GO TOP

SET FILTER TOyl_ins=yl.AND.dom_ins=dom.AND.k_ins=kw_ra

COUNT TO kol

SCAN

REPLACE kol_vo WITHkol

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 TOy_l=yl.and.d=dom.and.k=kw_ra

COUNT TO kol

GO TOP

kol=kol-1

SCAN

REPLACE kol_vo WITHkol

ENDSCAN

SET FILTER TO

GO n

DELETE

SET DELETE ON

SKIP

IF EOF()=.T.

GO TOP

ENDIF

IF WONTOP()='INS'

@ 10,27 CLEAR TO20,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 FORm.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 FORm.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 INADD_DEL

CASE ins1=2

CLEAR READ

ENDCASE

RETURN


PROCEDURE NACH && Функцияотображенияначислений

@ 0,31 clear to23,79

@ 3,31 to 23,78double

set color of scheme13 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,77color scheme 13

@ 3,45 say'Произведенныеначисления'

@ 4,34 say 'Фамилия'color scheme 13

@ 4,46 get famdisable color scheme 13

@ 5,34 say 'Табель'color scheme 13

@ 5,45 get tabdisable color scheme 13

@ 6,45 get kv_mpicture '###.##' disable color scheme 13

@ 6,34 say'Площадь'color scheme 13

@ 7,34 say'Категория'color scheme 13

@ 7,45 get d.infodisable 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_yddisable 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_kcolor r/W,,,,,,,,,

@ 12,35 say'Кв-плата'color scheme 13

@ 12,47 get c.kw_pldisable color scheme 13

@ 12,58 sayLTRIM(STR(c.sum_kw,6,2)) color r/W,,,,,,,,,

@ 13,35 say'Гор.вода'color scheme 13

@ 13,47 get c.g_wdisable color scheme 13

@ 13,58 sayltrim(str(c.sum_gw,6,2)) color r/W,,,,,,,,,

@ 14,35 say'Хол.вода'color scheme 13

@ 14,47 get c.x_wdisable color scheme 13

@ 14,58 sayltrim(str(c.sum_xw,6,2)) color r/W,,,,,,,,,

@ 15,35 say'Ком.услуги'colorscheme 13

@ 15,47 get c.k_ysldisable color scheme 13

@ 15,58 sayltrim(str(c.sum_kysl,6,2)) color r/W,,,,,,,,,

@ 16,35 say'Отопление'colorscheme 13

@ 16,47 get c.otopldisable color scheme 13

@ 16,58 sayltrim(str(c.sum_ot,6,2)) color r/W,,,,,,,,,

@ 17,35 say'Радио'color scheme 13

@ 17,47 get c.rad_rdisable color scheme 13

@ 17,58 sayltrim(str(c.sum_rd,6,2)) color r/W,,,,,,,,,

@ 18,35 say'Телефон'color scheme 13

@ 18,47 get c.tel_rdisable color scheme 13

@ 18,58 sayltrim(str(c.sum_tl,6,2)) color r/W,,,,,,,,,

@ 19,35 say'Э-энергия' colorscheme 13

@ 19,47 get c.el_cdisable color scheme 13

@ 20,35 say'Начисл.'color scheme 13

@ 20,47 get c.itog_ndisable color scheme 13

@ 20,58 sayLTRIM(STR(C.SUM_IT,7,2)) color r/W,,,,,,,,,

@ 21,32 to 21,77color scheme 13

@ 22,35 say 'Коплате' color scheme 13

@ 22,47 get c.itogdisable color scheme 13

@ 12,68 sayLTRIM(STR(c.kw_pll,6,2)) COLOR N/W,,,,,,,,,

@ 13,67 sayltrim(str(c.g_wl,6,2)) color N/W,,,,,,,,,

@ 14,67 sayltrim(str(c.x_wl,6,2)) color N/W,,,,,,,,,

@ 15,67 sayltrim(str(c.k_ysll,6,2)) color N/W,,,,,,,,,

@ 16,67 sayltrim(str(c.otopll,6,2)) color N/W,,,,,,,,,

@ 18,67 sayltrim(str(c.tel_rl,6,2)) color N/W,,,,,,,,,

@ 17,67 sayltrim(str(c.rad_rl,6,2)) color N/W,,,,,,,,,

@ 20,67 SAYLTRIM(STR(C.ITOG_L,7,2)) color n/w

READ

RETURN


FUNCTION EN&&Функция дляполей базыпункта-Работас картотекой

ON KEY LABEL enterDO pop_vib

ON KEY LABELrightmouse DO pop_vib && KEYBOARD '{enter}'

RETURN

FUNCTION NE

ON KEY LABEL enter

ON KEY LABELrightmouse

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 tow/r,r/w, b/n,r*

@ 8,28 menupop(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 POPUPPOISK

CASE mpop=7

DO ins WITH 1 INADD_DEL

CASE mpop=8

DO ins WITH 2 INADD_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 WITHS

ENDCASE

RETURN S


FUNCTION SM &&Функция сохраненияпредыдущегоостатка

IF!EMPTY(opl_ta).AND.AVS=.F.

ACTIVATE WINDOW vib

@ 0,1 SAY 'Уплачено' COLOR G+/B

@ 0,10 SAYALLTRIM(DTOC(D_OPL))

@ 0,21 SAY ' Сумма- ' COLOR G+/B

@ 0,30 SAYLTRIM(STR(opl_ta,7,2))

@ 2,2 GET SV2FUNCTION '*h Дописать;Переписать'VALID sv2() DEFAULT 1;

SIZE 1,10,2 colorscheme 7

@ 4,3 GET AVSFUNCTION '*C Сохранятьавтоматически'

READ CYCLE OBJECT 1

DEACTIVATE WINDOWSVIB

ENDIF

RETURN


FUNCTION SV2 &&Функция выборакнопок_

DO CASE

CASE SV2=1

CLEAR READ

SHOW GETS

CASE SV2=2

REPLACE OPL_TA WITH0

SHOW GETS

ENDCASE

RETURN


FUNCTION SV3 &&Сохранение

os=(opl_ta+opl)-c.itog

REPLACE opl_ta WITHopl_ta+opl,d_opl WITH dat,ost_k WITH os

RETURN


FUNCTION SAV &&Выбор кнопок

DO CASE

CASE SAV=1

DO SV3

RELEASE WINDOWM_ZAR

CASE SAV=2

CLEAR READ

RELEASE WINDOWM_ZAR

ENDCASE

RETURN


***********************************************************************************

** Статус-строкав: Картотекельготников,База жильцов,Вводоплаты,счетчика**

***********************************************************************************

FUNCTION INFO

@ 21,0 clear to24,80

@ 21,1 TO 24,79DOUBLE

SELE a

R=RECNO()

Y=YL

D=DOM

KV=KW_RA

LOCATE FORYL=Y.AND.DOM=D.AND.KW_RA=KV.AND.OR_R=1

IF RECNO()=R

@ 21,1 fill to 24,79color 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.itogdisable color scheme 12

@ 23,30 say 'Сальдо- 'color scheme 12

@ 23,41 get ost_kdisable color scheme 12

ELSE

@ 21,1 fill to 24,79color scheme 12

@ 22,5 SAY 'Привязанк - ' color scheme 12

@ 22,20 SAYALLTRIM(FAM)

@ 23,5 SAY 'Табель - ' color scheme 12

@ 23,20 SAYALLTRIM(STR(tab))

endif

GO R

RETURN


FUNCTION INFO3 &&Статус-строкав процедуре:Ввод оплаты

@ 21,0 clear to24,80

@ 21,1 TO 24,79DOUBLE

R=RECNO()

Y=YL

D=DOM

KV=KW_RA

@ 21,1 fill to 24,79color 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 fortab=c.tab c.el_c WITH _elek*(a.elec1-a.elec),;

c.itog_n WITHc.itog_n+c.el_c,c.itog WITH c.itog+c.el_c

RETURN


** Функциик ПроцедурамРАСЧЕТОВ **

*********************************************************************************** ** Процедурарасчета поквартплате **

***********************************************************************************

FUNCTION ras_1

DEACTIVATE WINDOWvib

DO CASE

CASE rs_n=1

CLEAR READ

SELE c

ZAP

APPEND FROM rabotFIELDS 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

******Созданиеновой базы издвух имеющихся(RABOTand OPLATA)*********************

JOIN WITH a TO rachFOR yl=a.yl.and.dom=a.dom.and.kw_ra=a.kw_ra.and.tab=a.tab;FIELDSa.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 TAGtab

INDEX ON fam TAGfam

INDEX ONyl+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 TOyl+dom+kw_ra+str(tab) INTO c ADDI

SET RELA TO TAB INTOg ADDI


** РАСЧЕТ **

REPLACE ALL kw_plWITH IIF(g.kwp_l=0,_kv_pl,g.kwp_l)*IIF(kw_l=.t.,kv_m,0),;

g_w WITHIIF(g.gw_l=0,_gor_w,g.gw_l)*IIF(g_w_l=.t.,kol_vo,0),;

x_w WITHIIF(g.xw_l=0,_xol_w,g.xw_l) *IIF(x_w_l=.t.,kol_vo,0),;

k_ysl WITHIIF(g.k_l_l=0,_kom,g.k_l_l)*IIF(k_ys_l=.t.,kol_vo,0),;

otopl WITHIIF(g.ot_l=0,_otopl,g.ot_l)*IIF(otop_l=.t.,kv_m,0),;

tel_r WITHIIF(g.tl_l=0,_tel,g.tl_l)*IIF(tel_l=.t.,IIF(empty(tel),0,1),0),;

rad_r WITHIIF(g.rd_l=0,_rad,g.rd_l)*IIF(rad_l=.t.,1,0),;

el_c WITHIIF(g.el_l=0,_elek,g.el_l)*IIF(el_c_l=.t.,(elec1-elec),0)

REPLACE ALL itog_nWITH kw_pl+tel_r+rad_r+g_w+x_w+k_ysl+el_c+otopl

CALCULATESUM(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)TOSKW,SG,SX,SK,SOT,SR,ST,SEL,SM

@ 22,0 SAY 'Кв.платаГор.вода Хол.водаКом.усл ОтоплениеЭ\энер.Телеф.Радио; ИТОГ '

@ 23,0 SAYLTRIM(STR(SKW,9,2))

@ 23,9 SAYLTRIM(STR(SG,9,2))

@ 23,18 SAYLTRIM(STR(SX,9,2))

@ 23,27 SAYLTRIM(STR(SK,9,2))

@ 23,36 SAYLTRIM(STR(SOT,9,2))

@ 23,46 SAYLTRIM(STR(SEL,9,2))

@ 23,53 SAYLTRIM(STR(ST,9,2))

@ 23,61 SAYLTRIM(STR(SR,7,2))

@ 23,68 SAYLTRIM(STR(SM,9,2))

ON KEY LABEL esc DOvib_8

ON KEY LABEL ctrl+wDO vib_8

ON KEY LABEL ctrl+qDO vib_8

ON KEY LABE F5ACTIVATE 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 COLORSCHEME 12

RELEASESKW,SG,SX,SK,SOT,SR,ST,SEL,SM,F

clear

CASE rs_n=2

CLEAR READ

DEACTIVATE WINDOWvib

ENDCASE

RETURN

***********************************************************************************

PROCEDURE vib_8 && выборсохранениеданных расчета

ON KEY LABE esc

ON KEY LABEL ctrl+w

ON KEY LABEL ctrl+q

DEACTIVATE WINDOWkdr

ACTIVATE WINDOW vib

@ 2,10 SAY'Сохранитьданные'

@ 0,0 FILL TO 8,43COLOR W+/R

@ 5,7 GET rs_1FUNCTION '*TH Сохранить;Отмена'VALID ras_2() DEFAULT 1;

SIZE 1,9,4 COLOR,,,,w+/n,w+/n,w+/n,,W+/R,

READ CYCLE OBJECT1

RETURN

FUNCTION ras_2 &&сохранениеданных расчета

DO CASE

CASE rs_1=1

DEACTIVATE WINDOWvib

CLEAR READ

SELE f

use oplata

UPDATE ON tab FROM aREPLACE kw_pl WITH a.kw_pl, g_w WITH a.g_w,;

tel_r WITHa.tel_r,rad_r WITH a.rad_r,k_ysl WITH a.k_ysl, el_c WITH a.el_c,;

otopl WITHa.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,43COLOR W+/R

@ 5,12 GET rs_lFUNCTION '*TH Да;Нет' DEFA 1 SIZE1,4,4;

COLOR,,,,w+/n,w+/n,w+/n,,w+/r,

READ CYCLE OBJECT 1

DO CASE

CASE rs_l=1

DEACTIVATE WINDOWvib

CLEAR READ

DO ras_l

CASE rs_l=2

CLEAR READ

DEACTIVATE WINDOWvib

ENDCASE

CASE rs_1=2

DEACTIVATE WINDOWvib

SET RELA TO

USE

CLEAR READ

DEACTIVATE WINDOWkdr

ERASE rach.dbf

ERASE rach.cdx

CLOSE DATA

DO open

ENDCASE

RETURN

***********************************************************************************

** Процедурарасчета польготам **

***********************************************************************************

FUNCTION ras_lg

DEACTIVATE WINDOWvib

DO CASE

CASE rs_lg=1

CLEAR READ

CLOSE DATA

USE rabot IN a

**********************************Альтернатива*************************************

** SET FILTER TOlgot=.t..AND.EMPTY(dat_c).AND.; ** ** EMPTY(dat_po).OR.BETWEEN(date(),dat_c,dat_po) **

SET ORDER TO DATE

SELECT b

USE oplata

******Созданиеновой базы издвух имеющихся(RABOTand OPLATA)*********************

JOIN WITH a TOrach_l FOR yl=a.yl.and.dom=a.dom.and.kw_ra=a.kw_ra.and.tab=a.tab;FIELDSa.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 TAGtab

INDEX ON fam TAGfam

INDEX ON n_lg TAGn_lg

INDEX ONyl+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_lgINTO d ADDI

SET RELA TOyl+dom+kw_ra+str(tab) into c ADDI

SET RELA TO tab INTOg ADDI

***********************************************************************************

** РАСЧЕТ **

***********************************************************************************

REPLACE ALL kw_pllWITH(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_ysllWITH;(IIF(g.k_l_l=0,_kom,g.k_l_l)*IIF(k_ys_l=.t.,(-1),0))*d.k_l_l,otopllWITH;(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_rlWITH;(IIF(g.tl_l=0,_tel,g.tl_l)*IIF(tel_l=.t.,1,0))*d.tl_l*(-1)

REPLACE ALL itog_lWITH kw_pll+g_wl+x_wl+k_ysll+otopll+tel_rl+rad_rl

CALCULATESUM(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)TOSKW,SG,SX,SK,SOT,SR,ST,SEL,SM

CLEAR

@ 22,0 SAY 'Кв.платаГор.вода Хол.водаКом.усл ОтоплениеЭ\энер.Телеф.Радио; ИТОГ '

@ 23,0 SAYLTRIM(STR(SKW,9,2))

@ 23,9 SAYLTRIM(STR(SG,9,2))

@ 23,18 SAYLTRIM(STR(SX,9,2))

@ 23,27 SAYLTRIM(STR(SK,9,2))

@ 23,36 SAYLTRIM(STR(SOT,9,2))

@ 23,46 SAYLTRIM(STR(SEL,9,2))

@ 23,53 SAYLTRIM(STR(ST,9,2))

@ 23,61 SAYLTRIM(STR(SR,7,2))

@ 23,68 SAYLTRIM(STR(SM,9,2))

ON KEY LABEL esc DOvib_9

ON KEY LABEL F5ACTIVATE POPUP poisk

ON KEY LABEL ctrl+wDO vib_8

ON KEY LABEL ctrl+qDO 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 COLORSCHEME 12

RELEASESKW,SG,SX,SK,SOT,SR,ST,SEL,SM,F

CASE rs_lg=2

CLEAR READ

DEACTIVATE WINDOWvib

ENDCASE

PROCEDURE vib_9

ON KEY LABE esc

ON KEY LABEL ctrl+w

ON KEY LABEL ctrl+q

DEACTIVATE WINDOWkdr

ACTIVATE WINDOW vib

@ 2,10 SAY'Сохранитьданные'

@ 0,0 FILL TO 8,43COLOR W+/R

@ 5,7 GET rs_lg_1FUNCTION '*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 WINDOWvib

SELE f

USE OPLATA

UPDATE ON tab FROM aREPLACE kw_pll WITH a.kw_pll, g_wl WITH a.g_wl,;

tel_rl WITHa.tel_rl,rad_rl WITH a.rad_rl,k_ysll WITH a.k_ysll,;

el_cl WITHa.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 WINDOWvib

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 WINDOWvib

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 ANDd=dom

k=kw_ra

STORE 0 TOit_l,s_kw,s_gw,s_xw,s_kysl,s_ot,s_tl,s_rd

scan whileyl=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 WITHos,sum_it WITH it_l,sum_kw WITH s_kw,sum_gw WITH s_gw,;

sum_xw WITHs_xw,sum_ot WITH s_ot,sum_tl WITH s_tl,sum_rd WITH s_rd,;

sum_kysl WITH s_kysl

sele b&&Определениеостатка(задолженности)

locate fortab=t&&квартиросъемщика

iffound().and.empty(opl_ta)

replace ost_k WITHos*(-1)

else

REPLACE ost_k WITHopl_ta-os

ENDIF

sele a

IF N>M

DO BROW_OPL

RETURN

ELSE

GO n

ENDIF

enddo

enddo

enddo

deactivate windowvib

CASE rs_i=2

clear read

deactivate windowvib

ENDCASE

RETURN

FUNCTION BROW_OPL &&Просмотр начислений

DO open

SET PROCEDURE TOfunc

ON KEY LABE F5ACTIVATE POPUP poisk

STORE .T. TO_PAD_OTCH

BROWSE FOR or_r=1TITLE '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 COLORSCHEME 12

ON KEY

CLEAR

RETURN


** Функцияотображениясуммы начисленийпо квартплате **

** впроцедурерасчета поквартплате(просмотр начислений) **

***********************************************************************************

FUNCTION INFO1

DO CASE

CASEVARREAD()='Kw_pl'

@ 22,0 fill to23,8 COLOR SCHEME 12

CASEVARREAD()='G_w'

@ 22,8 fill to23,17 COLOR SCHEME 12

CASEVARREAD()='X_w'

@ 22,17 fill to23,26 COLOR SCHEME 12

CASEVARREAD()='K_ysl'

@ 22,26 fill to23,35 COLOR SCHEME 12

CASEVARREAD()='Otopl'

@ 22,35 fill to23,45 COLOR SCHEME 12

CASEVARREAD()='El_c'

@ 22,45 fill to23,52 COLOR SCHEME 12

CASEVARREAD()='Tel_r'

@ 22,52 fill to23,60 COLOR SCHEME 12

CASEVARREAD()='Rad_r'

@ 22,60 fill to23,67 COLOR SCHEME 12

CASEVARREAD()='Itog_n'

@ 22,67 fill to23,79 COLOR SCHEME 12

ENDCASE

RETURN

FUNCTION INFO2&& Функцияотображениясуммы начисленийпо квартплате

DO CASE&&в процедурерасчета поквартплате(просмотр начислений)

CASEVARREAD()='Kw_pl'

@ 22,0 fill to23,8 COLOR SCHEME 1

CASEVARREAD()='G_w'

@ 22,8 fill to23,17 COLOR SCHEME 1

CASEVARREAD()='X_w'

@ 22,17 fill to23,26 COLOR SCHEME 1

CASEVARREAD()='K_ysl'

@ 22,26 fill to23,35 COLOR SCHEME 1

CASEVARREAD()='Otopl'

@ 22,35 fill to23,45 COLOR SCHEME 1

CASEVARREAD()='El_c'

@ 22,45 fill to23,52 COLOR SCHEME 1

CASEVARREAD()='Tel_r'

@ 22,52 fill to23,60 COLOR SCHEME 1

CASEVARREAD()='Rad_r'

@ 22,60 fill to23,67 COLOR SCHEME 1

CASEVARREAD()='Itog_n'

@ 22,67 fill to23,79 COLOR SCHEME 1

ENDCASE


FUNCTION INFO4 && Функцияотображениясуммы начисленийпо квартплате

DO CASE && в процедурерасчета поквартплате(просмотр начислений)

CASEVARREAD()='Kw_pll'

@ 22,0 fill to23,8 COLOR SCHEME 12

CASEVARREAD()='G_wl'

@ 22,8 fill to23,17 COLOR SCHEME 12

CASEVARREAD()='X_wl'

@ 22,17 fill to23,26 COLOR SCHEME 12

CASEVARREAD()='K_ysll'

@ 22,26 fill to23,35 COLOR SCHEME 12

CASEVARREAD()='Otopll'

@ 22,35 fill to23,45 COLOR SCHEME 12

CASEVARREAD()='El_cl'

@ 22,45 fill to23,52 COLOR SCHEME 12

CASEVARREAD()='Tel_rl'

@ 22,52 fill to23,60 COLOR SCHEME 12

CASEVARREAD()='Rad_rl'

@ 22,60 fill to23,67 COLOR SCHEME 12

CASEVARREAD()='Itog_l'

@ 22,67 fill to23,79 COLOR SCHEME 12

ENDCASE

RETURN


FUNCTION INFO5&&Функция отображениясуммы начисленийпо квартплате

DO CASE&&в процедурерасчета поквартплате(просмотр начислений)

CASEVARREAD()='Kw_pll'

@ 22,0 fill to23,8 COLOR SCHEME 1

CASEVARREAD()='G_wl'

@ 22,8 fill to23,17 COLOR SCHEME 1

CASEVARREAD()='X_wl'

@ 22,17 fill to23,26 COLOR SCHEME 1

CASEVARREAD()='K_ysll'

@ 22,26 fill to23,35 COLOR SCHEME 1

CASEVARREAD()='Otopll'

@ 22,35 fill to23,45 COLOR SCHEME 1

CASEVARREAD()='El_cl'

@ 22,45 fill to23,52 COLOR SCHEME 1

CASEVARREAD()='Tel_rl'

@ 22,52 fill to23,60 COLOR SCHEME 1

CASEVARREAD()='Rad_rl'

@ 22,60 fill to23,67 COLOR SCHEME 1

CASEVARREAD()='Itog_l'

@ 22,67 fill to23,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


FUNCTIONRAS_ON_ONE && Расчетна одного жильцав окне (INS-Работас картотекой)

IFOR_R=0

RETURN

ELSE

R=RECNO()

t=tab

ORD_R=ORDER()

SETORDER TO 0

Y=YL

D=DOM

K=KW_RA

SELEc

ORD_C=ORDER()

setorder to tab

locatefor t=tab

DOCASE

CASEFOUND()=.F.

SELEa

SETFILTER TO YL=Y.AND.DOM=D.AND.KW_RA=K

GOTOP

SELEc

APPENDFROM 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

CASEFOUND()

selea

SETSKIP TO

SETRELA TO

SETORDER TO tab

SELEc

UPDATEON tab FROM a REPLACE lgot WITH a.lgot,n_lg WITH a.n_lg,or_r WITHa.or_r,;

kol_voWITH a.kol_vo,kw_l WITH a.kw_l,tel_l WITH a.tel_l,g_w_l WITHa.g_w_l,;

x_w_lWITH a.x_w_l,k_ys_l WITH a.k_ys_l,el_c_l WITH a.el_c_l,otop_l WITHa.otop_l,;

rad_lWITH a.rad_l,kv_m WITH a.kv_m,elec WITH a.elec,elec1 WITH a.elec1,;

dat_cWITH a.dat_c,;

dat_poWITH a.dat_po,tel WITH a.tel

endcase

SELEa

SETSKIP TO

SETRELA TO

SELEc

setrela to tab into g

setrela to n_lg into d ADDI

SETSKIP TO g,d

SETFILTER TO YL=Y.AND.DOM=D.AND.KW_RA=K

GOTOP

REPLACEALL kw_pll WITH 0,g_wl WITH 0,x_wl WITH 0,k_ysll WITH 0,;

otopllWITH 0,rad_rl WITH 0,tel_rl WITH 0,itog_l WITH 0,;

itogWITH 0,sum_it WITH 0,sum_kw WITH 0,sum_gw WITH 0,;

sum_xwWITH 0,sum_ot WITH 0,sum_tl WITH 0,sum_rd WITH 0,sum_kysl WITH 0

GOTOP

SCAN

IFOR_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_wWITH IIF(g.gw_l=0,_gor_w,g.gw_l)*IIF(g_w_l=.t.,kol_vo,0),;

c.x_wWITH IIF(g.xw_l=0,_xol_w,g.xw_l) *IIF(x_w_l=.t.,kol_vo,0),;

c.k_yslWITH IIF(g.k_l_l=0,_kom,g.k_l_l)*IIF(k_ys_l=.t.,kol_vo,0),;

c.otoplWITH IIF(g.ot_l=0,_otopl,g.ot_l)*IIF(otop_l=.t.,kv_m,0),;

c.tel_rWITH IIF(g.tl_l=0,_tel,g.tl_l)*IIF(tel_l=.t.,IIF(empty(tel),0,1),0),;

c.rad_rWITH IIF(g.rd_l=0,_rad,g.rd_l)*IIF(rad_l=.t.,1,0),;

c.el_cWITH IIF(g.el_l=0,_elek,g.el_l)*IIF(el_c_l=.t.,(elec1-elec),0)

REPLACE c.itog_n WITHc.kw_pl+c.tel_r+c.rad_r+c.g_w+c.x_w+c.k_ysl+c.el_c+c.otopl

ENDIF

ENDSCAN

SETFILTER TO

gotop

SETFILTER TO YL=Y.AND.DOM=D.AND.KW_RA=K.AND.lgot=.t.

gotop

scanFOR 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_wlWITH (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_ysllWITH (IIF(g.k_l_l=0,_kom,g.k_l_l)*IIF(k_ys_l=.t.,(-1),0))*d.k_l_l,;

otopllWITH (IIF(g.ot_l=0,_otopl,g.ot_l)*IIF(otop_l=.t.,(kv_m/kol_vo),0))*;

d.ot_l*(-1),rad_rlWITH (IIF(g.rd_l=0,_rad,g.rd_l)*IIF(rad_l=.t.,1,0))*;

d.rd_l*(-1),tel_rlWITH (IIF(g.tl_l=0,_tel,g.tl_l)*IIF(tel_l=.t.,1,0))*d.tl_l*(-1)

REPLACEitog_l WITH kw_pll+g_wl+x_wl+k_ysll+otopll+tel_rl+rad_rl

endscan

gotop

CALCULATESUM(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);

TOSKW,SG,SX,SK,SOT,SR,ST,SEL,SM

gotop

setfilter to

os=0

OST=0

SETFILTER TO YL=Y.AND.DOM=D.AND.KW_RA=K

gotop

scan

IFor_r=1

os=itog_n+SM

REPLACEitog WITH os,sum_it WITH SM,sum_kw WITH SKW ,sum_gw WITH SG,;

sum_xwWITH SX,sum_ot WITH SOT,sum_tl WITH ST,sum_rd WITH SR,;

sum_kyslWITH SK

ENDIF

ENDSCAN

SETFILTER TO

SETSKIP TO

setrela to

setorder to &ord_c

SELEa

SETFILTER TO

gor

REPLACEost_k WITH os-opl_ta

DOOPEN

GOR

@10,27 CLEAR TO 20,51

=POS_CH1()

SHOWGETS

SETORDER TO &ORD_R

ENDIF

RETURN

***********************************************************************************

** Функциязаполненияи изменениятарифов («СЕРВИС»-«Тарифы») **

***********************************************************************************

FUNCTIONTARIFS_zar && Окнотарифов, привыборе пунктаменю «СЕРВИС»-«Тарифы»

HIDEPOPUP serv

ONKEY

onkey label ESC do ret_ecs

selea

_REC=RECNO()

selef

DEFINEWINDOW m_zar1 FROM 5,12 TO 20,66 FILL '-'COLOR SCHEME 18

DEFINEMENU TARIFS

DEFINEPAD vibor OF TARIFS PROMPT 'Просмотр'

DEFINEPAD apend OF TARIFS PROMPT 'Добавить'

DEFINEPAD exit OF TARIFS PROMPT 'Выйти'


ONPAD vibor OF TARIFS ACTIVATE POPUP TAR_S

ONSELECTION PAD apend OF TARIFS DO INS_ST WITH PROMPT()

ONSELECTION PAD exit OF TARIFS DO INS_ST WITH PROMPT()


DEFINEPOPUP TAR_S FROM 1,1 TITLE;

'Описаниетарифа--------|-Ставка-|-Расченна-|';

PROMPTFIELD info+'|'+STR(st_ka,8,2)+'|'+k_info

ONSELECTION POPUP TAR_S DO INS_REC WITH PROMPT(),RECNO()

ACTIVATEWINDOW M_ZAR1

ACTIVATEMENU TARIFS

onkey label ESC

DEACTIVATEWINDOW M_ZAR1

RETURN


FUNCTIONINS_rec

PARAMETERSmprompt,mrecno

hidepopup TAR_S

SELEF

ifempty(mprompt)

gomrecno

delete

else

gomrecno

SCATTERMEMVAR

@2,2 SAY 'Введите описаниетарифа'

@3,2 get m.info

@5,2 SAY 'Ставка - 'get m.st_kaPICTURE '##.##'

@7,2 GET ras_on FUNCTION '*R На 1 кв.метр;На1-го чел' VALID kv_chel() defa 1 COLORSCHEME 16

@10,2 GET ras_on1 FUNCTION '*H Сохранить;Отказ'VALID del_rec1() defa 1;

COLORSCHEME 15 size 1,10,4

@12,8 GET del_rec FUNCTION '*H Удалить'VALID del_rec() defa 1;

size1,10,4

READCYCLE

ENDIF

PACK


FUNCTIONret_ecs

DEACTIVATEWINDOW M_ZAR1

DEACTIVATEMENU


FUNCTIONDEL_REC

delete

clear

RETURN


FUNCTIONDEL_REC1

DOCASE

CASEras_on1=1

IFm.k_ch=.t.

m.k_info='На1-го чел.'

ELSE

m.k_info='На1 кв.метр'

ENDIF

GATHERMEMVAR

CASEras_on1=2

clearREAD

ENDCASE

CLEAR

RETURN


С

траница -58 Приложение№ 1.2из- 58


Стартующийфайл– MENI.PRG

***********************************************************************

**Основнойзагрузочныймодуль **

***********************************************************************

SETESCAPE OFF

CLEARMACROS

SETDELETE ON

SETSAFETY OFF

SETDATE GERMAN

SETHEADING OFF

SETTALK OFF

SETSTATUS OFF

SETCENTURY ON

SETCOLOR OF SCHEME 12 TO N/W,GR/W,GR+/B,GR+/B,GR+/B,GR/N,GR/W,GR/W,GR/W,GR/W

SETCOLOR OF SCHEME 14 TO N/W,GR/W, N/W,N/W,GR/W,W/GR,GR/W,GR/W,GR/W,W+/W

SETCOLOR OF SCHEME 15 TO W/B,W/BG, N/W,N/W,GR/W,W/GR+,GR/W,GR/W,GR/W,B/W+

SETCOLOR OF SCHEME 16 TO W+/BG,W+/BG,R/BG,N/BG,W+/BG,W+/GR,W+/BG,W+/BG,W+/BG,N/BG

SETCOLOR OF SCHEME 17 TO N/G,B/W+, N/W,N/W,GR/W,W/GR+,GR/W,GR/W,GR/W,W/BG

SETCOLOR OF SCHEME 18 TO W+/B,N/W, N/W, N/W,GR/W,B/W,B/W,GR/W,GR/W,B/W+

SETCOLOR OF SCHEME 19 TO GR+/RB,W+/R, N/R,N/R,GR/W,B/R,GR/W,GR/W,N/R,W+/RB

SETPROC TO FUNC

ONERROR DO EROR WITH ERROR()

DOopen

PUBLIC_PAD_OTCH, _REC,_FILTR,

DIMENSIONmes(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.&&автосохранениев функции вводаоплаты


IFFILE('M_ZAR.MEM')

RESTOREFROM m_zar ADDITIVE

ENDIF

_POS_CH=.T.&&Переменнаядля формированияотчета

***(Принимаетзначение - .F. впроцедуреДОПОЛНЕНИЕ/ИЗМЕНЕНИЕ

***в процедуреРАСЧЕТА(СЛИЯНИЯ)принимаетзначение - .T.)

_REC=RECNO()

_FILTR=1


***********************************************************************

** Определениеокон **

***********************************************************************

DEFINEWINDOW poisk SHADOW FROM 15,20 TO 18,50;

TITLE'Укажите ключ'

DEFINEWINDOW 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

DEFINEWINDOW INS FROM 0,0 TO 24,80 GROW MINIMIZE FLOAT;

FOOTER'F1 - помощь' COLOR SCHEME 12

DEFINEWINDOW vib FROM 8,14 TO 16,57 SHADOW COLOR SCHEME 7

***********************************************************************

** Определениеменю **

***********************************************************************

DEFINE MENU ZAR KEYF3

DEFINE PAD kadr OFzar PROMPT '\;

message 'Работас картотекой'

DEFINE PAD norm OFzar PROMPT '\;

message'Ввод\просмотрнормативно-справочнойинформации'

DEFINE PAD prin OFzar PROMPT '\;

message'БУХГАЛТЕРСКАЯинформация'

DEFINE PAD print OFzar PROMPT 'П\

DEFINE PAD serv OFzar PROMPT '\

DEFINE PAD ras OFzar PROMPT '\;

MESSAGE 'Расчетуслуг'

DEFINE PAD help OFzar PROMPT 'П\;

MESSAGE 'Нажмите- F1'

DEFINE PAD konec OFzar PROMPT '\;

MESSAGE 'Выходиз системы'

ON SELECTION PAD kadr OF zar activate popup kadr

ON SELECTION PADprin OF zar ACTIVATE POPUP viev

ON SELECTION PADprint OF zar ACTIVATE POPUP prin_t

ON SELECTION PADserv OF zar ACTIVATE POPUP serv

ON SELECTION PAD rasOF zar ACTIVATE POPUP ras

ON SELECTION PADhelp OF zar ACTIVATE POPUP hlp

ON SELECTION PADkonec OF zar do QUIT


DEFINE POPUP KADR FROM 1,0 SHADOW

DEFINE BAR 1 OF kadrPROMPT '\

DEFINE BAR 2 OF kadrPROMPT 'К\

DEFINE BAR 3 OF kadrPROMPT '\

DEFINE BAR 4 OF kadrPROMPT '\

DEFINE BAR 5 OF kadrPROMPT 'Вв\

DEFINE BAR 6 OF kadrPROMPT '\

ON SELECTION BAR 1OF kadr DO pos_ch

ON SELECTION BAR 2OF kadr DO kdr_r IN bazes

ON SELECTION BAR 3OF kadr DO kdr_l IN bazes

ON SELECTION BAR 4OF kadr DO baza IN bazes

ON SELECTION BAR 5OF kadr DO ent_sch IN bazes

ON SELECTION BAR 6OF kadr DO ent_opl IN bazes


DEFINE POPUP VIEV FROM 1,8 colorscheme 1 SHADOW

DEFINE BAR 1 OF vievPROMPT 'Спискипо начислению'

DEFINE BAR 2 OF vievPROMPT 'Спискипо льготам'

DEFINE BAR 3 OF vievPROMPT 'Спискис показаниямисчетчика'

DEFINE BAR 4 OF vievPROMPT 'Оплатаэ\энергии поквартиросъёмщикам'

DEFINE BAR 5 OF vievPROMPT 'Сальдопо квартиросъемщикам'

DEFINE BAR 6 OF vievPROMPT 'Сводпо квартплатеза месяц'

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 POPUPprin_t FROM 1,16 PROMPT FILES LIKE *-1.TXT SHADOW;

MESSAGE 'Enter -Просмотр,Space -Печать'

ON SELECTION POPUPprin_t DO print3 WITHPROMPT(),LASTKEY()


DEFINE POPUP serv FROM 1,26 SHADOW

DEFINE BAR 1 OF SERVPROMPT '\

DEFINE BAR 2 OF SERVPROMPT 'Дополнение\

DEFINE BAR 3 OF SERVPROMPT '\

DEFINE BAR 4 OF servPROMPT '\

DEFINE BAR 5 OF SERVPROMPT '\-'

DEFINE BAR 6 OF servPROMPT 'Упаковкаданных';

MESSAGE 'Сжатиеи переиндексацияданных' color ,r/w

DEFINE BAR 7 OF SERVPROMPT 'Переиндексация'color,r/w

ON SELECTION BAR 1OF serv DO ins WITH 1 IN add_del

ON SELECTION BAR 2OF serv DO ins_lg IN add_del

ON SELECTION BAR 3OF serv DO TARIFS_zar

ON SELECTION BAR 4OF serv DO norms IN bazes

ON SELECTION BAR 6OF serv DO SERV

ON SELECTION BAR 7OF serv DO P_INDEX


DEFINE POPUP ras FROM 1,35 SHADOW

DEFINE BAR 1 OF rasPROMPT '\

DEFINE BAR 2 OF rasPROMPT 'Р\

DEFINE BAR 3 OF rasPROMPT '\-'

DEFINE BAR 4 OF rasPROMPT '\

ON SELECTION BAR 1OF ras DO ras in ras

ON SELECTION BAR 2OF ras DO ras_l in ras

ON SELECTION BAR 4OF ras DO ras_i in ras


DEFINE POPUP hlp FROM 1,44 SHADOW

DEFINE BAR 1 OF hlpPROMPT '\

DEFINE BAR 2 OF hlpPROMPT '\

ON SELECTION BAR 1OF HLP DO HELP WITH6

ON SELECTION BAR 2OF HLP DO HELP WITH3


DEFINE POPUPpoisk FROM 3,14 TITLE;

'Выберитекритерий поска'shadow

DEFINE BAR 1 OFpoisk PROMPT 'Пофамилии'

DEFINE BAR 2 OFpoisk PROMPT 'Потабелю'

DEFINE BAR 3 OFpoisk PROMPT 'Поадресу'

DEFINE BAR 4 OFpoisk PROMPT 'Отменасортировки';

COLOR ,R/W

ON SELECTION POPUPpoisk DO poisk


DEFINE POPUPFAMIL FROM 7,0 TITLE;

'-------Ф-А-М-И-Л-И-Я----------------|-Льгота-|-Пл-к';

PROMPT FIELDLEFT(FAM,38)+'|'+IIF(LGOT=.T.,' ДА ',' ---- ')+;

'|'+IIF(OR_R=1,' v ',' ') COLOR SCHEME 16

ON SELECTION POPUPFAMIL DEACTIVATE POPUP FAMIL


ACTIVATE MENU ZAR


П

риложение№ 1.1

-4 -


Файлоткрытия– OPEN.PRG

CLOSEDATA

IF!FILE('rabot.dbf')

DOcreate

ELSE

DOopen1

ENDIF

*************************************************************************************ОткрытиеБаз Данных иустановлениесвязей **

***********************************************************************************

PROCEDURE open1

ONERROR DO EROR WITH ERROR()

SELEa

USErabot

IF.NOT. FILE( 'rabot.cdx')

INDEXON tab TAG tab UNIQUE

INDEXON fam TAG fam

INDEXON n_lg TAG n_lg

INDEXON lgot FOR lgot=.t..AND.EMPTY(dat_c).AND.EMPTY(dat_po).OR.;

BETWEEN(date(),dat_c,dat_po)TAG date

INDEXON yl+dom+kw_ra+str(tab) FOR LGOT=.T. tag lgt

INDEXON yl+dom+kw_ra+str(tab) FOR OR_R=1 tag ord

INDEXON yl+dom+kw_ra+str(tab) tag adrr UNIQUE

ENDIF

SETORDER TO adrr

SELEc

USEoplata

IF.NOT.FILE('oplata.cdx')

INDEXONtab TAGtab UNIQUE

INDEXON yl+dom+kw_ra+str(tab) TAGadr UNIQUE

ENDIF

SETORDER TOadr

SELECTd

USElgot

IF.NOT.FILE('lgot.cdx')

INDEXONn_lg TAGn_lg UNIQUE

ENDIF

SETORDER TOn_lg

SELEg

USEtable_r

IF.NOT.FILE('table_r.cdx')

INDEXONtab TAGtab UNIQUE

ENDIF

SETORDER TOtab

USEHELP IN i

USETARIF INf

SELErabot

SETRELA TOyl+dom+kw_ra+str(tab) INTO c

SETRELA TOn_lg INTOd addi

SETRELA TOtab INTO g addi

SETSKIP TO c,d,g

RETURN


*************************************************************************************Язык– SQLСозданиеБаз Данных **

***********************************************************************************

PROCEDURE CREATE

CREATEDBF RABOT(FAM C(40),TAB N(4),TEL N(8),YL C(15),DOM C(4), KW_RA C(4),KV_MN(6,2),;

N_LGN(1),N_YD C(9),ELEC N(6),ELEC1 N(6),OR_R N(1),KOL_VO N(2),D_OPLD,OST_K N(8,2),;

PENIN(8,2),OPL_TA N(8,2), LGOT L,RAD_L L,TEL_L L,KW_L L,G_W_L L,X_W_LL,K_YS_L L,;

EL_C_LL,OTOP_L L,DAT_C D,DAT_PO D)

USE

CREATEDBF OPLATA(TAB N(4),YL C(15),DOM C(4), KW_RA C(4),KV_M N(6,2),KW_PLN(8,2),TEL_R N(8,2),;

RAD_RN(8,2),K_YSL N(8,2),OTOPL N(8,2),EL_C N(8,2),G_W N(8,2),X_WN(8,2),KW_PLL N(8,2),;

TEL_RLN(8,2),RAD_RL N(8,2),K_YSLL N(8,2),OTOPLL N(8,2),EL_CL N(8,2),G_WLN(8,2),;

X_WLN(8,2),N_LG N(1),ITOG_N N(9,2),ITOG_L N(9,2),ITOG N(9,2),OR_RN(1),KOL_VO N(2),;

SUM_KWN(8,2),SUM_GW N(8,2),SUM_XW N(8,2),SUM_KYSL N(8,2),SUM_OTN(8,2),SUM_TL N(8,2),SUM_RD N(8,2),;

SUM_ITN(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_LL,OTOP_L L)

USE

CREATEDBF 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_LN(5,2),K_L_L N(5,2),OT_L N(5,2),EL_L N(5,2))

USE

CREATEDBF LGOT(N_LG N(1),INFO C(20),KWP_L N(4,2),TL_L N(4,2),RD_L N(4,2),;

GW_LN(4,2),XW_L N(4,2),K_L_L N(4,2),OT_L N(4,2))

USE

CREATEDBF TARIF(INFO C(25),ST_KA N(5,2),K_INFO C(11),K_CH L)

USE

CREATEDBF HELP(HLP M)

APPENDBLANK

APPENDMEMO HLP FROM HELP1.TXT

APPENDBLANK

APPENDMEMO HLP FROM HELP2.TXT

APPENDBLANK

APPENDMEMO HLP FROM HELP3.TXT

APPENDBLANK

APPENDMEMO HLP FROM HELP4.TXT

APPENDBLANK

APPENDMEMO HLP FROM HELP5.TXT

APPENDBLANK

APPENDMEMO HLP FROM HELP6.TXT

APPENDBLANK

APPENDMEMO HLP FROM HELP7.TXT

APPENDBLANK

APPENDMEMO HLP FROM HELP8.TXT

USE

!del help?.txt

DOOPEN1

RETURN


П


риложение№ 1.3

- 3 -


Формированиеотчетов– OTCHET.PRG

************************************************************************************* Формированиесписков поначислению **

***********************************************************************************

PROCEDURESP_NACH && Списки поначислению

HIDEPOPUP VIEV

IF_PAD_OTCH=.F.

WAIT'СДЕЛАЙТЕ СЛИЯНИЕРАСЧЕТОВ' WINDOW

RETURN

ENDIF

DEFINEWINDOW vedom FROM 0,0 TO 24,79 system float grow close zoom shadow;

TITLE'ESC - Выход безсохраненияCtrl+W - с сохранением';

FOOTER'F1 - Помощь' COLOR SCHEME 12

ONKEY LABEL F1 DO HELP WITH 7

i=MONTH(DATE())

T='nach-'+alltrim(str(i))+'.'+'txt'

SETALTERNATE TO ('nach-'+alltrim(str(i))) && ADDI

DIMENSIONNACH(12,1)

DIMENSIONLG(9)

STORE0 TO LG(1),LG(2),LG(3),LG(4),LG(5),LG(6),LG(7),LG(8),LG(9)

SETALTERNATE ON

SETCONSOLE OFF

setspace off

SELEA

gotop

DOWHILE !EOF()

y=yl

dowhile y=yl

d=dom

dowhile y=yl AND d=dom

k=kw_ra

PL=0

L=0

scanwhile yl=y.and.dom=d.and.kw_ra=k.and.c.yl=y.and.c.dom=d.and.c.kw_ra=k

IFOR_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

IFlgot=.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),TBPICTURE('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)&& итог

IFL>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)&& итого

STORE0 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

SETALTERNATE OFF

SETALTERNATE TO

MODIFYCOMMAND EVALUATE('T') WINDOW vedom

CLEAR

ACTIVATEWINDOW vib

@2,5 SAY 'Р а с п е ч а та т ь ?'

@0,0 FILL TO 8,43 COLOR W+/R

@5,6 GET pr FUNCTION '*H Да;Нет' DEFA 2SIZE 1,6,4;

COLOR,,,,w+/n,w+/n,w+/n,,W+/R,

READ

DEACTIVATEWINDOW vib

DOCASE

CASEpr=1

SETHEADING OFF

IFPRINTSTATUS()

TYPE(T) TO PRINT

ELSE

WAIT'Подготовьтепринтер' WINDOW

ENDIF

CASEpr=2

CLEARREAD

ENDCASE

CLEAR

ONKEY LABEL F1 DO HELP WITH 6

RETURN

************************************************************************************* Формированиесписков польготам **

***********************************************************************************

PROCEDURE SP_lg_kw &&Списки по льготам

HIDEPOPUP VIEV

IF_PAD_OTCH=.F.

WAIT'СДЕЛАЙТЕ СЛИЯНИЕРАСЧЕТОВ' WINDOW

RETURN

ENDIF

DEFINEWINDOW vedom FROM 0,0 TO 24,79 system float grow close zoom shadow;

TITLE'ESC - Выход безсохраненияCtrl+W - с сохранением';

FOOTER'F1 - Помощь' COLOR SCHEME 12

ONKEY LABEL F1 DO HELP WITH 7

i=MONTH(DATE())

SETALTERNATE TO ('lg_kw-'+alltrim(str(i))) && ADDI

T='lg_kw-'+alltrim(str(i))+'.'+'txt'

DIMENSIONLG(9)

SETALTERNATE ON

SETCONSOLE OFF

SELEA

gotop

DOWHILE !EOF()

y=yl

dowhile y=yl

d=dom

dowhile y=yl AND d=dom

k=kw_ra

scanwhile yl=y.and.dom=d.and.kw_ra=k.and.c.yl=y.and.c.dom=d.and.c.kw_ra=k

IFOR_R=1

FM=FAM

TB=TAB

endif

IFlgot=.t.

?REPLICATE('_',48)

?'АДРЕС: ',YL,'Дом',dom picture('999'),' Кв-ра ',kw_rapicture('999')

?'ДЕЙСТВИТЕЛЬНАС - ',DAT_C,' ПО - ',DAT_PO

?FAM ,'Табель - ',tabPICTURE('9999')

?'Категория -',d.info,'№ удостов.',n_yd,'КОД № - ',N_LG

?'кв.плата - ',c.kw_pll PICTURE('####.##')


?'гор.вода - ',c.g_wlPICTURE('####.##')

?'хол.вода - ',c.x_wlPICTURE('####.##')

?'отопление - ',c.otopll PICTURE('####.##')

?'ком.услуги - ',c.k_ysll PICTURE('####.##')

?'радио - ',c.rad_rlPICTURE('####.##')

?'телефон - ',c.tel_rl PICTURE('####.##')

?'Начислено - ',c.itog_l PICTURE('#####.##')

?REPLICATE ('-',48)

?'Привязан к',fm,' Таб № ',tb PICTURE('9999')

ENDIF

ENDSCAN

ENDDO

ENDDO

ENDDO

SETALTERNATE OFF

SETALTERNATE TO

SETCONSOLE ON

MODIFYCOMMAND EVALUATE('T') WINDOW vedom

CLEAR

ACTIVATEWINDOW vib

@2,5 SAY 'Р а с п е ч а та т ь ?'

@0,0 FILL TO 8,43 COLOR W+/R

@5,6 GET pr FUNCTION '*H Да;Нет' DEFA 2SIZE 1,6,4;

COLOR,,,,w+/n,w+/n,w+/n,,W+/R,

READ

DEACTIVATEWINDOW vib

DOCASE

CASEpr=1

SETHEADING OFF

IFPRINTSTATUS()

TYPE(T) TO PRINT

ELSE

WAIT'Подготовьтепринтер' WINDOW

ENDIF

CASEpr=2

CLEARREAD

ENDCASE

CLEAR

ONKEY LABEL F1 DO HELP WITH 6

RETURN

************************************************************************************* Формированиесписков с показаниямисчетчика **

***********************************************************************************

PROCEDURE SP_SCHET &&Списки с показаниемсчетчика

HIDEPOPUP VIEV

IF_PAD_OTCH=.F.

WAIT'СДЕЛАЙТЕ СЛИЯНИЕРАСЧЕТОВ' WINDOW

RETURN

ENDIF

DEFINEWINDOW vedom FROM 0,0 TO 24,79 system float grow close zoom shadow;

TITLE'ESC - Выход безсохраненияCtrl+W - с сохранением';

FOOTER'F1 - Помощь' COLOR SCHEME 12

ONKEY LABEL F1 DO HELP WITH 7

i=MONTH(DATE())

SETALTERNATE TO ('ELC_V-'+alltrim(str(i))) && ADDI

t='ELC_V-'+alltrim(str(i))+'.'+'txt'

SETALTERNATE ON

SETCONSOLE OFF

SELEA

gotop

DOWHILE !EOF()

y=yl

dowhile y=yl

d=dom

dowhile y=yl AND d=dom

k=kw_ra

scanwhile yl=y.and.dom=d.and.kw_ra=k.and.c.yl=y.and.c.dom=d.and.c.kw_ra=k

IFOR_R=1

?REPLICATE('-',60)

?'АДРЕС: ',YL,'Дом',dom picture('999'),' Кв-ра ',kw_rapicture('999')

?FAM AT(5)

?'Табель - ' AT(5),tabPICTURE('9999')

?

?'Старое значение- ',elec PICTURE('9999999')

?'Новое значение - ',elec1 PICTURE('9999999')

ENDIF

ENDSCAN

ENDDO

ENDDO

ENDDO

SETALTERNATE OFF

SETALTERNATE TO

SETCONSOLE ON

MODIFYCOMMAND EVALUATE('T') WINDOW vedom

CLEAR

ACTIVATEWINDOW vib

@2,5 SAY 'Р а с п е ч а та т ь ?'

@0,0 FILL TO 8,43 COLOR W+/R

@5,6 GET pr FUNCTION '*H Да;Нет' DEFA 2SIZE 1,6,4;

COLOR,,,,w+/n,w+/n,w+/n,,W+/R,

READ

DEACTIVATEWINDOW vib

DOCASE

CASEpr=1

SETHEADING OFF

IFPRINTSTATUS()

TYPE(T) TO PRINT

ELSE

WAIT'Подготовьтепринтер' WINDOW

ENDIF

CASEpr=2

CLEARREAD

ENDCASE

CLEAR

ONKEY LABEL F1 DO HELP WITH 6

RETURN

************************************************************************************* Формированиесписков пооплате электроэнергии **

***********************************************************************************

PROCEDURE SP_SCHET_PL &&Оплата э/энергии

HIDEPOPUP VIEV

IF_PAD_OTCH=.F.

WAIT'СДЕЛАЙТЕ СЛИЯНИЕРАСЧЕТОВ' WINDOW

RETURN

ENDIF

DEFINEWINDOW vedom FROM 0,0 TO 24,79 system float grow close zoom shadow;

TITLE'ESC - Выход безсохраненияCtrl+W - с сохранением';

FOOTER'F1 - Помощь' COLOR SCHEME 12

ONKEY LABEL F1 DO HELP WITH 7

i=MONTH(DATE())

PG=0

T='EL_PL-'+alltrim(str(i))+'.'+'txt'

SETALTERNATE TO ('EL_PL-'+alltrim(str(i))) && ADDI

SETALTERNATE ON

SETCONSOLE OFF

?REPLICATE('-',55)

?'|','Таб. ','|',' Фамилия ','|','Ст.знач','|','Нов.знач','|','Начислено'

?REPLICATE('-',55)

SELEA

gotop

DOWHILE !EOF()

y=yl

dowhile y=yl

d=dom

dowhile y=yl AND d=dom

k=kw_ra

scanwhile yl=y.and.dom=d.and.kw_ra=k.and.c.yl=y.and.c.dom=d.and.c.kw_ra=k

IFOR_R=1


?tab PICTURE('9999') AT(1),'|' AT(6),FAM AT(8)PICTURE('xxxxxxxxxxxxxxxxxx')

??'|' AT(27),elec PICTURE('9999999'),'|' AT(36),elec1PICTURE('9999999'),'|' AT(44)

??c.el_c PICTURE('####.##'),'|' AT(55)

PG=PG+1

ENDIF

ENDSCAN

IFPG=45

?REPLICATE('-',55)

?'Таб. ','|',' Фамилия ','|','Ст.знач','|','Нов.знач','|','Начислено'

?REPLICATE('-',55)

ENDIF

ENDDO

ENDDO

ENDDO

SETALTERNATE OFF

SETALTERNATE TO

SETCONSOLE ON

MODIFYCOMMAND EVALUATE('T') WINDOW vedom

CLEAR

ACTIVATEWINDOW vib

@2,5 SAY 'Р а с п е ч а та т ь ?'

@0,0 FILL TO 8,43 COLOR W+/R

@5,6 GET pr FUNCTION '*H Да;Нет' DEFA 2SIZE 1,6,4;

COLOR,,,,w+/n,w+/n,w+/n,,W+/R,

READ

DEACTIVATEWINDOW vib

DOCASE

CASEpr=1

SETHEADING OFF

IFPRINTSTATUS()

TYPE(T) TO PRINT

ELSE

WAIT'Подготовьтепринтер' WINDOW

ENDIF

CASEpr=2

CLEARREAD

ENDCASE

CLEAR

ONKEY LABEL F1 DO HELP WITH 6

RETURN

************************************************************************************* Формированиеостатковквартиросъёмщиков **

***********************************************************************************

PROCEDURE SP_OST && Сальдопо квартиросъемщикам

HIDEPOPUP VIEV

IF_PAD_OTCH=.F.

WAIT'СДЕЛАЙТЕ СЛИЯНИЕРАСЧЕТОВ' WINDOW

RETURN

ENDIF

DEFINEWINDOW vedom FROM 0,0 TO 24,79 system float grow close zoom shadow;

TITLE'ESC - Выход безсохраненияCtrl+W - с сохранением';

FOOTER'F1 - Помощь' COLOR SCHEME 12

ONKEY LABEL F1 DO HELP WITH 7

i=MONTH(DATE())

PG=0

T='saldo-'+alltrim(str(i))+'.'+'txt'

SETALTERNATE TO ('saldo-'+alltrim(str(i))) && ADDI

SETALTERNATE ON

SETCONSOLE OFF

?REPLICATE('-',58)

?'|','Таб. ','|',' Фамилия ','|','Начисл. ','|','К оплате','|','Остаток '

?REPLICATE('-',58)

SELEA

gotop

DOWHILE !EOF()

y=yl

dowhile y=yl

d=dom

dowhile y=yl AND d=dom

k=kw_ra

scanwhile yl=y.and.dom=d.and.kw_ra=k.and.c.yl=y.and.c.dom=d.and.c.kw_ra=k

IFOR_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_kPICTURE('####.##'),'|' AT(58)

PG=PG+1

ENDIF

ENDSCAN

IFPG=45

?REPLICATE('-',58)

?'Таб. ','|',' Фамилия ','|','Начисл. ','|','К оплате','|','Остаток '

?REPLICATE('-',58)

ENDIF

ENDDO

enddo

enddo

SETALTERNATE OFF

SETALTERNATE TO

SETCONSOLE ON

MODIFYCOMMAND EVALUATE('T') WINDOW vedom

CLEAR

ACTIVATEWINDOW vib

@2,5 SAY 'Р а с п е ч а та т ь ?'

@0,0 FILL TO 8,43 COLOR W+/R

@5,6 GET pr FUNCTION '*H Да;Нет' DEFA 2SIZE 1,6,4;

COLOR,,,,w+/n,w+/n,w+/n,,W+/R,

READ

DEACTIVATEWINDOW vib

DOCASE

CASEpr=1

SETHEADING OFF

IFPRINTSTATUS()

TYPE(T) TO PRINT

ELSE

WAIT'Подготовьтепринтер' WINDOW

ENDIF

CASEpr=2

CLEARREAD

ENDCASE

CLEAR

ONKEY LABEL F1 DO HELP WITH 6

RETURN

************************************************************************************* Формированиеотчета по суммамвсех начислений **

***********************************************************************************

PROCEDURE SVOD

HIDEPOPUP VIEV

IF_PAD_OTCH=.F.

WAIT'СДЕЛАЙТЕ СЛИЯНИЕРАСЧЕТОВ' WINDOW

RETURN

ENDIF

DEFINEWINDOW vedom FROM 0,0 TO 24,79 system float grow close zoom shadow;

TITLE'ESC - Выход безсохраненияCtrl+W - с сохранением';

FOOTER'F1 - Помощь' COLOR SCHEME 12

ONKEY LABEL F1 DO HELP WITH 7

selec

CALCULATESUM(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);

TOSKWN,SGN,SXN,SKN,SOTN,SRN,STN,SELN,SMN

CALCULATESUM(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);

TOSKWL,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())

SETALTERNATE TO ('SVOD-'+alltrim(str(i)))

T='svod-'+alltrim(str(i))+'.'+'txt'

SETALTERNATE 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)

?' ИТОГО ','|',SMNPICTURE('########.##'),'|'

??SML PICTURE('########.##'),'|',SM PICTURE('########.##'),'|'

SETALTERNATE OFF

SETALTERNATE TO

MODIFYCOMMAND EVALUATE('T') WINDOW vedom

CLEAR

ACTIVATEWINDOW vib

@2,5 SAY 'Р а с п е ч а та т ь ?'

@0,0 FILL TO 8,43 COLOR W+/R

@5,6 GET pr FUNCTION '*H Да;Нет' DEFA 2SIZE 1,6,4;

COLOR,,,,w+/n,w+/n,w+/n,,W+/R,

READ

DEACTIVATEWINDOW vib

DOCASE

CASEpr=1

SETHEADING OFF

IFPRINTSTATUS()

TYPE(T) TO PRINT

ELSE

WAIT'Подготовьтепринтер' WINDOW

ENDIF

CASEpr=2

CLEARREAD

ENDCASE

CLEAR

ONKEY LABEL F1 DO HELP WITH 6

RETURN


П


риложение№ 1.7

- 9 -


Файлрасчетов– RAS.PRG

************************************************************************************* ПунктМеню – РАСЧЕТ– Расчет квартплаты **

*********************************************************************

PROCEDURE ras && выборрасчета поквартплате

HIDEPOPUP ras

IFRECCOUNT()=0

ACTIVATEWINDOW vib

@1,10 SAY 'Б а з а п у с та'

@2,9 SAY 'Начните сдополнения'

@0,0 FILL TO 8,43 COLOR W+/R

@5,3 GET ins1 FUNCTION '*TH Дополнить;Отмена';

validins2() defa 1 size 1,10,4;

COLOR,,,,w+/n,w+/n,w+/n,,W+/R,

readcycle OBJECT 1

DEACTIVATEWINDOW vib

RETURN

ENDIF

ONKEY

ACTIVATEWINDOW 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

READOBJECT 1

DEACTIVATEWINDOW vib

ONKEY LABEL F1 DO HELP WITH 6

RETURN

************************************************************************************* ПунктМеню – РАСЧЕТ– Расчет польготам **

*********************************************************************

PROCEDURE RAS_L && выборрасчета льгот

HIDEPOPUP ras

IFRECCOUNT()=0

ACTIVATEWINDOW vib

@1,10 SAY 'Б а з а п у с та'

@2,9 SAY 'Начните сдополнения'

@0,0 FILL TO 8,43 COLOR W+/R

@5,3 GET ins1 FUNCTION '*TH Дополнить;Отмена';

validins2() defa 1 size 1,10,4;

COLOR,,,,w+/n,w+/n,w+/n,,W+/R,

readcycle OBJECT 1

DEACTIVATEWINDOW vib

RETURN

ENDIF

ONKEY

ACTIVATEWINDOW 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

READOBJECT 1

DEACTIVATEWINDOW vib

ONKEY LABEL F1 DO HELP WITH 6

RETURN


************************************************************************************* ПунктМеню – РАСЧЕТ– Слияние расчетов **

*********************************************************************

PROCEDURE ras_i && Выборрасчета к оплате

HIDEPOPUP ras

IFRECCOUNT()=0

ACTIVATEWINDOW vib

@1,10 SAY 'Б а з а п у с та'

@2,9 SAY 'Начните сдополнения'

@0,0 FILL TO 8,43 COLOR W+/R

@5,3 GET ins1 FUNCTION '*TH Дополнить;Отмена';

validins2() defa 1 size 1,10,4;

COLOR,,,,w+/n,w+/n,w+/n,,W+/R,

readcycle OBJECT 1

DEACTIVATEWINDOW vib

RETURN

ENDIF

ONKEY

ACTIVATEWINDOW 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

DEACTIVATEWINDOW vib

clear

ONKEY 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)