Ejemplo n.º 1
0
        //Переводим документ в бинарный файл
        private void button6_Click(object sender, EventArgs e)
        {
            // определяем, какой заказ следует сериализовать
            // код создания объекта (Zakaz c) аналогичен предыдущему примеру

            // определяем, какой заказ выбран для генерации документа
            if (dataGridView1.SelectedRows.Count == 0)
            {
                return;
            }
            //получение номера текущего выбранного заказа
            nom = (int)dataGridView1.SelectedRows[0].Cells["НомерЗаказа"].Value;
            //получение даты текущего выбранного заказа
            date = (DateTime)dataGridView1.SelectedRows[0].Cells["ДатаЗаказа"].Value;
            // поиск заказа по ключу
            DataRow dr = ds.Tables["Заказы"].Rows.Find(new object[] { (object)nom, (object)date });
            // создаем объект заказа для последующей сериализации
            Zakaz c = new Zakaz((int)dr["IDЗаказчика"], (int)dr["IDИсполнителя"], (int)dr["НомерЗаказа"], (DateTime)dr["ДатаЗаказа"], (string)dr["Предмет/Тема"], (int)dr["Стоимость"]);
            // создание объекта стандартного диалогового окна
            // выбора файла для сохранения
            SaveFileDialog dlg = new SaveFileDialog();

            // показ диалогового окна на экране и проверка, по какой кнопке
            // (ОК или Отмена) было произведено его закрытие
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                // создание файлового потока, в который будет
                // сериализоваться информация о заказе -  создание файла
                // имя файла поставляется свойством диалога сохранения файла FileName
                FileStream fs = new FileStream(dlg.FileName, FileMode.Create);
                // создание форматера типа Binary
                // SOAP НЕ ПОДДЕРЖИВАЛСЯ!
                BinaryFormatter bin = new BinaryFormatter();
                // сериализация объекта-чека c. Первый параметр – файловый поток,
                // второй параметр – сериализованный объект
                bin.Serialize(fs, c);
                // закрытие файла
                fs.Close();
                MessageBox.Show("Файл сформирован!");
            }
        }
Ejemplo n.º 2
0
        //Верифицируем - проверяем документ
        private void button7_Click(object sender, EventArgs e)
        {
            // создаем объект выбранного заказа
            // определяем, выбран ли хотя бы один заказ
            if (dataGridView1.SelectedRows.Count == 0)
            {
                return;
            }
            else
            {
                //получение номера текущего выбранного заказа
                nom = (int)dataGridView1.SelectedRows[0].Cells["НомерЗаказа"].Value;
                // проверка, имеется ли цифровая подпись выбранного чека,
                // т.е. имеется ли соответствующий файл
                if (!File.Exists("Zakaz" + nom + ".dat"))
                {
                    MessageBox.Show("Ещё не создана цифровая подпись!");
                    return;
                }
                else
                {
                    // создаем объект выбранного заказа аналогично предыдущей функции
                    // (объект с класса Zakaz)
                    MessageBox.Show(nom.ToString());
                    //получение номера текущего выбранного заказа
                    date = (DateTime)dataGridView1.SelectedRows[0].Cells["ДатаЗаказа"].Value;
                    // поиск заказа по ключу
                    DataRow dr = ds.Tables["Заказы"].Rows.Find(new object[] { (object)nom, (object)date });
                    // создаем объект заказа для последующей сериализации
                    Zakaz c = new Zakaz((int)dr["IDЗаказчика"], (int)dr["IDИсполнителя"], (int)dr["НомерЗаказа"], (DateTime)dr["ДатаЗаказа"], (string)dr["Предмет/Тема"], (int)dr["Стоимость"]);

                    // проводим генерацию хэш-значения для объекта c
                    // бинарная сериализация объекта для формирования цифровой подписи
                    BinaryFormatter ser = new BinaryFormatter();
                    // создаем поток для сериализации объекта в оперативной памяти
                    MemoryStream ms = new MemoryStream();
                    ser.Serialize(ms, c);

                    // получаем массив байт, определяющий объект чека
                    byte[] message = new byte[ms.Length];
                    ms.Read(message, 0, (int)ms.Length);

                    // создаем провайдер для хэширования
                    SHA1 sha1 = new SHA1CryptoServiceProvider();
                    // проводим хэширование
                    byte[] hashMessage = sha1.ComputeHash(message);

                    // работа с цифровой подписью - считываем подпись и
                    // ключ из файла и осуществляем верификацию
                    // читаем данные из файла-подписи
                    BinaryReader br = new BinaryReader(new FileStream("Zakaz" + nom + ".dat", FileMode.Open));

                    // читаем ключ для шифрования
                    string key = br.ReadString();
                    // читаем данные подписи
                    int    n_sign = br.ReadInt32();
                    byte[] b_sign = br.ReadBytes(n_sign);
                    br.Close();

                    // импортируем параметры в провайдер шифрования
                    DSACryptoServiceProvider dsa = new DSACryptoServiceProvider();
                    dsa.FromXmlString(key);

                    // проводим верификацию подписей
                    // первый параметр - сгенерированный хэш объекта
                    // второй параметр - ключ
                    // третий параметр - цифровая подпись
                    if (dsa.VerifyHash(hashMessage, "1.3.14.3.2.26", b_sign))
                    {
                        MessageBox.Show("Успешная верификация!");
                    }
                    else
                    {
                        MessageBox.Show("Заказ был изменен. Ошибка верификации!");
                    }
                }
            }
        }
