- •Кафедра «Автоматизированных информационных и управляющих систем»
- •Содержание
- •Введение
- •1 Общая характеристика места практики
- •1.1Структура компании. Уровень автоматизации предприятия
- •2. Постановка задачи
- •Наряд на сдельную работу (Форма 414-апк.)
- •3 Описание метода организации данных
- •3.1 Описание входной и выходной информации
- •3.2 Организация ведения информационной базы
- •3.3 Математическая модель
- •4 Описание программно-технических средств
- •4.2 Программно-технические средства при использовании программы
- •4.3 Описание программы
4.2 Программно-технические средства при использовании программы
Для использования программы необходимы следующие программно-технические средства:
Аппаратная часть предусматривает использование следующего оборудования:
- процессор не ниже…………………………………………533 MHz
- объём оперативной памяти не ниже………………………1Gb
- жесткий диск………………………………………………..5 Gb
- монитор
- клавиатура
- мышь
- принтер
В качестве программного обеспечения необходимо иметь следующие программные продукты:
- Операционная система MS Windows ME, XP, 2000, 2003.
- Архиватор.
- Установленный пакет Microsoft Offise 2003.
4.3 Описание программы
Программа «Расчет нормы времени» разработана в среде программирования Borland Delphi 7.0 под управлением операционной системы Windows XP.
Структурное содержание директории программы
В корневом каталоге программы содержатся следующие файлы и подкаталоги:
Project.exe– файл программы;
Icons-каталог содержащий иконки;
time.dbe– база данных;
Наряд.xls– шаблон документа «Наряд на сдельные работы».
Запуск программы
Запускается программа из корневого каталога, файл Project.exe.
Завершение работы программы
Завершить работу с программой можно в любой момент времени. Чтобы завершить работу с программой нужно нажать на крестик в правом верхнем углу формы, либо выбрать пункт меню «Файл» – «Завершение работы».
Описание работы программы
После запуска файла на экране появится главная форма работы программы, на которой расположены меню и дублирующие его кнопки операций (рисунок 5).
Рис. 5. Главное окно программы
Для продолжения работы необходимо выбрать один из пунктов меню.
Перед тем, как начать работу с программой, следует заполнить начальные справочники «Цеха и подразделения», «Должности», «Сотрудники», «Оборудование», «Классификаторы», выбрав соответствующие пункты меню.
Выбрав пункт меню «Справочники» – «Номенклатура» или нажатием на дублирующую кнопку на панели откроется окно справочника номенклатуры (рисунок 3).
Выбрав пункт меню «Справочники» – «Покупатели» или нажатием на дублирующую кнопку на панели откроется окно справочника покупателей (рисунок 4).
Выбрав пункт меню «Справочники» – «Производители» или нажатием на дублирующую кнопку на панели откроется окно справочника производителей (рисунок 5).
Рис.3. Общий вид окна справочника номенклатуры
Выбрав пункт меню «Справочники» – «Производители» или нажатием на дублирующую кнопку на панели откроется окно справочника производителей (рисунок 5).
Рис.4. Общий вид окна справочника покупатели
Выбрав пункт меню «Справочники» – «Производители» или нажатием на дублирующую кнопку на панели откроется окно справочника производителей (рисунок 5).
Рис.5. Общий вид окна справочника производители,продолжение
Основные справочники имеют одинаковую организацию для удобства пользователя и содержат в себе: табличную часть с конкретными данными для каждого справочника и кнопки управления1 (рисунок 6) в верхней части.
Рис.6. Общий вид окна справочника
Описание функций панели справочников:
1 – Добавление новой записи;
2 – Удаление текущей записи;
3 – Редактирование текущей записи;
4 – Принятие изменений (активно только в режиме добавления или редактирования);
5 – Отмена изменений (активно только в режиме добавления или редактирования);
6 – Обновляет справочник.
Заполнения справочников «Должности», «Цеха и подразделения», «Сотрудники» можно автоматически воспользовавшись импортом данных из 1С: Предприятия для этого необходимо выбрать пункт меню Файл,Импорт,1С:Предприятие:
Рисунок диалога
После заполнения минимально необходимой справочной информации можно приступать к основным функциям программы.
Для расчета нормы времени необходимо ввести данные по операциям.
Для этого необходимо выбрать пункт меню Операции, Нормы рабочего времени.
Заполнения справочников «Оборудование» и списка операций с уже указанными нормами времени, можно автоматически воспользовавшись импортом данных из Архив - Autoproject для этого необходимо пункт меню Файл, Импорт, Архив – Autoproject.
Рисунок диалога
Для ввода нормы времени с бланка, поступившего от мастера цеха или участка необходимо нажать кнопку наряды на сдельные работы, откроется окно, содержащее меню сотрудники и описание работ (рисунок, )
Рисунок
После ввода документов возможна печать отчета «Наряд на сдельные работы».
Для печати отчета необходимо открыть форму «Наряд на сдельные работы», выбрать интересующего сотрудника и нажать на кнопку «Наряд на сдельные работы». После чего откроется Microsoft Excel с формой документа.
Приложение 1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, ActnList, XPStyleActnCtrls, ActnMan, ToolWin,
ActnCtrls, ActnMenus, ADODB, ExcelXP, OleServer, OleCtnrs, StdCtrls, DB,
Grids, DBGrids, DBTables, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
ImageList1: TImageList;
ActionMainMenuBar1: TActionMainMenuBar;
ActionManager1: TActionManager;
Action1: TAction;
Action2: TAction;
OpenDialog1: TOpenDialog;
Action3: TAction;
Action4: TAction;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
ADOTable2: TADOTable;
ADOTable3: TADOTable;
ADOTable4: TADOTable;
ADOTable5: TADOTable;
Action5: TAction;
Action6: TAction;
Action7: TAction;
Action8: TAction;
OpenDialog2: TOpenDialog;
Table1: TTable;
Table2: TTable;
Приложение 1
ADOTable6: TADOTable;
ADOTable7: TADOTable;
DataSource1: TDataSource;
ADOTable8: TADOTable;
DataSource2: TDataSource;
ADOTable9: TADOTable;
Action9: TAction;
Action10: TAction;
Action11: TAction;
Action12: TAction;
Panel1: TPanel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
Bevel1: TBevel;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
procedure Action1Execute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Action2Execute(Sender: TObject);
procedure Action3Execute(Sender: TObject);
procedure Action4Execute(Sender: TObject);
procedure Action5Execute(Sender: TObject);
procedure Action6Execute(Sender: TObject);
procedure Action7Execute(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Action8Execute(Sender: TObject);
function WinToDos(St: string): string;
procedure ConectionTable(Table: TTable; TName: string);
function finds(Table: TADOTable; TFild, TFind: string): boolean;
procedure Action9Execute(Sender: TObject);
Приложение 1
procedure Action10Execute(Sender: TObject);
procedure Action11Execute(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
StartDir:String;
XL: variant;
XLPic,XlSheet: OleVariant;
implementation
uses Unit2, Unit3, Unit4, ComObj, Unit5, Unit7;
{$R *.dfm}
procedure Delay(Value: Cardinal);
var
F, N: Cardinal;
begin
N := 0;
while N <= (Value div 10) do
begin
SleepEx(1, True);
Application.ProcessMessages;
Inc(N);
end;
F := GetTickCount;
repeat
Application.ProcessMessages;
N := GetTickCount;
Приложение 1
until (N - F >= (Value mod 10)) or (N < F);
end;
function TForm1.finds(Table: TADOTable; TFild, TFind: string): boolean;
var
f:boolean;
begin
f:=false;
Table.First;
while not(Table.Eof) do begin
if Table.FieldByName(TFild).AsString=TFind then begin
f:=true;
Break;
end else Table.Next;
end;
Result:=f;
end;
procedure TForm1.ConectionTable(Table: TTable; TName: string);
begin
Table.Active:=false;
repeat
until FileExists(TName);
Table.TableName:=TName;
Table.Active:=true;
end;
function TForm1.WinToDos(St: string): string;
var
Ch: PChar;
begin
Ch := StrAlloc(Length(St) + 1);
Приложение 1
AnsiToOem(PChar(St), Ch);
Result := Ch;
StrDispose(Ch);
end;
procedure TForm1.Action1Execute(Sender: TObject);
var
Frm: TForm2;
begin
if Action1.Tag=1 then begin
frm:= TForm2.Create(Owner);
Action1.Tag:=0;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var s:string;
begin
StartDir:=GetCurrentDir;
s:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+
StartDir+'\time.mdb;Mode=Share Deny None;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";'+
'Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;'+
'Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";'+
'Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;'+
'Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;';
ADOConnection1.Connected:=false;
ADOConnection1.ConnectionString:=s;
ADOConnection1.Connected:=true;
ADOTable1.Active:=false;
ADOTable2.Active:=false;
ADOTable3.Active:=false;
Приложение 1
ADOTable4.Active:=false;
ADOTable5.Active:=false;
ADOTable6.Active:=false;
ADOTable7.Active:=false;
ADOTable8.Active:=false;
ADOTable9.Active:=false;
ADOTable1.Active:=true;
ADOTable2.Active:=true;
ADOTable3.Active:=true;
ADOTable4.Active:=true;
ADOTable5.Active:=true;
ADOTable6.Active:=true;
ADOTable7.Active:=true;
ADOTable8.Active:=true;
ADOTable9.Active:=true;
end;
procedure TForm1.Action2Execute(Sender: TObject);
var i,st:integer;
NFile,kodFio,Fio,kodDolh,Dolh,kodPodr,Podr,Nach,Oklad,Razrad:String;
error,ok:boolean;
begin
if OpenDialog1.Execute then begin
NFile:=OpenDialog1.FileName;
XL := CreateOleObject('Excel.Application');
XL.DisplayAlerts := false;
XL.WorkBooks.Open(NFile);
XlSheet:=XL.WorkBooks[1].WorkSheets[1];
XL.Visible:= false;
i:=7; st:=1;
while XlSheet.Range['A'+IntToStr(i)].FormulaR1C1 <> '' do begin
Приложение 1
error:=false;
kodFio:=XlSheet.Range['B'+IntToStr(i)].FormulaR1C1;
Fio:=XlSheet.Range['C'+IntToStr(i)].FormulaR1C1;
kodDolh:=XlSheet.Range['D'+IntToStr(i)].FormulaR1C1;
Dolh:=XlSheet.Range['E'+IntToStr(i)].FormulaR1C1;
kodPodr:=XlSheet.Range['F'+IntToStr(i)].FormulaR1C1;
Podr:=XlSheet.Range['G'+IntToStr(i)].FormulaR1C1;
Nach:=XlSheet.Range['H'+IntToStr(i)].FormulaR1C1;
Oklad:=XlSheet.Range['I'+IntToStr(i)].FormulaR1C1;
Razrad:=XlSheet.Range['J'+IntToStr(i)].FormulaR1C1;
ADOTable1.Filter:='kod='+kodPodr;
ADOTable2.Filter:='kod='+kodDolh;
if ADOTable1.IsEmpty then begin
ADOTable1.Insert;
ADOTable1.FieldByName('kod').AsString:=kodPodr;
ADOTable1.FieldByName('name').AsString:=Podr;
ADOTable1.FieldByName('otv').AsString:=Nach;
ADOTable1.Post;
end else
if MessageDlg('Заменить данные по подразделению?'+#13+
'Наименование: '+ADOTable1.FieldByName('name').AsString+#13+'Ответственный: '+ADOTable1.FieldByName('otv').AsString,
mtConfirmation, [mbYes, mbNo], 0) = mrYes
then begin
ADOTable1.Edit;
ADOTable1.FieldByName('kod').AsString:=kodPodr;
ADOTable1.FieldByName('name').AsString:=Podr;
ADOTable1.FieldByName('otv').AsString:=Nach;
ADOTable1.Post;
end;
Приложение 1
if ADOTable2.IsEmpty then begin
ADOTable2.Insert;
ADOTable2.FieldByName('kod').AsString:=kodDolh;
ADOTable2.FieldByName('name').AsString:=Dolh;
ADOTable2.Post;
end else
if MessageDlg('Заменить данные по должности?'+#13+
'Наименование: '+ADOTable2.FieldByName('name').AsString,
mtConfirmation, [mbYes, mbNo], 0) = mrYes
then begin
ADOTable2.Edit;
ADOTable2.FieldByName('kod').AsString:=kodDolh;
ADOTable2.FieldByName('name').AsString:=Dolh;
ADOTable2.Post;
end;
ADOTable4.Filter:='name='+''''+Oklad+'''';
if ADOTable4.IsEmpty then begin
error:=true;
ShowMessage('Незаведен вид окладов');
end else
Oklad:=ADOTable4.FieldByName('id').AsString;
ADOTable5.Filter:='name='+''''+Razrad+'''';
if ADOTable5.IsEmpty then begin
error:=true;
ShowMessage('Незаведен вид разряда');
end else
Razrad:=ADOTable5.FieldByName('id').AsString;
if error then
ShowMessage('Сотрудник '+Fio+' не будет добавлен!')
else begin
Приложение 1
ADOTable3.Filter:='kod='+kodFio;
if ADOTable3.IsEmpty then begin
ADOTable3.Insert;
ADOTable3.FieldByName('fid').AsString:=ADOTable1.FieldByName('id').AsString;
ADOTable3.FieldByName('kod').AsString:=kodFio;
ADOTable3.FieldByName('FIO').AsString:=Fio;
ADOTable3.FieldByName('vidoplat').AsString:=Oklad;
ADOTable3.FieldByName('dolh').AsString:=ADOTable2.FieldByName('id').AsString;
ADOTable3.FieldByName('razrad').AsString:=Razrad;
ADOTable3.Post;
end else
if MessageDlg('Заменить данные по сотруднику?'+#13+
'Ф.И.О.: '+ADOTable3.FieldByName('FIO').AsString+#13+
'Вид оплаты: '+ADOTable4.FieldByName('name').AsString+#13+
'Должность: '+ADOTable2.FieldByName('name').AsString+#13+
'Разряд: '+ADOTable5.FieldByName('name').AsString,
mtConfirmation, [mbYes, mbNo], 0) = mrYes
then begin
ADOTable3.Edit;
ADOTable3.FieldByName('fid').AsString:=ADOTable1.FieldByName('id').AsString;
ADOTable3.FieldByName('kod').AsString:=kodFio;
ADOTable3.FieldByName('FIO').AsString:=Fio;
ADOTable3.FieldByName('vidoplat').AsString:=Oklad;
ADOTable3.FieldByName('dolh').AsString:=ADOTable2.FieldByName('id').AsString;
ADOTable3.FieldByName('razrad').AsString:=Razrad;
ADOTable3.Post;
end;
end;
i:=i+1;
end;
Приложение 1
XL.ActiveWorkbook.Close;
XL.Application.Quit;
end;
end;
procedure TForm1.Action3Execute(Sender: TObject);
var
Frm: TForm3;
begin
if Action3.Tag=1 then begin
frm:= TForm3.Create(Owner);
frm.Caption:='Виды окладов';
frm.DataSource1.DataSet:=Frm.ADOTable1;
Action3.Tag:=0;
end;
end;
procedure TForm1.Action4Execute(Sender: TObject);
var
Frm: TForm3;
begin
if Action4.Tag=1 then begin
frm:= TForm3.Create(Owner);
frm.Caption:='Разряды';
frm.DataSource1.DataSet:=Frm.ADOTable2;
Action4.Tag:=0;
end;
end;
procedure TForm1.Action5Execute(Sender: TObject);
begin
Close;
end;
Приложение 1
procedure TForm1.Action6Execute(Sender: TObject);
var
Frm: TForm3;
begin
if Action6.Tag=1 then begin
frm:= TForm3.Create(Owner);
frm.Caption:='Должности';
frm.DataSource1.DataSet:=Frm.ADOTable3;
Action6.Tag:=0;
end;
end;
procedure TForm1.Action7Execute(Sender: TObject);
var
Frm: TForm4;
begin
if Action7.Tag=1 then begin
frm:= TForm4.Create(Owner);
Action7.Tag:=0;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
Form1.Action7.Tag:=1;
end;
procedure TForm1.Action8Execute(Sender: TObject);
var f:string;
files:TextFile;
find:boolean;
begin
Приложение 1
if OpenDialog2.Execute then begin
f:=OpenDialog2.FileName;
AssignFile(files,StartDir+'\clear.bat');
Rewrite(files);
writeln(files, WinToDos(':delite'));
writeln(files, WinToDos('del "'+StartDir+'\temp\*.*" /q /f'));
writeln(files, WinToDos('if ERRORLEVEL 1 goto delite'));
CloseFile(files);
WinExec(PChar(StartDir+'\clear.bat'),0);
Delay(3000);
WinExec(PChar(StartDir+'\7z.exe e -o"'+StartDir+'\temp" "'+f+'"'),0);
Delay(3000);
ConectionTable(Table1, StartDir+'\temp\DET_MEX.db');
ADOTable6.Filter:='Oboz='+''''+Table1.FieldByName('ObozDetal').AsString+'''';
if ADOTable6.IsEmpty then begin
ADOTable6.Insert;
ADOTable6.FieldByName('Oboz').AsString:=Table1.FieldByName('ObozDetal').AsString;
ADOTable6.FieldByName('Name').AsString:=Table1.FieldByName('NameDet').AsString;
ADOTable6.FieldByName('Data').AsString:=Table1.FieldByName('Data').AsString;
ADOTable6.Post;
end else
if MessageDlg('Заменить данные по детали?'+#13+
'№ чертежа: '+Table1.FieldByName('ObozDetal').AsString+#13+
'Дата составления: '+Table1.FieldByName('Data').AsString,
mtConfirmation, [mbYes, mbNo], 0) = mrYes
then begin
ADOTable6.Edit;
ADOTable6.FieldByName('Oboz').AsString:=Table1.FieldByName('ObozDetal').AsString;
ADOTable6.FieldByName('Name').AsString:=Table1.FieldByName('NameDet').AsString;
ADOTable6.FieldByName('Data').AsString:=Table1.FieldByName('Data').AsString;
Приложение 1
ADOTable6.Post;
end;
ConectionTable(Table2, StartDir+'\temp\OP_MEX.db');
Table2.First;
while not(Table2.Eof) do begin
ADOTable7.Filter:='name='+''''+Table2.FieldByName('Equipment1').AsString+'''';
if ADOTable7.IsEmpty then begin
ADOTable7.Insert;
ADOTable7.FieldByName('name').AsString:=Table2.FieldByName('Equipment1').AsString;
ADOTable7.Post;
end;
find:=finds(ADOTable8,'InfOper',Table2.FieldByName('InfOper').AsString);
if not(find) then begin
ADOTable8.Insert;
ADOTable8.FieldByName('NameOper').AsString:=Table2.FieldByName('NameOper').AsString;
ADOTable8.FieldByName('InfOper').AsString:=Table2.FieldByName('InfOper').AsString;
ADOTable8.Post;
end else
if MessageDlg('Заменить операцию?'+#13+
'Название операции: '+ADOTable8.FieldByName('NameOper').AsString+#13+
'Описание операции: '+ADOTable8.FieldByName('InfOper').AsString,
mtConfirmation, [mbYes, mbNo], 0) = mrYes
then begin
ADOTable8.Edit;
ADOTable8.FieldByName('NameOper').AsString:=Table2.FieldByName('NameOper').AsString;
ADOTable8.FieldByName('InfOper').AsString:=Table2.FieldByName('InfOper').AsString;
ADOTable8.Post;
end;
//ADOTable9.Filter:='idOborud='+ADOTable7.FieldByName('id').AsString;
find:=finds(ADOTable9,'idOborud',ADOTable7.FieldByName('id').AsString);
Приложение 1
if not(find) then begin
ADOTable9.Insert;
ADOTable9.FieldByName('idOborud').AsString:=ADOTable7.FieldByName('id').AsString;
ADOTable9.FieldByName('Tvspom').AsString:=Table2.FieldByName('Tvspom').AsString;
ADOTable9.FieldByName('Tosn').AsString:=Table2.FieldByName('Tosn').AsString;
ADOTable9.FieldByName('TimePZ').AsString:=Table2.FieldByName('TimePZ').AsString;
ADOTable9.FieldByName('TimeSHT').AsString:=Table2.FieldByName('TimeSHT').AsString;
ADOTable9.Post;
end else
if MessageDlg('Заменить данные по времени (t)?'+#13+
't - вспомогательное: '+ADOTable9.FieldByName('Tvspom').AsString+#13+
't - основное: '+ADOTable9.FieldByName('Tosn').AsString+#13+
't - PZ: '+ADOTable9.FieldByName('TimePZ').AsString+#13+
't - SHT: '+ADOTable9.FieldByName('TimeSHT').AsString,
mtConfirmation, [mbYes, mbNo], 0) = mrYes
then begin
ADOTable9.Edit;
ADOTable9.FieldByName('idOborud').AsString:=ADOTable7.FieldByName('id').AsString;
ADOTable9.FieldByName('Tvspom').AsString:=Table2.FieldByName('Tvspom').AsString;
ADOTable9.FieldByName('Tosn').AsString:=Table2.FieldByName('Tosn').AsString;
ADOTable9.FieldByName('TimePZ').AsString:=Table2.FieldByName('TimePZ').AsString;
ADOTable9.FieldByName('TimeSHT').AsString:=Table2.FieldByName('TimeSHT').AsString;
ADOTable9.Post;
end;
Table2.Next;
end;
end;
end;
procedure TForm1.Action9Execute(Sender: TObject);
var
Приложение 1
Frm: TForm3;
begin
if Action9.Tag=1 then begin
frm:= TForm3.Create(Owner);
frm.Caption:='Оборудование';
frm.DataSource1.DataSet:=Frm.ADOTable4;
Action9.Tag:=0;
end;
end;
procedure TForm1.Action10Execute(Sender: TObject);
var
Frm: TForm5;
begin
if Action10.Tag=1 then begin
frm:= TForm5.Create(Owner);
Action10.Tag:=0;
end;
end;
procedure TForm1.Action11Execute(Sender: TObject);
var
Frm: TForm7;
begin
if Action11.Tag=1 then begin
frm:= TForm7.Create(Owner);
Action11.Tag:=0;
end;
end;
end.
Приложение 2
1Кнопки управления присутствуют на всех формах программы.