Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прогр.в СЕС(КП).doc
Скачиваний:
9
Добавлен:
16.08.2019
Размер:
2.42 Mб
Скачать

3.3. Структурна схема програмного комплексу, опис основних функцій

Вхідні дані, на основі яких функціонує програмний комплекс, знаходяться в таблицях бази даних, файли: plat_kol.dbf, plat_dor.dbf, dov_org.dbf, ruh_oz.dbf.

Рис.3.1 – Структура програмного комплексу “Платежі”

При реалізація програмного коду використано наступні функції:

Очистка екранної області (clear);

Закрити усі робочі вікна (close аО);

Встановлення часу (set clock off),

Встановлення типу дати (set date british, set century on);

Дня формування робочого вікна з назвою “Платіжне доручення” створюється горизонтальне меню, рис.3.2 за допомогою наступних команд:

DEFINE PAD dor OF _msysmenu PROMPT "Доручення"

DEFINE PAD bas OF _msysmenu PROMPT "Довідники"

DEFINE PAD servis OF _msysmenu PROMPT "Сервіс"

DEFINE PAD kinec OF _msysmenu PROMPT "Вихід"

Рис.3.2 – Створення горизонтальне меню

Оголошення пунктів меню "Довідники" відбувається за допомогою наступних команд формування

- вертикального меню:

ON PAD bas OF _msysmenu ACTIVATE POPUP dovidn

- горизонтальне меню:

DEFINE BAR 1 OF dovidn PROMPT "Організації" SKIP

FOR kod_menu

DEFINE BAR 2 OF dovidn PROMPT "Реквізити" SKIP

FOR kod_menu

DEFINE BAR 3 OF dovidn PROMPT "Банки" SKIP

FOR kod_menu

DEFINE BAR 3 OF dovidn PROMPT "Цифри" SKIP

FOR kod_menu

Реакція на вибір окремого рядка меню здійснюється наступним чином:

ON SELECTION BAR 1 OF dovidn DO org

ON SELECTION BAR 2 OF dovidn DO rekv

ON SELECTION BAR 3 OF dovidn DO bank

Аналогічно відбувається означення інших пунктів меню, а також їх опис та реакція на вибір окремого рядка.

Останнім кроком є опис процедури, яка забезпечує вихід з меню (PRXEDUHE nierify висновок).

3.4. Текст програми з поясненнями щодо призначення основних блоків (модулів)

*---------------------------------- ORDER.PRG ----------------------------

CLOSE ALL

CLEAR WIND

kod_menu=.t.

PUBLIC mis(12)

mis(1) = 'сiчня'

mis(2) = 'лютого'

mis(3) = 'беpезня'

mis(4) = 'квiтня'

mis(5) = 'тpавня'

mis(6) = 'чеpвня'

mis(7) = 'липня'

mis(8) = 'сеpпня'

mis(9) = 'веpесня'

mis(10)= 'жовтня'

mis(11)= 'листопада'

mis(12)= 'гpудня'

m.anystrng = space(0)

fname = "plat.plat"

DEFINE POPUP org FROM 6,36 PROMPT FIELD dovorg.name_org;

MESSAGE 'Виберіть організацію';

SCROLL MARGIN SHADOW

ON SELECTION POPUP org DEACTIVATE POPUP

ON KEY LABEL F1 DO hlp_pl

ON KEY LABEL CTRL+L DO locstrng WITH fname && пошук

ON KEY LABEL CTRL+D DO cont && продовжити пошук

ON KEY LABEL F3 DO scat_fld

ON KEY LABEL F4 DO gat_fld

ON KEY LABEL F5 DO rekv_org

ON KEY LABEL F8 DO pck

ON KEY LABEL F9 DO view_pl

ON KEY LABEL F10 DO prnt_pl

ON KEY LABEL CTRL+N DO ctrln

SELECT 0

USE &BPR\gryvna

SELECT 0

USE &BPR\dovorg

INDEX ON name_org TO &BPR\name_org

SELECT 0

USE &BPR\rekviz

SELECT 0

USE &BPR\plat

GO BOTTOM

DEFINE WINDOW vikno FROM 10,0 TO 38,100;

TITLE "Платіжні доручення F1-допомога ^W-вихід";

FLOAT ZOOM CLOSE GROW SYSTEM

MOVE WINDOW vikno CENTER

BROWSE WINDOW vikno;

FIELDS nom :h='Hомеp',;

date :h='Дата',;

plat :h='Одеpжувач':r:35,;

zkpo :h='ЗКПО':r,;

credit :h='Кpедит':r,;

bank :h='Банк':r:35,;

mfo :h='МФО':r,;

sum :h='Сума деб.':p='@KJ999999999.99' :v=sumvalid(),;

sum1 :h='Сума пpоп.':35,;

doc :h='Документ';

RELEASE mis

CLOSE ALL

ERASE &BPR\name_org.idx

CLEAR WIND

ON KEY

kod_menu = .f.

KEYBOARD('{F10}')

*------------------------------------ mov ---------------------------------------

FUNCTION mov

SHOW WINDOW 'Платіжні' REFRESH SAME

PROC scat_fld

PUBLIC zm_pole,tip_pole

tip_pole=TYPE(VARREAD())

zm_pole=EVALUATE(VARREAD())

PROC gat_fld

IF tip_pole=TYPE(VARREAD())

REPLACE (VARREAD()) WITH zm_pole

=mov()

ELSE

WAIT "Помилка! Різні поля!!! " WINDOW NOWAIT

ENDIF

PROC hlp_pl

