Реферат

Реферат Реализация алгоритма обработки данных

Работа добавлена на сайт bukvasha.net: 2015-10-28

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 20.2.2025



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


Реализация алгоритма обработки данных и ведения реляционной базы данных.


Анализ обработки БД для её получения :

а) По какому файлу проводится главный цикл обработки ?

 Главный цикл обработки в подпрограмме vedom - (п.п., которая осуществляет выявление всех случаев превышения нормативных интервалов между профилактиками, вывод их в выводной файл “DD”, а также осуществляет выдачу ведомости на принтер) проводится по файлу bb.dbf .
б) Как он должен быть упорядочен ?

 Он должен быть упорядочен в хронологическом порядке.

Пример:

 index on bb->invnom + dtoc(bb->dateprof) to bb0001

Справка:

 Синтаксис:

 INDEX ON <ключевое выражение> TO <имя индексного файла>

INDEX - команда обработки базы данных, которая создает файлы, содержащие индексы базы данных на основе значения аргумента <ключевое выражение>. При использовании индексного файла записи базы данных обрабатываются в последовательности, заданной ключевым выражением, однако физический порядок следования записей базы данных остается неизменным. INDEX обеспечивает последовательность записей, упорядоченную по значениям ключевого выражения. Для ключей типа CHARACTER - в соответствии со значением ASCII кода каждого символа внутри строки, для ключей типа NUMERIC - в соответствии с числовым порядком, для ключей типа дата - в хронологическом порядке и для логических - считается, что истина (.Т.) - более высокого порядка.

Memo-поля не могут быть индексированы.
в) Применяются ли фильтры ?

 Хотя команда SET FILTER делает так, что файл в рабочей области выглядит состоящим из подмножества записей, на самом деле последовательно обрабатываются все его записи.

 Фильтры не применяются, т.к время работы с фильтрованной и нефильтрованной рабочей областью оказывается одним и тем же.
г) Имеются ли связи ”хозяин-слуга” и по каким полям ?

 В подпрограмме vedom имеются связи.

Пример:

 а) set relat to bb->invnom into cc Связь по полю “invnom”.

 б) set relat to cc->idst into aa additive Связь по полю “idst”.

 в) set relat to dd->invnom into cc additive Связь по полю “invnom”.



Принципы подготовки данных для тестового примера и заполнения исходных данных.
Эти данные были выбраны произвольно - “из головы”:

 1) Идентификатор типа станка

 2) Инвентарный номер станка

 3) Вид профилактики

 4) Наименование типа станка

 

Идентификатор записи в файле bb.dbf заполнялся по убыванию (от 1 до 18), где 1- первая запись, а 18- последняя.

Норма кол-ва дней между профилактиками была выбрана произвольна.

Дата профилактики выбиралась так, чтобы норма кол-ва дней между профилактиками была превышена для всех видов профилактик.
б) Пункты меню, что в них делается ?
 Меню № 1:

 1) Сразу приступить к работе с Базой Данных

 2) Заново построить все индексы Базы Данных

 3) Провести компрессию Базы Данных

 4) Выход из Базы Данных
 При выборе п.1, если индексы уже имеются мы попадаем в меню № 2.

 При выборе п.2 заново происходит построение всех индексов Б.Д .

 При выборе п.3 производится компрессия (уплотнение) Б.Д .

 При выборе п.4 появляется горизонтальное подменю:
 а) Сохранить и продолжить б) Завершить работу
 П.а) Сохранить все внесенные изменения и продолжить

 П.б) Завершить работу с базой данных с сохранением всех изменений
 Меню № 2:

1) Ведение файла "Нормативы профилактики оборудования"

2) Ведение файла "Профилактика"

3) Получение ведомости нарушение норм техобслуживания

4) Выход из Базы Данных

При выборе п.1 мы попадаем в редактор файла aa.dbf - (“Нормативы профилактики оборудования”), где мы можем его просматривать и редактировать.
 При выборе п.2 мы попадаем в редактор файла bb.dbf - (“Профилактика”), где мы можем его просматривать и редактировать.
 При выборе п.3 происходит выявление всех случаев превышения нормативных интервалов между профилактиками, вывод их в выводной файл “DD”, а также выдача ведомости на принтер.
 При выборе п.4 выполняются действия аналогичные п.4 в меню № 1.