Ejemplo n.º 3
0
        //Формируем цифровую подпись
        private void button8_Click(object sender, EventArgs e)
        {
            // создаем объект выбранного заказа
            // как и в примере из предыдущего раздела
            // В результате имеем заполненный объект класса Заказ с именем с
            // определяем, какой заказ следует сериализовать
            // код создания объекта (Zakaz c) аналогичен предыдущему примеру

            // определяем, какой заказ выбран для генерации документа
            if (dataGridView1.SelectedRows.Count == 0)
            {
                return;
            }
            //получение номера текущего выбранного заказа
            nom = (int)dataGridView1.SelectedRows[0].Cells["НомерЗаказа"].Value;
            //получение даты текущего выбранного заказа
            date = (DateTime)dataGridView1.SelectedRows[0].Cells["ДатаЗаказа"].Value;
            // поиск заказа по ключу
            DataRow dr = ds.Tables["Заказы"].Rows.Find(new object[] { (object)nom, (object)date });
            // создаем объект заказа для последующей сериализации
            Zakaz c = new Zakaz((int)dr["IDЗаказчика"], (int)dr["IDИсполнителя"], (int)dr["НомерЗаказа"], (DateTime)dr["ДатаЗаказа"], (string)dr["Предмет/Тема"], (int)dr["Стоимость"]);

            // хэшировать будем по двоичному коду объекта класса Zakaz
            // проводим бинарную сериализацию объекта c
            // создаем объект-форматер
            BinaryFormatter ser = new BinaryFormatter();
            // создаем поток для сериализации объекта в оперативной памяти
            MemoryStream ms = new MemoryStream();

            // проводим сериализацию в память
            ser.Serialize(ms, c);
            // получаем массив байт, определяющий объект заказа,
            // считывая из потока в памяти
            byte[] message = new byte[ms.Length];
            ms.Read(message, 0, (int)ms.Length);

            // хэшируем заказ
            // создаем провайдер для хэширования
            SHA1 sha1 = new SHA1CryptoServiceProvider();

            // проводим хэширование
            byte[] hashMessage = sha1.ComputeHash(message);

            // получаем цифровую подпись с помощью алгоритма DSA
            DSACryptoServiceProvider dsa = new DSACryptoServiceProvider();

            // цифровая подпись – это также набор байт.
            // Второй параметр метода – своеобразный ключ
            byte[] signature = dsa.SignHash(hashMessage, "1.3.14.3.2.26");

            // сохраняем параметры ключа в виде структурированной строки
            string key = dsa.ToXmlString(true);

            // сохраним подпись данного документа в бинарном файле,
            // имя которого зависит от номера Заказа
            BinaryWriter br = new BinaryWriter(new FileStream("Zakaz" + c.НомерЗаказа + ".dat", FileMode.Create));

            // сохраняем ключ в созданный файл
            br.Write(key);
            // сохраняем в файл цифровую подпись
            // сначала количество байт
            br.Write(signature.Length);
            // затем саму подпись
            br.Write(signature);
            // закрываем файл с подписью
            br.Close();
            MessageBox.Show("Создана цифровая подпись!");
        }
