сервис центр. курсак. Руководство. 34 Порядок ввода в эксплуатацию. 35 Литература 37 Цели и задачи курсовой работы Цель работы
Скачать 2.11 Mb.
|
Оглавление:Оглавление: 2 2 Цели и задачи курсовой работы 3 Обзор рынка аналогичных программ. 3 Сбор исходных данных. 3 Интерфейс проекта 4 Технологии. 17 Руководство. 34 Порядок ввода в эксплуатацию. 35 Литература 37 Цели и задачи курсовой работыЦель работы: Создание базы данных: «Автоматизированное рабочее место сервисного центра» СУБД или язык программирования, используемые для реализации курсовой работы: SQL server InterBase 7, Delphi 7 Основные аспекты курсовой работы: Основная задача курсовой работы создание программного продукта позволяющего вести учет приемки-выдачи заказов в сервисном центре. Состав курсовой работы должен содержать следующие составные части: Полностью завершённый проект базы данных «Автоматизированное рабочее место сервисного центра», реализованный на базе СУБД InterBase 7, и алгоритмического языка Delphi 7, содержащий следующие модули: Ввод нового заказа Работа с существующими заказами Сортировка Отчет о проделанной работе сервисного центра Заказчик также требует учесть чтобы был ввод данных сервисного центра, возможность сортировать по состоянию заказа. Обзор рынка аналогичных программ.Имеется целая серия ПО позволяющих вести работу в сервисном центре. Но не многие из этой армии Software имеют гибкую настройку сортировки заказов. К тому же, программы подобного уровня стоят не малые деньги. Также во многих аналогах нет возможности быстро оценить степень срочности заказа благодаря цветовому выделению. Нет также в своем большинстве таких программ вывода информации на бумажный носитель. В нашей работе мы устраним эти недостатки. А именно добавим в проект возможность гибкой сортировки заказов, цветовое выделение строк, вывод отчетов на бумажный носитель. Программа получила свое название: Dialog3. Сбор исходных данных.Разберем сам процесс автоматизации рабочего места сервисного центра. В сервисный центр поступает (Дата приемки, Дата выдачи) устройство (Устройство, Производитель, Модель, Серийный номер), вносятся сведенья о сделавшем заявку, это может быть как физическое лицо, так и юридическое. В случае, если сделало заявку юридическое лицо вносятся сведенья о названии организации и фамилия, имя, отчество через кого была сделана заявка организацией (Правовая форма, Адрес, Телефон, Фамилия, Имя, Отчество) и кто из сотрудников выполнил заявку (Выполнил, Фамилия, Имя, Отчество). После выполнения заявки вносятся дополнительные сведенья о проделанной работе: какая работа была проделана, в случае если выполняемые услуги в сервисном центре систематизированы вводиться артикул, количество видов работ, цена работы, общая сумма за выполненную работу, дополнительное описание работы если есть необходимость, в случае если пришлось заменить какое-то комплектующие вносятся сведенья об снятом устройстве и сведенья об установленном устройстве (Работа, Артикул, Количество, Цена, Сумма, Описание, Выполнено, Снято, Установлено). Интерфейс проектаПосле запуска программы мы видим главное окно программы. Можно посмотреть, что необходимо делать. Цветов выделено: Что позволяет быстро сориентироваться сотруднику сервисного центра – какую работу надо проделать в п6ервую очередь. Если мы выберем меню Файл, то нам будет предложено выйти из программы. При выборе в пункте меню поля Запись, нам будет предложено: Выберем Добавить: мы видим форму заявки на обслуживание. Номер заявка на ремонт и дата приема заявки подставляется автоматически. Далее необходимо выбрать какой вид ремонта производиться: платный или гарантийный. После чего выбираем устройство, если в устройствах выбрано устройство, которое может содержать другие комплектующие (например системный блок может содержать процессор, материнскую плату, жесткий диск видео и звуковую карту и т.д.), то нажимаем кнопочку возле поля Устройство. Далее мы выбираем производителя, модель и серийный номер устройства. После чего нам необходимо заполнить название организации делающей заявку или же имя, фамилию, отчество заявителя. Ввести адрес и телефон заказчика. В случае, если заказ делала организация, необходимо ввести фамилию, имя, отчество через кого производился заказ. После того, как мы ввели основные сведенья нам необходимо нажать далее кнопку Далее, без заполненной формы кнопка ОК для принятия заказа не активируется. После того, как мы заполнили форму Неисправность и перечень работ, мы нажимаем Ок. Заказ принят. При нажатии клавиши Enter или же Запись -> Изменить появляется следующая форма: В этой форме мы можем изменить, как первоначальные сведенья, так и сведенья необходимые нам в течении всей работы над заказом. Во-первых это свойство Состояние. После того, как работа выполнена заполняется форма Выполненная работа: Здесь мы устанавливаем какая работа проводилась над заказом и стоимость проводимой работы. В случае, если во время ремонта производилась замена деталей или комплектующих, то указывается это в формах Снято и Установлено соответственно. Здесь указываются сведенья об устройстве, серийный номер устройства, артикул, количество и цена устройства. Устройств может быть неограниченное количество. Если на форме мы нажмем кнопку печать, то появится следующая форма: Если мы выберем кнопку Квиток, то появиться форма для вывода на печать заявки на ремонт. Данный квиток выдается заказчику. Данную форму предоставил заказчик программы, она содержит все необходимые заказчику сведенья: дату заказа, кто принял заказ, название и телефон организации по которому можно узнать, как продвигается выполнение работы, номер заказа, какая работа выполняется и какое оборудование предоставил заказчик сервисному центру. Если же мы выберем Отчет, то появиться отчет о проделанной работе над заказом. В отчете предоставлены полные сведенья о проделанной работе: номер заказа, дата приемки и дата выдачи заказа, кто принимал и кто выдавал заказ, какая работа была проведена, какие устройства были заменены, общая стоимость проведенных работ. Благодаря тому, что сведенья о конечной сумме проделанной работы достаточно полные это позволяет заказчику увидеть «за что» он отдает деньги. Для данного отчета приведен пример: в сервисный центр поступила заявка на лечение вирусов. Для лечения вирусов был установлен антивирусный пакет стоимостью 500 рублей. В процессе работы встала производственная необходимость извлечь из системного блока CD – Rom, тут же указывается его цена и модель. В результате этой манипуляции в графе Итого Выполненная работа из общей цены была отнята цена привода. После того, заказ выполнен необходимо нажать кнопку Заказ выполнен, после чего со строки спадает выделение цветом. Если в меню Запись выбрать Удалить, то строчка будет выделена черным цветом. Последний пункт в меню Запись это Сортировка. Сортировка имеет три вкладки Сортировка, Дополнительно и Расширенный поиск. В Сортировке вводиться критерий выборки и пункт по которому производиться сортировка. В случае, если необходим расширенный поиск, то необходимо выбрать свойство Использовать расширенный поиск. При выборе условий используются логические операции И и Или. Если необходимо, то для сортировки необходимо использовать вкладку Дополнительно В Сортировка -> Дополнительно, можно выбрать свойства: Показывать удаленные записи, Находиться сколько дней в ремонте, Показать все невыполненные заказы, находящиеся более 7 дней. Далее в меню идет Отчет. В отчете мы можем увидеть работу сервисного центра: какие заказы выполнены, кто заказчик, доход за указанный промежуток времени, дату выполнения заказа, какой вид ремонта (гарантийный или платный ремонт). Программа оснащена достаточно полной справочной системой. В справке полностью отражены о системойолнения формы:сновные свойства программного продукта. По пожеланиям заказчика в программе реализовано ведение истории работы с программой. Благодаря этому свойству Руководитель может в любое время посмотреть когда и восколько была заявка или же был произведен ремонт. В целом благодаря истории можно просмотреть активность работы отдела. Так же, конечный пользователь базы данных может настроить программу соответствуя своим пожеланиям. По умолчанию при установке программы в первый раз все свойства включены. Пользователь программы может по своему усмотрению изменить цвета выделения в программе. Единственное, что необходимо учесть в данном случае это то, что если после того, как изменить настройки и выйти из программы, то другому пользователю запустившему программу после произведенных изменений будет работать с уже произведенными настройками. То есть, может произойти прецедент, что сотрудники будут постоянно менять настройки программы, поэтому рекомендуется оставлять настройки по умолчанию. Изменения цвета в программе реализовано очень удобным образом. По желанию, могут быть использованы, как заранее предложенные цвета, так и цвета на выбор пользователя используя графическую палитру. В программу так же включено сведенья о разработчике: Имя, номер телефона и адрес электронной почты. Это позволяет в случае необходимости доработки или форс-мажорных обстоятельств легко связаться с разработчиком. Технологии.Процедура закраски ячеек: procedure TForm1.DBCoolGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var ss,s:string; dat,dat1:TDateTime; d1,d,m1,m,y1,y:word; begin if DataModule2.IBQuery1_2.RecordCount>0 then begin s:=column.Field.Text; if Column.Index=0 then begin if s='N' then s:='В ремонте'; if s='B' then s:='Отправлено по гарантии'; if s='C' then s:='Ждем запчасти'; if s='D' then s:='Ждем заказчика'; if s='Y' then s:='Выполнено'; if s='X' then s:='Удалено'; end; if Column.Index=3 then begin ss:= (Sender as TDBGrid).DataSource.DataSet.FieldByName('T113').AsString; if ss<>'Y' then s:='Не готово'; end; if Column.Index=5 then begin if s='1' then s:='Платный'else if s='2' then s:='Гарантийный'; end; if Column.Index=4 then begin DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl04 '); if s='' then s:='none'; IBQueryAll.SQL.Add('where T401='+s+' '); end; DataModule2.IBQueryAll.Open; if DataModule2.IBQueryAll.RecordCount>0 then s:=Trim(DataModule2.IBQueryAll.fieldbyname('T402').AsString); end; if Column.Index=6 then begin DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl07 '); if s='' then s:='none'; IBQueryAll.SQL.Add('where T701='+s+' '); end; DataModule2.IBQueryAll.Open; if DataModule2.IBQueryAll.RecordCount>0 then s:=Trim(DataModule2.IBQueryAll.fieldbyname('T702').AsString); end; if Column.Index=7 then begin DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl07 '); if s='' then s:='none'; IBQueryAll.SQL.Add('where T701='+s+' '); end; DataModule2.IBQueryAll.Open; if DataModule2.IBQueryAll.RecordCount>0 then s:=Trim(DataModule2.IBQueryAll.fieldbyname('T707').AsString); end; if Column.Index=8 then begin DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl08 '); if s='' then s:='none'; IBQueryAll.SQL.Add('where T801='+s+' '); end; DataModule2.IBQueryAll.Open; if DataModule2.IBQueryAll.RecordCount>0 then s:=Trim(DataModule2.IBQueryAll.fieldbyname('T802').AsString); end; if Column.Index=9 then begin DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl08 '); if s='' then s:='none'; IBQueryAll.SQL.Add('where T801='+s+' '); end; DataModule2.IBQueryAll.Open; if DataModule2.IBQueryAll.RecordCount>0 then s:=Trim(DataModule2.IBQueryAll.fieldbyname('T802').AsString); end; if (Sender as TDBGrid).DataSource.DataSet.FieldByName('T113').AsString='Y' then begin DBCoolGrid1.Canvas.Font.Color:=clGray; DBCoolGrid1.Canvas.Brush.Color:=clWhite; end else begin DBCoolGrid1.Canvas.Font.Color:=clBlack; DBCoolGrid1.Canvas.Brush.Color:=clWhite; end; if (Sender as TDBGrid).DataSource.DataSet.FieldByName('T113').AsString<>'Y' then begin dat:=(Sender as TDBGrid).DataSource.DataSet.FieldByName('T103').AsDateTime; dat1:=Date; DecodeDate(Dat,y,m,d); DecodeDate(Dat1,y1,m1,d1); if dat1-dat >=7 then begin if (Sender as TDBGrid).DataSource.DataSet.FieldByName('T113').AsString='N' then begin DBCoolGrid1.Canvas.Font.Color:=clWhite; DBCoolGrid1.Canvas.Brush.Color:=form12.Panel1.Color; end; if (Sender as TDBGrid).DataSource.DataSet.FieldByName('T113').AsString='D' then begin DBCoolGrid1.Canvas.Font.Color:=clWhite; DBCoolGrid1.Canvas.Brush.Color:=form12.Panel2.Color; end; if (Sender as TDBGrid).DataSource.DataSet.FieldByName('T113').AsString='C' then begin DBCoolGrid1.Canvas.Font.Color:=clWhite; DBCoolGrid1.Canvas.Brush.Color:=form12.Panel3.Color; end; if (Sender as TDBGrid).DataSource.DataSet.FieldByName('T113').AsString='B' then begin DBCoolGrid1.Canvas.Font.Color:=clWhite; DBCoolGrid1.Canvas.Brush.Color:=form12.Panel4.Color; end; end; end; if (Sender as TDBGrid).DataSource.DataSet.FieldByName('T113').AsString='X' then begin DBCoolGrid1.Canvas.Font.Color:=clGray; DBCoolGrid1.Canvas.Brush.Color:=form12.Panel5.Color; end; {if gdFocused in State then NoId:=DataModule2.IBQuery1_2T101.AsInteger; if NoId =(Sender as TDBGrid).DataSource.DataSet.FieldByName('T101').AsInteger then begin DBCoolGrid1.Canvas.Font.Style:=[fsBold]; DBCoolGrid1.Canvas.Font.Color:=clWhite; DBCoolGrid1.Canvas.Brush.Color:=$00FF8000; end; } if gdFocused in State then begin DBCoolGrid1.Canvas.Font.Style:=[fsBold]; DBCoolGrid1.Canvas.Font.Color:=clWhite; DBCoolGrid1.Canvas.Brush.Color:=$00FF8000; end; DBCoolGrid1.Canvas.FillRect(Rect); DBCoolGrid1.Canvas.TextRect(Rect, Rect.Left+1, Rect.Top + 2, s); end; end; Процедура занесения данных в базу: procedure TForm3.SpeedButton1Click(Sender: TObject); var i,NT2,NT1,NT4,NT5,NT6,NT7,NT8,NT9,NT10,NT11,NT12:integer; s,snam,sot,ss:string; DtD:TDateTime; DD,MM,YY:word; begin dxPickEdit1.Text:=TestStr(dxPickEdit1.Text); dxPickEdit2.Text:=TestStr(dxPickEdit2.Text); dxPickEdit3.Text:=TestStr(dxPickEdit3.Text); dxPickEdit4.Text:=TestStr(dxPickEdit4.Text); dxPickEdit5.Text:=TestStr(dxPickEdit5.Text); dxPickEdit6.Text:=TestStr(dxPickEdit6.Text); dxPickEdit7.Text:=TestStr(dxPickEdit7.Text); dxPickEdit8.Text:=TestStr(dxPickEdit8.Text); dxPickEdit9.Text:=TestStr(dxPickEdit9.Text); dxPickEdit10.Text:=TestStr(dxPickEdit10.Text); dxPickEdit11.Text:=TestStr(dxPickEdit11.Text); form1.Memo1.Lines.Append('+------{**___**}------+'); form1.Memo1.Lines.Append('Add:'+dxPickEdit1.Text); form1.Memo1.Lines.Append('Add:'+dxPickEdit2.Text); form1.Memo1.Lines.Append('Add:'+dxPickEdit3.Text); form1.Memo1.Lines.Append('Add:'+dxPickEdit4.Text); form1.Memo1.Lines.Append('Add:'+dxPickEdit5.Text); form1.Memo1.Lines.Append('Add:'+dxPickEdit6.Text); form1.Memo1.Lines.Append('Add:'+dxPickEdit7.Text); form1.Memo1.Lines.Append('Add:'+dxPickEdit8.Text); form1.Memo1.Lines.Append('Add:'+dxPickEdit9.Text); form1.Memo1.Lines.Append('Add:'+dxPickEdit10.Text); form1.Memo1.Lines.Append('Add:'+dxPickEdit11.Text); DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl04 '); s:=Trim(dxPickEdit1.Text); if s='' then s:='none'; IBQueryAll.SQL.Add('where T402='''+s+''''); end; DataModule2.IBQueryAll.Open; if DataModule2.IBQueryAll.RecordCount>0 then nt4:=DataModule2.IBQueryAll.fieldbyname('T401').AsInteger else begin DataModule2.IBTable4.Insert; DataModule2.IBTable4T401.AsInteger:=0; s100:=dxPickEdit1.Text; if s100='' then s100:='none'; DataModule2.IBTable4T402.AsString:=s100; DataModule2.IBTable4.Post; DataModule2.IBQueryAll.Close; DataModule2.IBQueryAll.Open; nt4:=DataModule2.IBQueryAll.fieldbyname('T401').AsInteger end; DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl05 '); s:=Trim(dxPickEdit2.Text); if s='' then s:='none'; IBQueryAll.SQL.Add('where T502='''+s+''''); end; DataModule2.IBQueryAll.Open; if DataModule2.IBQueryAll.RecordCount>0 then nt5:=DataModule2.IBQueryAll.fieldbyname('T501').AsInteger else begin DataModule2.IBTable5.Insert; DataModule2.IBTable5T501.AsInteger:=0; s100:=dxPickEdit2.Text; if s100='' then s100:='none'; DataModule2.IBTable5T502.AsString:=s100; DataModule2.IBTable5.Post; DataModule2.IBQueryAll.Close; DataModule2.IBQueryAll.Open; nt5:=DataModule2.IBQueryAll.fieldbyname('T501').AsInteger end; DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl06 '); s:=Trim(dxPickEdit3.Text); if s='' then s:='none'; IBQueryAll.SQL.Add('where T602='''+s+''''); end; DataModule2.IBQueryAll.Open; if DataModule2.IBQueryAll.RecordCount>0 then nt6:=DataModule2.IBQueryAll.fieldbyname('T601').AsInteger else begin DataModule2.IBTable6.Insert; DataModule2.IBTable6T601.AsInteger:=0; s100:=dxPickEdit3.Text; if s100='' then s100:='none'; DataModule2.IBTable6T602.AsString:=s100; DataModule2.IBTable6.Post; DataModule2.IBQueryAll.Close; DataModule2.IBQueryAll.Open; nt6:=DataModule2.IBQueryAll.fieldbyname('T601').AsInteger end; DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl08 '); s:=Trim(dxPickEdit11.Text); if s='' then s:='none'; IBQueryAll.SQL.Add('where T802='''+s+''''); end; DataModule2.IBQueryAll.Open; if DataModule2.IBQueryAll.RecordCount>0 then nt8:=DataModule2.IBQueryAll.fieldbyname('T801').AsInteger else begin DataModule2.IBTable8.Insert; DataModule2.IBTable8T801.AsInteger:=0; s50:=dxPickEdit11.Text; if s50='' then s50:='none'; DataModule2.IBTable8T802.AsString:=s50; DataModule2.IBTable8.Post; DataModule2.IBQueryAll.Close; DataModule2.IBQueryAll.Open; nt8:=DataModule2.IBQueryAll.fieldbyname('T801').AsInteger end; DataModule2.IBQueryAll.Close; if dxPickEdit5.Text='' then begin snam:=trim(dxPickEdit9.Text); sot:=trim(dxPickEdit10.Text); ss:=Trim(dxPickEdit8.Text); if snam<>'' then ss:=ss+' '+snam[1]+'.'; if sot<>'' then ss:=ss+' '+sot[1]+'.'; dxPickEdit5.Text:=ss; end; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl07 '); s:=Trim(dxPickEdit5.Text); if s='' then s:='none'; IBQueryAll.SQL.Add('where (T702='''+s+''') and'); s:=Trim(dxPickEdit6.Text); if s='' then s:='none'; IBQueryAll.SQL.Add(' (T706='''+s+''') and'); s:=Trim(dxPickEdit7.Text); if s='' then s:='none'; IBQueryAll.SQL.Add(' (T707='''+s+''') and'); s:=Trim(dxPickEdit8.Text); if s='' then s:='none'; IBQueryAll.SQL.Add(' (T703='''+s+''') and'); s:=Trim(dxPickEdit9.Text); if s='' then s:='none'; IBQueryAll.SQL.Add(' (T704='''+s+''') and'); s:=Trim(dxPickEdit10.Text); if s='' then s:='none'; IBQueryAll.SQL.Add(' (T705='''+s+''')'); end; DataModule2.IBQueryAll.Open; if DataModule2.IBQueryAll.RecordCount>0 then nt7:=DataModule2.IBQueryAll.fieldbyname('T701').AsInteger else begin DataModule2.IBTable7.Insert; DataModule2.IBTable7T701.AsInteger:=0; s100:=dxPickEdit5.Text; if s100='' then s100:='none'; DataModule2.IBTable7T702.AsString:=s100; s30:=dxPickEdit8.Text; if s30='' then s30:='none'; DataModule2.IBTable7T703.AsString:=s30; s30:=dxPickEdit9.Text; if s30='' then s30:='none'; DataModule2.IBTable7T704.AsString:=s30; s30:=dxPickEdit10.Text; if s30='' then s30:='none'; DataModule2.IBTable7T705.AsString:=s30; s100:=dxPickEdit6.Text; if s100='' then s100:='none'; DataModule2.IBTable7T706.AsString:=s100; s30:=dxPickEdit7.Text; if s30='' then s30:='none'; DataModule2.IBTable7T707.AsString:=s30; DataModule2.IBTable7.Post; DataModule2.IBQueryAll.Close; DataModule2.IBQueryAll.Open; nt7:=DataModule2.IBQueryAll.fieldbyname('T701').AsInteger end; {Showmessage('T4='+inttostr(nt4)+' T5='+inttostr(nt5)+' T6='+inttostr(nt6)+' T7='+inttostr(nt7)+' '+' T8='+inttostr(nt8)+' ');} begin DataModule2.IBTable1.Insert; DataModule2.IBTable1T101.AsInteger:=0; DataModule2.IBTable1T102.AsInteger:=round(dxSpinEdit1.Value); DataModule2.IBTable1T103.AsDateTime:=StrToDate(dxDateEdit1.Text); dtd:=StrToDate(dxDateEdit1.Text); DecodeDate(DtD,YY,MM,DD); DtD:=DateSer(YY,MM,DD-1); DataModule2.IBTable1T104.AsDateTime:=DtD; DataModule2.IBTable1T105.AsInteger:=NT4; DataModule2.IBTable1T106.AsInteger:=NT5; DataModule2.IBTable1T107.AsInteger:=NT6; s20:=dxPickEdit4.Text; if s20='' then s20:='none'; DataModule2.IBTable1T108.AsString:=s20; if dxCheckEdit1.Checked then DataModule2.IBTable1T109.AsString:='1' else DataModule2.IBTable1T109.AsString:='2'; DataModule2.IBTable1T110.AsInteger:=NT7; DataModule2.IBTable1T111.AsInteger:=NT8; DataModule2.IBTable1T112.AsInteger:=NT8; DataModule2.IBTable1T113.AsString:='N'; DataModule2.IBTable1.Post; DataModule2.IBQueryAll.Close; DataModule2.IBQueryAll.Open; DataModule2.IBTable1.Refresh; DataModule2.IBTable1.Last; nt1:=DataModule2.IBTable1T101.AsInteger; for i:=1 to 5 do if trim(form4.StringGrid1.Cells[1,i])<>'' then begin DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl09 '); s:=trim(form4.StringGrid1.Cells[1,i]); if s='' then s:='none'; IBQueryAll.SQL.Add('where T902='''+s+''''); end; DataModule2.IBQueryAll.Open; if DataModule2.IBQueryAll.RecordCount>0 then nt2:=DataModule2.IBQueryAll.fieldbyname('T901').AsInteger else begin DataModule2.IBTable9.Insert; DataModule2.IBTable9T901.AsInteger:=0; s200:=trim(form4.StringGrid1.Cells[1,i]); if s200='' then s200:='none'; DataModule2.IBTable9T902.AsString:=s200; DataModule2.IBTable9.Post; DataModule2.IBQueryAll.Close; DataModule2.IBQueryAll.Open; nt2:=DataModule2.IBQueryAll.fieldbyname('T901').AsInteger end; DataModule2.IBTable2.Insert; DataModule2.IBTable2T201.AsInteger:=0; DataModule2.IBTable2T202.AsInteger:=nt1; DataModule2.IBTable2T203.AsInteger:=nt2; DataModule2.IBTable2.Post; end; end; for i:=1 to Form14.CoolStringGrid1.RowCount-1 do if trim(form14.CoolStringGrid1.Cells[1,i])<>'' then begin DataModule2.IBTable14.Insert; DataModule2.IBTable14T1401.AsInteger:=0; DataModule2.IBTable14T1402.AsInteger:=nt1; s100:=Form14.CoolStringGrid1.Cells[0,i]; if s100='' then s100:='none'; DataModule2.IBTable14T1403.AsString:=s100; s100:=Form14.CoolStringGrid1.Cells[1,i]; if s100='' then s100:='none'; DataModule2.IBTable14T1404.AsString:=s100; DataModule2.IBTable14.Post; end; DataModule2.IBTable1.Refresh; DataModule2.IBTable2.Refresh; DataModule2.IBTable4.Refresh; DataModule2.IBTable5.Refresh; DataModule2.IBTable6.Refresh; DataModule2.IBTable7.Refresh; DataModule2.IBTable8.Refresh; DataModule2.IBTable9.Refresh; Form1.RefreshDB; close; end; Процедура закрытия БД (эмуляция перезагрузки компьютера): Procedure TForm1.RefreshDB; begin DataModule2.IBDatabase1.Close; DataModule2.IBDatabase1.Open; DataModule2.IBTable1.Open; DataModule2.IBTable2.Open; DataModule2.IBTable3.Open; DataModule2.IBTable4.Open; DataModule2.IBTable5.Open; DataModule2.IBTable6.Open; DataModule2.IBTable7.Open; DataModule2.IBTable8.Open; DataModule2.IBTable9.Open; DataModule2.IBTable10.Open; DataModule2.IBTable11.Open; DataModule2.IBTable12.Open; DataModule2.IBTable14.Open; DataModule2.IBQuery1.Open; DataModule2.IBQuery1_1.Open; DataModule2.IBQuery1_2.Open; DataModule2.IBQuery10.Open; DataModule2.IBQuery11.Open; DataModule2.IBQuery12.Open; DataModule2.IBQuery14.Open; DataModule2.IBQuery14_1.Open; DataModule2.IBQuery2.Open; DataModule2.IBQuery2_1.Open; DataModule2.IBQuery3.Open; DataModule2.IBQuery3_1.Open; DataModule2.IBQuery4.Open; DataModule2.IBQuery5.Open; DataModule2.IBQuery6.Open; DataModule2.IBQuery7.Open; DataModule2.IBQuery8.Open; DataModule2.IBQuery9.Open; DataModule2.IBQueryAll.Open; DataModule2.IBQueryAll2.Open; end; function DateSer(y, m, d: Integer): TDateTime; const mj: array[1..12] of Integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); var add: Integer; begin while (true) do begin y := y + (m - 1) div 12; m := (m - 1) mod 12 + 1; if m <= 0 then begin Inc(m, 12); Dec(y); end; if ((y mod 4 = 0) and ((y mod 100 <> 0) or (y mod 400 = 0))) and (m = 2) then add := 1 //дополнительный день в феврале else add := 0; if (d > 0) and (d <= (mj[m] + add)) then break; if d > 0 then begin Dec(d, mj[m] + add); Inc(m); end else begin Inc(d, mj[m] + add); Dec(m); end; end; Result := EncodeDate(y, m, d); end; Заполнение полей: procedure TForm3.FormShow(Sender: TObject); var s:string; begin dxPickEdit1.Items.Clear; DataModule2.IBQuery4.First; repeat s:=Trim(DataModule2.IBQuery4T402.AsString); if s<>'' then if dxPickEdit1.Items.IndexOf(s)=-1 then dxPickEdit1.Items.Add(s); DataModule2.IBQuery4.Next; until DataModule2.IBQuery4.Eof; dxPickEdit1.Sorted:=true; dxPickEdit2.Items.Clear; DataModule2.IBQuery5.First; repeat s:=Trim(DataModule2.IBQuery5T502.AsString); if s<>'' then if dxPickEdit2.Items.IndexOf(s)=-1 then dxPickEdit2.Items.Add(s); DataModule2.IBQuery5.Next; until DataModule2.IBQuery5.Eof; dxPickEdit2.Sorted:=true; dxPickEdit3.Items.Clear; DataModule2.IBQuery6.First; repeat s:=Trim(DataModule2.IBQuery6T602.AsString); if s<>'' then if dxPickEdit3.Items.IndexOf(s)=-1 then dxPickEdit3.Items.Add(s); DataModule2.IBQuery6.Next; until DataModule2.IBQuery6.Eof; dxPickEdit3.Sorted:=true; dxPickEdit11.Items.Clear; DataModule2.IBQuery8.First; repeat s:=Trim(DataModule2.IBQuery8T802.AsString); if s<>'' then if dxPickEdit11.Items.IndexOf(s)=-1 then dxPickEdit11.Items.Add(s); DataModule2.IBQuery8.Next; until DataModule2.IBQuery8.Eof; dxPickEdit11.Sorted:=true; dxPickEdit5.Items.Clear; dxPickEdit6.Items.Clear; dxPickEdit7.Items.Clear; dxPickEdit8.Items.Clear; dxPickEdit9.Items.Clear; dxPickEdit10.Items.Clear; DataModule2.IBQuery7.First; repeat s:=Trim(DataModule2.IBQuery7T702.AsString); if s<>'' then if dxPickEdit5.Items.IndexOf(s)=-1 then dxPickEdit5.Items.Add(s); s:=Trim(DataModule2.IBQuery7T706.AsString); if s<>'' then if dxPickEdit6.Items.IndexOf(s)=-1 then dxPickEdit6.Items.Add(s); s:=Trim(DataModule2.IBQuery7T707.AsString); if s<>'' then if dxPickEdit7.Items.IndexOf(s)=-1 then dxPickEdit7.Items.Add(s); s:=Trim(DataModule2.IBQuery7T703.AsString); if s<>'' then if dxPickEdit8.Items.IndexOf(s)=-1 then dxPickEdit8.Items.Add(s); s:=Trim(DataModule2.IBQuery7T704.AsString); if s<>'' then if dxPickEdit9.Items.IndexOf(s)=-1 then dxPickEdit9.Items.Add(s); s:=Trim(DataModule2.IBQuery7T705.AsString); if s<>'' then if dxPickEdit10.Items.IndexOf(s)=-1 then dxPickEdit10.Items.Add(s); DataModule2.IBQuery7.Next; until DataModule2.IBQuery7.Eof; dxPickEdit5.Sorted:=true; dxPickEdit6.Sorted:=true; dxPickEdit7.Sorted:=true; dxPickEdit8.Sorted:=true; dxPickEdit9.Sorted:=true; dxPickEdit10.Sorted:=true; end; Процедура открытия и редактирования: procedure TForm1.N7Click(Sender: TObject); var id,id2,i,no:integer; s:string; begin BM := DataModule2.IBQuery1_2.GetBookmark; id:=DataModule2.IBQuery1_2T101.AsInteger; id2:=DataModule2.IBQuery1_2T102.AsInteger; Form5.NT1:=id; Form5.id2:=id2; DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl01 '); IBQueryAll.SQL.Add('where T101='+inttostr(id)+' '); end; DataModule2.IBQueryAll.Open; Form5.NT2:=DataModule2.IBQueryAll.fieldbyname('T102').AsInteger; Form5.dxDateEdit1.Date:=DataModule2.IBQueryAll.fieldbyname('T103').AsDateTime; Form5.dxDateEdit2.Date:=DataModule2.IBQueryAll.fieldbyname('T104').AsDateTime; Form5.NT5:=DataModule2.IBQueryAll.fieldbyname('T105').AsInteger; Form5.NT6:=DataModule2.IBQueryAll.fieldbyname('T106').AsInteger; Form5.NT7:=DataModule2.IBQueryAll.fieldbyname('T107').AsInteger; Form5.dxPickEdit4.Text:=trim(DataModule2.IBQueryAll.fieldbyname('T108').AsString); Form5.NT9:=DataModule2.IBQueryAll.fieldbyname('T109').AsString; Form5.NT10:=DataModule2.IBQueryAll.fieldbyname('T110').AsInteger; Form5.NT11:=DataModule2.IBQueryAll.fieldbyname('T111').AsInteger; Form5.NT12:=DataModule2.IBQueryAll.fieldbyname('T112').AsInteger; Form5.NT13:=DataModule2.IBQueryAll.fieldbyname('T113').AsString; Form5.Caption:='Редактирование заявки на обслуживание № '+inttostr(form5.NT2); if Form5.NT13<>'Y' then Form5.dxDateEdit2.Visible:=false; form5.SpeedButton6.Enabled:=true; if Form5.NT13='Y'then form5.SpeedButton6.Enabled:=false; Form5.dxCheckEdit1.Checked:=false; Form5.dxCheckEdit2.Checked:=false; If form5.NT9='1' then Form5.dxCheckEdit1.Checked:=true; If form5.NT9='2' then Form5.dxCheckEdit2.Checked:=true; if form5.NT13='N' then form5.dxPickEdit13.ItemIndex:=0; if form5.NT13='B' then form5.dxPickEdit13.ItemIndex:=1; if form5.NT13='C' then form5.dxPickEdit13.ItemIndex:=2; if form5.NT13='D' then form5.dxPickEdit13.ItemIndex:=3; if form5.NT13='Y' then form5.dxPickEdit13.ItemIndex:=4; DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl04 '); s:=inttostr(form5.NT5); if s='' then s:='none'; IBQueryAll.SQL.Add('where T401='''+s+''''); end; DataModule2.IBQueryAll.Open; Form5.dxPickEdit1.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T402').AsString); DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl05 '); s:=inttostr(form5.NT6); if s='' then s:='none'; IBQueryAll.SQL.Add('where T501='''+s+''''); end; DataModule2.IBQueryAll.Open; Form5.dxPickEdit2.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T502').AsString); DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl06 '); s:=inttostr(form5.NT7); if s='' then s:='none'; IBQueryAll.SQL.Add('where T601='''+s+''''); end; DataModule2.IBQueryAll.Open; Form5.dxPickEdit3.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T602').AsString); DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl07 '); s:=inttostr(form5.NT10); if s='' then s:='none'; IBQueryAll.SQL.Add('where T701='''+s+''''); end; DataModule2.IBQueryAll.Open; form5.dxSpinEdit1.Value:=form5.id2; Form5.dxPickEdit5.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T702').AsString); Form5.dxPickEdit6.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T706').AsString); Form5.dxPickEdit7.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T707').AsString); Form5.dxPickEdit8.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T703').AsString); Form5.dxPickEdit9.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T704').AsString); Form5.dxPickEdit10.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T705').AsString); DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl08 '); s:=inttostr(form5.NT11); if s='' then s:='none'; IBQueryAll.SQL.Add('where T801='''+s+''''); end; DataModule2.IBQueryAll.Open; Form5.dxPickEdit11.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T802').AsString); DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl08 '); s:=inttostr(form5.NT12); if s='' then s:='none'; IBQueryAll.SQL.Add('where T801='''+s+''''); end; DataModule2.IBQueryAll.Open; Form5.dxPickEdit12.Text:=Trim(DataModule2.IBQueryAll.fieldbyname('T802').AsString); DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl02 '); s:=inttostr(form5.NT1); if s='' then s:='none'; IBQueryAll.SQL.Add('where T202='''+s+''''); end; DataModule2.IBQueryAll.Open; DataModule2.IBQueryAll.First; i:=0; Form5.CoolStringGrid1.Clear; if DataModule2.IBQueryAll.RecordCount>0 then repeat no:=DataModule2.IBQueryAll.fieldbyname('T203').AsInteger; DataModule2.IBQueryAll2.Close; with DataModule2 do begin IBQueryAll2.SQL.Clear; IBQueryAll2.SQL.Add('select * from tabl09 '); s:=inttostr(No); if s='' then s:='none'; IBQueryAll2.SQL.Add('where T901='''+s+''''); end; DataModule2.IBQueryAll2.Open; Inc(i); Form5.CoolStringGrid1.Cells[0,i]:=trim(DataModule2.IBQueryAll2.fieldbyname('T902').AsString); DataModule2.IBQueryAll.Next; until DataModule2.IBQueryAll.Eof; Процедура автоматического заполнения формы: procedure TForm3.dxPickEdit5KeyPress(Sender: TObject; var Key: Char); var s:string; begin s:=dxPickEdit5.Text; {if key=#13 then} begin DataModule2.IBQueryAll.Close; with DataModule2 do begin IBQueryAll.SQL.Clear; IBQueryAll.SQL.Add('select * from tabl07 '); if s='' then s:='none'; IBQueryAll.SQL.Add('where T702='''+s+''''); IBQueryAll.SQL.Add('order by T701 desc '); end; DataModule2.IBQueryAll.Open; if DataModule2.IBQueryAll.RecordCount>0 then begin dxPickEdit6.Text := Trim(DataModule2.IBQueryAll.fieldbyname('T706').AsString); dxPickEdit7.Text := Trim(DataModule2.IBQueryAll.fieldbyname('T707').AsString); dxPickEdit8.Text := Trim(DataModule2.IBQueryAll.fieldbyname('T703').AsString); dxPickEdit9.Text := Trim(DataModule2.IBQueryAll.fieldbyname('T704').AsString); dxPickEdit10.Text := Trim(DataModule2.IBQueryAll.fieldbyname('T705').AsString); end; Руководство.Программа имеет интуитивно понятный интерфейс. Не всегда есть необходимость ввести полный набор данных, поэтому необязательно вводить всю информацию, достаточно ввести только основное. Так как программа имеет очень узко специализированную область применения (это требуется заказчику), и нет необходимости создавать дополнительную справочную систему. Достаточно будет обучения заказчика. В план обучения входит: Обучение установки программы Восстановление поврежденных данных и предотвращение. (эти два пункта есть в помощи поставляемой с InterBase) Обучение заполнению данных (для дальнейшей работы, есть справочник который в полном объеме представляет информацию по программе, а благодаря интуитивно понятному интерфейсу, вероятность ошибиться равна нулю). Помощь по работе с программой: 1. Создание новой записи Находясь в рабочей области нажмите <> или Запись --> Новая. В появившемся окне желательно заполнить графы: устройство, Организация/физ. лицо, Специалист сервисного центра. И О Б Я З А Т Е Л Ь Н О указать вид ремонта. Затем нажать далее и указать неполадки. Если заполняя графу <<Организация/Физ.лицо>> дважды нажать < 2. Открытие записи Находясь в рабочей области нажмите < состояния в положение <<Выполнено>> 3. Сортировка записи Находясь в рабочей области нажмите < 4. Настройки Находясь в рабочей области нажмите Настройка --> Настройка.В появившемся окне есть два пункта Цвет и Log. Для изменения цвета нужно кликнуть по цветному квадратику Порядок ввода в эксплуатацию.Установка Программы. На диске находится Borland Interbase v7.0.1. следует запустить Setup.exe и проследовав инструкции установить сервер. Для регистрации следует запустить KeyGen.exe. Далее следует перезагрузить компьютер и посмотреть должен появиться процесс ibguardian теперь нужно запустить программу IBConsole. В ней создать новый сервер Local Server. Теперь зайти в папку Dialog2 и запустить setup.exe. Теперь установка завершена. Оценка проекта. Заказчик: Все поставленные цели выполнены Полностью завершённый проект базы данных «Автоматизированное рабочее место сервисного центра», реализованный на базе СУБД InterBase 7, и алгоритмического языка Delphi 7, содержащий следующие модули: Ввод нового заказа Работа с существующими заказами Сортировка Отчет о проделанной работе сервисного центра В целом программа является функциональной и завершенной, удовлетворяющая поставленной задачи. ЛитератураСправочная служба поставляемая с комплексом Borland InterBase 7.0 Справочная служба поставляемая с комплексом Borland Delphi 7.0 Шкарина Л. Язык SQL: учебный курс. – СПб.: Питер, 2001. – 592 с.:ил. Дарахвелидзе П. Delphi 4. СПб.: БХВ –Санкт-Питербург,1999. –816 с.:ил. Дарахвелидзе П. Программирование в Delphi 7. СПб.: БХВ –Петербург,2003. –784 с.:ил. |