Ведение БД .

 Какими табл. представлено ведение БД, по какой табл. указывается текущая рабочая область, её слуги, колонки таблицы, набор клавиш на которые предусмотрена реакция системы.
 Клавиши на которые реагирует система:

­/ ¯ / ® / ¬ /; PgUp / PgDn; Home / End - Перемещение курсора

Enter - Выбор задачи в меню и редактирование полей в редакторе

Esc - Возврат на шаг назад. Отмена редактирования (без сохранения изменненого значения)

F8 - Удалить строку

F3 - Вставить строку

F10 - Выход из задачи с сохранением всей информации или выход без сохранения информации
Структура программы :
а) Содержимое rmk-файла “kursv.rmk”:
objs = main2,aa,util,bb

.prg.obj:

 CLIPPER $< /a/m/n

.obj.exe:

 RTLINK OUTPUT $* FI $(objs) /PLL:base52

main2.obj : main2.prg

aa.obj : aa.prg

util.obj : util.prg

bb.obj : bb.prg

kurs_ok.exe : main2.obj aa.obj util.obj bb.obj
б) Имена и содержание prg-файлов. По каждой функции: имя, назначение, параметры, тип данных и смысл, возвращенное значение, рабочие перемен-ные и их назначение.
 Программные файлы:

1) aa.prg

 В этой программе реализовано:

1. Создание TBrowse-объекта для просмотра-редактирования файла aa.dbf в окне.
2) bb.prg

 В этой программе реализовано:

1. Создание TBrowse-объекта для просмотра-редактирования файла bb.dbf в окне.
3) main2.prg

 В этой программе реализовано:

 1.Организация меню.

 2. Индексирование файлов.

 3. Уплотнение файла .

 4. Выявление всех случаев превышения нормативных интервалов между профилактиками, вывод их в выводной файл “DD”, а также выдача ведомости на принтер.

 5. Вывод на экран информации о “горячих” клавишах.
 4) util.prg

 Эта программа содержит набор стандартных утилит:

 1. Сохранение экрана, восстановление экрана.

 2. Перевод в верхний регистр как латиницы, так и кириллицы.

 3. Координаты, сообщение, цвет.

 4. Выход из задачи с сохранением всей информации - реакция на клавишу F10.

 5. Подача звукового сигнала для сигнализации успешного выполнения

 поставленной задачи:
 Описание основных подпрограмм:

1) п.п. постоения индексов:

func db_index(prm)

s_scr(24,0,25,79)

CLOSE ALL

SETCOLOR ("w/n")

@ 24,0 CLEAR TO 25,79

@ 24,6 SAY "Ждите идет индексирование! " COLOR "w+*/n"

use bb

index on bb->invnom + dtoc(bb->dateprof) to bb0001

use aa

index on aa->idst to aa0002

use cc

index on cc->invnom to cc0003

use dd

index on dd->(norma-fkdn) to dd0004

close all

r_scr()

return nil



2) п.п. открытия индексов:

func db_open

close all

use aa index aa0002

use bb index bb0001 new

use cc index cc0003 new

use dd index dd0004 new

return nil
3) п.п. уплотнения Б.Д. :

FUNCTION db_compress()

 s_scr(24,0,25,79)

 CLOSE ALL

 SETCOLOR("w/n")

 @ 24,0 CLEAR TO 25,79

 @ 24,6 SAY "Ждите идет уплотнение !" COLOR ("w+*/n")

 USE aa // уплотнение файла aa.dbf

 COPY TO work

 IF ERRORLEVEL() = 0

 USE

 DELETE FILE aa.dbf

 RENAME work.dbf TO aa.dbf

 ENDIF

 USE bb // уплотнение файла bb.dbf

 COPY TO work

 IF ERRORLEVEL() = 0

 USE

 DELETE FILE bb.dbf

 RENAME work.dbf TO bb.dbf

 ENDIF

 USE cc // уплотнение файла cc.dbf

 COPY TO work

 IF ERRORLEVEL() = 0

 USE

 DELETE FILE cc.dbf

 RENAME work.dbf TO cc.dbf

 ENDIF

 USE dd // уплотнение файла dd.dbf

 COPY TO work

 IF ERRORLEVEL() = 0

 USE

 DELETE FILE dd.dbf

 RENAME work.dbf TO dd.dbf

 ENDIF

 CLOSE ALL

 r_scr()

 RETURN NIL