Ejemplo n.º 4
0
        //Генерация заказа в Word-файл
        private void button5_Click(object sender, EventArgs e)
        {
            // определяем, какой заказ выбран для генерации документа
            if (dataGridView1.SelectedRows.Count == 0)
            {
                return;
            }
            //получение номера текущего выбранного заказа
            nom = (int)dataGridView1.SelectedRows[0].Cells["НомерЗаказа"].Value;
            //получение даты текущего выбранного заказа
            date = (DateTime)dataGridView1.SelectedRows[0].Cells["ДатаЗаказа"].Value;
            // поиск заказа по ключу
            DataRow dr = ds.Tables["Заказы"].Rows.Find(new object[] { (object)nom, (object)date });
            // создаем объект заказа для последующей сериализации
            Zakaz c = new Zakaz((int)dr["IDЗаказчика"], (int)dr["IDИсполнителя"], (int)dr["НомерЗаказа"], (DateTime)dr["ДатаЗаказа"], (string)dr["Предмет/Тема"], (int)dr["Стоимость"]);

            // выбираем все ЗаписьОплаты, соответствующие выбранному Заказу
            DataRow[] drs = ds.Tables["ЗаписьОплаты"].Select("НомерЗаказа=" + nom + " and ДатаЗаказа='" + date + "'");
            // добавляем информацию в объект заказа
            foreach (DataRow d in drs)
            {
                Oplata z = new Oplata((int)d["НомерЗаказа"], (int)d["Предоплата"], (bool)d["Оплачено/НеОплачено"], (DateTime)d["ДатаОплаты"]);
                c.AddOplata(z);
            }

            // работа с документами Word
            // создание объекта-приложения
            Word.Application app = new Word.Application();
            // создание и добавление объекта-документа MS Word
            Word.Document doc = app.Documents.Add();

            // создание параграфа с заголовком (указание номера и даты заказа)
            Word.Paragraph p = doc.Content.Paragraphs.Add();
            // задание текста параграфа
            p.Range.Text = "Заказ №" + c.НомерЗаказа + " от " + c.ДатаЗаказа;
            // указание, что шрифт должен быть полужирным
            p.Range.Font.Bold = 1;
            // центрирование абзаца
            p.Format.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
            // устанавливаем межабзацный отступ
            p.Format.SpaceAfter = 20;
            p.Range.InsertParagraphAfter();

            // вставка параграфа с указанием Заказчика
            p                   = doc.Content.Paragraphs.Add();
            p.Range.Text        = "ID Заказчика: " + c.IDЗаказчика;
            p.Format.Alignment  = Word.WdParagraphAlignment.wdAlignParagraphLeft;
            p.Format.SpaceAfter = 20;
            p.Range.InsertParagraphAfter();

            // вставка параграфа с указанием Исполнителя
            p                   = doc.Content.Paragraphs.Add();
            p.Range.Text        = "ID Исполнителя: " + c.IDИсполнителя;
            p.Format.Alignment  = Word.WdParagraphAlignment.wdAlignParagraphLeft;
            p.Format.SpaceAfter = 20;
            p.Range.InsertParagraphAfter();

            // вставка параграфа с указанием ПредметаТемы
            p                   = doc.Content.Paragraphs.Add();
            p.Range.Text        = "Предмет/Тема: " + c.ПредметТема;
            p.Format.Alignment  = Word.WdParagraphAlignment.wdAlignParagraphLeft;
            p.Format.SpaceAfter = 20;
            p.Range.InsertParagraphAfter();

            // вставка параграфа с указанием общей суммы по Заказу
            p                   = doc.Content.Paragraphs.Add();
            p.Range.Text        = "Сумма: " + c.Стоимость;
            p.Format.Alignment  = Word.WdParagraphAlignment.wdAlignParagraphLeft;
            p.Range.Font.Size   = 20;
            p.Format.SpaceAfter = 20;
            p.Range.InsertParagraphAfter();

            // вставка параграфа с таблицей, в которой указана детальная
            // информация об оплате заказа
            p = doc.Content.Paragraphs.Add();

            // при создании таблицы указывается ее
            // количество строк и столбцов (2 и 3 параметры)
            Word.Table tab = doc.Tables.Add(p.Range, 1 + c.Список.Count, 4);
            // указание, что таблица должна иметь рамку
            tab.Borders.Enable = 1;

            // заполняем ячейки таблицы – обращение к таблице осуществляется
            // с помощью функции Cell(номер строки, номер столбца)
            // отметим, что нумерация строк и столбцов начинается с 1
            tab.Cell(1, 1).Range.Text = "НомерЗаказа";
            tab.Cell(1, 2).Range.Text = "Предоплата";
            tab.Cell(1, 3).Range.Text = "Оплачено Да/Нет";
            tab.Cell(1, 4).Range.Text = "Дата оплаты";

            // просматриваем список купленных товаров и заполняем остальные строки таблицы
            for (int i = 0; i < c.Список.Count; i++)
            {
                tab.Cell(i + 2, 1).Range.Text = "" + (c.Список[i] as Oplata).НомерЗаказа;
                tab.Cell(i + 2, 2).Range.Text = "" + (c.Список[i] as Oplata).Предоплата;
                tab.Cell(i + 2, 3).Range.Text = "" + (c.Список[i] as Oplata).Оплаченность;
                tab.Cell(i + 2, 4).Range.Text = "" + (c.Список[i] as Oplata).ДатаОплаты;
            }

            // сохранение документа
            doc.Save();
            // активируем окно MS Word для просмотра сгенерированного документа
            app.Visible = true;
        }
