Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. Вводным заданием будет небольшой тест, который определит ваши отношения с едой.
  2. Военно техническое сотрудничество РФ с зарубежными странами.
  3. Второе задание
  4. Домашнее задание
  5. Домашнее задание.
  6. Домашнее задание.
  7. Е задание

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

Этап 1: Сбор информации по группам:

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

Код программы:

set tab off heading on feed on

set echo off termout on

linesize 230 pagesize 400

col acc for a15 heading 'старый счет'

col accn for a21 heading 'счет'

col exeold for a6 heading 'откуда'

col exenew for a6 heading 'куда'

col name for a150 heading 'Наименование счета'

accept EXE_OLD number prompt 'ИСПОЛНИТЕЛЬ: '

spool &EXE_OLD.v.txt

select to_char(c.acc,'9999999999999') acc,

c.accn accn,

'<'||to_char(c.exe,'99')||'>' exeold,

'< >' exenew,

substr(c.name,1,150) name

from cr_acc c

where c.exe = &EXE_OLD

and not b2n in ('90901','90902')

and c.dtc is null

order by substr(accn,17,4), substr(accn,1,5), substr(accn,14,3);

;

exit;

По запросу данной программы через СУБД Oracle вытягиваем нужную нам информацию из таблицы, и формируем ее в наглядный вид, запуск программы осуществляется командной строкой: sql exe_ved.sql

После чего получаем исходящий файл в зависимости от группы которую мы раскидываем. Пример: 4 группа имя 4v.txt

После чего распечатываем данный файл и предаем на группу, после того как его отредактирует какие счета на какую группу перевести отдают нам файл обратно

Рисунок 1 – счета клиентов с иполнителем.

Этап 2: Разброс группы

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

Код программы:

* Входной файл: Файл 99v.txt, где 99 - номер исполнителя

* Выходной файл: exe_upl.sql - этот файл загрузить в /u/home/sgv/rep/exe_move

* и отработать (в командной строке запустить...>sql exe_upl.sql)

*

PROCEDURE upl

PARAMETERS infile

SET ALTERNATE TO exe_upl.sql

SET ALTERNATE ON

SET CONSOLE ON

loadfb3_(infile)

db_name=token(infile,[.],1)+[.dbf]

USE &db_name

GO TOP

DO WHILE!EOF()

DO CASE

CASE SUBSTR(pole_01,46,1) = "<".and. SUBSTR(pole_01,47,3)#' '

? "execute cr_upexe("+SUBSTR(pole_01,2,13)+","+SUBSTR(pole_01,47,3)+");"

ENDCASE

SKIP

ENDDO

CLOSE DATABASES

?

? "commit;"

?

? "exit;"

erase &db_name

RETURN

 

PROCEDURE loadfb3_

 

PARAMETERS c

LOCAL k1, maxlen:=0, step_wh:=1, fl_name, db

LOCAL bufer, handle, block, area, tec_pos, strn_tec, bytes

LOCAL end_area, end_file, filelen

set scoreboard off

Fl_name = c

 

block=4096

bufer=space(block)

handle=fopen(fl_name)

if handle=-1

? [невозможно открыть файл, ошибка DOS]

endif

filelen=fseek(handle,0,2)

 

do while step_wh <= 2

fseek(handle,0,0)

area =[]

tec_pos=1

strn_tec = 0

end_file =.f.

end_area =.f.

if step_wh = 1

else

db_name=token(fl_name,[.],1)+[.dbf]

crt_dbf(db_name + [ pole_01, ] + [c,]+ STR(maxlen, 3) + [, 0 ])

USE &db_name

endif

do while!end_file

bytes=fread(handle,@bufer,block)

end_area=.f.

if bytes<>block

end_file=.t.

if bytes=0

end_area=.t.

else

area=substr(area,tec_pos)+substr(bufer,1,bytes)

endif

else

area=substr(area,tec_pos)+bufer

endif

tec_pos=1

do while.not.(end_area)

k1=atnum(chr(13)+chr(10),area,1,tec_pos-1)

if k1=0

k1=atnum(chr(26),area,1,tec_pos-1)

if k1<>0

end_file=.t.

if k1=tec_pos

exit

endif

else

end_area=.t.

loop

endif

endif

strn_tec=strn_tec+1

fl_rec=substr(area,tec_pos,k1-tec_pos)

tec_pos=k1+2

if step_wh = 1

maxlen=max(maxlen,LEN(fl_rec))

else

append blank

replace pole_01 with fl_rec

endif

enddo

enddo

step_wh = step_wh + 1

enddo

fclose(fl_name)

 

RETURN

 

*---Процедура crt_dbf ---------------------------------------------------------

 

PROCEDURE crt_dbf

PARAMETERS c

LOCAL k1,k2,i,db_name

CREATE new_stru

USE new_stru

k1=NUMTOKEN(c,[,])

FOR i=1 to (k1-1)/4

APPEND BLANK

k2=(i-1)*4+2

REPLACE field_name WITH TOKEN(c,[,],k2)

REPLACE field_type WITH TOKEN(c,[,],k2+1)

REPLACE field_len WITH VAL(TOKEN(c,[,],k2+2))

REPLACE field_dec WITH VAL(TOKEN(c,[,],k2+3))

NEXT

db_name=TOKEN(TOKEN(c,[,],1),[.],1)+[.DBF]

CREATE &db_name FROM new_stru

* CLOSE DATABASES

erase new_stru.dbf

RETURN(NIL)

Программа работает следующим способом: запускается сама программа со свойством файла сформированного предыдущего этапа, после чего программа создает файл EXE_UPL.SQL. Этот файл содержит непосредственно функцию и группу для переброса группы, после формирования данного файла можно запускать запрос SQL в СУБД следующей командой: SQL EXE_UPL.SQL, после чего СУБД Oracle обработает данный запрос и перенесет группы по им новым местам.