4) п.п. выдачи информации о клавишах, на которые реагирует система ”Help”:

PROCEDURE hlp(callpnt,prm)

 LOCAL retcol,crow,ccol

 IF prm = NIL

 prm := .F.

 ENDIF

 crow = ROW()

 ccol = COL()

 retcol = SETCOLOR("w/n")

 @ 22,0 CLEAR TO 24,79

 IF callpnt = "GET"

 // исправленный HLP для GET 26.09.96

 @ 22,0 SAY "Enter/" + CHR(24) + '/' + CHR(25) + '/PgUp/PgDn' ;

 + " -Завершить редактирование с сохранением измененного значения"

 @ 22,0 SAY "Enter/"+ CHR(24) + '/' + CHR(25) + '/PgUp/PgDn' COLOR "r+/n"

 @ 23,1 SAY CHR(26) + ' / ' + CHR(27) + ' / ^' + CHR(26) ;

 + ' / ^' + CHR(27) + ' / Home / End - Перемещение курсора'

 @ 23,1 SAY CHR(26) + ' / ' + CHR(27) + ' / ^' + CHR(26) ;

 + ' / ^' + CHR(27) + ' / Home / End' COLOR "r+/n"

 @ 24,1 SAY 'Esc - Отменить редактирование ' ;

 + '( без сохранения измененного значения )'

 @ 24,1 SAY "Esc" COLOR "r+/n"

 ENDIF

IF callpnt="AAED" .OR. callpnt="BBED"

 SET COLOR TO ("w/n")

 @ 22,1 SAY chr(24) + " / " + chr(25) + " / " + CHR(26) + ' / ' ;

 + CHR(27) + ' / ^' + CHR(26) + " PgUp / PgDn " ;

 + ' / ^' + CHR(27) + '/ Home / End - Перемещение курсора'

 @ 24,0 SAY 'Enter - Редактирование '

 @ 23,23 TO 24,23 DOUBLE

 @ 23,25 SAY 'Esc - Возврат на шаг назад ' COLOR "w/n"

 @ 23,25 SAY 'Esc' COLOR "r+/n"

 @ 23,54 TO 24,54 DOUBLE

 @ 23,55 SAY 'F8 - Удалить строку '

 @ 24,55 SAY 'F3 - Вставить строку '

 SET COLOR TO ("r+/n")

 @ 22,1 SAY chr(24) + " / " + chr(25) + " / " + CHR(26) + ' / ' ;

 + CHR(27) + ' / ^' + CHR(26) + " PgUp / PgDn " ;

 + ' / ^' + CHR(27) + '/ Home / End '

 @ 24,0 SAY 'Enter'

 @ 23,55 SAY 'F8'

 @ 24,55 SAY 'F3'

ENDIF

IF callpnt="CCED" .OR. callpnt="DDED"

 SET COLOR TO ("w/n")

 @ 22,1 SAY chr(24) + " / " + chr(25) + " / " + CHR(26) + ' / ' ;

 + CHR(27) + ' / ^' + CHR(26) + " PgUp / PgDn " ;

 + ' / ^' + CHR(27) + '/ Home / End - Перемещение курсора'

 @ 24,0 SAY 'Enter - Редактирование '

 @ 23,23 TO 24,23 DOUBLE

 @ 23,25 SAY 'Esc - Возврат на шаг назад ' COLOR "w/n"

 @ 23,25 SAY 'Esc' COLOR "r+/n"

 @ 24,25 SAY '^Enter - Выбор значения ' COLOR "w/n"

 @ 24,25 SAY '^Enter' COLOR "r+/n"

 @ 23,54 TO 24,54 DOUBLE

 @ 23,55 SAY 'F8 - Удалить строку '

 @ 24,55 SAY 'F3 - Вставить строку '

 SET COLOR TO ("r+/n")

 @ 22,1 SAY chr(24) + " / " + chr(25) + " / " + CHR(26) + ' / ' ;

 + CHR(27) + ' / ^' + CHR(26) + " PgUp / PgDn " ;

 + ' / ^' + CHR(27) + '/ Home / End '

 @ 24,0 SAY 'Enter'

 @ 23,55 SAY 'F8'

 @ 24,55 SAY 'F3'

