РЕАЛИЗАЦИЯ ХРАНИМЫХ ПРОЦЕДУР

 

При разработке приложений, основанных на платформе «клиент – сервер», для облегчения выполнения каких-либо операций с данными используются механизмы, при помощи которых можно создавать подпрограммы, работающие на сервере и управляющие процессами обработки информации. Эти механизмы носят название хранимых процедур.

Формирование выборки для отчёта по записям.

USE [Administraciya]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROCEDURE [dbo].[Otch_Zapis]

AS

BEGIN

SET NOCOUNT ON;

 

SELECT Запись.[Номер записи] as Номер,Очередники.ФИО,Очередники.ПаспортНомер,Очередники.ПаспортСерия,Родственники.[ФИО родственника] as РодФИО,Родственники.ПаспортНомер,Родственники.ПаспортСерия,Группа.Название,Сотрудники.Фамилия,Очередники.Примечание

FROM [Запись]

LEFT JOIN Сотрудники ON

Запись.[ID сотрудника]=Сотрудники.[ID сотрудника]

LEFT JOIN Очередники ON

Запись.[ID очередника]=Очередники.[ID очередника]

LEFT JOIN Родственники ON

Запись.[ID члена семьи]=Родственники.[ID члена семьи]

LEFT JOIN Группа ON

Запись.[ID группы]=Группа.[ID группы]

GROUP BY Запись.[Номер записи],Очередники.ФИО,Очередники.ПаспортНомер,Очередники.ПаспортСерия,Родственники.[ФИО родственника],Родственники.ПаспортНомер,Родственники.ПаспортСерия,Группа.Название,Сотрудники.Фамилия,Очередники.Примечание

END

(Программный код запроса хранимой процедуры, необходимой для вывода отчёта по записям)

 


 

Формирование выборки для отчёта по сотрудникам

USE [Administraciya]

GO

/****** Object: StoredProcedure [dbo].[Otch_Sotrudnik] Script Date: 04.07.2016 3:33:46 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROCEDURE [dbo].[Otch_Sotrudnik]

AS

BEGIN

SET NOCOUNT ON;

 

SELECT Сотрудники.[ID сотрудника] as ID, Фамилия,Имя,Отчество, Должности.Название, Должности.График, Адрес,Телефон, Группа.Название

FROM Сотрудники

LEFT JOIN Должности ON

Сотрудники.[ID должности]=Должности.[ID должности]

LEFT JOIN Группа ON

Должности.[ID группы]=Группа.[ID группы]

GROUP BY Сотрудники.[ID сотрудника], Фамилия,Имя,Отчество, Должности.Название, Должности.График, Адрес,Телефон, Группа.Название

END

 

(Программный код запроса хранимой процедуры, необходимой для вывода отчёта по сотрудникам)

Формирование выборки для отчёта по очередникам

USE [Administraciya]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROCEDURE [dbo].[Otch_Ocheredniki]

AS

BEGIN

SET NOCOUNT ON;

 

SELECT Очередники.[ID очередника] as ID,ФИО,Очередники.ПаспортСерия,Очередники.ПаспортНомер,Очередники.Примечание,/*Родственники.[Тип родственных отношений] as ТипОтношений, Родственники.[ФИО родственника] as ФИОРод*/Группа.Название

FROM Очередники

/*LEFT JOIN Родственники ON

Очередники.[ID члена семьи]=Очередники.[ID члена семьи]*/

LEFT JOIN Группа ON

Очередники.[ID группы]=Группа.[ID группы]

GROUP BY Очередники.[ID очередника],ФИО,Очередники.ПаспортСерия,Очередники.ПаспортНомер,Очередники.Примечание,/*Родственники.[Тип родственных отношений], Родственники.[ФИО родственника]*/Группа.Название

END

 

(Программный код запроса хранимой процедуры, необходимой для вывода отчёта по очередникам)

 

РЕАЛИЗАЦИЯ ТРИГГЕРОВ

 