Рисунок 2 – сформированный файл EXE_UPL.SQL

Этап 3: Возврат группы обратно

Для возращения на «круги своя» так же была разработана программа

Работает она следующим образом. Файл который сформирован на первом этапе и расписан бухгалтерами операционного зала запускаем свойствам к написанной программе с наименованием UPL_BACK.

Код программы:

PROCEDURE upl_back

PARAMETERS infile

SET ALTERNATE TO exe_upl.sql

SET ALTERNATE ON

SET CONSOLE ON

loadfb3_(infile)

db_name=token(infile,[.],1)+[.dbf]

USE &db_name

GO TOP

DO WHILE!EOF()

DO CASE

CASE SUBSTR(pole_01,46,1) = "<".and. SUBSTR(pole_01,47,3)#' '

? "execute cr_upexe("+SUBSTR(pole_01,2,13)+","+SUBSTR(pole_01,40,3)+");"

ENDCASE

SKIP

ENDDO

CLOSE DATABASES

?

? "commit;"

?

? "exit;"

erase &db_name

RETURN

 

PROCEDURE loadfb3_

 

PARAMETERS c

LOCAL k1, maxlen:=0, step_wh:=1, fl_name, db

LOCAL bufer, handle, block, area, tec_pos, strn_tec, bytes

LOCAL end_area, end_file, filelen

set scoreboard off

Fl_name = c

 

block=4096

bufer=space(block)

handle=fopen(fl_name)

if handle=-1

? [невозможно открыть файл, ошибка DOS]

endif

filelen=fseek(handle,0,2)

 

do while step_wh <= 2

fseek(handle,0,0)

area =[]

tec_pos=1

strn_tec = 0

end_file =.f.

end_area =.f.

if step_wh = 1

else

db_name=token(fl_name,[.],1)+[.dbf]

crt_dbf(db_name + [ pole_01, ] + [c,]+ STR(maxlen, 3) + [, 0 ])

USE &db_name

endif

do while!end_file

bytes=fread(handle,@bufer,block)

end_area=.f.

if bytes<>block

end_file=.t.

if bytes=0

end_area=.t.

else

area=substr(area,tec_pos)+substr(bufer,1,bytes)

endif

else

area=substr(area,tec_pos)+bufer

endif

tec_pos=1

do while.not.(end_area)

k1=atnum(chr(13)+chr(10),area,1,tec_pos-1)

if k1=0

k1=atnum(chr(26),area,1,tec_pos-1)

if k1<>0

end_file=.t.

if k1=tec_pos

exit

endif

else

end_area=.t.

loop

endif

endif

strn_tec=strn_tec+1

fl_rec=substr(area,tec_pos,k1-tec_pos)

tec_pos=k1+2

if step_wh = 1

maxlen=max(maxlen,LEN(fl_rec))

else

append blank

replace pole_01 with fl_rec

endif

enddo

enddo

step_wh = step_wh + 1

enddo

fclose(fl_name)

 

RETURN

 

*---Процедура crt_dbf ---------------------------------------------------------

 

PROCEDURE crt_dbf

PARAMETERS c

LOCAL k1,k2,i,db_name

CREATE new_stru

USE new_stru

k1=NUMTOKEN(c,[,])

FOR i=1 to (k1-1)/4

APPEND BLANK

k2=(i-1)*4+2

REPLACE field_name WITH TOKEN(c,[,],k2)

REPLACE field_type WITH TOKEN(c,[,],k2+1)

REPLACE field_len WITH VAL(TOKEN(c,[,],k2+2))

REPLACE field_dec WITH VAL(TOKEN(c,[,],k2+3))

NEXT

db_name=TOKEN(TOKEN(c,[,],1),[.],1)+[.DBF]

CREATE &db_name FROM new_stru

* CLOSE DATABASES

erase new_stru.dbf

RETURN(NIL)

Программа работает следующим образом запускаем программу UPL_BACK с параметром сформированным на первом этапе. Пример UPL_BACK 4v.txt

После чего формируется файл EXE_UPL.SQL его так же запускаем в СУБД Oracle следующей командой SQL EXE_UPL.SQL после чего в СУБД вернется все в изначальное значение, до переброса.

 

Заключение

За время производственной практики обучился работать с Oracle в частности в разработке программного обеспечения, за время практики было написано 3 мини программы в комплексе взаимодействующие между собой, что облегчило работу как бухгалтерии филиала так инженеров филиала, в следствии чего была произведена автоматизация процесса переброса групп в операционном зале, в следствие чего было уменьшено время обработки информации и качество полноты данных. В дальнейшем программа будет дорабатываться и 3 блочный комплекс планируется перевести на отдельный программный блок написанный на C# связанный с СУБД Oracle.

 

 

Список литературы:

1. http://www.oracle.com

2. Генник Джонатан, Oracle SQL*Plus. Карманный справочник. 2-е издание, 2004г. 205-214с.

3. Грин Джо, Oracle 8. Энциклопедия пользователя, 2001г. 106-105с, 256-270с.

4. http://www.chelindbank.ru

5. http://www.firststeps.ru/

6. Санжей Мишра, Алан Бьюли, Секреты Oracle SQL, 2003г. 10-45с.


Дата добавления: 2015-08-10; просмотров: 71 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Основные команды в Oracle на PL\SQL| Почвенный горизонт — специфический слой почвенного профиля, образовавшийся в результате воздействия почвообразовательных процессов.

mybiblioteka.su - 2015-2024 год. (0.029 сек.)