ENDIF

 SET COLOR TO (retcol)

 SETPOS(crow,ccol)

 RETURN
5) п.п. выявления всех случаев превышения нормативных интервалов между профилактиками, вывода их в выводной файл “DD”, а также выдачи ведомости на принтер:

 func vedom

local tinvnom,sitog,tdata,tidzap,tidst,idpop

set printer on

select dd

zap

lin:=space(17)+"Таблица нарушение норм техобслуживания:"

? lin

select bb

set relat to bb->invnom into cc

set relat to cc->idst into aa additive

go top

sitog:=0

do while .not. eof()

tinvnom:=bb->invnom

tdata:=bb->dateprof

tidzap:=bb->idzap

tidst:=cc->idst

skip

if(bb->invnom=tinvnom).and.(bb->dateprof-tdata>aa->norma)

 select dd

 append blank

 replace dd->invnom with tinvnom

 replace dd->fkdn with bb->dateprof-tdata

 replace dd->norma with aa->norma

 replace dd->idzappp with tidzap

 replace dd->idzapsp with bb->idzap

 sitog:=sitog+(dd->fkdn-dd->norma)

 select bb

endif

enddo

lin:="+-----------------------------------------------------------------------------+"

? lin

lin:="¦ Инв.¦ Наименование ¦ Дата ¦ Вид предвор. ¦ Дата ¦ вид след. ¦Просроч.¦"

? lin

lin:="¦номер¦ типа станка ¦ ¦ профилактики ¦ ¦ профилактики ¦ дней ¦"

? lin

lin:="¦-----+--------------+--------+--------------+--------+--------------+--------¦"

? lin

select dd

set relat to dd->invnom into cc additive

go top

do while .not. eof()

tinvnom:=dd->invnom

idpop:=dd->idzappp

lin:="¦ "+dd->invnom+" ¦ "

select bb

go top

do while .not. eof()

if(tinvnom=bb->invnom).and.(idpop=bb->idzap)

lin:=lin+aa->namest+" ¦"+dtoc(bb->dateprof)+"¦ "+bb->vidprof

endif

skip

enddo

select dd

idpop:=dd->idzapsp

select bb

go top

do while .not. eof()

if(tinvnom=bb->invnom).and.(idpop=bb->idzap)

lin:=lin+" ¦"+dtoc(bb->dateprof)+"¦ "+bb->vidprof+"¦ "

endif

skip

enddo

select dd

lin:=lin+str(dd->fkdn-dd->norma,4)+" ¦"

? lin

skip

enddo

lin:="+-----------------------------------------------------------------------------+"

? lin

set color to w+/b

lin:=" Всего просроченно дней -"+str(sitog,5)

? lin

set printer off

sound()

inkey(0)

return nil
6) п.п. подачи звукового сигнала для сигнализации успешного выполнения

 поставленной задачи:

func sound

tone(300,1)

tone(100,1)

tone(300,1)

tone(100,1)

return nil
7) п.п. сохранения зкрана:

FUNC s_scr(t,l,b,r)

 IF t = NIL

 t := 0

 ENDIF

 IF l = NIL

 l := 0

 ENDIF

 IF b = NIL

 b := MAXROW()

 ENDIF

 IF r = NIL

 r := MAXCOL()

 ENDIF


 AADD( wind[1], t )

 AADD( wind[2], l )

 AADD( wind[3], b )

 AADD( wind[4], r )

 AADD( wind[5], SAVESCREEN(t,l,b,r) )

 AADD( pos[1], ROW() )

 AADD( pos[2], COL() )

 AADD( colr, SETCOLOR() )

 AADD( curs, SETCURSOR() )

 RETURN .T.
8) п.п. восстановления зкрана:

FUNC r_scr()

 LOCAL ln

 ln := LEN(wind[1])

 IF ln == 0

 @ 24,0 SAY ' Ошибка - стек для восстановления параметров пуст '

 INKEY(0)

 @ 24,0

 ENDIF

 RESTSCREEN(wind[1,ln], wind[2,ln], wind[3,ln], wind[4,ln], wind[5,ln] )

 ASIZE(wind[1],ln-1)

 ASIZE(wind[2],ln-1)

 ASIZE(wind[3],ln-1)

 ASIZE(wind[4],ln-1)

 ASIZE(wind[5],ln-1)

 SETPOS( pos[1,ln], pos[2,ln] )

 ASIZE(pos[1],ln-1)

 ASIZE(pos[2],ln-1)

 SETCOLOR(colr[ln])

 ASIZE(colr,ln-1)

 SETCURSOR(curs[ln])

 ASIZE(curs,ln-1)

 RETURN .T.
9) п.п. определения - нажата ли клавиша типового метода, если да - то возвращает блок кода с соответствующим методом, если нет - то возвращает NIL. Параметр функции - INKEY-код нажатой клавиши.

FUNC basemet(cod)

 LOCAL ret , ei , i

 LOCAL crsm:={ ;

 {K_DOWN , {|o| o:down() } } ;

 , {K_UP , {|o| o:up() } } ;

 , {K_PGDN , {|o| o:pagedown() } } ;

 , {K_PGUP , {|o| o:pageup() } } ;

 , {K_CTRL_PGDN , {|o| o:gobottom() } } ;

 , {K_CTRL_PGUP , {|o| o:gotop() } } ;

 , {K_RIGHT , {|o| o:right() } } ;

 , {K_LEFT , {|o| o:left() } } ;

 , {K_CTRL_RIGHT , {|o| o:panright() } } ;

 , {K_CTRL_LEFT , {|o| o:panleft() } } ;

 , {K_END , {|o| o:end() } } ;

 , {K_HOME , {|o| o:home() } } ;

 , {K_CTRL_END , {|o| o:panend() } } ;

 , {K_CTRL_HOME , {|o| o:panhome() } } }

 i := ASCAN( crsm, {|ei| cod = ei[1] } )

 IF i <> 0

 ret := crsm[i,2]

 ELSE

 ret := NIL

 ENDIF

 RETURN ret
10) п.п. переключения режима вставка/замена и вида курсора:

PROCEDURE Repl_Ins()

 IF READINSERT()

 READINSERT(.F.)

 SETCURSOR(SC_INSERT)

 ELSE

 READINSERT(.T.)

 SETCURSOR(SC_NORMAL)

 ENDIF

RETURN
11) п.п. перевода в верхний регистр латиницы и кириллицы:

FUNC UpperC(prm)

 LOCAL n , i , smb , cs

 n := LEN( prm )

 FOR i = 1 TO n

 smb := SUBSTR( prm , i , 1 )

 cs := ASC( smb )

 DO CASE

 CASE cs >= 97 .AND. cs <= 122

 cs := cs - 32

 prm := STUFF( prm , i , 1 , CHR( cs ) )

 CASE cs >= 160 .AND. cs <= 175

 cs := cs - 32

 prm := STUFF( prm , i , 1 , CHR( cs ) )

 CASE cs >= 224 .AND. cs <= 239

 cs := cs - 80

 prm := STUFF( prm , i , 1 , CHR( cs ) )

 ENDCASE

 NEXT

RETURN prm
12) п.п. выхода из задачи с сохранением всей информации - реакция на клавишу F10:

PROCEDURE fquit()

 LOCAL reply

 reply := ALERT("Сохранить все внесенные изменения и продолжить;" ;

 + "работу с Базой данных - т.е. сделать промежуточный SAVE или;" ;

 + " Завершить работу с базой данных с сохранением всех изменений ;";

 , {" Сохранить и продолжить " , " Завершить работу " } )

 IF ( reply = 1 ) .OR. ( reply = 0 )

 DBCOMMITALL()

 ELSE

 QUIT

 ENDIF

RETURN
13) п.п. вывода сообщения на экран с заданными координатами и цветом:

PROCEDURE msgs(x,y,m,color)

