Читайте также: |
|
Автоматизировать процесс перевода групп бухгалтеров с возможностью восстановления предыдущего значения групп, т.е. если сотрудник ушел в отпуск, его группу «распускают», а по приходу собирают вновь ту же группу.
Этап 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 | | | Почвенный горизонт — специфический слой почвенного профиля, образовавшийся в результате воздействия почвообразовательных процессов. |