Ejemplo n.º 5
0
        //Верифицируем - проверяем документ
        private void button7_Click(object sender, EventArgs e)
        {
            // создаем объект выбранного заказа
            // определяем, выбран ли хотя бы один заказ
            if (dataGridView1.SelectedRows.Count == 0)
                return;
            else
            {

                //получение номера текущего выбранного заказа
                nom = (int)dataGridView1.SelectedRows[0].Cells["НомерЗаказа"].Value;
                // проверка, имеется ли цифровая подпись выбранного чека, 
                // т.е. имеется ли соответствующий файл
                if (!File.Exists("Zakaz" + nom + ".dat"))
                {
                    MessageBox.Show("Ещё не создана цифровая подпись!");
                    return;
                }
                else
                {
                    // создаем объект выбранного заказа аналогично предыдущей функции 
                    // (объект с класса Zakaz)
                    MessageBox.Show(nom.ToString());
                    //получение номера текущего выбранного заказа
                    date = (DateTime)dataGridView1.SelectedRows[0].Cells["ДатаЗаказа"].Value;
                    // поиск заказа по ключу
                    DataRow dr = ds.Tables["Заказы"].Rows.Find(new object[] { (object)nom, (object)date });
                    // создаем объект заказа для последующей сериализации
                    Zakaz c = new Zakaz((int)dr["IDЗаказчика"], (int)dr["IDИсполнителя"], (int)dr["НомерЗаказа"], (DateTime)dr["ДатаЗаказа"], (string)dr["Предмет/Тема"], (int)dr["Стоимость"]);

                    // проводим генерацию хэш-значения для объекта c
                    // бинарная сериализация объекта для формирования цифровой подписи
                    BinaryFormatter ser = new BinaryFormatter();
                    // создаем поток для сериализации объекта в оперативной памяти
                    MemoryStream ms = new MemoryStream();
                    ser.Serialize(ms, c);

                    // получаем массив байт, определяющий объект чека
                    byte[] message = new byte[ms.Length];
                    ms.Read(message, 0, (int)ms.Length);

                    // создаем провайдер для хэширования
                    SHA1 sha1 = new SHA1CryptoServiceProvider();
                    // проводим хэширование
                    byte[] hashMessage = sha1.ComputeHash(message);

                    // работа с цифровой подписью - считываем подпись и 
                    // ключ из файла и осуществляем верификацию
                    // читаем данные из файла-подписи
                    BinaryReader br = new BinaryReader(new FileStream("Zakaz" + nom + ".dat", FileMode.Open));

                    // читаем ключ для шифрования
                    string key = br.ReadString();
                    // читаем данные подписи
                    int n_sign = br.ReadInt32();
                    byte[] b_sign = br.ReadBytes(n_sign);
                    br.Close();

                    // импортируем параметры в провайдер шифрования
                    DSACryptoServiceProvider dsa = new DSACryptoServiceProvider();
                    dsa.FromXmlString(key);

                    // проводим верификацию подписей
                    // первый параметр - сгенерированный хэш объекта
                    // второй параметр - ключ
                    // третий параметр - цифровая подпись
                    if (dsa.VerifyHash(hashMessage, "1.3.14.3.2.26", b_sign))
                    {
                        MessageBox.Show("Успешная верификация!");
                    }
                    else
                    {
                        MessageBox.Show("Заказ был изменен. Ошибка верификации!");
                    }
                }
            }
        }