LOCAL ml,c

 IF m = NIL

 RETURN

 ENDIF

 ml=LEN(m)

 IF ml=0 && .OR. ml > 80

 RETURN

 ENDIF

 IF x=NIL // Центр по X

 x := (80-ml)/2

 ENDIF

 IF y=NIL // Центр по Y

 y := 24/2 - 1

 ENDIF

 IF color <> NIL

 c := SETCOLOR(color)

 @ y,x SAY m

 SETCOLOR(c)

 ELSE

 @ y,x SAY m

 ENDIF

RETURN
14) п.п. создания TBrowse-объекта для просмотра-редактирования

 файла aa.dbf в окне t,l,b,r :

 FUNCTION aaCr(t,l,b,r)

 LOCAL brws,coln,cblk,chdr

 brws := TBrowseDb(t,l,b,r)

 cblk := {|| " " + aa->idst }

 chdr := "Идент. типа станка"

 coln := TBColumnNew(chdr,cblk)

 coln:width := 19

 brws:AddColumn(coln)

 cblk := {|| " " + aa->namest}

 chdr := " Наименование типа станка"

 coln := TBColumnNew(chdr,cblk)

 coln:width := 35

 brws:AddColumn(coln)

 cblk := {|| STR( aa->norma,7) }

 chdr := " Норма,дней"

 coln := TBColumnNew(chdr,cblk)

 coln:width := 12

 brws:AddColumn(coln)

 brws:colsep := CHR(186)

 brws:headsep := CHR(205)

 brws:colorspec := "w+/b,gr+/rb"

RETURN brws
15) п.п. просмотра файла aa.dbf с обработкой нажимаемых клавиш и вызовом соответствующих методов или пользовательских функций:

FUNCTION aaEd(brws)

LOCAL ret_fl,sel,otb , w

 LOCAL cc,rr,nrc:=0,i

 LOCAL ret:=NIL

 LOCAL t := brws:nTop , l := brws:nLeft , b := brws:nBottom , r := brws:nRight

 LOCAL t_ := 5 , l_ := 6 , b_ := 15 , r_ := 74

 s_scr()

 s_r_s()

 SETCOLOR( "N/W" )

 CLS

 SETCOLOR( "gr+/b,w+/gr")

hlp("AAED")

SELECT aa

SET ORDER TO 2

 @ t-2 , l-1 CLEAR TO b+2 , r+1

 @ b+1, l TO b+1, r

 ret_fl := .F.

DO WHILE .NOT. ret_fl

 ** оптимизированная с использованием буфера клавиатуры стабилизация

 DO WHILE ( NEXTKEY() == 0 ) .AND. ( .NOT. brws:stabilize() )

 ENDDO

 IF ( NEXTKEY() == 0 ) .AND. ( RECNO() <> nrc)

 nrc := RECNO()

 rr := ROW()

 cc := COL()

 SETCOLOR("bg+/b")

 @ t-2 , l+1 SAY " Нормативы профилактики оборудования:"

 @ b+2 , l+1 SAY " Тип станка: "

 @ b+2 , COL()+1 SAY aa->namest COLOR "w+/b"

 SETPOS(rr,cc)

 ENDIF

 SETCOLOR("gr+/rb")

 ** ожидаем нажатия клавиши

 nkey := Inkey(0)

 // если нажата клавиша типового метода - вызовем его

 blk := basemet( nKey )

 IF blk <> NIL

 EVAL( blk , brws )

 ELSE

 DO CASE

 CASE ( bHotkey := SETKEY( nKey ) ) <> NIL

 EVAL( bHotkey , PROCNAME() , PROCLINE() , READVAR() )

 CASE ( nKey = K_F8 )

 DELETE

 // потрогаем файловый указатель, если

 // возвращаетя EOF() - .T. после Down-Up,

 // значит файл пуст

 SKIP

 SKIP -1

 IF RECNO() = RECCOUNT()+1

 ret_fl := .T. // завершение просмотра

 ENDIF

 brws:RefreshAll()

 nrc := 0

 CASE nKey = K_ESC

 ret_fl := .T. // завершение просмотра

 CASE ( nKey = K_ENTER )

 // Редактирование текущего элемента данных

 aaGet(brws ;

 , " Редактирование файла aa.dbf" )

 nrc := 0 // обновить верхнюю строку

 CASE nKey == K_F3

 APPEND BLANK

 brws:RefreshAll()

 ENDCASE

 ENDIF

 ENDDO

 SET RELAT TO

 s_r_s(.T.)

 r_scr()