PUSH KEY CLEAR

DO hlp_pl.spr

POP KEY

PROC ctrln

APPEND BLANK

REPLACE plat.date WITH date()

PROC view_pl

PUSH KEY CLEAR

IF empty(sum) OR empty(nom) OR empty(date) OR;

empty(plat) OR empty(zkpo) OR empty(credit)OR;

empty(bank) OR empty(mfo) OR empty(doc)

WAIT 'He введено реквізити' WINDOW

POP KEY

RETURN

ENDIF

IF FILE('ORDER.FRX') AND FILE('ORDER.FRT')

REPORT FORMAT order NEXT 1 PREVIEW

ELSE

WAIT 'Файл "Order.frx" не знайдено' WINDOW

ENDIF

POP KEY

PROC prnt_pl

PUSH KEY CLEAR

IF empty(sum) OR empty(nom) OR empty(date) OR;

empty(plat) OR empty(zkpo) OR empty(credit)OR;

empty(bank) OR empty(mfo) OR empty(doc)

WAIT 'He введено реквізити' WINDOW

POP KEY

RETURN

ENDIF

IF PRINTSTATUS()

IF FILE('ORDER.FRX') AND FILE('ORDER.FRT')

REPORT FORMAT order NEXT 1 NOEJECT ;

ENVIRONMENT PDSETUP NOCONSOLE TO PRINTER

ELSE

WAIT 'Файл "Order.frx" не знайдено' WINDOW

ENDIF

ELSE

WAIT"Пpiнтеp не готовий !" WINDOW NOWAIT

ENDIF

POP KEY

PROC pck

PUSH KEY CLEAR

yn=2

zap="Видалити записи?"

DO yesno.spr

IF yn=1

PACK

ENDIF

POP KEY

PROC rekv_org

PUSH KEY CLEAR

ACTIVATE POPUP org

IF LASTKEY()#27

REPLACE plat.plat WITH ALLTRIM(dovorg.name_org)

REPLACE plat.zkpo WITH dovorg.zkpo

REPLACE plat.credit WITH ALLTRIM(STR(dovorg.nrs,15))

REPLACE plat.bank WITH ALLTRIM(dovorg.bank)

REPLACE plat.mfo WITH ALLTRIM(STR(dovorg.mfo,6))

ENDIF

=mov()

POP KEY

PROC sumvalid

IF EMPTY(plat.sum)

REPLACE sum1 WITH ''

RETURN

ENDIF

IF (plat.sum<0)

REPLACE sum WITH 0

REPLACE sum1 WITH ''

WAIT 'Не коректне число!' WINDOW;

TIMEOUT 3

RETURN

ENDIF

summ=INT(plat.sum)

IF summ#0

ost=MOD(plat.sum,summ)*100

ELSE

ost=plat.sum*100

ENDIF

*----------------------- формування числа прописом --------------------

IF ll#0

GO ll IN gryvna

DO CASE

CASE INLIST(i,9,6,3)

q=q+ALLTRIM(gryvna.r3)

CASE INLIST(i,8,5,2) AND (ll#1 OR (ll=1 AND gryvna(i-1)=0))

q=q+ALLTRIM(gryvna.r2)

CASE INLIST(i,8,5,2) AND ll=1 AND gryvna(i-1)#0

GO gryvna(i-1) IN gryvna

q=q+ALLTRIM(gryvna.r0)

i=i-1

CASE INLIST(i,7,1)

q=q+ALLTRIM(gryvna.r1)

CASE i=4 AND ll#1 AND ll#2

q=q+ALLTRIM(gryvna.r1)

CASE i=4 AND ll=1

q=q+'Одна'

CASE i=4 AND ll=2

q=q+'Дві'

ENDCASE

ENDIF

IF RIGHT(q,1)#' '

q=q+' '

ENDIF

*---------------------формування одиниць обчислення в сумі----------

DO CASE

CASE i=7 && мільйони

DO CASE

CASE gryvna(7)=1 AND (lx>7 AND gryvna(8)#1 OR lx=7)

q=q+'мільйон'

CASE BETWEE(gryvna(7),2,4) AND (lx>7 AND gryvna(8)#1 OR lx=7)

q=q+'мільйона'

OTHERWISE

q=q+'мільйонів'

ENDCASE

CASE i=4 && тисячі

DO CASE

CASE gryvna(4)+IIF (lx>4, gryvna(5),0)+ IIF(lx>5, gryvna(6),0)=0

CASE gryvna(4)=1 AND (lx>4 AND gryvna(5)#1 OR lx=4)

q=q+'тисяча'

CASE BETWEE(gryvna(4),2,4) AND (lx>4 AND gryvna(5)#1 OR lx=4)

q=q+'тисячі'

OTHERWISE

q=q+' '+'тисяч'

ENDCASE

CASE i=1 && гривні

DO CASE

CASE gryvna(1)=1 AND (lx>1 AND gryvna(2)#1 OR lx=1)

q=q+'грн.'

CASE BETWEEN(gryvna(1),2,4)

q=q+'грн.'

OTHERWISE

q=q+'грн.'

ENDCASE

ENDCASE

IF RIGHT(q,1)#' '

q=q+' '

ENDIF

ENDFOR

lit=SUBSTR(q,1,1)

q=STUFF(q,1,1,PROPER(lit))

ost=ALLTRIM(STR(ost,2))

osti=len(ost)

IF osti=1

ost='0'+ost

ENDIF

q=q+ost+ ' коп.'

REPLACE plat.sum1 WITH q

=mov()