Триггеры являются особой разновидностью хранимых процедур, выполняемых автоматически (срабатывающих) при модификации данных таблицы. Триггеры находят разное применение – от проверки данных до обеспечения сложных деловых правил. Особенно полезным свойством триггеров является то, что они имеют доступ к образам записи до и после модификации; таким образом, можно сравнить две записи и принять соответствующее решение.


 

В данном проекте разрабатывались следующие триггеры:

1. Для заперта на ввод отрицательного или нулевого значения для столбца «Название» и «Описание группы», таблицы «Группа».

USE [Administraciya]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TRIGGER [dbo].[Check_Double_Klient] ON [dbo].[Группа]

FOR INSERT

AS

IF EXISTS (SELECT *

FROM Группа, inserted

WHERE Группа.Название=inserted.Название and Группа.[Описание группы]=inserted.[Описание группы])

BEGIN

raiserror ('Невозможно вставить повторяющуюся запись, проверьте правильность написания!',16,1)

ROLLBACK tran

END

 

2. Для заполнения пустых полей таблицы Группа напоминанием о необходимости заполнить

USE Administraciya

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

 

CREATE TRIGGER [dbo].[Not_null_date_Group] ON [dbo].Группа

AFTER INSERT NOT FOR REPLICATION AS

BEGIN

SET NOCOUNT ON;

DECLARE @ID int

DECLARE @Name nchar(20)

DECLARE @Opis nchar(200)

SELECT @ID=[ID группы],@Name=Название,@Opis=[Описание группы] from inserted

IF EXISTS (SELECT *

FROM Группа

WHERE Название='')

BEGIN

UPDATE Группа SET Название=('Заполнить!') WHERE [ID группы] =@ID

END

IF EXISTS (SELECT *

FROM Группа

WHERE [Описание группы]='')

BEGIN

UPDATE Группа SET [Описание группы]=('Заполнить!') WHERE [ID группы] =@ID

END

END

GO

 

 

РЕАЛИЗАЦИЯ ФОРМЫ

 

Для разработки прикладного программного обеспечения для управления базой данных использовалась программа MS Visual Studio 2015.

Для подключения созданной базы данных к Visual Studio нужно:

1. Открыть окно Data Sources (если оно не открыто, в главном меню выбрать пункт Data и в подменю выбрать пункт Show Data Sources).

2. Щелкнуть мышью по пункту Add New Data Source и в окне Data Source Configuration Wizard выбрать Database в качестве типа источника данных. Нажать кнопку Next.

3. В следующем окне нажать кнопку New Connection и в появившемся окне Add Connection установить параметры соединения. При этом необходимо учесть, что в качестве Server name следует вводить данные, соответствующие компьютеру, на котором реально выполняется работа.

4. После ввода параметров следует проверить корректность подключения, нажав кнопку Test Connection. В случае успешного тестового подключения следует нажать кнопку ОК. Окно Add Connection будет закрыто и в окне Data Source Configuration Wizard в качестве активного будет установлено новое соединение. После этого нужно нажать кнопку Next.

5. Созданное соединение можно сохранить, нажав кнопку Next в следующем окне. Затем нужно выбрать объекты базы данных, которые могут использоваться при работе. Нажать кнопку Finish.

ТАБЛИЦЫ БАЗЫ ДАННЫХ

 

Создаем новую форму и после запуска формы из Toolbox добавляем компонент MenuStrip. Вводим названия пунктов главного меню: данные, отчеты, выход. В пункт меню данные входят подменю: Очередники, Сотрудники. В подменю Очередники сведения входят еще несколько подменю: Общие сведения, Родственники, Группы. В подменю сотрудники сотрудников входят: Общие сведения, Должности.

Рисунок 14. Главная форма. Меню «Данные» и подменю «Очередники»


 

В подменю отчеты входят: Запись, Очередники, Сотрудники

Рисунок 15. Меню «Отчёты»

Каждый пункт меню служит для вызова соответствующей таблицы или отчета. Кнопка выход для закрытия программы.

 

Код Form1.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Collections;

using System.Data.SqlClient;

 

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

SqlConnection conn = null;

public Form1()

{

InitializeComponent();

}

 

private void данныеToolStripMenuItem_Click(object sender, EventArgs e)

{

 

}

 

private void выходToolStripMenuItem_Click(object sender, EventArgs e)

