ФайлДополнения\Изменения– ADD_DEL.PRG
************************************************************************************* Дополнение\Изменениеданных **
*********************************************************************
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 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 *********************************************************************************** ** Дополнение(Редактирование)ставок по льготам ** *********************************************************************************** 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 П - Просмотрс помощью команды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 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 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 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 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 *********************************************************************************** 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 ******************************************************************************** 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 П - 1 2 Основныепроизводственныефонды 3 Себестоимость,прибыль ирентабельностьпродукции 4 Планированиепроизводственно-хозяйственнойдеятельностипредприятия 5 Предпосылкидля написанияприложения 5 Краткаяхарактеристикасистемы 6 8 9 12 12 12 13 16 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 29 29 29 BROWSE-окна(KDR) 30 Окнопомощи (HELP) 30 31 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 58 59 1 2 Основныепроизводственныефонды 3 Себестоимость,прибыль ирентабельностьпродукции 4 Планированиепроизводственно-хозяйственнойдеятельностипредприятия 5 Предпосылкидля написанияприложения 5 Краткаяхарактеристикасистемы 6 8 9 12 12 12 13 16 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 29 29 29 BROWSE-окна(KDR) 30 Окнопомощи (HELP) 30 31 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 58 59 I-йраздел Краткаяхарактеристикапредприятия……………………………………... 2 Основныепроизводственныефонды………………………………………. 3 Себестоимость,прибыль ирентабельностьпродукции……………………. 4 Планированиепроизводственно-хозяйственнойдеятельностипредприятия.. 5 Предпосылкидля написанияприложения…………………………………. 5 Краткаяхарактеристикасистемы………………………………………….. 6 Краткаяхарактеристикапредприятия Усть-Кутскаяперевалочно-распределительнаянефтебазаявляется филиаломОАО "Иркутскнефтепродукт". Расположенав г. Усть-Куте,Иркутскойобл., на берегур. Лена, в устьереки Якурим. Нефтебазаклассифицируетсяпо следующимпризнакам: пообщей вместимостии максимальномуобъему одногорезервуараотносится кпервой категории пофункциональномуназначению– перевалочно-распределительная потранспортнымсвязям – смешанная,автомобильно-водно-железнодорожная пономенклатуре– нефтебазаобщего хранения. Предприятиеимеет восемь АЗС, а также пять филиалов-нефтескладов. По своемуфункциональномуназначениюнефтебазаявляетсяперевалочнымпунктом дляотправкинефтепродуктовв северныерайоны Иркутскойобласти, РеспубликуСаха-Якутия,Хабаровскийкрай воднымпутем (по р. Лена)за период навигациис 1/05 по 25/10. Наличиемощного резервуарногопарка позволяетпроизводитьнакоплениеи хранениенефтепродуктав любое времягода. Через имеющиеся восемь АЗС ипять филиалов-нефтескладовнефтебазапокрываетпотребностив нефтепродуктахв некоторыхрайонах Иркутскойобл. Маслами, смазкамитакже обеспечиваютсяпредприятияБратского иУсть-Илимскогорайонов. Предприятиеимеет развитуюинфраструктурупо обеспечениюпредприятийи организацийи жилых микрорайоновследующимивидами услуг: установкателефонов иобеспечениетелефоннойсвязью передачаэлектроэнергиичерез собственнуюподстанцию снабжениепаром, холоднойи горячей водойот собственныхисточников(ТЭЦ, водозабор) перевозканефтепродуктовавтотранспортом. Схема2 Непосредственнаяреализациянефтепродуктовосуществляетсячерез такиеосновные цеха,как 1 цех, 4 цехи АЗС. Объемреализациинефтепродуктов по цехам распределяетсяв зависимостиот сезонныхусловий, т.е.в летний периоднаибольшийобъем реализациинефтепродуктаприходитсяна 1 и 4 цеха, т.к.в этих цехахпроизводитсяотгрузканефтепродуктовводным путем(танкерами).Взимний же периодэти цеха производят"затарку"резервуаровна хранениенефтепродукта.Прием нефтепродуктаосуществляетсяс вагоноцистернчерез эстокады.Отгрузкапроизводитсяводным путем танкерами через причалы Цех № 1 предназначенкак для хранениянефтепродукта, перевалкиводным путем(танкерами),обеспечениемгорода и филиаловтемными и светлыминефтепродуктами. Цех № 4предназначендля хранениясветлых нефтепродуктови отправкиводным путем. Лабораторияосуществляетконтроль закачествомпринимаемыхи отпускаемыхнефтепродуктов,а также периодическийконтроль засостояниемнефтепродуктовв резервуарах. Тарный производитперевалкугорюче-смазочныхматериаловчерез бочкатаруи поштучно(литол, циатим,тосол …). Цех № 3, АЗС осуществляютреализациюнефтепродуктовнаселению ипредприятиямналичным ибезналичнымрасчетом. Вспомогательноепроизводствоосуществляетобслуживанияосновных объектовнефтебазы, атакже и близлежащийжилой поселок(обеспечениетеплом, связью,электроэнергиейпри необходимости)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 стр.31RETURN
FUNCTION red
RETURN
FUNCTION INS_LG
риложение№ 1.5************************************************************************************* Пунктменю - КАДРЫ **
RETURN
PROCEDURE kv_sch && Пунктменю(pop_vib) - жильцы
RETURN
PROCEDURE BAZA && пунктменю - База жильцов
RETURN
PROCEDURE ent_sch && пунктменю - Ввод оплатысчетчика
RETURN
PROCEDURE ent_opl && пунктменю - Ввод оплаты
RETURN
************************************************************************************* Пунктменю – СЕРВИС **
RETURN
PROCEDURE VVV && пунктменю - Ввод оплатыдля олногоквартиросъемщика
RETURN
риложение№ 1.4
ЧастьI ВВЕДЕНИЕ
Краткаяхарактеристикапредприятия
ЧастьIIОСНОВНАЯЧАСТЬ
ГЛАВА 1
Описаниепредметнойобласти
Проектированиебазы данных
Этап 1.Определениесущностей
Этап 2.Определениевзаимосвязеймужду сущностями
Этап 3.Задание первичныхи альтернативныхключей, определениеатрибутовсущностей
Этап 4.Физическоеописание модели
ГЛАВА 2
Поддержкабазы данных
Описаниеработы приложения.
Работас пунктамименю
Работас окнами
Окнодополненияльгот(M_ZAR)
Окнотарифов(M_ZAR)
Окнодополненияжильцов (INS)
ГЛАВА3
Краткийобзор Процедурногоязыка - FoxPro
Техническоеописание работыпрограммы
«СЕРВИС»-«Дополнение»
«СЕРВИС»-«Дополнениельгот»
«СЕРВИС»-«Тарифы»
«СЕРВИС»-«Нормыоплаты услуг»
«СЕРВИС»-«Упаковкаданных»
«СЕРВИС»-«Переиндексация»
Пунктменю – «КАДРЫ»
«КАДРЫ»-«Работас картотекой»
«КАДРЫ»-«Квартиросъемщики»
«КАДРЫ»-«Картотекальготников»
«КАДРЫ»-«Базажильцов»
«КАДРЫ»-«Вводданных счетчика»
«КАДРЫ»-«Вводоплаты»
Пунктменю «РАСЧЕТ»
«РАСЧЕТ»-«Расчетквартплаты»
«РАСЧЕТ»-«Расчетпо льготам»
«РАСЧЕТ»-«Слияниеквартплатыс льготами»
ФункцияПОИСКА
Пунктменю «ОТЧЕТЫ»
«ОТЧЕТЫ»-«Спискипо начислению»
«ОТЧЕТ»-«Спискипо льготам»
«ОТЧЕТ»-«Оплатаэ\энергии»
«ОТЧЕТ»-«Сальдопо квартиросъемщикам»»
«ОТЧЕТ»-«Сводпо квартплатеза месяц»
Пунктменю «ПЕЧАТЬ»
«ПОМОЩЬ»-«Помощь»
«ПОМОЩЬ»-«Справка»
Созданиеконтексно-зависимойэкраннойподсказки.
Пунктменю «Выход»
ЧастьIIIЗАКЛЮЧЕНИЕ
Заключение
Списокиспользуемойлитературы
ЧастьI ВВЕДЕНИЕ
Краткаяхарактеристикапредприятия
ЧастьIIОСНОВНАЯЧАСТЬ
ГЛАВА 1
Описаниепредметнойобласти
Проектированиебазы данных
Этап 1.Определениесущностей
Этап 2.Определениевзаимосвязеймужду сущностями
Этап 3.Задание первичныхи альтернативныхключей, определениеатрибутовсущностей
Этап 4.Физическоеописание модели
ГЛАВА 2
Поддержкабазы данных
Описаниеработы приложения.
Работас пунктамименю
Работас окнами
Окнодополненияльгот(M_ZAR)
Окнотарифов(M_ZAR)
Окнодополненияжильцов (INS)
ГЛАВА3
Краткийобзор Процедурногоязыка - FoxPro
Техническоеописание работыпрограммы
«СЕРВИС»-«Дополнение»
«СЕРВИС»-«Дополнениельгот»
«СЕРВИС»-«Тарифы»
«СЕРВИС»-«Нормыоплаты услуг»
«СЕРВИС»-«Упаковкаданных»
«СЕРВИС»-«Переиндексация»
Пунктменю – «КАДРЫ»
«КАДРЫ»-«Работас картотекой»
«КАДРЫ»-«Квартиросъемщики»
«КАДРЫ»-«Картотекальготников»
«КАДРЫ»-«Базажильцов»
«КАДРЫ»-«Вводданных счетчика»
«КАДРЫ»-«Вводоплаты»
Пунктменю «РАСЧЕТ»
«РАСЧЕТ»-«Расчетквартплаты»
«РАСЧЕТ»-«Расчетпо льготам»
«РАСЧЕТ»-«Слияниеквартплатыс льготами»
ФункцияПОИСКА
Пунктменю «ОТЧЕТЫ»
«ОТЧЕТЫ»-«Спискипо начислению»
«ОТЧЕТ»-«Спискипо льготам»
«ОТЧЕТ»-«Оплатаэ\энергии»
«ОТЧЕТ»-«Сальдопо квартиросъемщикам»»
«ОТЧЕТ»-«Сводпо квартплатеза месяц»
Пунктменю «ПЕЧАТЬ»
«ПОМОЩЬ»-«Помощь»
«ПОМОЩЬ»-«Справка»
Созданиеконтексно-зависимойэкраннойподсказки.
Пунктменю «Выход»
ЧастьIIIЗАКЛЮЧЕНИЕ
Заключение
Списокиспользуемойлитературы
Введение
Характеристикапроизводственнойдеятельности
Производственныемощности и ихоснащения
Чтобы управлятьорганизацией,необходимоопределеннымобразом связатьцели, людей ивиды, выполняемойими работ междусобой. Для этогосоздаетсяорганизационнаяструктурауправленияорганизацией,и составляютсядолжностныеинструкциина всех членоворганизации,в которыхоговариваются:права, ответственностьи обязанностикаждого.
Схема1
Структурауправленияпредприятия
Подразделениепредприятияна цеха
1 Разработкаприложенияориентированнаименно на этучасть производства,то есть по ЖКХ(учет квартплаты.)
Себестоимость,прибыль ирентабельностьпродукции
Планпроизводстваи реализациипродукции
Описаниепредметнойобласти………………………………….. | 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.
Перечень вводимойинформации:
Фамилия,имя и отчествожильца;
Табельныйномер;
Годрождения
Адрес;
Квадратныеметры;
Телефон;
Приналичии льготы– описаниельготы, код,период;
Выборплательщика,указанногов ордере
Нормативныеставки на услуги
Тарифныеставки и описаниетарифа
Перечень печатныхотчетов:
Спискипо начислению
Спискильготников
Спискис показаниямисчетчика
Оплатаэлектроэнергии
Сальдопо квартиросъемщикам
Сводпо квартплатеза месяц
Квитанцияоб оплате
Жильцы – БД, содержащаяинформациюо жильцах(RABOT.DBF)
Начисления - БД, содержащаяинформациюо начислениях(OPLATA.DBF)
Льготы - БД,содержащаяинформациюо льготах(LGOT.DBF)
Ставки - БД, содержащаяинформациюо ставках дляконкретногожильца и (или)о жильцах,проживающихв одном доме(TABLE_R.DBF)
Тарифы - БД, содержащаяинформациюописания тарифови ставок поним (TARIF.DBF)
ЖИЛЬЦЫ
СТАВКИ
ТАРИФЫ
СЧЕТ
ЛЬГОТЫ
Первичныйключ – это атрибут(или группаатрибутов),которые единственнымобразом идентифицируюткаждую строкув таблице.
Альтернативныйключ – это атрибут(или группаатрибутов),несовпадающий с первичнымключом и уникальноидентифицирующийэкземпляробъекта.
Длякаждой сущностиопределиматрибуты, которыебудем хранитьв БД.
Атрибуты,включаемыев состав БД,приведены втаблице 2.1. информационнаямодель послетретьего этапапроектированияприведена нарис. 2.13
Сущность | Первичныйключ | Атрибуты |
ЖИЛЬЦЫ | Табельныйномер Улица Дом Квартира | Табельныйномер Улица Дом Квартира Ф.И.О Номертелефона Квадратныеметры Льгота Кодльготы № удостоверения(по льготе) Дата,с которой будетначислятьсяльгота Датаокончанияначисленийпо льготе Староезначение счетчика Новоезначение счетчика Определениеплательщика Количествопроживающих(в 1-й квартире) Датаоплаты запредоставленныеуслуги Остатокденежных средств Вводоплаты Начисленияквартплаты(Есть\Нет) Начислениярадио (Есть\Нет) Начислениятелефона(Есть\Нет) Начислениягорячей воды(Есть\Нет) Начисленияхолодной воды(Есть\Нет) Начислениякоммунальн.услуг (Есть\Нет) Начисленияотопления(Есть\Нет) Начисленияэлектроэнергии(Есть\Нет) |
ЛЬГОТА | Кодльготы | Кодльготы Описаниельготы Процентнаяставка поквартплате Процентнаяставка по радио Процентнаяставка по телефону Процентнаяставка по горячейводе Процентнаяставка по холоднойводе Процентнаяставка по ком.услугам Процентнаяставка поотоплению |
ТАРИФ | Описаниетарифа Ставкаоплаты Порядокначисления(на 1-го чел.\ на1 м2) Выбор:на 1-го человекаили на 1 м2 | |
Сущность | Первичныйключ | Атрибуты |
СТАВКИ | Табельныйномер | Табельныйномер Описаниельготы Ставкапо квартплате Ставкапо радио Ставкапо телефону Ставкапо горячейводе Ставкапо холоднойводе Ставкапо коммунальнымуслугам Ставкапо отоплению Ставкапо электроэнергии |
НАЧИСЛЕНИЯ | Табельныйномер Улица Дом Квартира | Табельныйномер Улица Дом Квартира Квадратныеметры Кодльготы Выборплательщика Количествопроживающих Льгота(Да\Нет) Начисленияквартплаты(Да\Нет) Начислениярадио (Да\Нет) Начислениятелефона (Да\Нет) Начислениягор. Воды (Да\Нет) Начисленияхол. Воды (Да\Нет) Начисленияком. Услуг(Да\Нет) Начисленияэл. Энергии(Да\Нет) Начисленияотопления(Да\Нет) Сумманачисленияквартплаты Сумманачислениятелефона Сумманачислениярадио Сумманачисленияком.услуг Сумманачисленияотопления Сумманачисленияэл\энергии Сумманачислениягор.воды Сумманачисленияхол.воды Нач.квартплаты(по льготе) на1-го чел. Нач.телефона(по льготе) на1-го чел. Нач.радио (по льготе)на 1-го чел. Нач.ком.услуг (польготе) на 1-гочел. Нач.отопления(по льготе) на1-го чел. Нач.эл\энергии(по льготе) на1-го чел. Нач.гор.воды (польготе) на 1-гочел. Нач.хол.воды (польготе) на 1-гочел. Сумманач. квартплатыпо льготе Сумманач. гор. Водыпо льготе Сумманач. хол. Водыпо льготе Сумманач. ком. Услугпо льготе Сумманач. отопленияпо льготе Сумманач. телефонапо льготе Сумманач. радио польготе Итогсумм начисленийпо льготе Итогсумм начислений Итоговаясумма к оплате |
ЖИЛЬЦЫ
Таб. Номер
Улица
Дом
Квартира
Код льготы
. . .
ЛЬГОТЫ
Кодльготы
. . .
СТАВКИ
Таб.Номер
. . .
НАЧИСЛЕНИЯ
Таб. Номер
Улица
Дом
Квартира
Код льготы
. . .
Рис.2.13. Взаимосвязимежду атрибутамисущностей
На этомэтапе составимбазы данных,которые будутв дальнейшемреализовыватьсяв СУБД. Назначенияимен БД и ихатрибутовотражены втабл. 2.2.
Таблица2.2. Структура,используемыхБаз Данных.
RABOT.DBF(Жильцы)
Имя | Тип | Длина | примечание | |
TAB | N | 4 | 0 | Табельныйномер |
FAM | C | 40 | - | Ф.И.О |
TEL | N | 8 | 0 | Номертелефона |
YL | C | 15 | - | Улица |
DOM | С | 3 | 0 | Дом |
KW_RA | С | 3 | 0 | Квартира |
KV_M | N | 6 | 2 | Квадратныеметры |
N_LG | N | 1 | 0 | Кодльготы |
N_YD | С | 9 | 0 | Номерудостоверения(по льготе) |
DAT_C | D | 8 | - | Дата,с которой будетначислятьсяльгота |
DAT_PO | D | 8 | - | Датаокончанияначисленийпо льготе |
ELEC | N | 6 | 0 | Староезначение счетчика |
ELEC1 | N | 6 | 0 | Новоезначение счетчика |
OR_R | N | 1 | 0 | Определениеплательщика |
KOL_VO | N | 2 | 0 | Количествопроживающих |
D_OPL | D | 8 | - | Датаоплаты |
OST_K | N | 8 | 2 | Остатокденежных средств |
OPL_TA | N | 8 | 2 | Вводоплаты |
LGOT | L | 1 | - | Льгота(Да\Нет) |
RAD_L | L | 1 | - | Начислениярадио (Да\Нет) |
TEL_L | L | 1 | - | Начислениятелефона (Да\Нет) |
KW_L | L | 1 | - | Начисленияквартплаты(Да\Нет) |
G_W_L | L | 1 | - | Начислениягор. воды (Да\Нет) |
X_W_L | L | 1 | - | Начисленияхол. воды (Да\Нет) |
K_YS_L | L | 1 | - | Начисленияком. услуг(Да\Нет) |
EL_C_L | L | 1 | - | Начисленияэл. энергии(Да\Нет) |
OTOP_L | L | 1 | - | Начисленияотопления(Да\Нет) |
OPLATA.DBF(Начисления)
Имя | Тип | Длина | Примечание | |
TAB | N | 4 | 0 | Табельныйномер |
YL | C | 15 | - | Улица |
DOM | С | 3 | 0 | Дом |
KW_RA | С | 3 | 0 | Квартира |
KV_M | N | 6 | 2 | Квадратныеметры |
N_LG | N | 1 | 0 | Кодльготы |
OR_R | N | 1 | 0 | Выборплательщика |
KOL_VO | N | 2 | 0 | Количествопроживающих |
DAT_C | D | 8 | - | Дата,с которой будетначислятьсяльгота |
DAT_PO | D | 8 | - | Датаокончанияначисленийпо льготе |
ELEC | N | 6 | 0 | Староезначение счетчика |
ELEC1 | N | 6 | 0 | Новоезначение счетчика |
TEL_L | L | 1 | - | Начислениятелефона (Да\Нет) |
G_W_L | L | 1 | - | Начислениягор. Воды (Да\Нет) |
X_W_L | L | 1 | - | Начисленияхол. Воды (Да\Нет) |
K_YS_L | L | 1 | - | Начисленияком. Услуг(Да\Нет) |
EL_C_L | L | 1 | - | Начисленияэл. Энергии(Да\Нет) |
OTOPL_L | L | 1 | - | Начисленияотопления(Да\Нет) |
KW_PL | N | 8 | 2 | Сумманачисленияквартплаты |
TEL_R | N | 8 | 2 | Сумманачислениятелефона |
RAD_R | N | 8 | 2 | Сумманачислениярадио |
K_YSL | N | 8 | 2 | Сумманачисленияком.услуг |
OTOPL | N | 8 | 2 | Сумманачисленияотопления |
EL_C | N | 8 | 2 | Сумманачисленияэл\энергии |
G_W | N | 8 | 2 | Сумманачислениягор.воды |
X_W | N | 8 | 2 | Сумманачисленияхол.воды |
KW_PLL | N | 8 | 2 | Нач.квартплаты(по льготе) на1-го чел. |
TEL_RL | N | 8 | 2 | Нач.телефона(по льготе) на1-го чел. |
RAD_RL | N | 8 | 2 | Нач.радио (по льготе)на 1-го чел. |
K_YSLL | N | 8 | 2 | Нач.ком.услуг (польготе) на 1-гочел. |
OTOPLL | N | 8 | 2 | Нач.отопления(по льготе) на1-го чел. |
EL_CL | N | 8 | 2 | Нач.эл\энергии(по льготе) на1-го чел. |
G_WL | N | 8 | 2 | Нач.гор.воды (польготе) на 1-гочел. |
X_WL | N | 8 | 2 | Нач.хол.воды (польготе) на 1-гочел. |
*SUM_KW | N | 8 | 2 | Сумманач. квартплатыпо льготе |
*SUM_GW | N | 8 | 2 | Сумманач. гор. Водыпо льготе |
*SUM_XW | N | 8 | 2 | Сумманач. хол. Водыпо льготе |
*SUM_KYSL | N | 8 | 2 | Сумманач. ком. Услугпо льготе |
*SUM_OT | N | 8 | 2 | Сумманач. отопленияпо льготе |
*SUM_TL | N | 8 | 2 | Сумманач. телефонапо льготе |
*SUM_RD | N | 8 | 2 | Сумманач. радио польготе |
*SUM_IT | N | 9 | 2 | Итог суммначисленийпо льготе |
ITOG_N | N | 9 | 2 | Итогсумм начислений |
ITOG_L | N | 9 | 2 | Итог суммначисленийпо льготе |
ITOG | N | 9 | 2 | Итог суммначислений(к оплате) |
* - Сумма начисленийпо льготамжильцов, проживающихв одной квартире
LGOT.DBF (Льготы)
Имя | Тип | Длина | Примечание | |
N_LG | N | 1 | 0 | Кодльготы |
INFO | C | 20 | - | Описаниельготы |
KWP_L | N | 4 | 2 | Ставканачисленийпо квартплате |
RD_L | N | 4 | 2 | Ставканачисленийпо радио |
GW_L | N | 4 | 2 | Ставканачисленийпо горячейводе |
XW_L | N | 4 | 2 | Ставканачисленийпо холоднойводе |
K_L_L | N | 4 | 2 | Ставканачисленийпо ком. Услугам |
OT_L | N | 4 | 2 | Ставканачисленийпо отоплению |
TL_L | N | 4 | 2 | Ставканачисленийпо телефону |
TABLE_R.DBF (Ставки)
Имя | Тип | Длина | Примечание | |
TAB | N | 4 | 0 | Табельныйномер |
KWP_L | N | 5 | 2 | Ставканачисленийпо квартплате |
RD_L | N | 5 | 2 | Ставканачисленийпо радио |
GW_L | N | 5 | 2 | Ставканачисленийпо гор. Воде |
XW_L | N | 5 | 2 | Ставканачисленийпо хол. Воде |
K_L_L | N | 5 | 2 | Ставканачисленийпо ком. Услугам |
OT_L | N | 5 | 2 | Ставканачисленийпо отоплению |
EL_L | N | 5 | 2 | Ставканачисленийэлектроэнергии |
TL_L | N | 5 | 2 | Ставканачисленийпо телефону |
TARIF.DBF (Тарифы)
Имя | Тип | Длина | Примечание | |
INFO | C | 25 | - | Описаниетарифа |
ST_KA | N | 5 | 2 | Ставкаоплаты |
K_INFO | C | 11 | - | Помощьначисления(на 1-го чел.\на1 кв.м) |
K_CH | L | 1 | - | Выбор:.T. – на 1-гочеловека .F. – на 1 м2 |
HELP.DBF – БД,содержащаяописание помощи.
Имя | Тип | Длина | Примечание | |
HLP | M | 10 | - | Описаниепомощи |
M_ZAR .MEM - Файл,в котором хранятсяпеременныестоимости услуг( _* ).
Атакже структурныефайлы-индексы(CDX),для каждойбазы, создаваеммыепрограммнымпутем.
Поддержкабазы данных……………………... | 20 | |
Описаниеработы приложения……………….. | 21 | |
Работас пунктамименю…………………. | 23 | |
PAD-пункт«Кадры»……………………………… | 23 | |
PAD-пункт«Отчеты»……………………………. | 24 | |
PAD-пункт«Печать»……………………………… | 24 | |
PAD-пункт«Сервис»……………………………… | 25 | |
PAD-пункт«Расчет»……………………………… | 25 | |
PAD-пункт«Помощь»……………………………. | 25 | |
PAD-пункт«Выход»……………………………… | 25 | |
Работаокнами……………………………. | 26 | |
Окно«Работа скартотекой»(INS)………………. | 26 | |
Окно«Квартиросъемщики»(KD)………………… | 28 | |
Окнонормативов(M_ZAR)……………………… | 29 | |
Окнодополненияльгот(M_ZAR)………………... | 29 | |
Окнотарифов(M_ZAR)………………………….. | 29 | |
Окнодополненияжильцов (INS)………………….. | 29 | |
BROWSE-окна(KDR)……………………………. | 30 | |
Окнопомощи (HELP)…………………………….. | 30 |
поддержкаили ведениебазы данныхподразумеваетналичие средствдоступа к данными средств управленияими. При этомрабочий интерфейсдолжен бытьмаксимально“комфортным”.Здесь нужнорешить, чтопользовательбудет обычновидеть на экранекомпьютера.
Удобнов качестве“рабочегостола”,на котором онбудет приниматьрешения, и совершатьдействия пообработкеданных, взятьне какое-томеню, а отображениесамой базыданных. На экранедолжны присутствоватьи указания навозможныедействияпользователя.Поскольку нанем никогдане хватаетместа, указанияна некоторыедействия можнопоместить вразвертывающиесясветовые меню.При необходимоститакже должнабыть предусмотренаконтекстно-зависимая помощь (HELP– F1).
Функцииподдержки базыданных.
Дляобслуживаниябазы необходимыследующиефункции.
перемещениевперед\назадна одну запись(SKIP\SKIP–1). Приэтом должныблокироватьсяпопытки выйтиза первую\последнююзапись базы.Достижениеверхней\нижнейграницы желательноотображатьна экране(READ-окно).
Переходна начало\конецбазы (GOTOP\BOTTOM).
Пометказаписей, предназначенныхдля удаления,и снятие пометки(DELETE\RECALL).
Дополнениебазы новойзаписью (APPENDBLANK).
Выходизокна редактирования.
Поискпо ключу (SEEK,LOCATE). Вслучае неудачногопоиска указательзаписей долженвернуться наисходную запись.
Вывод\печатьданных.
Упаковкаданных (PACK).
Переиндексациябазы (REINDEXилиINDEX).
Полнаяочисткабазы от данных(вспомогательнаябаза oplata.dbf)(ZAP).
Средствапредъявленияданных.
КомандаBROWSE\CHANGEудобнатем, что даетпанораму данныхи не требуетпрограммированияперемещенияв БД. В даннойпрограммекоманда BROWSE в основномиспользуетсядля просмотраданных и результатоввычислений.
КомандаREAD скомандами@…SAY…@…GET:
@…SAY…GET…
@…SAY…
@…GET…
READ…
Этаформа предъявленияданных являетсясамой гибкойи дает непосредственныйдоступ к полямбазы. Теперькроме собственноредактирования,поля базы данныхможно анализировать,трансформировать,запоминатьв переменныхили в другихбазах и т.д.. Чащевсего такойрежим называютREAD-окном,хотя использованиекоманд @…GET,READ необязываетпомещать ихв специальноеокно – они могутпроектироватьсяи непосредственнона экран.
Всеоперации надбазой, предъявляемойкомандой READ,могут бытьсовершены либопосле завершениякоманды READ,либо в вызываемыхпроцедурах.
Обеформы (BROWSEи READ) предъявленияданных активноиспользуютсяв программе.
Управлениепрограммойосуществляетсяс помощью меню,так как менюявляется основнойформой диалогав прикладныхсистемах обработкиданных. FoxProобладает развитымисредствамиподдержанияменю как с объемнымсветовым курсором(световым«зайчиком»),так и с назначаемымиклавишами.Кроме того, вFoxProреализованоеще и «кнопочное»(Button)меню, которыеозначают нефизическуюкнопку на клавиатуре,а некоторуюобласть наэкране, которойприданы управляющиесвойства. «Кнопочные»меню удобноиспользоватьсовместно смышью.
ВFoxProимеютсядве альтернативныетехнологиипостроенияменю – концепция,продолжающаяеще из предыдущейверсии СУДБFoxBASE-2,1,и концепция,позаимствованнаяиз СУДБdBASEIV.
Важнейшее«идейное»различие междуFox-менюи dBASE-менюможет бытьопределенотерминами«меню-программа»и «меню-объект».Fox-менюявляется толькочастью программы,где оно создается,используетсяи «умирает».dBASE-менюпосле своегоопределенияостается независимыми «живым» объектом,к которомуможно обратитьсяиз любого местаприкладнойсистемы.
Поэтомууправлениепрограммойосуществляетсяименно с помощьюdBASE-меню,а также в процедурепоказаноиспользованиеFox-меню.
dBASE-менюможет не тольковырабатыватьпеременныедля анализа,но и непосредственновызывать процедуры,подпрограммы,команды пообработкевыбора. Онопредлагаеттакую архитектурупостроениясистем обработкиданных, когдапрограмма можетвообще не иметьединого ядра,а состоять изпроцедур, которыесвязаны другс другом толькочерез вызовыменю. Крометого, имеетсянеоценимаявозможностьсоздавать менюиз имен файлови компонентовбазы данных,осуществлятьмножественныйвыбор.
Вобщем случаедля созданияdBASE-менюи работы с нимнеобходимопредусмотретьследующиеэлементы:
Определениеменю. Здесьописываютсясодержание,«горячие»клавиши, клавишибыстрого доступа,форма и реакциименю. Определениеменю можетсделано одинраз в началепрограммы идалее толькоиспользоваться.
Активацияменю. Команды\клавишиактивациипредъявляютменю на экранеи делают егочувствительнымк выбору пользователя.
Деактивацияменю. Удаляетего с экрана,сохраняя впамяти дляследующеговозможногоиспользования.
Удалениеменю. Этодействие очищаетпамять от определенияменю, и болееоно не можетбыть использованобез новогоопределения.
Имеютсядва типаэлементарныхменю:
Вертикальное(«всплывающее»,или POPUP-меню),
Горизонтальное(BAR-меню)
На ихоснове можностроить иерархическиеменю практическилюбой сложности(вложенности).Именно по такойтехнологиипостроенноменю программыи вид меню показанна рис. 2.1
Р исунок2.1 Структураменю (ZAR)
* -Файл, где
описываетсяпроцедура
** -Имя процедуры
BAR-меню– это обычногоризонтальноеменю (BAR –по-английскистрока, линейка).Такое меню имеет имя (ZAR-дляданного приложения),и состоит изконкретныхэлементов,пунктов, которыеназывают PAD-пунктами(PAD-заголовок).Каждый PAD-пункттакже имеетимя и видимуюна экранестроку-приглашение.
POPUP-меню– это прямоугольноеменю, строки-элементыкоторого называютBAR-пунктамиили BAR-строками(не путать сBAR-меню). POPUP-менюимеет имя, аего видимоесодержаниена экране(BAR-строки)будет зависетьот типа POPUP-меню.
BAR- и POPUP-меню могутиспользоватьсяотдельно, амогут сбытьсвязаны. Взаимосвязьпоказана нарис. 2.2
BAR-меню
Кадры Отчеты ……
POPUP-меню
Нормы оплатыуслуг
Ввод данныхсчетчика
Ввод оплаты
PAD-пункт(ы)
PAD-пункт«Кадры»
BAR-пункт«Работа с картотекой»– при выбореэтого пунктаоткрываетсяREAD-окно, вкотором представленаинформацияо квартиросъемщике.В этом окне,возможно, изменятьначисленияуслуг, изменятьтарифы дляжильцов квартирыили дома, периодльготы, количествопроживающих,возможностьформирования,просмотра ипечати квитанции,ввода суммыоплаты, расчетаквартплаты,выбора фильтраотображенияжильцов (Плательщики,Льготники, Всежильцы) и перемещенияпо базе дынных.
BAR-пункт«Квартиросъемщики»– при его выбореотображаютсяте жильцы, которыеоплачиваютквартплату.Вывод осуществляетсяв табличнойформе, гдепоказываютсяполя с табельнымномером и фамилией,а также двадополнительных(вычисляемых)поля, которыене сохраняютсяв базе данных.Это поле созначком «»,который появляетсяу тех жильцов,которые платятза квартируи поле со значком«» появляетсяу жильцов, которыеимеют льготу.На свободнойобласти экранавыводитсяостальнаяинформацияо жильце, включаяинформациюо произведенныхначислениях.Если курсорперемещать,находясь в полесо значком «»,то автоматическибудет обновлятьсяинформацияна экране. Навсех другихполях, при нажатииклавиши «Enter»появляетсяFox-меню, гдеможно выбратьдальнейшиедействия.(Прил.№2,Рис ….)
BAR-пункт«Картотекальготников»- при его выборепоказываютсяте жильцы которыеимеют льготу.Вывод осуществляетсяв табличнойформе, гдепоказываютсяполя с табельнымномером, фамилией,адрес, телефон,категорияльготы, номер(название) документа,подтверждающегольготу. В нижнейчасти экранаотображаетсястатус-строка,где показываетсядополнительнаяинформация,а именно: еслильготник являетсяплательщиком,то показываетсяколичествопроживающихи количествольготников,иначе фамилияи таб. № того,кто платит заквартиру.
BAR-пункт«База жильцов»- такой же показкак в «Картотекельготников»,толькоотображаютсявсе жильцы.
BAR-пункт«Ввод счетчика»– это табличныйвывод всехплательщиков,с данными счетчика,при вводе новыхзначений счетчика,сумма автоматическивычисляетсяи корректируетсясумма к оплате.
BAR-пункт«Ввод оплаты»- этотабличный выводвсех плательщиков,с данными осуммах начислений,сумме к оплатеи полем дляввода суммыплатежа. Привводе суммыплатежа автоматическирассчитываетсяостаток и заноситсядата платежа,которые затемотображаютсяв отчете и квитанции.
PAD-пункт«Отчеты»
BAR-пункт«Списки поначислению»- формируется отчет о всехпроизведенныхначислений,и открываетсяокно с выводомсумм по каждойуслуге, отдельносумм по каждойуслуге по льготам,итоговая суммак уплате, остатокили задолжность,дата платежа.
BAR-пункт«Списки польготам» -формируетсяотчет и открываетсяокно с информациейо каждом льготнике,включая суммыпо каждой услуге,а также показываетсяфамилия и таб.№ того к комупривязан льготник (т.е. того, ктоплатит за квартиру).
BAR-пункт«Списки с показаниемсчетчика» -формируетсяотчет и открываетсяокно, в которомуказаны фамилия,таб.№, адрес иданные старогои нового значенийсчетчика.
BAR-пункт«Оплата электроэнергии»- формируетсяотчет и открываетсяокно, где втабличной формевыводятсяфамилия, таб.№,адрес, данныестарого и новогозначений счетчикаи сумма к уплате.
BAR-пункт«Сальдо поквартиросъемщикам»– формируетсяотчет и открываетсяокно, где в табличнойформе выводятсяфамилия, таб.№,суммы начисления,к оплате и остаток.
BAR-пункт«Свод по квартплатеза месяц» -формируетсяотчет и открываетсяокно, где в табличнойформе выводятсяобщие суммыпо каждой услуге,отдельно польготам, итоговыесуммы начисленийпо квартплате,по льготам исуммы, которуюорганизациядолжна получитьза месяц.
Послезакрытия любогоокна с отчетом,открываетсяокно с предложениемраспечатки.
PAD-пункт«Печать»- состоит изимен файлов,которые былисозданы привыборе BAR-пунктов«Отчеты» это:
«Спискипо начислению» - файл NACH-xx.TXT
«Спискипо льготам» - файлLG_KW-xx.TXT
«Спискис показаниемсчетчика» - файл ELC_V-xx.TXT
«Оплатаэлектроэнергии» - файлEL_PL-xx.TXT
«Сальдопо квартиросъемщикам» - файл SALDO-xx.TXT
«Сводпо квартплатеза месяц» - файл SVOD-xx.TXT
Гдехх – это номермесяца, за которыйсформированотчет. Еслиустановитькурсор на имясоответствующегофайла и нажатьклавишу «Enter»(ВВОД), то откроетсяокно дляпросмотра-редактированияотчета. Еслиустановитькурсор на имясоответствующегофайла и нажатьклавишу «Spacebar»(ПРОБЕЛ), то файлраспечатается,при условии,если принтерготов, иначепоявится сообщениео подготовкепринтера.
PAD-пункт«Сервис»
BAR-пункт«Дополнение»– открываетсяокно, в которомможно добавитьжильцов в базуданных, с указаниемльгот и услуг.
BAR-пункт«Дополнениельгот» -открываетсяокно, в которомдобавляютсяили изменяютсякод, описаниельготы и ставкипо ним.
BAR-пункт«Тарифы» –открываетсяокно с dBASE-менюPAD-пунктыкоторого позволяют:
PAD-пункт«Просмотр»– формируетPOPUP-меню изполей базы сописаниемтарифов, принажатии клавиши«Enter», навыбранномBAR-пунктес описаниемтарифа, появляютсяполя редактированияданного тарифас возможностьюудаления илиизменения.
PAD-пункт«Добавить»– выводит полядля дополнениятарифа.
PAD-пункт«Выйти» - закрываетокно и менютарифов.
BAR-пункт«Нормы оплатыуслуг» –при его выбореоткрываетсяокно, в которомнужно указатьстоимостькаждой услуги.Эти ставкидействуют длярасчета начисленияквартплатыпо умолчаниюдля всех жильцов.
BAR-пункт«Переиндексация»– приего выборепроисходитпроцедурапереиндексациивсех БД.
BAR-пункт«Упаковкаданных» –запускаетпроцедуруфизическогоудаления данных,которые ранеебыли помеченына удаление.
PAD-пункт«Расчет»
BAR-пункт«Расчет квартплаты»-при его выборепроисходитрасчет квартплатыза текущиймесяц и послевыводится окно,где в табличнойформе показываетсятаб.№, фамилияи начисленияпо каждой услуге,с возможностьюих редактирования.В нижней частиэкрана показываетсяобщие суммыпо всем услугами общая итоговаясумма, такжеэти суммы выделяютсяцветом в зависимостиот нахождениякурсора в таблице.
BAR-пункт«Расчет польготам» –при его выборепроисходитрасчет для техжильцов, которыеимеют льготуи удовлетворяюттребованиюначала и концадействия льготы,если эти поляу жильца отсутствуютпредполагается,что он не имеетсрока ограничения.Вывод данныхи информацияв нижней частианалогичнакак в пункте«Расчет квартплаты».
BAR-пункт«Слияние квартплатыс льготами»– при его выборепроисходитрасчет суммык оплате т.е.«начисленияпо квартплате»минус «начисленияпо льготе».После этоговыводится окнос полями: таб.№,фамилия, итоговаясумма начислений,итоговая сумманачисленийпо льготе исумма к оплате.В нижней частиэкрана показываетсяадрес плательщика,количествопроживающихи количествольготников.
PAD-пункт«Помощь»
BAR-пункт«Помощь» -выводитокно с описаниемназначенийPAD- и BAR-пунктов.
BAR-пункт«Справка» –выводит окнос кратким описаниемпредназначенияпрограммы.
PAD-пункт«Выход» –позволяетвыйти из программы.
В приложениииспользуютсядва вида оконэто:
Окна,предназначеныдля обработкиданных.
Окна,предназначеныдля выборадействия илиотказа, либовыводят дополнительнуюпоясняющуюинформацию.Такие окна ещеназывают диалоговыеокна.
Приначальномзапуске приложения,когда базаданных пуста,любой выборпункта меню,для работыкоторого необходимыданные о жильцах,вызовет диалоговоеокно с предложениемначать работус дополнения.Это окно содержитпоясняющийтекст и двекнопки и .
Окно«Работа с картотекой»(INS)
Привыборе пунктаменю «КАДРЫ»-«Работас картотекой»открываетсяокно размеромво весь экран,в котором размещаетсявся основнаяинформацияо жильце. Окновизуальноделится повертикали надве части, гдев первой части(около 2\3 окна)располагаетсясведения ожильце, а воставшейсячасти, котораявыделена цветом,располагаютсякнопки длявыбора определенныхдействий. Рисунококна показанна рисунке2 приложения2. Рассмотримэти частипоподробней.
Впервых строкахрасположеналичная информация:фамилия, таб.№,адрес, телефон,площадь квартиры,которые недоступныдля редактирования,дата рождения,а также автоматическивычисляемаяинформацияо количестволет.
Количествопроживающихи количествольготниковвычисляютсяв зависимостиот записей вБД и в ней несохраняются,напротив этихполей находитсяполе с количествомпроживающих,которое сохраняетсяв БД и служитоснованиемдля расчетаквартплаты.
Далее идетнадпись «СОСТАВСЕМЬИ», котораянакрыта невидимойкнопкой, привыборе которой выпадает POPUP-менюс фамилиямипроживающихв данной квартирес указаниемкто за неё платити кто являетсяльготниками.При выбореэлемента меню,окно обновляетсяинформациейоб этом жильце.
Далее идетстрока с информациейо льготе: код,наименованиельготы, а такжес какого и покакой периодона действует.Если периодне указан, топредполагается,что льгота неимеет ограничения.
Далее идетинформация,расположеннаяв табличнойформе, как показанона рисунке,где:
УслугаТарифРасчет Льготы []
7
[x]Квартплата1.1791.26 -15.21 6[] Горячаявода 10.00 0.00 0.00
1 2 3 4 5
Кнопкивыбора начисленийуслуг ( [ ]-неначисляется,[x]-начисляется)
Поясняющийтекст к кнопки(для какой услуги,которую нужновыбирать)
Ставкиза услуги, этинадписи накрытыневидимымикнопками, выборкоторых открываетокно и меню,где можно изменитьставки дляжильцов квартиры(дома). Описаниятарифов отображаетсяв окне в зависимостиот выбора тарифа:так если расчетуслуги производитсяв зависимостиот количествапроживающихв квартире, тоотображаютсятолько тарифына одного человека,если рассчитываетсяот занимаемойжилплощади,то на 1 квадратныйметр. (см. рис.3 прилож. №2, атакже см. описаниепунктов меню«Сервис»-«Тарифы»).
Показываютсясуммы начисленийпо услугам
Показываютсясуммы начислений по услугам сучетом льготы.
Заголовкистолбцов.
В столбце«Льготы»предоставленаобщая сумманачисленийпо льготам дляданной квартирыи чтобы получитьинформациюо начисленияхпо льготе жильца,информацияпо которомупредставленав окне, предназначенакнопка «[]»,которая доступнатолько в томслучае еслижилец имеетльготу и приего выборепоявляетсямини окно, гдепоказаны егоначисленияпо льготе.
На следующейстроке представленыитоговые суммыпо начислению,льготам и коплате.
Далее датаоплаты, суммауплаты и остаток или задолженность.
И на последнейстроке расположеныдве кнопки «Польготам» и «Пооплате», которыедоступны в томслучае еслиданный жилецимеет льготулибо имеетордер, либо ито и другое.
«По льготе»– при ее выборепоявляетсяокно, котороепоказано нарис. 5 прилож.2, в которомуказан код,ставки и описаниельготы дляданного жильца.Вся информацияможет корректироваться,важно толькопомнить, чтовся измененнаяинформацияповлияет навсех жильцов,имеющих этоткод.
«По оплате»– при ее выборепоявляетсяаналогичноеокно, описанноевыше, котороепоказано нарис. 6 прилож.2, в которомсодержитсяинформацияо ставках стоимостиуслуг для данногожильца. Еслирасчет ведетсяпо нормативнымставкам, то всеполя имеютнулевое значение,а также еслинужно данномужильцу установитьнормативныеставки, то нужнообнулитьсоответствующееполе. Послевыхода из полейредактированияпоявитсяпредупреждение:
« Установитьвсем жильцамдома Y/N»,
которое будетждать нажатиеклавиш. Еслинажать клавишу«Y» то ставки,которые отображалисьв окне будутустановленывсем жильцам,проживающихв данном доме,при нажатиилюбой другойклавиши ставкибудут установленытолько жильцамданной квартиры.
На этом информацияв первой частиокна заканчивается,и перейдем ковторой части.
Во второй частирасположеныкнопки, привыборе которыхвыполняетсяопределенныедействия пообработкеданных (см. рис2 приложения.2 стр. 2). Разберемих по порядкурасположения.
Кнопка «Изменить»– при ее выбореоткрываетсяокно, котороепоказано нарис 20 приложения2 стр. 20, где можноизменить данныео жильце. Еслиизменяетсяадрес жильца,то автоматическипересчитываетсяколичествопроживающихпо старому иновому адресах.Чтобы сохранитьизмененнуюинформациюнеобходимовыйти из окнапо кнопке«Подтверждаю»,если выйти покнопке «Отмена»,внесенныеизменения несохраняются.
Кнопка «Добавить»– открываетсяаналогичноеокно, описанноевыше, котороепоказано нарис 19 приложения2 стр. 19,тольковсе поля имеютпустые значения.Также некоторыеполя, при редактированиипроверяютсяна корректностьвносимых данных.Подробнее этобудет описанопри рассмотренииэтого окна.Выход такжедолжен происходитьпо кнопке «Сохранить»иначе жилеци его данныене будут внесеныв БД.
Кнопка «Удалить»- помечает наудаление жильца,находящегосяв окне и информацияв окне обновляется.
Кнопка «Печать…» - формируетквитанцию оначисленияхи оплате, и открываетокно, котороепоказано нарис 7 приложения2 стр. 7. Послеего закрытияпоявится окнос просьбойвыбрать решениераспечаткиданного документа(рис 8 приложения2 стр. 8).
Кнопка «Вводоплаты» - открываетокно, котороепоказано нарис 4 приложения2 стр. 4, гдевозможно вестисумму оплатыдля квартиросъемщика,который платитза квартиру.
Следующиекнопки позволяютфильтроватьданные дляпросмотра:
Кнопка «Плательщики»– для просмотрабудут доступныжильцы которыеплатят за квартиру;
Кнопка «Льготники»– для просмотрабудут доступныжильцы, которыеимеют льготу,независимоот периода еедействия;
Кнопка «Всежильцы» – дляпросмотра будутдоступны всежильцы, кромепомеченныхна удаление.
При этом подэтими кнопкамирасположенаподсказка,какой фильтрвыбран.
Следующаягруппа кнопокпредназначенадля перемещенияв БД:
Кнопка «Вверх»- позволяетперейти на однузапись вверх;
Кнопка «Вниз»- позволяетперейти на однузапись вниз;
Кнопка «Начало»- позволяетперейти в началоБД;
Кнопка «Вверх»- позволяетперейти в конецБД.
Приэтом если достигнутоначало (конец)БД, то соответствующиекнопки становятсянедоступными,а в правом углуокна появляетсяпредупреждение,что достигнутконец (начало)БД.
Кнопка«Выйти» – позволяетвыйти и закрытьокно.
Кнопка«Расчет» –позволяетрассчитатьквартплатудля текущегожильца, с учетомсделанныхизменений, атакже расчетпроисходит,если в окненаходитсяплательщик,иначе кнопкапросто игнорируется.
При выборепункта меню«КАДРЫ»-«Квартиросъемщики»открываетсяBROWSE-окно сполями: табельныйномер, фамилияи два вычисляемыхполя (см. рис9 приложения2 стр.9), которыепоказываютплательщикаи льготников.При этом отображаютсятолько те жильцыкто платит заквартиру. Насвободной частиэкрана с правойстороны выводитсяинформацияпо жильцу, накотором находитсякурсор, приэтом она автоматическиобновляется,если при перемещениикурсор находитсяв поле, котороеуказывает,является лижилец плательщиком.При нажатиив любом поле,кроме поля созначком (),появляетсяFox-меню, гдеможно выбратьдальнейшиедействия (см.рис 10 приложения2 стр.10):
«Постояннаячасть» – открываетокно «Работас картотекой»,которое былоописано выше
«Начисления»- обновляютинформациюна экране вправой частиотносительнотого квартиросъемщика,на которомнаходитсякурсор.
«Жильцы» – привыборе этогопункта в BROWSE-окнеотображаютсятолько жильцыквартиры тогоквартиросъемщика,на которомнаходилсякурсор.
«Плательщики»– возвращаетокно с отображениемтолько техжильцов, которыеплатят за квартиру.
«Поиск» – привыборе этогопункта активируетсяPOPUP-меню спросьбой выборакритерия поиска(см. рис 13 приложения2 стр. 13), это можетбыть по фамилии,табельномуномеру или поадресу. Послевыбора соответствующегопункта, кромепункта «Отмена»,предъявляетсяокно для вводаключа. При этомесли это пофамилии, товозможен поиски по неполномуключу, напримерпо ключу «ПЕТР»будут удовлетворятьпоиску фамилии:«ПЕТРОВ»,«ПЕТРОВСКИЙ»,«ПЕТРИК» ит.д., если по адресуто предъявляютсятри поля длязаполненияулицы, дома иквартиры. Здесьтакже возможеннеполный ключ,то есть обязательнымзаполненнымполем, должнобыть, поле «улица»которое можноредактироватьвручную иливыбрать извыпадающегосписка всехулиц, когдакурсор попадаетв это поле, аостальные полямогут бытьпустыми. В этомслучае указательзаписи в БДустановитсяна первогожильца в БДпроживающегопо этой улице.
Эта системапоиска вызываетсяво всех окнах,где содержитсяинформацияо жильцах.
Остальныепункты былирассмотренывыше (окно «Работас картотекой»).
Окно нормативов(M_ZAR)
При выборепункта меню«СЕРВИС»-«Нормыоплаты услуг»– открываетсяокно, где нужновести ставкистоимостикаждой услугии фамилию того,кто занимаетсярасчетом и этафамилия будетподставлятьсяв отчеты и квитанцию.Ставки, веденныев этом окнеявляются базовымипри расчетеквартплатыдля всех жильцов,кроме тех, длякого ставкиопределеныотдельно (см.рис 11 приложения2 стр. 11).
При выборепункта меню«СЕРВИС»-«Дополнениельгот» – открываетсяокно, в которомможно добавлятьили изменятьинформациюпо льготам.Первое полев которое попадаеткурсор послеоткрытия окна- это код льготы,если вестицифру кода,которая ужеописана раннее,то информацияв окне автоматическиобновится, тоесть поля будутзаполнены взависимостиот веденногокода и возможноизменить информациюпо этому коду.Для того чтобысохранитьведенные измененияили добавитьльготу нужнонажать кнопку«Сохранить»(см. рис 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 предусмотренаширокая возможностьиспользованияпроцедур, которыемогу быть каквнешними (ввиде отдельныхпрограммныхфайлов), так ивнутренними (внутри программы).
Эти средстваудобно использоватьдля реализациинекоторыходинаковыхпроцессовобработкиданных, а такжевся программаможет состоятьиз обращенийк процедурами функциям.
Кроме того,модульноепрограммирование позволяетразработчикугораздо лучше ориентироватьсяв своей системе,а также сделатьболее эффективнымпроцесс еенаписания иотладки.
Разберем описаниепроцедуры,функции ипроцедурногофайла.
Подпрограмманачинаетсяс ключевогослова
PROCEDURE
И выполняетсяпока не будетвыполнено одноиз следующихусловий:
Ещераз встретятслово PROCEDURE.
Будетобноруженокоманда RETURN– возращениев предыдущуюпрограмму.
Будетвыдана командаCANCEL –прерываниеработы программы.
Будетвыдана командаQUIT- выходиз СУБД.
Встретитсяновая командаDO для запускадругой программы.
Будетдостигнутконец файла.
FoxProаналогичноподпрограмметрактуетсяпонятие пользовательскойфункции, котораяначинаетсяс ключевогослова
FUNCTION
и в отличииот процедурыможет вернутьнеобходимыезначения вызываемуюпрограмму.
Имеются4 способа вызватьфункцию:
Присвоитьвозвращаемоезначение переменной.Например, следующаястрока кодазапоминаеттекущую системнуюдату в переменойdToday :
dToday=DATE()
Включитьвызов функцию в команду.Например, следующаякоманда устанавливаетпо умолчаниюкаталог, имякоторого возвращаетфункция GETDIR():
SET DEFAULT TO GETDIR()
Напечататьвозвращаемоезначение вактивное окно:
?TIME()
Вызватьфункцию беззапоминаниягде либо возвращаемогозначения:
= 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)здесь вначалепроверяетсяпомечена лизапись на удалениеи если помеченато пометкаснимается ипроцедуразаканчивается.Это нужно длятого, что в окнах«База жильцов»,«Картотекальготников»также можноудалять записикомбинациейклавиш «Печать…» – формируетквитанцию, сданными о всехпроизведенныхначислениях,суммах к оплате,по льготам, дату когдаоплачено иостаток(задолженность).выборэтой кнопкизапускаетпроцедуру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 , содержащаясумму оплатыжильцами иесли она непуста, то появитсядополнительноеокно с пунктами-кнопками«Дописать»,«Переписать». Выход с сохранениемосуществляетсявыбором кнопки д «Плательщики» «Льготники» «Всежильцы» «Вверх»,«Вниз»– даннаягруппа кнопокпредназначенадля перемещенияпо БД жильцов.При этом подостиженииконца(начала)БД соответствующиекнопки блокируются..Обработка этихкнопок осуществляетсяв процедуре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-меню «Поиск». Для выполненияэтой функциииспользуется: меню,с пунктамиопределяющимпо каким значениямбудет производитьсяпоиск (по фамилии,по табельномуномеру, по адресуи отмена поиска),которое определенов файле MENI.PRG(см. прилож.1.1 стр. 4). Окнодля заданиякритерия поиска,с помощью команды@…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 – котороепоказано нарисунке: К ПоискПо фамилии:Васин НЕУДАЧНЫЙ Если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,используя вприложениикак можно большекоманд и функцийданной СУБД.Поэтому работаприложенияне предусматриваетсохраненияи просмотрараннее сделанныхрасчетов иработа осуществляетсятолько с текущиммесяцем. Хотяпринцип работыприложенияи язык программированияне исключаюти коммерческоераспространение.Достаточнолишь добавитьмодули сохраненияданных припереходе наследующий месяци просмотраиз архивов этихданных. ПоповА.А «Созданиеприложенийдля FoxPro 2.5/2.6 в DOSи WINDOWS.” – М.: Издательство“ДЕСС”, 1999 г. –672 стр. ГоревА., Ахаян Р., МакашариповС. «Эффективнаяработа с СУБД»- СПб.: Питер, 1997.–704 стр.: ил. ГоревА. «Разработкаприложенийв Microsoft Visual FoxPro 3.0»– М: Журнал «ThePrinter FoxPro Letter» ТОО «Эдэль»,1996 – 392 с.:ил. Файлыпомощи приработе с СУБДFoxPro For DOS 2.6. – Microsoft (FoxSoftware). Процедурныйфайл FUNC.PRG *********************************************************************************** ** Функция- Постояннаячасть (Работас картотекой) ** *********************************************************************************** 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+ DEACTIVATE WINDOWINS ENDIF SET ORDER TO adrr ON KEY LABEL F1 DOHELP WITH 6 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 @ 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 @ 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 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 RELEASE WINDOWPROSMOTR 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 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 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 FUNCTION FILTR && Выбор фильтра(Льготники,Плат-щики,Всежильцы) DOCASE CASE FILTR=1 _FILTR=1 CASE FILTR=2 _FILTR=2 CASE FILTR=3 _FILTR=3 ENDCASE SHOW GETS 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 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 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 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 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 do case CASE ras_on=1 m.k_ch=.f. CASE ras_on=2 m.k_ch=.t. endcase 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 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 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 ****************************************************************************************** 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 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 *********************************************************************************** ** Функциивыбора индикаторов(GET[]) ** *********************************************************************************** REPLACE KW_L WITH kw FUNCTION GW REPLACE G_W_L WITHgw REPLACE X_W_L WITHxw REPLACE K_YS_L WITHks REPLACE OTOP_L WITHot DOCASE CASEtl=.T. DOTL1 WITH OR_R,LGOT,RECNO(),ORDER() CASEtl=.F. REPLACETEL_L WITH tl ENDCASE DOCASE CASErd=.T. DORD1 WITH OR_R,LGOT,RECNO(),ORDER() CASErd=.F. REPLACERAD_L WITH rd ENDCASE REPLACEEL_C_L WITH elc *********************************************************************************** ** Выборначислениятелефона ирадио ** *********************************************************************************** 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 ENDIF ENDSCAN GOR REPLACETEL_L WITH tl ENDCASE ENDIF 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 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 ** *********************************************************************************** do case case c=1 DEACTIVATE WINDOWm_zar SAVE TO m_zar ALLLIKE _* case c=2 clear read RELEASE windowsm_zar endcase *********************************************************************************** ** Процедурапомощи по F1 ** *********************************************************************************** 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 ************************************************************************************* Процедуравыхода ** *********************************************************************************** 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+ RELEASE WINDOW quit 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 *********************************************************************************** ** ПроцедураУпаковки ** *********************************************************************************** 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 *********************************************************************************** ** Переиндексация ** *********************************************************************************** CLOSE DATA !DEL *.CDX DO OPEN RETURN *********************************************************************************** ** Процедурапоиска ** *********************************************************************************** _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 *********************************************************************************** ** Формированиеквитанции ** *********************************************************************************** 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, DEACTIVATE WINDOWvib 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 *********************************************************************************** ** Функцияпечати отчетов ** *********************************************************************************** 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 *********************************************************************************** ** Функциик дополнению(add_del.prg) ** *********************************************************************************** @ 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 'Новоезначение' HIDE POPUP YL =CAPSLOCK(.F.) IFRECCOUNT()>0.and.d_ins=1 ACTIVATEPOPUP YL ENDIF 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 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 *********************************************************************************** ** Выборначисленийна услуги ** *********************************************************************************** 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 *********************************************************************************** IF or1=2 m.tel=0 else m.tel_l=.t. tl=.t. endif 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) 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 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) deactivate windowvib RETURN .F. ENDIF ENDCASE deactivate windowvib 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 *********************************************************************************** ** Функциик дополнениюпо льготам(ADD_DEL.PRG) ** *********************************************************************************** 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) ** *********************************************************************************** DO CASE CASE ins1=1 DO INS WITH 1 INADD_DEL CASE ins1=2 CLEAR READ ENDCASE @ 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 ON KEY LABEL enter ON KEY LABELrightmouse 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 *********************************************************************************** ** Статус-строкав: Картотекельготников,База жильцов,Вводоплаты,счетчика** *********************************************************************************** @ 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 @ 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 ** Функциик ПроцедурамРАСЧЕТОВ ** *********************************************************************************** ** Процедурарасчета поквартплате ** *********************************************************************************** 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 *********************************************************************************** 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, 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 *********************************************************************************** ** Процедурарасчета польготам ** *********************************************************************************** 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, 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 *********************************************************************************** ** Расчет(квартплата- льготы = к оплате) ** *********************************************************************************** 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 ELSE GO n ENDIF enddo enddo enddo deactivate windowvib CASE rs_i=2 clear read deactivate windowvib ENDCASE 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 ** Функцияотображениясуммы начисленийпо квартплате ** ** впроцедурерасчета поквартплате(просмотр начислений) ** *********************************************************************************** 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 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 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 *********************************************************************************** ** Функцияперехватаошибок ** *********************************************************************************** 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 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 *********************************************************************************** ** Функциязаполненияи изменениятарифов («СЕРВИС»-«Тарифы») ** *********************************************************************************** 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 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 DEACTIVATEWINDOW M_ZAR1 DEACTIVATEMENU delete clear 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 С Стартующийфайл– 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 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 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 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 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 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 П - Файлоткрытия– OPEN.PRG IF!FILE('rabot.dbf') DOcreate ELSE DOopen1 *************************************************************************************ОткрытиеБаз Данных иустановлениесвязей ** *********************************************************************************** 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 *************************************************************************************Язык– SQLСозданиеБаз Данных ** *********************************************************************************** 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 П - Формированиеотчетов– 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 ************************************************************************************* Формированиесписков польготам ** *********************************************************************************** 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 ************************************************************************************* Формированиесписков с показаниямисчетчика ** *********************************************************************************** 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 ************************************************************************************* Формированиесписков пооплате электроэнергии ** *********************************************************************************** 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 ************************************************************************************* Формированиеостатковквартиросъёмщиков ** *********************************************************************************** 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 ************************************************************************************* Формированиеотчета по суммамвсех начислений ** *********************************************************************************** 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 П - Файлрасчетов– RAS.PRG ************************************************************************************* ПунктМеню – РАСЧЕТ– Расчет квартплаты ** ********************************************************************* 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 ************************************************************************************* ПунктМеню – РАСЧЕТ– Расчет польготам ** ********************************************************************* 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 ************************************************************************************* ПунктМеню – РАСЧЕТ– Слияние расчетов ** ********************************************************************* 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 DEACTIVATEWINDOW vib clear ONKEY LABEL F1 DO HELP WITH 6 П - «СЕРВИС»-«Дополнение»
«СЕРВИС»-«Дополнениельгот»
«СЕРВИС»-«Тарифы»
«СЕРВИС»-«Нормыоплаты услуг»
«СЕРВИС»-«Упаковкаданных»
Удалитьвсех» – будутпомечены всезаписи по этомуадресу.«СЕРВИС»-«Переиндексация»
Пунктменю – «КАДРЫ»
«КАДРЫ»-«Работас картотекой»
«КАДРЫ»-«Квартиросъемщики»
«КАДРЫ»-«Картотекальготников»
«КАДРЫ»-«Базажильцов»
«КАДРЫ»-«Вводданных счетчика»
«КАДРЫ»-«Вводоплаты»
Пунктменю «РАСЧЕТ»
«РАСЧЕТ»-«Расчетквартплаты»
«РАСЧЕТ»-«Расчетпо льготам»
«РАСЧЕТ»-«Слияниеквартплатыс льготами»
ФункцияПОИСКА
отороезатем удаляетсянажатием любойклавиши, и указательзаписей возвращаетсяна (GO _REC) староеместо. Потомпроисходитвозврат в командуиз которой былвызов. Если врезультатепоиска быланайдена нужнаязапись, то вкоманде BROWSE,курсор будетстоять на ней,если в командеREAD, то будетпереход на этузапись и обновлениеинформациии GET-объектовдля этой записи.Пунктменю «ОТЧЕТЫ»
«ОТЧЕТЫ»-«Спискипо начислению»
«ОТЧЕТ»-«Спискипо льготам»
«ОТЧЕТ»-«Оплатаэ\энергии»
«ОТЧЕТ»-«Сальдопо квартиросъемщикам»
«ОТЧЕТ»-«Сводпо квартплатеза месяц»
Пунктменю «ПЕЧАТЬ»
Пунктменю «ПОМОЩЬ»
«ПОМОЩЬ»-«Помощь»
«ПОМОЩЬ»-«Справка»
Созданиеконтексно-зависимойэкранной подсказки.
Пунктменю «Выход»
Заключение
Списокиспользуемойлитературы.
PROCEDUREpos_ch
READ CYCLE SHOW tb_l() OBJECT 42with M_ZAR,VEDOM COLOR SCHEME 7
RETURN
FUNCTION OB_NACH&&SAY – Объектыначисленийпо льготам
FUNCTION LG_NACH&&SAY – Объектыначисленийпо льготам
FUNCTION PROS_LG&&Просмотрначисленийпо льготам
READ
RETURN
FUNCTION tb_l && Функцияобновлениякнопок(GET) в ПроцедуреПостояннаячасть
RETURN
RETURN
RETURN
RETURN
RETURN
RETURN
FUNCTION tabl_rasop &&Таблица ставокпо оплате
RETURN
RETURN k
FUNCTION TARIFS&& Окно длявыбора ставокпо оплате
FUNCTION kv_chel
FUNCTION kv_chel1
FUNCTIONv_st1
FUNCTIONv_st2
RETURN
**ОтображениеSAYстоимостиуслуг **
FUNCTION kw1
RETURN ST
FUNCTION elc1
RETURN ST
FUNCTION KW
FUNCTION XW
FUNCTION KS
FUNCTION OT
FUNCTIONTL
FUNCTIONRD
FUNCTIONELC
FUNCTIONTL1
RETURN
RETURN
FUNCTIONRD1 && Выбор начислениярадио
RETURN k
FUNCTION cf
RETURN
PROCEDURE HELP
RETURN
PROCEDURE quit
READ CYCLE
RETURN
FUNCTION qt && Функциявыхода
RETURN
PROCEDURE SERV
RETURN
PROCEDURE P_INDEX
PROCEDURE poisk
FUNCTION PRINT1
READ
RETURN
FUNCTION print4 &&Печать квитанции
RETURN
RETURN
FUNCTION POS_CH2 &&SAY - Объекты
FUNCTION YLIZ1 &&Функция выходаиз поля m.yl(выборулицы)
FUNCTIONyliz_s && Меню длявыбора улицы
FUNCTIONYLIZ && Выбор улицы
FUNCTION LG_T && Выборкода льготы
RETURN
FUNCTION TL2 && Определениевыбора телефона
RETURN
FUNCTION O_R &&Недопущениеповтора плательщика
READ
RETURN
FUNCTION unic &&Недопущениеповтора табеля
READ
RETURN
RETURN
FUNCTION LG_INS
FUNCTION ins2 && ВыборДополнения,при пустой БАЗЕ
RETURN
PROCEDURE NACH && Функцияотображенияначислений
FUNCTION NE
RETURN
FUNCTION pop_vib &&READ-меню
RETURN
FUNCTION INFO
RETURN
FUNCTION INFO3 &&Статус-строкав процедуре:Ввод оплаты
RETURN
FUNCTION ras_1
PROCEDURE vib_8 && выборсохранениеданных расчета
READ CYCLE OBJECT 1
FUNCTION ras_lg
READ CYCLE OBJECT 1
PROCEDURE ras_3
RETURN
RETURN
FUNCTION BROW_OPL &&Просмотр начислений
RETURN
FUNCTION INFO1
RETURN
FUNCTION INFO2&& Функцияотображениясуммы начисленийпо квартплате
RETURN
RETURN
FUNCTION EROR
RETURN
FUNCTIONRAS_ON_ONE && Расчетна одного жильцав окне (INS-Работас картотекой)
RETURN
FUNCTIONTARIFS_zar && Окнотарифов, привыборе пунктаменю «СЕРВИС»-«Тарифы»
RETURN
FUNCTIONINS_rec
FUNCTIONret_ecs
FUNCTIONDEL_REC
RETURN
FUNCTIONDEL_REC1
RETURN
DEFINE POPUP KADR FROM 1,0 SHADOW
DEFINE POPUP VIEV FROM 1,8 colorscheme 1 SHADOW
DEFINE POPUP serv FROM 1,26 SHADOW
DEFINE POPUP ras FROM 1,35 SHADOW
DEFINE POPUP hlp FROM 1,44 SHADOW
ACTIVATE MENU ZAR
CLOSEDATA
ENDIF
PROCEDURE open1
RETURN
PROCEDURE CREATE
RETURN
риложение№ 1.3RETURN
PROCEDURE SP_lg_kw &&Списки по льготам
RETURN
PROCEDURE SP_SCHET &&Списки с показаниемсчетчика
RETURN
PROCEDURE SP_SCHET_PL &&Оплата э/энергии
RETURN
PROCEDURE SP_OST && Сальдопо квартиросъемщикам
RETURN
PROCEDURE SVOD
RETURN
риложение№ 1.7PROCEDURE ras && выборрасчета поквартплате
RETURN
PROCEDURE RAS_L && выборрасчета льгот
RETURN
PROCEDURE ras_i && Выборрасчета к оплате
READ OBJECT 1
RETURN
риложение№ 1.6
КАК РАБОТАТЬ С ДИСКЕТОЙ
Для работы необходимо создать каталог на жестком
диске (например: 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)