Ejemplo n.º 6
0
        //Формируем цифровую подпись
        private void button8_Click(object sender, EventArgs e)
        {
            // создаем объект выбранного заказа
            // как и в примере из предыдущего раздела
	        // В результате имеем заполненный объект класса Заказ с именем с
            // определяем, какой заказ следует сериализовать
            // код создания объекта (Zakaz c) аналогичен предыдущему примеру

            // определяем, какой заказ выбран для генерации документа
            if (dataGridView1.SelectedRows.Count == 0)
                return;
            //получение номера текущего выбранного заказа
            nom = (int)dataGridView1.SelectedRows[0].Cells["НомерЗаказа"].Value;
            //получение даты текущего выбранного заказа
            date = (DateTime)dataGridView1.SelectedRows[0].Cells["ДатаЗаказа"].Value;
            // поиск заказа по ключу
            DataRow dr = ds.Tables["Заказы"].Rows.Find(new object[] { (object)nom, (object)date });
            // создаем объект заказа для последующей сериализации
            Zakaz c = new Zakaz((int)dr["IDЗаказчика"], (int)dr["IDИсполнителя"], (int)dr["НомерЗаказа"], (DateTime)dr["ДатаЗаказа"], (string)dr["Предмет/Тема"], (int)dr["Стоимость"]);
            
            // хэшировать будем по двоичному коду объекта класса Zakaz  
            // проводим бинарную сериализацию объекта c
            // создаем объект-форматер
            BinaryFormatter ser = new BinaryFormatter();
            // создаем поток для сериализации объекта в оперативной памяти
            MemoryStream ms = new MemoryStream();
            // проводим сериализацию в память     
            ser.Serialize(ms, c);
            // получаем массив байт, определяющий объект заказа, 
            // считывая из потока в памяти
            byte[] message = new byte[ms.Length];
            ms.Read(message, 0, (int)ms.Length);

            // хэшируем заказ
            // создаем провайдер для хэширования
            SHA1 sha1 = new SHA1CryptoServiceProvider();
            // проводим хэширование
            byte[] hashMessage = sha1.ComputeHash(message);

            // получаем цифровую подпись с помощью алгоритма DSA
             DSACryptoServiceProvider dsa = new DSACryptoServiceProvider();
            // цифровая подпись – это также набор байт. 
            // Второй параметр метода – своеобразный ключ
            byte[] signature = dsa.SignHash(hashMessage, "1.3.14.3.2.26");

            // сохраняем параметры ключа в виде структурированной строки
            string key = dsa.ToXmlString(true);
            
            // сохраним подпись данного документа в бинарном файле, 
            // имя которого зависит от номера Заказа
            BinaryWriter br = new BinaryWriter(new FileStream("Zakaz"+c.НомерЗаказа+".dat", FileMode.Create));
            // сохраняем ключ в созданный файл
            br.Write(key);
            // сохраняем в файл цифровую подпись
            // сначала количество байт
            br.Write(signature.Length);
            // затем саму подпись
            br.Write(signature);
            // закрываем файл с подписью
            br.Close();
            MessageBox.Show("Создана цифровая подпись!");
        }