{

this.Close();

}

 

private void сотрудникиToolStripMenuItem_Click(object sender, EventArgs e)

{

 

}

 

private void Form1_Load(object sender, EventArgs e)

{

// TODO: данная строка кода позволяет загрузить данные в таблицу "administraciyaDataSetZapis.Запись". При необходимости она может быть перемещена или удалена.

this.записьTableAdapter.Fill(this.administraciyaDataSetZapis.Запись);

 

}

 

private void button1_Click(object sender, EventArgs e)

{

tabControl1.SelectedTab = tabPage2;

}

 

private void button2_Click(object sender, EventArgs e)

{

try

{

int ID = Convert.ToInt16(textBox1.Text);

int IDSotr = int.Parse(this.comboBox1.SelectedValue.ToString());

int IDOcher = int.Parse(this.comboBox2.SelectedValue.ToString());

int IDChelen = int.Parse(this.comboBox3.SelectedValue.ToString());

int IDGroup = int.Parse(this.comboBox4.SelectedValue.ToString());

string Primech = this.textBox6.Text;

 

conn = new SqlConnection();

conn.ConnectionString = "integrated security=SSPI;data source=\".\";persist security info=False; initial catalog=administraciya";//check

conn.Open();

SqlCommand myCommand = conn.CreateCommand();

 

myCommand.CommandText = "INSERT INTO [Запись] ([Номер записи],[ID сотрудника],[ID очередника],[ID члена семьи],[ID группы],Примечание) VALUES (@ID,@IDSotr,@IDOcher,@IDChelen,@IDGroup,@Primech)";//check

 

myCommand.Parameters.Add("@ID", SqlDbType.Int, 4);

myCommand.Parameters["@ID"].Value = ID;

 

myCommand.Parameters.Add("@IDSotr", SqlDbType.Int, 4);

myCommand.Parameters["@IDSotr"].Value = IDSotr;

 

myCommand.Parameters.Add("@IDOcher", SqlDbType.Int, 4);

myCommand.Parameters["@IDOcher"].Value = IDOcher;

 

myCommand.Parameters.Add("@IDChelen", SqlDbType.Int, 4);

myCommand.Parameters["@IDChelen"].Value = IDChelen;

 

myCommand.Parameters.Add("@IDGroup", SqlDbType.Int, 4);

myCommand.Parameters["@IDGroup"].Value = IDGroup;

 

myCommand.Parameters.Add("@Primech", SqlDbType.NChar, 100);

myCommand.Parameters["@Primech"].Value = Primech;

 

int Uspeh = myCommand.ExecuteNonQuery();

if (Uspeh != 0)

{

MessageBox.Show("Изменения внесены");

}

else

{

MessageBox.Show("Не удалось внести изменения");

}

 

 

}

catch (Exception ex)

{

MessageBox.Show(ex.ToString());

}

finally

{

conn.Close();

}

this.записьTableAdapter.Fill(this.administraciyaDataSetZapis.Запись);

this.tabControl1.SelectedTab = tabPage1;

}

 

private void button3_Click(object sender, EventArgs e)

{

tabControl1.SelectedTab = tabPage1;

}

 

private void button4_Click(object sender, EventArgs e)

{

int IDZap = int.Parse(dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells["НомерзаписиDataGridViewTextBoxColumn"].Value.ToString());//check

 

DialogResult result = MessageBox.Show("Удалить запись под номером " + Convert.ToString(IDZap) + "?", "Предупреждение", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);

switch (result)

{

case DialogResult.Yes:

{

try

{

conn = new SqlConnection();

conn.ConnectionString = "integrated security=SSPI;data source=\".\";persist security info=False; initial catalog=Administraciya";//check

conn.Open();

SqlCommand myCommand = conn.CreateCommand();

myCommand.CommandText = "DELETE FROM [Запись] WHERE [Номер записи]=@IDZap";

myCommand.Parameters.Add("@IDZap", SqlDbType.Int, 4);

myCommand.Parameters["@IDZap"].Value = IDZap;

int Uspeh = myCommand.ExecuteNonQuery();

if (Uspeh != 0)

{

MessageBox.Show("Изменения внесены");

}

else

{

MessageBox.Show("Не удалось внести изменения");

}

}

catch (Exception ex)

{

MessageBox.Show(ex.ToString());

}

finally

{

conn.Close();

}

this.записьTableAdapter.Fill(this.administraciyaDataSetZapis.Запись);

break;

}

}

}

 