RETURN ret
16) п.п. выполнения GET в текущей колонке файла aa.dbf:

PROCEDURE aaGet( brws , z0 )

 LOCAL r , c , w , w2 , otb

 LOCAL retcurs,retexit // форма курсора и режим выхода из READ

 LOCAL retins, retcol // режим вставка-замена в READ

 LOCAL indch := .F. // флаг изменений значений полей, входящих в

 // индекснове выражение (тогда нужно REFRESHALL(),

 // а не REFRESHCURRENT() )

 LOCAL col

 r := ROW()

 c := COL()

 // Проверка обновления экрана, корректности базы и т.д.

 ForceStable(brws)

 // Установка клавиш Up-Arrow и Down-Arrow как клавиш выхода из

 // команды READ

 retexit := READEXIT(.T.)

 // Установка клавиши INS для переключения

 // режима вставка/замена

 // и соответствующего изменения вида курсора

 retins := SetKey( K_INS, {|| Repl_Ins()} )

 // эквивалентно Set Key K_INS To Procedure Repl_Ins

 // Установка вида курсора по текущему состоянию режима

 retcurs := SetCursor( IF(ReadInsert(), SC_NORMAL, SC_INSERT ) )

 s_scr()

 retcol := SETCOLOR("w+/g")

 @ brws:nTop-3,0

 @ brws:nTop-3,0 SAY z0

 hlp("GET")

 SETCOLOR("gr+/n,w+/g")

 indch := .F.

 DO CASE

 CASE brws:colpos = 1

 w := aa->idst

 @ r,c+2 GET w

 READ

 IF .NOT.( LASTKEY() = K_ESC ).OR.( aa->idst == w )

 REPLACE aa->idst WITH w

 indch := .T.

 ENDIF

 CASE brws:colpos = 2

 n := aa->namest

 @ r,c+2 GET n

 READ

 IF .NOT.( LASTKEY() = K_ESC ).OR.( aa->namest == n )

 REPLACE aa->namest WITH n

 ENDIF

 CASE brws:colpos = 3

 w := aa->norma

 @ r,c+1 GET w

 READ

 IF .NOT.( ( LASTKEY() = K_ESC ) .OR. ( aa->norma = w ) )

 REPLACE aa->norma WITH w

 ENDIF

 ENDCASE

 SETCOLOR(retcol)

 r_scr()

 SETPOS(r,c)

 IF indch

 brws:RefreshAll()

 ELSE

 brws:RefreshCurrent() // Обеспечить перерисовку текущей строки,

 ENDIF // поскольку изменялся элемент данных

 // Восстановление формы курсора и режима выхода из READ по стрелкам

 // и процедуры по клавише K_INS

 SetCursor(retcurs)

 READEXIT(retexit)

 SetKey(K_INS, retIns)

 // Проверка требования ухода с текущей записи после GET

 nKey := LASTKEY()

 IF nKey == K_UP .OR. nKey == K_DOWN .OR. ;

 nKey == K_PGUP .OR. nKey == K_PGDN

 // управление курсором -- переход к другой записи

 KEYBOARD( CHR(nKey) )

 ENDIF

RETURN

1. Реферат на тему English Composition Driving Essay Research Paper ENGLISH
2. Реферат Склад і масштаби Сонячної системи Конфігурації та умови видимості планет 2
3. Реферат Построение интеллектуальных сетей
4. Доклад на тему Интернет-проект как средство маркетинга
5. Реферат Истоки и основные направления студенческих выступлений за рубежом
6. Реферат на тему Araby
7. Реферат Особенности природы Северного Ледовитого океана
8. Контрольная работа Стратегії міжнародної торгівлі
9. Реферат на тему Неотложная помощь при спазмофилии - рахитогенной тетании
10. Курсовая Основные темы творчества КМ Симонова в 1950-1970-е годы