close

Вход

Забыли?

вход по аккаунту

код для вставкиСкачать
МИНИСТЕРСТВО СЕЛЬСКОГО ХОЗЯЙСТВА РОССИЙСКОЙ ФЕДЕРАЦИИ
ДЕПАРТАМЕНТ НАУЧНО-ТЕХНОЛОГИЧЕСКОЙ ПОЛИТИКИ И ОБРАЗОВАНИЯ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«ВОЛГОГРАДСКИЙ ГОСУДАРСТВЕННЫЙ АГРАРНЫЙ УНИВЕРСИТЕТ»
УДК 004.43
№ госрегистрации
Инв. №
УТВЕРЖДАЮ
Ректор ФГБОУ ВПО ВолГАУ,
чл.-корр. РАСХН, профессор
____________ А.С. Овчинников
«_____»______________2013 г.
ОТЧЕТ
О НАУЧНО-ИССЛЕДОВАТЕЛЬСКОЙ РАБОТЕ
по теме:
«ПРОГРАММНЫЙ ПРОДУКТ АВТОМАТИЗАЦИИ УЧЕТНОЙ И
АНАЛИТИЧЕСКОЙ ДЕЯТЕЛЬНОСТИ В АГРОПРОМЫШЛЕННОМ
КОМПЛЕКСЕ ВОЛГОГРАДСКОЙ ОБЛАСТИ»
Проректор по научной работе,
д.с.-х.н., профессор
____________________ А.Н. Цепляев
подпись, дата
Научный руководитель
зав. кафедрой ММ и И,
д.т.н., профессор
____________________ А.Ф. Рогачев
подпись, дата
Волгоград 2013
СПИСОК ИСПОЛНИТЕЛЕЙ
Научный руководитель
д.т.н., профессор А.Ф. Рогачев
Ответственный исполнитель
к.э.н., доцент А.Г. Гагарин
Зав. лабораторией
Т.В. Плещенко
2
РЕФЕРАТ
Пояснительная записка: 19 стр., 14 рис., 2 прил.
Ключевые слова: ИНФОРМАЦИОННАЯ СИСТЕМА, АПК, БАЗА
ДАННЫХ, УЧЕТНЫЕ ДОКУМЕНТЫ, ВВОД ДАННЫХ.
Цели работы - автоматизация учетной и аналитической деятельности в
агропромышленном комплексе Волгоградской области на основе создания
единой базы данных годовых бухгалтерских отчетов и иных форм отчетности.
Разрабатываемая программа позволяет использование различных видов
форматов
исходных
документов
с
возможностью
интеллектуальной
аналитической обработки массивов данных, отобранных по задаваемым
аналитиком критериям с целью последующего выполнения экономического
анализ финансово-хозяйственной деятельности предприятий АПК.
Программа
разрабатывается
на
основе
открытого
свободного
программного обеспечения – среды быстрой разработки приложений Lazarus и
сервера базы данных MySQL.
Программа работает под управлением ОС MS Windows ХР - 8, экспорт в
форматы DBF, XLS (с использованием механизма OLE Automation). База
данных (БД) позволяет хранить данные годовой бухгалтерской отчетности не
менее чем о 1000 хозяйств за 25 лет.
3
Анализ состояния вопроса.
В настоящее время в Министерстве сельского хозяйства Волгоградской
области
для
деятельности
экономического
предприятий
АПК
анализа
производственно-финансовой
Волгоградской
области
используется
программа «Ракурс», разработанная и рекомендованная Министерством
сельского хозяйства (1989 г.).
Основные недостатки программы «Ракурс»:
 невозможность полнофункциональной работы в ОС Windows;
 несовместимость формата входных данных с форматами MS Excel
и базы данных 1С:Предприятие;
 невозможность редактирования результирующих данных в