private void dataGridView1_Click(object sender, EventArgs e)

{

try

{

int IDSotrud = int.Parse(dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells["IDсотрудникаDataGridViewTextBoxColumn"].Value.ToString());

int IDOchered = int.Parse(dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells["IDочередникаDataGridViewTextBoxColumn"].Value.ToString());

int IDOchelen = int.Parse(dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells["IDчленасемьиDataGridViewTextBoxColumn"].Value.ToString());

int IDGroup = int.Parse(dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells["IDгруппыDataGridViewTextBoxColumn"].Value.ToString());

conn = new SqlConnection();

conn.ConnectionString = "integrated security=SSPI;data source=\".\";persist security info=False; initial catalog=Administraciya";//check

SqlCommand myCommand = conn.CreateCommand();

myCommand.CommandType = CommandType.StoredProcedure;

myCommand.CommandText = "[ID_to_Zapis]";

//номер сотрудника ->

myCommand.Parameters.Add("@IDSotrud", SqlDbType.Int, 4);

myCommand.Parameters["@IDSotrud"].Value = IDSotrud;

myCommand.Parameters["@IDSotrud"].Direction = ParameterDirection.Input;

//номер очередника->

myCommand.Parameters.Add("@IDOchered", SqlDbType.Int, 4);

myCommand.Parameters["@IDOchered"].Value = IDOchered;

myCommand.Parameters["@IDOchered"].Direction = ParameterDirection.Input;

//номер члена семьи->

myCommand.Parameters.Add("@IDOchelen", SqlDbType.Int, 4);

myCommand.Parameters["@IDOchelen"].Value = IDOchelen;

myCommand.Parameters["@IDOchelen"].Direction = ParameterDirection.Input;

//номер группы->

myCommand.Parameters.Add("@IDGroup", SqlDbType.Int, 4);

myCommand.Parameters["@IDGroup"].Value = IDGroup;

myCommand.Parameters["@IDGroup"].Direction = ParameterDirection.Input;

//Имя сотрудника <-

myCommand.Parameters.Add("@Sotrud_Name", SqlDbType.NChar, 100);

myCommand.Parameters["@Sotrud_Name"].Direction = ParameterDirection.Output;

//ФИО очередника <-

myCommand.Parameters.Add("@Ochered_Name", SqlDbType.NChar, 100);

myCommand.Parameters["@Ochered_Name"].Direction = ParameterDirection.Output;

//ФИО родственника <-

myCommand.Parameters.Add("@Chelen_name", SqlDbType.NChar, 100);

myCommand.Parameters["@Chelen_name"].Direction = ParameterDirection.Output;

//Название группы <-

myCommand.Parameters.Add("@Group_name", SqlDbType.NChar, 100);

myCommand.Parameters["@Group_name"].Direction = ParameterDirection.Output;

conn.Open();

myCommand.ExecuteScalar();

textBox3.Text = Convert.ToString(myCommand.Parameters["@Sotrud_Name"].Value);

textBox4.Text = Convert.ToString(myCommand.Parameters["@Ochered_Name"].Value);

textBox5.Text = Convert.ToString(myCommand.Parameters["@Chelen_name"].Value);

textBox7.Text = Convert.ToString(myCommand.Parameters["@Group_name"].Value);

}

catch (Exception ex)

{

MessageBox.Show(ex.ToString());

}

finally

{

conn.Close();

}

}

 

private void общиеСведенияToolStripMenuItem_Click(object sender, EventArgs e)

{

Form2 f2 = new Form2();

f2.Show();

}

 

private void должностиToolStripMenuItem_Click(object sender, EventArgs e)

{

Form3 f3 = new Form3();

f3.Show();

}

 

private void группыToolStripMenuItem1_Click(object sender, EventArgs e)