Ejemplo n.º 7
0
        //Переводим документ в бинарный файл
        private void button6_Click(object sender, EventArgs e)
        {
            // определяем, какой заказ следует сериализовать
            // код создания объекта (Zakaz c) аналогичен предыдущему примеру

            // определяем, какой заказ выбран для генерации документа
            if (dataGridView1.SelectedRows.Count == 0)
                return;
            //получение номера текущего выбранного заказа
            nom = (int)dataGridView1.SelectedRows[0].Cells["НомерЗаказа"].Value;
            //получение даты текущего выбранного заказа
            date = (DateTime)dataGridView1.SelectedRows[0].Cells["ДатаЗаказа"].Value;
            // поиск заказа по ключу
            DataRow dr = ds.Tables["Заказы"].Rows.Find(new object[] { (object)nom, (object)date });
            // создаем объект заказа для последующей сериализации
            Zakaz c = new Zakaz((int)dr["IDЗаказчика"], (int)dr["IDИсполнителя"], (int)dr["НомерЗаказа"], (DateTime)dr["ДатаЗаказа"], (string)dr["Предмет/Тема"], (int)dr["Стоимость"]);
            // создание объекта стандартного диалогового окна 
            // выбора файла для сохранения
            SaveFileDialog dlg = new SaveFileDialog();
            // показ диалогового окна на экране и проверка, по какой кнопке 
            // (ОК или Отмена) было произведено его закрытие
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                // создание файлового потока, в который будет 
                // сериализоваться информация о заказе -  создание файла
                // имя файла поставляется свойством диалога сохранения файла FileName
                FileStream fs = new FileStream(dlg.FileName, FileMode.Create);
                // создание форматера типа Binary
                // SOAP НЕ ПОДДЕРЖИВАЛСЯ!
                BinaryFormatter bin=new BinaryFormatter();
                // сериализация объекта-чека c. Первый параметр – файловый поток, 
	            // второй параметр – сериализованный объект
                bin.Serialize(fs, c);
                // закрытие файла
                fs.Close();
                MessageBox.Show("Файл сформирован!");
            }  
        }