стандартных офисных приложениях без дополнительной
конвертации.
Для решения задач автоматизации учетной и аналитической деятельности в
агропромышленном комплексе Волгоградской области необходимо:
1. Разработать единую базу данных отчетности предприятий Волгоградской
области с возможностью подключения по различным каналам связи.
2. Разработать конвертор (загрузчик) отчетности из популярных форматов
первичных документов (MS Excel, 1С:Предприятие) в единую базу
данных.
3. Разработать универсальное настраиваемое средство для расчета
аналитических показателей на основе SQL-запросов.
Цель создания программы: автоматизация учетной и аналитической
деятельности в агропромышленном комплексе Волгоградской области на
основе создания единой базы данных годовых бухгалтерских отчетов и иных
форм отчетности, с использованием различных видов форматов исходных
документов, с возможностью интеллектуальной аналитической обработки
массивов данных, отобранных по задаваемым аналитиком критериям.
Программа разрабатывается на основе открытого свободного программного
обеспечения – среды быстрой разработки приложений Lazarus и сервера базы
4
данных MySQL, и предназначена для функционирования под управлением
операционной системы MS Windows XP-8.
В рамках выполнения темы № 52 разработано:
1. Структура базы данных для хранения шаблонов отчетности по
финансово-экономическим показателям, списка организаций, значений
финансово-экономических показателей по формам отчетности по годам и
по организациям, результатов анализа (рис. 1).
2. Структура базы данных реализована в свободной СУБД MySQL 5.1.4
(рис. 2).
3. В свободной среде разработки приложений Lazarus реализован модуль по
работе со списком организаций (рис. 3) с возможностью редактирования
справочника параметров организаций (рис. 4).
4. Реализован модуль по визуализации данных из внутреннего формата в
табличном
виде
с
возможностью
вывода
объединенных
ячеек
(Приложение А).
5. Создан модуль по загрузке макетов отчетов в формате Excel во
внутренний формат программы с возможностью сохранения в базе
данных (рис. 5).
6. Разработан
модуль
редактора
регулярных
выражений
для
автоопределения изменяемых данных макета (рис. 6) с примерами
регулярных выражений (рис. 7).
7. Реализована возможность ручного выбора ячеек с данными для
автоматической генерации шаблонов на основе эталонного отчета
(рис. 8).
8. Реализована возможность задания параметров автоматического выбора
ячеек с данными для автоматической генерации шаблонов на основе
эталонного отчета (Приложение Б).
9. Имеется функция задания параметров для автоматического определения
маркеров данных (рис. 9).
10.Реализована процедура автоматического определения маркеров данных
5
(рис. 10).
11.Предусмотрена работа с отчетами организаций (рис. 11) с возможностью
добавления отчетов по определенной форме в формате Excel (рис. 12) и
автоматическим определением степени соответствия макету отчетности.
12.Реализована возможность экспорта отчетов в формате *.html (рис. 13,14).
Предложения
к
развитию
стратегии
информатизации
АПК
Волгоградской области
1.
Разработать единую базу данных отчетности предприятий АПК
Волгоградской области на универсальной технологической платформе на базе
открытого программного обеспечения.
2.
Обеспечить
возможность
взаимодействия
с информационной
системой по различным каналам связи заданным группам пользователей с
определенными уровнями прав доступа.
3.
Предусмотреть финансирование работ по администрированию
предлагаемой базы данных, отбору и актуализации информации (почвенноклиматические
зоны,
муниципальные
финансово-экономические
образования,
показатели,
вид
характеристики
деятельности,
государственной
поддержки, особенности внедряемых инновационных технологий и др.).
4.
Провести анализ и выявить информационные материалы для
представления
на
информационных
порталах
более
высокого
уровня
(отраслевой, субъектов РФ).
5.
Для
эффективного
внедрения
разрабатываемого
программного
средства предлагается проведение обучения пользователей на курсах,
организуемых базе ВолГАУ.
6
Рис. 1 – Схема базы данных
7
Рисунок 2 – Окно подключения к базе данных MySQL
Рисунок 3 – Окно работы с перечнем организаций
8
Рисунок 4 – Справочник параметров организаций
Рисунок 5 – Окно работы с макетом отчета
9
Рисунок 6 – Окно редактора регулярных выражений для автоопределения
изменяемых данных макета
Рисунок 7 – Окно с примерами регулярных выражений
10
Рисунок 8 – Демонстрация возможности ручного выбора ячеек с данными для
автоматической генерации шаблонов на основе эталонного отчета
Рисунок 9 – Окно задания параметров для автоматического определения
маркеров данных
11
Рисунок 10 – Пример автоматического определения маркеров данных
Рисунок 11 – Работа с отчетами организаций
12
Рисунок 12 – Диалог добавления отчета
Рисунок 13 – Просмотр экспортированного отчета в Internet Explorer
13
Рисунок 14 – Предварительный просмотр отчета
14
Приложение А
procedure TExcelDocument.DrawCells;
var
x0,y0,w,h,
fw,fh,
n,m,k,
i,j,
x1,y1,x2,y2,
c1,c2,r1,r2:integer;
r:Trect;
BInfo: BITMAPINFO;
ps:TPAINTSTRUCT;
ts:TTextStyle;
begin
if processing_data then exit;
if Length(cells)=0 then exit;
if Length(cells[0])=0 then exit;
//
//
pbox.Width:=GridWidthPx+1;
pbox.Height:=GridHeightPx+1;
hsb.Max:=GridWidthPx+1;
vsb.Max:=GridHeightPx+1;
if (hsb.Max<>bitmap.Width) or (vsb.Max<>bitmap.Height) then
ResizeBitmap(bitmap,hsb.Max,vsb.Max);
if (pbox.Width<>bitmap2.Width) or (pbox.Height<>bitmap2.Height) then
ResizeBitmap(bitmap2,pbox.Width,pbox.Height);
if show_fixed then
begin
fw:=fixed_col_width;
fh:=fixed_row_height;
end
else
begin
fw:=0;
fh:=0;
end;
x0:=hsb.Position;
w:=hsb.PageSize;
y0:=vsb.Position;
h:=vsb.PageSize;
n:=Length(columns);
k:=0;
for c1:=0 to n-1 do
begin
k:=k+columns[c1].width_px;
if k>x0 then
break;
end;
for i:=0 to length(rows)-1 do
if cells[i,c1].eaten then
if cells[i,c1].col_start<c1 then
c1:=cells[i,c1].col_start;
k:=0;
for c2:=0 to n-1 do
begin
k:=k+columns[c2].width_px;
if k>(x0+w) then
break;
end;
m:=Length(rows);
15
k:=0;
for r1:=0 to m-1 do
begin
k:=k+rows[r1].height_px;
if k>y0 then
break;
end;
for j:=0 to length(columns)-1 do
if cells[r1,j].eaten then
if cells[r1,j].row_start<r1 then
r1:=cells[r1,j].row_start;
k:=0;
for r2:=0 to m-1 do
begin
k:=k+rows[r2].height_px;
if k>(y0+h) then
break;
end;
{
LogOut(['pbox ',pbox.Width,'x',pbox.Height,
'
bitmap ',bitmap.Width,'x',bitmap.Height,
'
w=',w,' h=',h,
'
x0=',x0,' y0=',y0]);
{}
bitmap.canvas.Brush.Color:=clWhite;
bitmap.canvas.Brush.Style:=bsSolid;
bitmap.canvas.FillRect(0,0,bitmap.Width,bitmap.Height);
for i:=r1 to r2 do
for j:=c1 to c2 do
begin
r.Left:=GetCellX1(cells[i,j]);
r.Top:=GetCellY1(cells[i,j]);
r.Right:=GetCellX2(cells[i,j]);
r.Bottom:=GetCellY2(cells[i,j]);
DrawCell(i,j,bitmap.Canvas,r);
end;
if has_selection then
with bitmap.Canvas do
begin
Pen.Color:=clBlack;
Pen.Width:=2;
Brush.Style:=bsClear;
x1:=GetCellX1(selection.Top,selection.Left);
y1:=GetCelly1(selection.Top,selection.Left);
x2:=GetCellX2(selection.Bottom,selection.Right)+1;
y2:=GetCelly2(selection.Bottom,selection.Right)+1;
Rectangle(x1,y1,x2,y2);
end;
if show_fixed then
with bitmap2.Canvas do
begin
Brush.Color:=clWhite;
Brush.Style:=bsSolid;
FillRect(0,0,bitmap2.Width,bitmap2.Height);
BitBlt(bitmap2.Canvas.Handle,fw,fh,w-fw,h-fh,
bitmap.Canvas.Handle,x0,y0,SRCCOPY);
Pen.Color:=clBlack;
Pen.Width:=1;
pen.Style:=psSolid;
Brush.Style:=bsSolid;
16
Brush.Color:=clSilver;
Font.Size:=round(pbox.Font.Size);
Font.Name:=pbox.Font.Name;
ts.Alignment:=taCenter;
ts.Layout:=tlCenter;
ts.SingleLine:=true;
ts.Clipping:=true;
ts.SystemFont:=false;
ts.Opaque:=false;
for i:=r1 to r2 do
begin
r:=classes.Rect(0,rows[i].before_pxy0+fh,fw,rows[i].before_px+rows[i].height_px-y0+fh+1);
Rectangle(r);
TextRect(r,r.Left,r.Top,IntToStr(i+1),ts);
end;
for i:=c1 to c2 do
begin
r:=classes.Rect(columns[i].before_pxx0+fw,0,columns[i].before_px+columns[i].width_px-x0+fw+1,fh);
Rectangle(r);
TextRect(r,r.Left,r.Top,Base26Encode(i+1),ts);
end;
Pen.Width:=0;
pen.Style:=psClear;
FillRect(0,0,fw,fh);
BitBlt(pbox.canvas.Handle,0,0,w,h,
bitmap2.Canvas.Handle,0,0,SRCCOPY);
end
else
BitBlt(pbox.canvas.Handle,0,0,w,h,
bitmap.Canvas.Handle,x0,y0,SRCCOPY);
end;
procedure TExcelDocument.DrawCell(row, col: integer; _canvas: TCanvas;
rect: TRect);
var n,m,x1,x2,y1,y2,w,h:integer;
c:TCell;
r:TRECT;
ts:TTextStyle;
begin
n:=length(cells);
if n>0 then
begin
m:=Length(cells[0]);
if m>0 then
if (row>=0) and (col>=0) and (row<n) and (col<m) then
begin
c:=cells[row,col];
if c.eaten then
begin
c:=cells[c.row_start,c.col_start];
exit;
end;
_canvas.Brush.Color:=c.interior_color;
if c.marked then
_canvas.Brush.Color:=clRed;
if has_highlighted then
if (row=highlighted.y) and (col=highlighted.x) then
begin
_canvas.Brush.Color:=clYellow;
{ LogOut(['has_highlighted at ',row,'-',col,'
',
rect.left,'-',rect.top,' ',rect.right,'-',rect.bottom]);
17
}
end;
if marker_mode then
if IsCellInMarkerListOfSelectedCell(row,col) then
begin
_canvas.Brush.Color:=clBlue;
end;
_canvas.Pen.Width:=1;
_canvas.Pen.Color:=clBlack;
x1:=rect.Left;
y1:=rect.Top;
x2:=rect.Right;
y2:=rect.Bottom;
_canvas.FillRect(x1,y1,x2,y2);
if c.value<>'' then
begin
_canvas.Font.Size:=round(c.font_size);
_canvas.Font.Name:=c.font_name;
case c.horizontal_alignment of
-4131:ts.Alignment:=taLeftJustify;
-4152:ts.Alignment:=taRightJustify;
-4108:ts.Alignment:=taCenter;
end;
case c.vertical_alignment of
-4160:ts.Layout:=tlTop;
-4108:ts.Layout:=tlCenter;
-4107:ts.Layout:=tlBottom;
end;
ts.SingleLine:=not c.wrap_text;
ts.Clipping:=false;
ts.SystemFont:=false;
ts.Opaque:=false;
_canvas.TextRect(rect,x1,y1,UTF8Encode(c.value),ts);
end;
if c.border[3]>0 then
_canvas.Line(x1,y1,x2,y1);
if c.border[5]>0 then
_canvas.Line(x2,y1,x2,y2);
if c.border[4]>0 then
_canvas.Line(x1,y2,x2,y2);
if c.border[2]>0 then
_canvas.Line(x1,y1,x1,y2);
end;
end;
end;
18
Приложение Б
procedure TExcelDocument.AutoFillData;
var
i,j,k,n,m,nd:integer;
st:string;
c:pTCell;
RegExpr: TRegExpr;
dt:TStringArray;
begin
try
try
RegExpr:=tRegExpr.Create;
LoadDataTemplates(dt);
nd:=length(dt);
for k:=0 to nd-1 do
begin
st:=Trim(dt[k]);
if st<>'' then
begin
RegExpr.Expression:=st;
n:=length(cells);
m:=length(cells[0]);
for i:=0 to n-1 do
for j:=0 to m-1 do
begin
c:=@(cells[i,j]);
c.marked:=false;
if (c.eaten=false) then
begin
if RegExpr.Exec(c.value) then
c.marked:=true;
end;
end;
end;
end;
except
on e:Exception do
begin
LogOut(['TExcelDocument.AutoFillData: ',e.Message]);
end;
end;
finally
FreeAndNil(RegExpr);
end;
end;
19
1/--страниц
Пожаловаться на содержимое документа