Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_КР_ПСЭД_ок.doc
Скачиваний:
2
Добавлен:
24.08.2019
Размер:
1.61 Mб
Скачать

Исходное описание курсовой работы Дисциплина «Проектирование систем электронного документооборота»

1. Провести анализ заданной предметной области

2. Выбрать вид и спроектировать шаблоны типовых документов для информационного обмена

3. Спроектировать базу данных (табл. 1)

4. Разработать программу взаимодействия с приложениями MS Word и MS Excel

5. Сформировать результаты в MS Word и MS Excel (табл. 2)

6. Оформить пояснительную записку

Таблица 1

Дополнительная информация

Количество реляционных таблиц

не менее 3 (трех)

Количество полей в справочной таблице

не менее 7 (семи)

Количество числовых полей в справочной таблице

не менее 1 (одного)

Количество формируемых документов

не менее 2 (двух)

Вид диаграммы на листе-диаграмме

любой

Таблица 2

Выводимые результаты

MS Word

MS Excel

В одном документе MS Word страница 1, содержит справочную таблицу

В одной книге MS Excel лист 1 содержит справочную таблицу

В том же документе MS Word страница 2, содержит сформированный типовой документ 1

В той же книге MS Excel лист 2 содержит сформированный типовой документ 1

В том же документе MS Word страница 3, содержит сформированный типовой документ 2

В той же книге MS Excel лист 3 содержит сформированный типовой документ 2

В той же книге MS Excel лист 4 содержит диаграмму 1, созданную по содержимому лист 1

ПРИЛОЖЕНИЕ 6

Пример взаимодействия с ms Word

// ======================= Пример использования технологии OLE-Automation в MS Word ========================

// ================== Работа с документами MSOffice через компоненты закладки "Servers" ====================

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, OleServer, ComObj, FileCtrl, ExtCtrls, WordXP,

PowerPointXP, OutlookXP, ExcelXP, Grids, DBGrids, DB, DBTables;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

WordApplication1: TWordApplication;

Button3: TButton;

WordDocument1: TWordDocument;

DataSource1: TDataSource;

DBGrid1: TDBGrid;

Query1: TQuery;

GroupBox2: TGroupBox;

Label4: TLabel;

Label5: TLabel;

StaticText2: TStaticText;

StaticText3: TStaticText;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure DBGrid1CellClick(Column: TColumn);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

// Razd,Word,doc,doc1,doc2,Doc_Pres,Doc_Pres1: OleVariant;

Lcid,ColColumns,ColRows,i,j,NomClient:integer;

End1,Start1,doc1,Razd:OleVariant;

StrKomb:string;

Range1:Range;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

Query1.Active:=true;//обращаемся к базе данных

end;

//Закрыть --------------------------------------------------

procedure TForm1.Button2Click(Sender: TObject);

begin

if WordApplication1 <> nil then

begin

WordApplication1.Disconnect;

WordApplication1.Quit; //Закрыть приложение MS Word, если оно есть

end;

Form1.Close;

end;

//----------------------------------------------------------

//Работа с документами MSOffice через компоненты закладки "Servers"

//Загрузка существующего файла Word

procedure TForm1.Button3Click(Sender: TObject);

begin

WordApplication1.Connect;

//Загрузка существующего файла Word --------------------------

doc1:='G:\ДЛЯ СТУДЕНТОВ ТИЭИ\ПРОЕКТИРОВАНИЕ СИСТЕМ ЭЛЕКТРОННОГО ДОКУМЕНТООБОРОТА\ПРИЛ\2\pr1.doc'; //открыть существующий документ 2

WordApplication1.Documents.Open(doc1,EmptyParam, EmptyParam, EmptyParam,EmptyParam, EmptyParam, EmptyParam,

EmptyParam, EmptyParam, EmptyParam,EmptyParam, EmptyParam, EmptyParam,EmptyParam,EmptyParam);

WordDocument1.ConnectTo(WordApplication1.ActiveDocument);//Соединяемся с активным документом

//-------------------------------------------------------------

//Настроим исходные параметры документа - форматирование !!! ----------------------------

WordDocument1.PageSetup.Orientation:=0; //ориентация страницы - портретная (книжная) 1- альбомная

WordDocument1.PageSetup.PaperSize:=7; //формат А4

//Поля (2,54 см - 72 точки)

WordDocument1.PageSetup.LeftMargin:=25; //левое

WordDocument1.PageSetup.RightMargin:=70; //правое

WordDocument1.PageSetup.TopMargin:=70; //верхнее