{

Form4 f4 = new Form4();

f4.Show();

}

 

private void общиеСведенияToolStripMenuItem1_Click(object sender, EventArgs e)

{

Form5 f5 = new Form5();

f5.Show();

}

 

private void группыToolStripMenuItem_Click(object sender, EventArgs e)

{

Form6 f6 = new Form6();

f6.Show();

}

 

private void журналУчётаПосещенийToolStripMenuItem_Click(object sender, EventArgs e)

{

Form7 f7 = new Form7();

f7.Show();

}

 

private void услугиToolStripMenuItem1_Click(object sender, EventArgs e)

{

Form8 f8 = new Form8();

f8.Show();

}

 

private void сотрудникиToolStripMenuItem1_Click(object sender, EventArgs e)

{

Form9 f9 = new Form9();

f9.Show();

}

}

}

(Программный код. Главная форма «Запись»)


 

 

Скриншоты таблиц:


Рисунок 16. Форма «Очередники», работа с таблицей «Очередники

Рисунок 17. Форма «Родственники», работа с таблицей «Родственники»


 


Рисунок 18. Форма «Группы», работа с таблицей «Группа»


Рисунок 19. Форма «Сотрудники», работа с таблицей «Сотрудники»


 


Рисунок 20. Форма «Должности», работа с таблицей «Должности»

 

В каждую таблицу были добавлены кнопки для удобной работы с данными и TabControl. Кнопка добавить служит для переключения добавления новых записей, кнопка удалить для удаления.

При нажатии кнопки «Добавить», программа переключается c TabPage1 на TabPage2 где организованны поля ввода данных.

private void button2_Click(object sender, EventArgs e)

{

tabControl1.SelectedTab = tabPage2;

}

(Программный код кнопки «Добавить запись» на каждой форме)

Рисунок 21, Переключение на вторую страницу TabControl главной формы «Запись»

После заполнения всех полей нужно нажать кнопку «сохранить» для сохранения результатов или отмена для перехода обратно с TabPage2 на TabPage1. (Рис.26)

Код кнопки «сохранить»:

private void button2_Click(object sender, EventArgs e)

{

try

{

int ID = Convert.ToInt16(textBox1.Text);

int IDSotr = int.Parse(this.comboBox1.SelectedValue.ToString());

int IDOcher = int.Parse(this.comboBox2.SelectedValue.ToString());

int IDChelen = int.Parse(this.comboBox3.SelectedValue.ToString());

int IDGroup = int.Parse(this.comboBox4.SelectedValue.ToString());

string Primech = this.textBox6.Text;

 

conn = new SqlConnection();

conn.ConnectionString = "integrated security=SSPI;data source=\".\";persist security info=False; initial catalog=administraciya";//check

conn.Open();

SqlCommand myCommand = conn.CreateCommand();

 

myCommand.CommandText = "INSERT INTO [Запись] ([Номер записи],[ID сотрудника],[ID очередника],[ID члена семьи],[ID группы],Примечание) VALUES (@ID,@IDSotr,@IDOcher,@IDChelen,@IDGroup,@Primech)";//check

 

myCommand.Parameters.Add("@ID", SqlDbType.Int, 4);

myCommand.Parameters["@ID"].Value = ID;

 

myCommand.Parameters.Add("@IDSotr", SqlDbType.Int, 4);

myCommand.Parameters["@IDSotr"].Value = IDSotr;

 

myCommand.Parameters.Add("@IDOcher", SqlDbType.Int, 4);

myCommand.Parameters["@IDOcher"].Value = IDOcher;

 

myCommand.Parameters.Add("@IDChelen", SqlDbType.Int, 4);

myCommand.Parameters["@IDChelen"].Value = IDChelen;

 

myCommand.Parameters.Add("@IDGroup", SqlDbType.Int, 4);

myCommand.Parameters["@IDGroup"].Value = IDGroup;

 

myCommand.Parameters.Add("@Primech", SqlDbType.NChar, 100);

myCommand.Parameters["@Primech"].Value = Primech;

 

int Uspeh = myCommand.ExecuteNonQuery();

if (Uspeh != 0)

{

MessageBox.Show("Изменения внесены");

}

else

{

MessageBox.Show("Не удалось внести изменения");

}

 

 

}

catch (Exception ex)

{

MessageBox.Show(ex.ToString());

}

finally

{

conn.Close();

}

this.записьTableAdapter.Fill(this.administraciyaDataSetZapis.Запись);

this.tabControl1.SelectedTab = tabPage1;

}