Ejemplo n.º 8
0
        //Генерация заказа в Word-файл
        private void button5_Click(object sender, EventArgs e)
        {
          // определяем, какой заказ выбран для генерации документа
          if (dataGridView1.SelectedRows.Count == 0)
                return;
          //получение номера текущего выбранного заказа
          nom = (int)dataGridView1.SelectedRows[0].Cells["НомерЗаказа"].Value;
          //получение даты текущего выбранного заказа
          date = (DateTime)dataGridView1.SelectedRows[0].Cells["ДатаЗаказа"].Value;
          // поиск заказа по ключу
          DataRow dr = ds.Tables["Заказы"].Rows.Find(new object[] { (object)nom, (object)date });
          // создаем объект заказа для последующей сериализации
          Zakaz c = new Zakaz((int)dr["IDЗаказчика"],(int)dr["IDИсполнителя"],(int)dr["НомерЗаказа"],(DateTime)dr["ДатаЗаказа"],(string)dr["Предмет/Тема"],(int)dr["Стоимость"]);
            
          // выбираем все ЗаписьОплаты, соответствующие выбранному Заказу
          DataRow[] drs = ds.Tables["ЗаписьОплаты"].Select("НомерЗаказа=" + nom + " and ДатаЗаказа='" + date + "'");
          // добавляем информацию в объект заказа
          foreach (DataRow d in drs)
          {
               Oplata z = new Oplata((int)d["НомерЗаказа"], (int)d["Предоплата"], (bool)d["Оплачено/НеОплачено"], (DateTime)d["ДатаОплаты"]);
               c.AddOplata(z);
          }

          // работа с документами Word
          // создание объекта-приложения
          Word.Application app = new Word.Application();
          // создание и добавление объекта-документа MS Word
          Word.Document doc = app.Documents.Add();

          // создание параграфа с заголовком (указание номера и даты заказа)
          Word.Paragraph p = doc.Content.Paragraphs.Add();
          // задание текста параграфа
          p.Range.Text = "Заказ №" + c.НомерЗаказа + " от " + c.ДатаЗаказа;
          // указание, что шрифт должен быть полужирным
          p.Range.Font.Bold = 1;
          // центрирование абзаца
          p.Format.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
          // устанавливаем межабзацный отступ
          p.Format.SpaceAfter = 20;
          p.Range.InsertParagraphAfter();

          // вставка параграфа с указанием Заказчика      
          p = doc.Content.Paragraphs.Add();
          p.Range.Text = "ID Заказчика: " + c.IDЗаказчика;
          p.Format.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
          p.Format.SpaceAfter = 20;
          p.Range.InsertParagraphAfter();

          // вставка параграфа с указанием Исполнителя
          p = doc.Content.Paragraphs.Add();
          p.Range.Text = "ID Исполнителя: " + c.IDИсполнителя;
          p.Format.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
          p.Format.SpaceAfter = 20;
          p.Range.InsertParagraphAfter();

          // вставка параграфа с указанием ПредметаТемы      
          p = doc.Content.Paragraphs.Add();
          p.Range.Text = "Предмет/Тема: " + c.ПредметТема;
          p.Format.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
          p.Format.SpaceAfter = 20;
          p.Range.InsertParagraphAfter();

          // вставка параграфа с указанием общей суммы по Заказу
          p = doc.Content.Paragraphs.Add();
          p.Range.Text = "Сумма: " + c.Стоимость;
          p.Format.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
          p.Range.Font.Size = 20;
          p.Format.SpaceAfter = 20;
          p.Range.InsertParagraphAfter();

          // вставка параграфа с таблицей, в которой указана детальная
          // информация об оплате заказа
          p = doc.Content.Paragraphs.Add();

                // при создании таблицы указывается ее 
                // количество строк и столбцов (2 и 3 параметры)
          Word.Table tab = doc.Tables.Add(p.Range, 1 + c.Список.Count, 4);
          // указание, что таблица должна иметь рамку
          tab.Borders.Enable = 1;

          // заполняем ячейки таблицы – обращение к таблице осуществляется
          // с помощью функции Cell(номер строки, номер столбца)
          // отметим, что нумерация строк и столбцов начинается с 1
          tab.Cell(1, 1).Range.Text = "НомерЗаказа";
          tab.Cell(1, 2).Range.Text = "Предоплата";
          tab.Cell(1, 3).Range.Text = "Оплачено Да/Нет";
          tab.Cell(1, 4).Range.Text = "Дата оплаты";

          // просматриваем список купленных товаров и заполняем остальные строки таблицы
          for (int i = 0; i < c.Список.Count; i++)
          {
              tab.Cell(i + 2, 1).Range.Text = "" + (c.Список[i] as Oplata).НомерЗаказа;
              tab.Cell(i + 2, 2).Range.Text = "" + (c.Список[i] as Oplata).Предоплата;
              tab.Cell(i + 2, 3).Range.Text = "" + (c.Список[i] as Oplata).Оплаченность;
              tab.Cell(i + 2, 4).Range.Text = "" + (c.Список[i] as Oplata).ДатаОплаты;
          }

          // сохранение документа
          doc.Save();
          // активируем окно MS Word для просмотра сгенерированного документа
          app.Visible = true;
        }