WordDocument1.PageSetup.BottomMargin:=70;//нижнее

WordDocument1.PageSetup.TextColumns.SetCount(1); //кол-во колонок в тексте - 1

//WordDocument1.PageSetup.TextColumns.LineBetween:=0; //разделение колонок линией - деления на колонки нет

//Колонтитулы

//Верхний

WordDocument1.Sections.First.Headers.Item(1).range.insertafter('Колонтитул верхний. Это пример технологии OLE - automation в MS Word');

//Нижний

WordDocument1.Sections.Last.Footers.Item(1).range.insertafter('Колонтитул нижний. Это пример технологии OLE - automation в MS Word');

//-------------------------------------------------------------------------

//Вставка текста - создание типового документа -----------------------------------------

//Вставка 3 пустых абзацев, курсор в позиции последнего -----

WordDocument1.Paragraphs.Add(EmptyParam);

WordDocument1.Paragraphs.Add(EmptyParam);

WordDocument1.Paragraphs.Add(EmptyParam);

//-----------------------------------------------------------

//Пример применения диапазона "Range" для выравнивания двух абзацев из четырех ранее введенных --------------

Start1:=WordDocument1.Paragraphs.Item(1).Range.start; //начальный абзац

End1:=WordDocument1.Paragraphs.Item(2).Range.end_; //конечный абзац

WordDocument1.Range(Start1,End1).Paragraphs.Alignment:=2; //выравнивание вправо

//-----------------------------------------------------------------------------------------------------------

WordDocument1.Paragraphs.Add(EmptyParam); //добавить абзац, курсор в его позиции

WordDocument1.Paragraphs.Item(WordDocument1.Paragraphs.Count).Alignment:=2; //выравнивание текущего абзаца вправо

WordDocument1.Range.InsertAfter('Для представления'); //вводим текст

WordDocument1.Paragraphs.Add(EmptyParam); //добавить абзац, курсор в его позиции

WordDocument1.Paragraphs.Item(WordDocument1.Paragraphs.Count).Alignment:=2; //выравнивание текущего абзаца вправо

WordDocument1.Range.InsertAfter('по месту требования'); //вводим текст

//Вставка 3 пустых абзацев, курсор в позиции последнего------

WordDocument1.Paragraphs.Add(EmptyParam);

WordDocument1.Paragraphs.Add(EmptyParam);

WordDocument1.Paragraphs.Add(EmptyParam);

WordDocument1.Paragraphs.Add(EmptyParam);

//------------------------------------------------------------

WordDocument1.Paragraphs.Item(WordDocument1.Paragraphs.Count).Alignment:=1; //выравнивание по центру

WordDocument1.Range.InsertAfter('СПРАВКА'); //вводим текст

//Вставка 4 пустых абзацев, курсор в позиции последнего -----

WordDocument1.Paragraphs.Add(EmptyParam);

WordDocument1.Paragraphs.Add(EmptyParam);

WordDocument1.Paragraphs.Add(EmptyParam);

WordDocument1.Paragraphs.Add(EmptyParam);

//------------------------------------------------------------

//Вводим текст после слова "СПРАВКА" ---------------------------------------------------------------

Query1.Active:=true;//обращаемся к базе данных

Query1.First; //БД - на первую запись

Query1.MoveBy(NomClient-1); //формируем документ для выбранной записи

WordDocument1.Paragraphs.Item(WordDocument1.Paragraphs.Count).Alignment:=3; //выравнивание по ширине

WordDocument1.Paragraphs.Item(WordDocument1.Paragraphs.Count).LineSpacingRule:=2; //межстрочный интервал - двойной

StrKomb:= 'Гражданин ' + Query1.FieldByName('FIO').Asstring + ' '+ Query1.FieldByName('GODR').Asstring +

' года рождения работает в '+ Query1.FieldByName('FIRMA').Asstring+ ' , подразделение';

WordDocument1.Range.InsertAfter(StrKomb); //вводим текст

WordDocument1.Paragraphs.Add(EmptyParam); //добавить абзац, курсор в его позиции

StrKomb:= '" '+ Query1.FieldByName('PODR').Asstring + ' ", в должности " ' + Query1.FieldByName('DOLGN').Asstring + ' ", c '+

Query1.FieldByName('DATEN').Asstring+' по настоящее время.';

WordDocument1.Range.InsertAfter(StrKomb); //вводим текст

//Вставка 4 пустых абзацев, курсор в позиции последнего -----

WordDocument1.Paragraphs.Add(EmptyParam);