(Программный код кнопки «Сохранить»)

private void button4_Click(object sender, EventArgs e)

{ tabControl1.SelectedTab = tabPage1; }

(Программный код кнопки «Отмена»)

private void button4_Click(object sender, EventArgs e)

{

int IDZap = int.Parse(dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells["НомерзаписиDataGridViewTextBoxColumn"].Value.ToString());//check

 

DialogResult result = MessageBox.Show("Удалить запись под номером " + Convert.ToString(IDZap) + "?", "Предупреждение", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);

switch (result)

{

case DialogResult.Yes:

{

try

{

conn = new SqlConnection();

conn.ConnectionString = "integrated security=SSPI;data source=\".\";persist security info=False; initial catalog=Administraciya";//check

conn.Open();

SqlCommand myCommand = conn.CreateCommand();

myCommand.CommandText = "DELETE FROM [Запись] WHERE [Номер записи]=@IDZap";

myCommand.Parameters.Add("@IDZap", SqlDbType.Int, 4);

myCommand.Parameters["@IDZap"].Value = IDZap;

int Uspeh = myCommand.ExecuteNonQuery();

if (Uspeh != 0)

{

MessageBox.Show("Изменения внесены");

}

else

{

MessageBox.Show("Не удалось внести изменения");

}

}

catch (Exception ex)

{

MessageBox.Show(ex.ToString());

}

finally

{

conn.Close();

}

this.записьTableAdapter.Fill(this.administraciyaDataSetZapis.Запись);

break;

}

}

}

 

(Программный код кнопки «удалить запись»)

 

ОТЧЕТЫ

 

Отчеты необходимы для быстрого сбора необходимой информации и вывод ее на печать. Самый простой способ внедрения функциональных возможностей создания отчетов в приложения Windows Visual C# —добавить элемент управления ReportViewer в форму приложения. Этот элемент управления непосредственно наделяет приложение возможностями обработки отчетов и предоставляет встроенный конструктор отчетов, позволяющий составлять отчеты, используя данные из любого объекта данных ADO.NET. Полнофункциональный API обеспечивает программный доступ к элементу управления и отчетам, позволяя настраивать функциональность, доступную во время выполнения.

 

В проекте реализовано 3 отчета:

1. Отчет по записям.

Рисунок 22. Отчёт по записям, генерируется в специальной форме


 

2. Отчет по очередникам.

Рисунок 23. Отчёт по очередникам, генерируется в специальной форме


 

3. Отчет по сотрудникам.

Рисунок 24. Отчёт по сотрудникам, генерируется в специальной форме

Заключение

Во время прохождения производственной практики, закрепил навыки работы с Visual Studio C# и Sql Server. Научился работать с базой данных. Приобрел навыки работы в коллективе, научился мыслить абстрактно и применять теоретические знания на практике с пользой.

Познал суть работы на предприятии, развил чувство ответственности, начал получать удовольствие от работы. Добросовестно выполнял полученные задачи и зарекомендовал себя как хорошего работника, знающего свое дело.

Полученное коллективное задание выполнил на отлично и проявил инициативу в его усовершенствовании, занимался разработкой и созданием ********

Узнал структуру и род деятельности управления информатизации администрации города Улан-Удэ, ознакомился с распорядком. Дисциплинарных замечаний не имел, соблюдал все установленные правила. Серьезно относился к своей работе и нес за нее полную ответственность.

В процессе прохождения практики занимался сборкой компьютеров, починкой аппаратуры и установкой программного обеспечения. Вел наблюдения за работой машин, принимал участие в основной работе. Занимался обеспечением информационной безопасности. Беспрекословно выполнял все задачи данные руководителем. Занимался созданием базы данных для удобной и быстрой работы с занесением очередников в таблицу и созданием отчётов.