WordDocument1.Paragraphs.Add(EmptyParam);

WordDocument1.Paragraphs.Add(EmptyParam);

WordDocument1.Paragraphs.Add(EmptyParam);

//------------------------------------------------------------

WordDocument1.Paragraphs.Item(WordDocument1.Paragraphs.Count).Alignment:=2; //выравнивание текущего абзаца вправо

WordDocument1.Paragraphs.Item(WordDocument1.Paragraphs.Count).LineSpacingRule:=0; //межстрочный интервал - снова одинарный

StrKomb:= 'Нач. отдела кадров ________________ '+Query1.FieldByName('BOSSOK').Asstring;

WordDocument1.Range.InsertAfter(StrKomb); //вводим текст

//--------------------------------------------------------------------------------------------------

//Вставка 4 пустых абзацев, курсор в позиции последнего -----

WordDocument1.Paragraphs.Add(EmptyParam);

WordDocument1.Paragraphs.Add(EmptyParam);

WordDocument1.Paragraphs.Add(EmptyParam);

//-----------------------------------------------------------

//Раздел с новой страницы - введение разрыва раздела

Razd:=wdSectionNewPage;

Range1:=WordDocument1.Paragraphs.Last.Range;

WordDocument1.Sections.Add(EmptyParam,Razd); // текущая секция документа отделена разрывом

//-------------------------------------------------------------------------

Query1.Active:=true;//обращаемся к базе данных

Query1.First; //БД - на первую запись

ColRows:=Query1.RecordCount+1;//задаем кол-во строк будущей таблицы Word по таблице БД

ColColumns:=Query1.FieldCount; //задаем кол-во столбцов будущей таблицы Word по таблице БД

//Вставляем таблицу ----------------------------------------------------------------------------------------

Range1:=WordDocument1.Paragraphs.Last.Range;//задаем местоположение в документе - после последнего параграфа

WordDocument1.Paragraphs.Item(WordDocument1.Paragraphs.Count).Alignment:=1; //выравнивание по центру

WordDocument1.Tables.Add(Range1,ColRows,ColColumns,EmptyParam, EmptyParam);//задаем размеры таблицы

WordDocument1.Tables.Item(1).allowAutoFit:=true;//разрешение автонастройки таблицы

WordDocument1.Tables.Item(1).AutoFitBehavior(2); //автоподбор размера по ширине окна (1-по содержимому)

//-----------------------------------------------------------------------------------------------------------

//Рисуем границы таблицы по ячейкам и заполняем их из БД ----------------------------------------

for i:=1 to ColRows do //строки

begin

for j:=1 to ColColumns do //столбцы

begin

WordDocument1.Tables.Item(1).cell(i,j).Range.Font.Color:=clBlue; //форматируем цвет шрифта

WordDocument1.Tables.Item(1).cell(i,j).Borders.Enable:=1; //рисуем границы ячейки таблицы

if i < ColRows then WordDocument1.Tables.Item(1).cell(i+1,j).Range.InsertAfter(Query1.Fields[j-1].AsString); //Вводи данные из БД

end;

Query1.Next; //следующая запись БД

end;

//---------------------------------------------------------------------------------------

//Заполняем строку заголовков -----------------------------------------------------

for j:=1 to ColColumns do

begin

with WordDocument1.Tables.Item(1).cell(1,j).Range.Font do //Форматируем шрифт для названий колонок таблицы

begin

Size:=10;

Name:='ArialCyr';

Color:=clRed;

Bold:=1;

Italic:=1;

end;

WordDocument1.Tables.Item(1).cell(1,j).Range.InsertAfter(Query1.Fields[j-1].DisplayName); //Вводим названия полей БД

//WordDocument1.Tables.Item(1).cell(1,j).Range.AutoFormat;

end;

//---------------------------------------------------------------------------------------

WordApplication1.Documents.Item(doc1).Activate;//активирум документ Word

WordApplication1.Visible:=true; //Показываем все на экране

end;

//Закрытие приложения -------------------------------------------

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

if WordApplication1 <> nil then

begin

WordApplication1.Disconnect;

WordApplication1.Quit;//Закрыть приложение MS Word, если оно есть

end;

end;

//-------------------------------------------------------------------

procedure TForm1.DBGrid1CellClick(Column: TColumn);

begin

StaticText2.Caption:= Query1.fieldbyname('FIO').AsString;

StaticText3.Caption:= Query1.fieldbyname('NOM').AsString;

NomClient:=Query1.RecNo;

end;

end.

ПРИЛОЖЕНИЕ 7