diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/BussinessLogic/ReportLogic.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/BussinessLogic/ReportLogic.cs
new file mode 100644
index 0000000..f672ccd
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/BussinessLogic/ReportLogic.cs
@@ -0,0 +1,119 @@
+using FurnitureAssemblyBusinessLogic.OfficePackage;
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels;
+using FurnitureAssemblyContracts.BindingModels;
+using FurnitureAssemblyContracts.BusinessLogicsContracts;
+using FurnitureAssemblyContracts.SearchModels;
+using FurnitureAssemblyContracts.StoragesContracts;
+using FurnitureAssemblyContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.BussinessLogic
+{
+    // Реализация бизнес-логики отчётов
+    public class ReportLogic : IReportLogic
+    {
+        private readonly IFurnitureStorage _furnitureStorage;
+
+        private readonly IOrderStorage _orderStorage;
+
+        private readonly AbstractSaveToExcel _saveToExcel;
+
+        private readonly AbstractSaveToWord _saveToWord;
+
+        private readonly AbstractSaveToPdf _saveToPdf;
+
+        // Инициализируем поля класса через контейнер
+        public ReportLogic(IFurnitureStorage furnitureStorage, 
+            IOrderStorage orderStorage, AbstractSaveToExcel saveToExcel, 
+            AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf)
+        {
+            _furnitureStorage = furnitureStorage;
+            _orderStorage = orderStorage;
+
+            _saveToExcel = saveToExcel;
+            _saveToWord = saveToWord;
+            _saveToPdf = saveToPdf;
+        }
+
+        // Получение списка компонент с указанием, в каких изделиях используются
+        public List<ReportFurnitureWorkPieceViewModel> GetFurnitureWorkPiece()
+        {
+            var furnitures = _furnitureStorage.GetFullList();
+
+            var list = new List<ReportFurnitureWorkPieceViewModel>();
+
+            foreach (var furniture in furnitures)
+            {
+                var record = new ReportFurnitureWorkPieceViewModel
+                {
+                    FurnitureName = furniture.FurnitureName,
+                    WorkPieces = new List<(string, int)>(),
+                    TotalCount = 0
+                };
+
+                foreach (var workPiece in furniture.FurnitureWorkPieces)
+                {
+                    record.WorkPieces.Add(new(workPiece.Value.Item1.WorkPieceName, workPiece.Value.Item2));
+                    record.TotalCount += workPiece.Value.Item2;
+                }
+
+                list.Add(record);
+            }
+
+            return list;
+        }
+
+        // Получение списка заказов за определённый период
+        public List<ReportOrdersViewModel> GetOrders(ReportBindingModel model)
+        {
+            return _orderStorage.GetFilteredList(new OrderSearchModel { DateFrom = model.DateFrom, DateTo = model.DateTo })
+                .Select(x => new ReportOrdersViewModel
+                {
+                    Id = x.Id,
+                    DateCreate = x.DateCreate,
+                    FurnitureName = x.FurnitureName,
+                    Sum = x.Sum,
+                    OrderStatus = x.Status.ToString()
+                }).ToList();
+        }
+
+        // Сохранение мебели в файл-Word
+        public void SaveFurnituresToWordFile(ReportBindingModel model)
+        {
+            _saveToWord.CreateDoc(new WordInfo
+            {
+                FileName = model.FileName,
+                Title = "Список изделий",
+                Furnitures = _furnitureStorage.GetFullList()
+            });
+        }
+
+        // Сохранение заготовок с указанием изделий в файл_Excel
+        public void SaveFurnitureWorkPieceToExcelFile(ReportBindingModel model)
+        {
+            _saveToExcel.CreateReport(new ExcelInfo
+            {
+                FileName = model.FileName,
+                Title = "Список заготовок",
+                FurnitureWorkPieces = GetFurnitureWorkPiece()
+            });
+        }
+
+        // Сохранение заказов в файл-Pdf
+        public void SaveOrdersToPdfFile(ReportBindingModel model)
+        {
+            _saveToPdf.CreateDoc(new PdfInfo
+            {
+                FileName = model.FileName,
+                Title = "Список заказов",
+                DateFrom = model.DateFrom!.Value,
+                DateTo = model.DateTo!.Value,
+                Orders = GetOrders(model)
+            });
+        }
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/FurnitureAssemblyBusinessLogic.csproj b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/FurnitureAssemblyBusinessLogic.csproj
index 90359da..0503e8d 100644
--- a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/FurnitureAssemblyBusinessLogic.csproj
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/FurnitureAssemblyBusinessLogic.csproj
@@ -7,7 +7,11 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
+	  <PackageReference Include="DocumentFormat.OpenXml" Version="2.20.0" />
+	  <PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
+	  <PackageReference Include="MigraDocCore.DocumentObjectModel" Version="1.3.63" />
+	  <PackageReference Include="MigraDocCore.Rendering" Version="1.3.63" />
+	  <PackageReference Include="PDFsharp-MigraDoc-GDI" Version="1.50.5147" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/AbstractSaveToExcel.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/AbstractSaveToExcel.cs
new file mode 100644
index 0000000..9f083c1
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/AbstractSaveToExcel.cs
@@ -0,0 +1,101 @@
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage
+{
+    public abstract class AbstractSaveToExcel
+    {
+        // Создание отчета. Описание методов ниже
+        public void CreateReport(ExcelInfo info)
+        {
+            CreateExcel(info);
+
+            InsertCellInWorksheet(new ExcelCellParameters
+            {
+                ColumnName = "A",
+                RowIndex = 1,
+                Text = info.Title,
+                StyleInfo = ExcelStyleInfoType.Title
+            });
+
+            MergeCells(new ExcelMergeParameters
+            {
+                CellFromName = "A1",
+                CellToName = "C1"
+            });
+
+            uint rowIndex = 2;
+
+            foreach (var mwp in info.FurnitureWorkPieces)
+            {
+                InsertCellInWorksheet(new ExcelCellParameters
+                {
+                    ColumnName = "A",
+                    RowIndex = rowIndex,
+                    Text = mwp.FurnitureName,
+                    StyleInfo = ExcelStyleInfoType.Text
+                });
+
+                rowIndex++;
+
+                foreach (var (WorkPiece, Count) in mwp.WorkPieces)
+                {
+                    InsertCellInWorksheet(new ExcelCellParameters
+                    {
+                        ColumnName = "B",
+                        RowIndex = rowIndex,
+                        Text = WorkPiece,
+                        StyleInfo = ExcelStyleInfoType.TextWithBorder
+                    });
+
+                    InsertCellInWorksheet(new ExcelCellParameters
+                    {
+                        ColumnName = "C",
+                        RowIndex = rowIndex,
+                        Text = Count.ToString(),
+                        StyleInfo = ExcelStyleInfoType.TextWithBorder
+                    });
+
+                    rowIndex++;
+                }
+
+                InsertCellInWorksheet(new ExcelCellParameters
+                {
+                    ColumnName = "A",
+                    RowIndex = rowIndex,
+                    Text = "Итого",
+                    StyleInfo = ExcelStyleInfoType.Text
+                });
+
+                InsertCellInWorksheet(new ExcelCellParameters
+                {
+                    ColumnName = "C",
+                    RowIndex = rowIndex,
+                    Text = mwp.TotalCount.ToString(),
+                    StyleInfo = ExcelStyleInfoType.Text
+                });
+
+                rowIndex++;
+            }
+
+            SaveExcel(info);
+        }
+
+        // Создание Excel-файла
+        protected abstract void CreateExcel(ExcelInfo info);
+
+        // Добавляем новую ячейку в лист
+        protected abstract void InsertCellInWorksheet(ExcelCellParameters excelParams);
+
+        // Объединение ячеек
+        protected abstract void MergeCells(ExcelMergeParameters excelParams);
+
+        // Сохранение файла
+        protected abstract void SaveExcel(ExcelInfo info);
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/AbstractSaveToPdf.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/AbstractSaveToPdf.cs
new file mode 100644
index 0000000..74e7261
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/AbstractSaveToPdf.cs
@@ -0,0 +1,76 @@
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage
+{
+    public abstract class AbstractSaveToPdf
+    {
+        // Публичный метод создания документа. Описание методов ниже
+        public void CreateDoc(PdfInfo info)
+        {
+            CreatePdf(info);
+
+            CreateParagraph(new PdfParagraph
+            {
+                Text = info.Title,
+                Style = "NormalTitle",
+                ParagraphAlignment = PdfParagraphAlignmentType.Center
+            });
+
+            CreateParagraph(new PdfParagraph
+            {
+                Text = $"с {info.DateFrom.ToShortDateString()} по {info.DateTo.ToShortDateString()}",
+                Style = "Normal",
+                ParagraphAlignment = PdfParagraphAlignmentType.Center
+            });
+
+            CreateTable(new List<string> { "2cm", "3cm", "6cm", "3cm", "3cm" });
+
+            CreateRow(new PdfRowParameters
+            {
+                Texts = new List<string> { "Номер", "Дата заказа", "Изделие", "Сумма", "Статус заказа" },
+                Style = "NormalTitle",
+                ParagraphAlignment = PdfParagraphAlignmentType.Center
+            });
+
+            foreach (var order in info.Orders)
+            {
+                CreateRow(new PdfRowParameters
+                {
+                    Texts = new List<string> { order.Id.ToString(), order.DateCreate.ToShortDateString(), order.FurnitureName, order.Sum.ToString(), order.OrderStatus },
+                    Style = "Normal",
+                    ParagraphAlignment = PdfParagraphAlignmentType.Left
+                });
+            }
+
+            CreateParagraph(new PdfParagraph
+            {
+                Text = $"\nИтого: {info.Orders.Sum(x => x.Sum)}\t",
+                Style = "Normal",
+                ParagraphAlignment = PdfParagraphAlignmentType.Right
+            });
+
+            SavePdf(info);
+        }
+
+        /// Создание Pdf-файла
+        protected abstract void CreatePdf(PdfInfo info);
+
+        /// Создание параграфа с текстом
+        protected abstract void CreateParagraph(PdfParagraph paragraph);
+
+        /// Создание таблицы
+        protected abstract void CreateTable(List<string> columns);
+
+        /// Создание и заполнение строки
+        protected abstract void CreateRow(PdfRowParameters rowParameters);
+
+        /// Сохранение файла
+        protected abstract void SavePdf(PdfInfo info);
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/AbstractSaveToWord.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/AbstractSaveToWord.cs
new file mode 100644
index 0000000..ee2ddf5
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/AbstractSaveToWord.cs
@@ -0,0 +1,56 @@
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage
+{
+    public abstract class AbstractSaveToWord
+    {
+        // Метод создания документа
+        public void CreateDoc(WordInfo info)
+        {
+            CreateWord(info);
+
+            // Создание ряда абзацев
+            CreateParagraph(new WordParagraph
+            {
+                Texts = new List<(string, WordTextProperties)> { (info.Title, new WordTextProperties { Bold = true, Size = "24", }) },
+                TextProperties = new WordTextProperties
+                {
+                    Size = "24",
+                    JustificationType = WordJustificationType.Center
+                }
+            });
+
+            // Заполнение абзацев текстом
+            foreach (var furniture in info.Furnitures)
+            {
+                CreateParagraph(new WordParagraph
+                {
+                    Texts = new List<(string, WordTextProperties)> { (furniture.FurnitureName + " ", new WordTextProperties { Bold = true, Size = "24", }),
+                    (furniture.Price.ToString(), new WordTextProperties { Size = "24" }) },
+                    TextProperties = new WordTextProperties
+                    {
+                        Size = "24",
+                        JustificationType = WordJustificationType.Both
+                    }
+                });
+            }
+
+            SaveWord(info);
+        }
+
+        // Создание Doc-файла
+        protected abstract void CreateWord(WordInfo info);
+
+        // Создание абзаца с текстом
+        protected abstract void CreateParagraph(WordParagraph paragraph);
+
+        // Сохранение файла
+        protected abstract void SaveWord(WordInfo info);
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperEnums/ExcelStyleInfoType.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperEnums/ExcelStyleInfoType.cs
new file mode 100644
index 0000000..1b778a9
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperEnums/ExcelStyleInfoType.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums
+{
+    // Вспомогательное перечисление для оформления excel
+    public enum ExcelStyleInfoType
+    {
+        // Заголовок
+        Title,
+
+        // Просто текст
+        Text,
+
+        // Текст в рамке
+        TextWithBorder
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAlignmentType.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAlignmentType.cs
new file mode 100644
index 0000000..a8fcd28
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAlignmentType.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums
+{
+    // Вспомогательное перечисление для оформления pdf документа
+    public enum PdfParagraphAlignmentType
+    {
+        // Либо по центру
+        Center,
+
+        // Либо с левого края
+        Left,
+
+        // Либо с правого края
+        Right
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperEnums/WordJustificationType.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperEnums/WordJustificationType.cs
new file mode 100644
index 0000000..77fd3b4
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperEnums/WordJustificationType.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums
+{
+    // Вспомогательное перечисление для настройки формата word документа
+    public enum WordJustificationType
+    {
+        // Выравниваем либо по центру
+        Center,
+
+        // Либо на всю ширину
+        Both
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/ExcelCellParameters.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/ExcelCellParameters.cs
new file mode 100644
index 0000000..9265cb9
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/ExcelCellParameters.cs
@@ -0,0 +1,28 @@
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
+{
+    // Информация по ячейке в таблице excel
+    public class ExcelCellParameters
+    {
+        // Название колонки
+        public string ColumnName { get; set; } = string.Empty;
+
+        // Строка
+        public uint RowIndex { get; set; }
+
+        // Тект в ячейке
+        public string Text { get; set; } = string.Empty;
+
+        // Геттер для того, чтобы не искать каждый раз
+        public string CellReference => $"{ColumnName}{RowIndex}";
+
+        // В каком стиле выводить информацию
+        public ExcelStyleInfoType StyleInfo { get; set; }
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/ExcelInfo.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/ExcelInfo.cs
new file mode 100644
index 0000000..34b71b5
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/ExcelInfo.cs
@@ -0,0 +1,22 @@
+using FurnitureAssemblyContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
+{
+    // Информация по excel файлу, который хотим создать
+    public class ExcelInfo
+    {
+        // Название файла
+        public string FileName { get; set; } = string.Empty;
+
+        // Заголовок
+        public string Title { get; set; } = string.Empty;
+
+        // Список заготовок по изделиям
+        public List<ReportFurnitureWorkPieceViewModel> FurnitureWorkPieces { get; set; } = new();
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/ExcelMergeParameters.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/ExcelMergeParameters.cs
new file mode 100644
index 0000000..1b6b6bc
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/ExcelMergeParameters.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
+{
+    // Информация для объединения ячеек
+    public class ExcelMergeParameters
+    {
+        public string CellFromName { get; set; } = string.Empty;
+
+        public string CellToName { get; set; } = string.Empty;
+
+        // Геттер для указания диапазона для объединения, чтобы каждый раз его не вычислять
+        public string Merge => $"{CellFromName}:{CellToName}";
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs
new file mode 100644
index 0000000..7e9549d
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs
@@ -0,0 +1,24 @@
+using FurnitureAssemblyContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
+{
+    // Общая информация по pdf файлу
+    public class PdfInfo
+    {
+        public string FileName { get; set; } = string.Empty;
+
+        public string Title { get; set; } = string.Empty;
+
+        public DateTime DateFrom { get; set; }
+
+        public DateTime DateTo { get; set; }
+
+        // Перечень заказов за указанный период для вывода/сохранения
+        public List<ReportOrdersViewModel> Orders { get; set; } = new();
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/PdfParagraph.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/PdfParagraph.cs
new file mode 100644
index 0000000..b39f4b6
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/PdfParagraph.cs
@@ -0,0 +1,20 @@
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
+{
+    // Информация п параграфу в pdf документе
+    public class PdfParagraph
+    {
+        public string Text { get; set; } = string.Empty;
+
+        public string Style { get; set; } = string.Empty;
+
+        // Информация по выравниванию текста в параграфе
+        public PdfParagraphAlignmentType ParagraphAlignment { get; set; }
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/PdfRowParameters.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/PdfRowParameters.cs
new file mode 100644
index 0000000..4fe4fda
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/PdfRowParameters.cs
@@ -0,0 +1,22 @@
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
+{
+    // Информация по параметрам строк таблицы
+    public class PdfRowParameters
+    {
+        // Набор текстов
+        public List<string> Texts { get; set; } = new();
+
+        // Стиль к текстам
+        public string Style { get; set; } = string.Empty;
+
+        // Как выравниваем
+        public PdfParagraphAlignmentType ParagraphAlignment { get; set; }
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/WordInfo.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/WordInfo.cs
new file mode 100644
index 0000000..987a54a
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/WordInfo.cs
@@ -0,0 +1,20 @@
+using FurnitureAssemblyContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
+{
+    // Общая информация по документу
+    public class WordInfo
+    {
+        public string FileName { get; set; } = string.Empty;
+
+        public string Title { get; set; } = string.Empty;
+
+        //список заготовок для вывода и сохранения
+        public List<FurnitureViewModel> Furnitures { get; set; } = new();
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/WordParagraph.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/WordParagraph.cs
new file mode 100644
index 0000000..12c062a
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/WordParagraph.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
+{
+    // Модель параграфов, которые есть в тексте
+    public class WordParagraph
+    {
+        // Набор текстов в абзаце (для случая, если в абзаце текст разных стилей)
+        public List<(string, WordTextProperties)> Texts { get; set; } = new();
+
+        //свойства параграфа, если они есть
+        public WordTextProperties? TextProperties { get; set; }
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/WordTextProperties.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/WordTextProperties.cs
new file mode 100644
index 0000000..b8ae4ac
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/HelperModels/WordTextProperties.cs
@@ -0,0 +1,22 @@
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels
+{
+    // Модель свойств текста, которые нам нужны в Word документе
+    public class WordTextProperties
+    {
+        // Размер текста
+        public string Size { get; set; } = string.Empty;
+
+        // Надо ли делать его жирным
+        public bool Bold { get; set; }
+
+        // Выравнивание
+        public WordJustificationType JustificationType { get; set; }
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/Implements/SaveToExcel.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/Implements/SaveToExcel.cs
new file mode 100644
index 0000000..68128dc
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/Implements/SaveToExcel.cs
@@ -0,0 +1,393 @@
+using DocumentFormat.OpenXml.Office2010.Excel;
+using DocumentFormat.OpenXml.Office2013.Excel;
+using DocumentFormat.OpenXml.Packaging;
+using DocumentFormat.OpenXml.Spreadsheet;
+using DocumentFormat.OpenXml;
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage.Implements
+{
+    // Реализация абстрактного класса создания Excel документа
+    public class SaveToExcel : AbstractSaveToExcel
+    {
+        private SpreadsheetDocument? _spreadsheetDocument;
+
+        private SharedStringTablePart? _shareStringPart;
+
+        private Worksheet? _worksheet;
+
+        // Настройка стилей для файла
+        private static void CreateStyles(WorkbookPart workbookpart)
+        {
+            var sp = workbookpart.AddNewPart<WorkbookStylesPart>();
+            sp.Stylesheet = new Stylesheet();
+
+            // Настройка шрифта простого текста
+            var fonts = new Fonts() { Count = 2U, KnownFonts = true };
+
+            var fontUsual = new Font();
+            fontUsual.Append(new FontSize() { Val = 12D });
+            fontUsual.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color() { Theme = 1U });
+            fontUsual.Append(new FontName() { Val = "Times New Roman" });
+            fontUsual.Append(new FontFamilyNumbering() { Val = 2 });
+            fontUsual.Append(new FontScheme() { Val = FontSchemeValues.Minor });
+
+            // Настройка шрифта заголока
+            var fontTitle = new Font();
+            fontTitle.Append(new Bold());
+            fontTitle.Append(new FontSize() { Val = 14D });
+            fontTitle.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color() { Theme = 1U });
+            fontTitle.Append(new FontName() { Val = "Times New Roman" });
+            fontTitle.Append(new FontFamilyNumbering() { Val = 2 });
+            fontTitle.Append(new FontScheme() { Val = FontSchemeValues.Minor });
+
+            // Добавление созданных шрифтов
+            fonts.Append(fontUsual);
+            fonts.Append(fontTitle);
+
+            // Создание заливки
+            var fills = new Fills() { Count = 2U };
+
+            var fill1 = new Fill();
+            fill1.Append(new PatternFill()
+            {
+                PatternType = PatternValues.None
+            });
+
+            var fill2 = new Fill();
+            fill2.Append(new PatternFill()
+            {
+                PatternType = PatternValues.Gray125
+            });
+
+            fills.Append(fill1);
+            fills.Append(fill2);
+
+            // Стиль границ ячейки - незакрашенный (для заголовка) и закрашенный
+            var borders = new Borders() { Count = 2U };
+
+            var borderNoBorder = new Border();
+            borderNoBorder.Append(new LeftBorder());
+            borderNoBorder.Append(new RightBorder());
+            borderNoBorder.Append(new TopBorder());
+            borderNoBorder.Append(new BottomBorder());
+            borderNoBorder.Append(new DiagonalBorder());
+
+            var borderThin = new Border();
+
+            var leftBorder = new LeftBorder() { Style = BorderStyleValues.Thin };
+            leftBorder.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color() { Indexed = 64U });
+
+            var rightBorder = new RightBorder()
+            {
+                Style = BorderStyleValues.Thin
+            };
+            rightBorder.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color() { Indexed = 64U });
+
+            var topBorder = new TopBorder() { Style = BorderStyleValues.Thin };
+            topBorder.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color() { Indexed = 64U });
+
+            var bottomBorder = new BottomBorder()
+            {
+                Style = BorderStyleValues.Thin
+            };
+            bottomBorder.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color() { Indexed = 64U });
+
+            borderThin.Append(leftBorder);
+            borderThin.Append(rightBorder);
+            borderThin.Append(topBorder);
+            borderThin.Append(bottomBorder);
+            borderThin.Append(new DiagonalBorder());
+
+            borders.Append(borderNoBorder);
+            borders.Append(borderThin);
+
+            // Формирование CellFormat из комбинаций шрифтов, заливок и т. д.
+            var cellStyleFormats = new CellStyleFormats() { Count = 1U };
+
+            var cellFormatStyle = new CellFormat()
+            {
+                NumberFormatId = 0U,
+                FontId = 0U,
+                FillId = 0U,
+                BorderId = 0U
+            };
+
+            cellStyleFormats.Append(cellFormatStyle);
+
+            var cellFormats = new CellFormats() { Count = 3U };
+
+            var cellFormatFont = new CellFormat()
+            {
+                NumberFormatId = 0U,
+                FontId = 0U,
+                FillId = 0U,
+                BorderId = 0U,
+                FormatId = 0U,
+                ApplyFont = true
+            };
+
+            var cellFormatFontAndBorder = new CellFormat()
+            {
+                NumberFormatId = 0U,
+                FontId = 0U,
+                FillId = 0U,
+                BorderId = 1U,
+                FormatId = 0U,
+                ApplyFont = true,
+                ApplyBorder = true
+            };
+
+            var cellFormatTitle = new CellFormat()
+            {
+                NumberFormatId = 0U,
+                FontId = 1U,
+                FillId = 0U,
+                BorderId = 0U,
+                FormatId = 0U,
+                Alignment = new Alignment()
+                {
+                    Vertical = VerticalAlignmentValues.Center,
+                    WrapText = true,
+                    Horizontal = HorizontalAlignmentValues.Center
+                },
+                ApplyFont = true
+            };
+
+            // По итогу создали 3 стиля
+            cellFormats.Append(cellFormatFont);
+            cellFormats.Append(cellFormatFontAndBorder);
+            cellFormats.Append(cellFormatTitle);
+
+            var cellStyles = new CellStyles() { Count = 1U };
+
+            cellStyles.Append(new CellStyle()
+            {
+                Name = "Normal",
+                FormatId = 0U,
+                BuiltinId = 0U
+            });
+
+            var differentialFormats = new DocumentFormat.OpenXml.Office2013.Excel.DifferentialFormats() { Count = 0U };
+
+            var tableStyles = new TableStyles()
+            {
+                Count = 0U,
+                DefaultTableStyle = "TableStyleMedium2",
+                DefaultPivotStyle = "PivotStyleLight16"
+            };
+
+            var stylesheetExtensionList = new StylesheetExtensionList();
+            var stylesheetExtension1 = new StylesheetExtension()
+            {
+                Uri = "{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}"
+            };
+
+            stylesheetExtension1.AddNamespaceDeclaration("x14", "http://schemas.microsoft.com/office/spreadsheetml/2009/9/main");
+            stylesheetExtension1.Append(new SlicerStyles()
+            {
+                DefaultSlicerStyle = "SlicerStyleLight1"
+            });
+
+            var stylesheetExtension2 = new StylesheetExtension()
+            {
+                Uri = "{9260A510-F301-46a8-8635-F512D64BE5F5}"
+            };
+
+            stylesheetExtension2.AddNamespaceDeclaration("x15", "http://schemas.microsoft.com/office/spreadsheetml/2010/11/main");
+
+            stylesheetExtension2.Append(new TimelineStyles()
+            {
+                DefaultTimelineStyle = "TimeSlicerStyleLight1"
+            });
+
+            stylesheetExtensionList.Append(stylesheetExtension1);
+            stylesheetExtensionList.Append(stylesheetExtension2);
+
+            sp.Stylesheet.Append(fonts);
+            sp.Stylesheet.Append(fills);
+            sp.Stylesheet.Append(borders);
+            sp.Stylesheet.Append(cellStyleFormats);
+            sp.Stylesheet.Append(cellFormats);
+            sp.Stylesheet.Append(cellStyles);
+            sp.Stylesheet.Append(differentialFormats);
+            sp.Stylesheet.Append(tableStyles);
+            sp.Stylesheet.Append(stylesheetExtensionList);
+        }
+
+        // Получение номера стиля (одного из 3-х нами созданных) из типа
+        private static uint GetStyleValue(ExcelStyleInfoType styleInfo)
+        {
+            return styleInfo switch
+            {
+                ExcelStyleInfoType.Title => 2U,
+                ExcelStyleInfoType.TextWithBorder => 1U,
+                ExcelStyleInfoType.Text => 0U,
+                _ => 0U,
+            };
+        }
+
+        protected override void CreateExcel(ExcelInfo info)
+        {
+            // Создаём документ Excel
+            _spreadsheetDocument = SpreadsheetDocument.Create(info.FileName, SpreadsheetDocumentType.Workbook);
+
+            // Создаем книгу (в ней хранятся листы)
+            var workbookpart = _spreadsheetDocument.AddWorkbookPart();
+
+            workbookpart.Workbook = new Workbook();
+
+            CreateStyles(workbookpart);
+
+            // Получаем/создаем хранилище текстов для книги
+            _shareStringPart = _spreadsheetDocument.WorkbookPart!.GetPartsOfType<SharedStringTablePart>().Any()
+                ? _spreadsheetDocument.WorkbookPart.GetPartsOfType<SharedStringTablePart>().First()
+                : _spreadsheetDocument.WorkbookPart.AddNewPart<SharedStringTablePart>();
+
+            // Создаем SharedStringTable, если его нет
+            if (_shareStringPart.SharedStringTable == null)
+            {
+                _shareStringPart.SharedStringTable = new SharedStringTable();
+            }
+
+            // Создаем лист в книгу
+            var worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
+            worksheetPart.Worksheet = new Worksheet(new SheetData());
+
+            // Добавляем лист в книгу
+            var sheets = _spreadsheetDocument.WorkbookPart.Workbook.AppendChild(new Sheets());
+
+            var sheet = new Sheet()
+            {
+                Id = _spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart),
+                SheetId = 1,
+                Name = "Лист"
+            };
+
+            sheets.Append(sheet);
+
+            _worksheet = worksheetPart.Worksheet;
+        }
+
+        // Метод вставки в лист книги
+        protected override void InsertCellInWorksheet(ExcelCellParameters excelParams)
+        {
+            if (_worksheet == null || _shareStringPart == null)
+            {
+                return;
+            }
+
+            var sheetData = _worksheet.GetFirstChild<SheetData>();
+
+            if (sheetData == null)
+            {
+                return;
+            }
+
+            // Ищем строку, либо добавляем ее
+            Row row;
+
+            if (sheetData.Elements<Row>().Where(r => r.RowIndex! == excelParams.RowIndex).Any())
+            {
+                row = sheetData.Elements<Row>().Where(r => r.RowIndex! == excelParams.RowIndex).First();
+            }
+            else
+            {
+                row = new Row() { RowIndex = excelParams.RowIndex };
+                sheetData.Append(row);
+            }
+
+            // Ищем нужную ячейку
+            Cell cell;
+
+            if (row.Elements<Cell>().Where(c => c.CellReference!.Value == excelParams.CellReference).Any())
+            {
+                cell = row.Elements<Cell>().Where(c => c.CellReference!.Value == excelParams.CellReference).First();
+            }
+            else
+            {
+                // Все ячейки должны быть последовательно друг за другом расположены
+                // Нужно определить, после какой вставлять
+                Cell? refCell = null;
+
+                foreach (Cell rowCell in row.Elements<Cell>())
+                {
+                    if (string.Compare(rowCell.CellReference!.Value, excelParams.CellReference, true) > 0)
+                    {
+                        refCell = rowCell;
+                        break;
+                    }
+                }
+
+                var newCell = new Cell()
+                {
+                    CellReference = excelParams.CellReference
+                };
+
+                row.InsertBefore(newCell, refCell);
+                cell = newCell;
+            }
+
+            // Вставляем новый текст
+            _shareStringPart.SharedStringTable.AppendChild(new SharedStringItem(new Text(excelParams.Text)));
+            _shareStringPart.SharedStringTable.Save();
+
+            cell.CellValue = new CellValue((_shareStringPart.SharedStringTable.Elements<SharedStringItem>().Count() - 1).ToString());
+            cell.DataType = new EnumValue<CellValues>(CellValues.SharedString);
+            cell.StyleIndex = GetStyleValue(excelParams.StyleInfo);
+        }
+
+        // Метод объединения ячеек
+        protected override void MergeCells(ExcelMergeParameters excelParams)
+        {
+            if (_worksheet == null)
+            {
+                return;
+            }
+
+            MergeCells mergeCells;
+
+            if (_worksheet.Elements<MergeCells>().Any())
+            {
+                mergeCells = _worksheet.Elements<MergeCells>().First();
+            }
+            else
+            {
+                mergeCells = new MergeCells();
+
+                if (_worksheet.Elements<CustomSheetView>().Any())
+                {
+                    _worksheet.InsertAfter(mergeCells, _worksheet.Elements<CustomSheetView>().First());
+                }
+                else
+                {
+                    _worksheet.InsertAfter(mergeCells, _worksheet.Elements<SheetData>().First());
+                }
+            }
+
+            var mergeCell = new MergeCell()
+            {
+                Reference = new StringValue(excelParams.Merge)
+            };
+
+            mergeCells.Append(mergeCell);
+        }
+
+        protected override void SaveExcel(ExcelInfo info)
+        {
+            if (_spreadsheetDocument == null)
+            {
+                return;
+            }
+
+            _spreadsheetDocument.WorkbookPart!.Workbook.Save();
+            _spreadsheetDocument.Dispose();
+        }
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/Implements/SaveToPdf.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/Implements/SaveToPdf.cs
new file mode 100644
index 0000000..fea96bc
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/Implements/SaveToPdf.cs
@@ -0,0 +1,131 @@
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels;
+using MigraDoc.DocumentObjectModel;
+using MigraDoc.DocumentObjectModel.Tables;
+using MigraDoc.Rendering;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage.Implements
+{
+    // Реализация абстрактного класса создания Pdf документа
+    public class SaveToPdf : AbstractSaveToPdf
+    {
+        private Document? _document;
+
+        private Section? _section;
+
+        private Table? _table;
+
+        // Преобразование необходимого типа выравнивания в соотвествующее выравнивание в MigraDoc
+        private static ParagraphAlignment GetParagraphAlignment(PdfParagraphAlignmentType type)
+        {
+            return type switch
+            {
+                PdfParagraphAlignmentType.Center => ParagraphAlignment.Center,
+                PdfParagraphAlignmentType.Left => ParagraphAlignment.Left,
+                PdfParagraphAlignmentType.Right => ParagraphAlignment.Right,
+                _ => ParagraphAlignment.Justify,
+            };
+        }
+
+        // Создание стилей для документа
+        private static void DefineStyles(Document document)
+        {
+            var style = document.Styles["Normal"];
+
+            style.Font.Name = "Times New Roman";
+            style.Font.Size = 14;
+
+            style = document.Styles.AddStyle("NormalTitle", "Normal");
+            style.Font.Bold = true;
+        }
+
+        protected override void CreatePdf(PdfInfo info)
+        {
+            // Создаём документ
+            _document = new Document();
+
+            // Передаём для него стили
+            DefineStyles(_document);
+
+            // Получение первой секции документа
+            _section = _document.AddSection();
+        }
+
+        protected override void CreateParagraph(PdfParagraph pdfParagraph)
+        {
+            if (_section == null)
+            {
+                return;
+            }
+
+            var paragraph = _section.AddParagraph(pdfParagraph.Text);
+            paragraph.Format.SpaceAfter = "1cm";
+            paragraph.Format.Alignment = GetParagraphAlignment(pdfParagraph.ParagraphAlignment);
+            paragraph.Style = pdfParagraph.Style;
+        }
+
+        protected override void CreateTable(List<string> columns)
+        {
+            if (_document == null)
+            {
+                return;
+            }
+
+            // Добавляем таблицу в документ как последнюю секцию (?)
+            _table = _document.LastSection.AddTable();
+
+            foreach (var elem in columns)
+            {
+                _table.AddColumn(elem);
+            }
+        }
+
+        protected override void CreateRow(PdfRowParameters rowParameters)
+        {
+            if (_table == null)
+            {
+                return;
+            }
+
+            // Добавление строки в таблицу
+            var row = _table.AddRow();
+
+            for (int i = 0; i < rowParameters.Texts.Count; ++i)
+            {
+                // Ячейка добавляется добавлением параграфа
+                row.Cells[i].AddParagraph(rowParameters.Texts[i]);
+
+                if (!string.IsNullOrEmpty(rowParameters.Style))
+                {
+                    row.Cells[i].Style = rowParameters.Style;
+                }
+
+                Unit borderWidth = 0.5;
+
+                row.Cells[i].Borders.Left.Width = borderWidth;
+                row.Cells[i].Borders.Right.Width = borderWidth;
+                row.Cells[i].Borders.Top.Width = borderWidth;
+                row.Cells[i].Borders.Bottom.Width = borderWidth;
+
+                row.Cells[i].Format.Alignment = GetParagraphAlignment(rowParameters.ParagraphAlignment);
+                row.Cells[i].VerticalAlignment = VerticalAlignment.Center;
+            }
+        }
+
+        protected override void SavePdf(PdfInfo info)
+        {
+            var renderer = new PdfDocumentRenderer(true)
+            {
+                Document = _document
+            };
+
+            renderer.RenderDocument();
+            renderer.PdfDocument.Save(info.FileName);
+        }
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/Implements/SaveToWord.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/Implements/SaveToWord.cs
new file mode 100644
index 0000000..66e8513
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OfficePackage/Implements/SaveToWord.cs
@@ -0,0 +1,159 @@
+using DocumentFormat.OpenXml.Packaging;
+using DocumentFormat.OpenXml.Wordprocessing;
+using DocumentFormat.OpenXml;
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperEnums;
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic.OfficePackage.Implements
+{
+    // Реализация абстрактного класса сохранения в Word документ
+    public class SaveToWord : AbstractSaveToWord
+    {
+        private WordprocessingDocument? _wordDocument;
+
+        private Body? _docBody;
+
+        // Получение типа выравнивания
+        private static JustificationValues GetJustificationValues(WordJustificationType type)
+        {
+            // Выравнивание слева будет в том случае, если передаётся неизвестный тип выравнивания
+            return type switch
+            {
+                WordJustificationType.Both => JustificationValues.Both,
+                WordJustificationType.Center => JustificationValues.Center,
+                _ => JustificationValues.Left,
+            };
+        }
+
+        // Настройки страницы
+        private static SectionProperties CreateSectionProperties()
+        {
+            var properties = new SectionProperties();
+
+            // Прописываем портретную ориентацию
+            var pageSize = new PageSize
+            {
+                Orient = PageOrientationValues.Portrait
+            };
+
+            properties.AppendChild(pageSize);
+
+            return properties;
+        }
+
+        // Задание форматирования для абзаца
+        private static ParagraphProperties? CreateParagraphProperties(WordTextProperties? paragraphProperties)
+        {
+            if (paragraphProperties == null)
+            {
+                return null;
+            }
+
+            var properties = new ParagraphProperties();
+
+            // Вытаскиваем выравнивание текста
+            properties.AppendChild(new Justification()
+            {
+                Val = GetJustificationValues(paragraphProperties.JustificationType)
+            });
+
+            properties.AppendChild(new SpacingBetweenLines
+            {
+                LineRule = LineSpacingRuleValues.Auto
+            });
+
+            properties.AppendChild(new Indentation());
+
+            var paragraphMarkRunProperties = new ParagraphMarkRunProperties();
+
+            if (!string.IsNullOrEmpty(paragraphProperties.Size))
+            {
+                paragraphMarkRunProperties.AppendChild(new FontSize
+                {
+                    Val = paragraphProperties.Size
+                });
+            }
+
+            properties.AppendChild(paragraphMarkRunProperties);
+
+            return properties;
+        }
+
+        protected override void CreateWord(WordInfo info)
+        {
+            // Создаём документ Word
+            _wordDocument = WordprocessingDocument.Create(info.FileName, WordprocessingDocumentType.Document);
+
+            // Вытаскиваем главную часть из вордовского документа
+            MainDocumentPart mainPart = _wordDocument.AddMainDocumentPart();
+
+            mainPart.Document = new Document();
+
+            // Генерируем тело основной части документа
+            _docBody = mainPart.Document.AppendChild(new Body());
+        }
+
+        protected override void CreateParagraph(WordParagraph paragraph)
+        {
+            // Проверка на то, был ли вызван WordprocessingDocument.Create (создался ли документ) и есть ли вообще параграф для вставки
+            if (_docBody == null || paragraph == null)
+            {
+                return;
+            }
+
+            var docParagraph = new Paragraph();
+
+            // Добавляем свойства параграфа
+            docParagraph.AppendChild(CreateParagraphProperties(paragraph.TextProperties));
+
+            // Вставляем блоки текста (их называют Run)
+            foreach (var run in paragraph.Texts)
+            {
+                var docRun = new Run();
+                var properties = new RunProperties();
+
+                // Задание свойств текста - размер и жирность
+                properties.AppendChild(new FontSize { Val = run.Item2.Size });
+
+                if (run.Item2.Bold)
+                {
+                    properties.AppendChild(new Bold());
+                }
+
+                docRun.AppendChild(properties);
+
+                docRun.AppendChild(new Text
+                {
+                    Text = run.Item1,
+                    Space = SpaceProcessingModeValues.Preserve
+                });
+
+                docParagraph.AppendChild(docRun);
+            }
+
+            _docBody.AppendChild(docParagraph);
+        }
+
+        // Метод сохранения документа
+        protected override void SaveWord(WordInfo info)
+        {
+            if (_docBody == null || _wordDocument == null)
+            {
+                return;
+            }
+
+            // Вставляем информацию по секциям (смотри, что является входным параметром)
+            _docBody.AppendChild(CreateSectionProperties());
+
+            // Сохраняем документ
+            _wordDocument.MainDocumentPart!.Document.Save();
+
+            _wordDocument.Dispose();
+        }
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/BindingModels/ReportBindingModel.cs b/FurnitureAssembly/FurnitureAssemblyContracts/BindingModels/ReportBindingModel.cs
new file mode 100644
index 0000000..3afb378
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/BindingModels/ReportBindingModel.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyContracts.BindingModels
+{
+    // Реализация сущности "Отчёт"
+    public class ReportBindingModel
+    {
+        public string FileName { get; set; } = string.Empty;
+
+        public DateTime? DateFrom { get; set; }
+
+        public DateTime? DateTo { get; set; }
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/BusinessLogicsContracts/IReportLogic.cs b/FurnitureAssembly/FurnitureAssemblyContracts/BusinessLogicsContracts/IReportLogic.cs
new file mode 100644
index 0000000..3ab8a6f
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/BusinessLogicsContracts/IReportLogic.cs
@@ -0,0 +1,28 @@
+using FurnitureAssemblyContracts.BindingModels;
+using FurnitureAssemblyContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyContracts.BusinessLogicsContracts
+{
+    public interface IReportLogic
+    {
+        // Получение списка заготовок с указанием, в каких изделиях используются
+        List<ReportFurnitureWorkPieceViewModel> GetFurnitureWorkPiece();
+
+        // Получение списка заказов за определённый период
+        List<ReportOrdersViewModel> GetOrders(ReportBindingModel model);
+
+        // Сохранение изделий в файл-Word
+        void SaveFurnituresToWordFile(ReportBindingModel model);
+
+        // Сохранение заготовок с указанием изделий в файл-Excel
+        void SaveFurnitureWorkPieceToExcelFile(ReportBindingModel model);
+
+        // Сохранение заказов в файл-Pdf
+        void SaveOrdersToPdfFile(ReportBindingModel model);
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/SearchModels/OrderSearchModel.cs b/FurnitureAssembly/FurnitureAssemblyContracts/SearchModels/OrderSearchModel.cs
index c0a8f4e..de0a639 100644
--- a/FurnitureAssembly/FurnitureAssemblyContracts/SearchModels/OrderSearchModel.cs
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/SearchModels/OrderSearchModel.cs
@@ -11,5 +11,10 @@ namespace FurnitureAssemblyContracts.SearchModels
     {
         // для поиска по идентификатору
         public int? Id { get; set; }
+
+        // Два поля для возможности производить выборку
+        public DateTime? DateFrom { get; set; }
+
+        public DateTime? DateTo { get; set;}
     }
 }
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ReportFurnitureWorkPieceViewModel.cs b/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ReportFurnitureWorkPieceViewModel.cs
new file mode 100644
index 0000000..35f1d89
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ReportFurnitureWorkPieceViewModel.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyContracts.ViewModels
+{
+    public class ReportFurnitureWorkPieceViewModel
+    {
+        public string FurnitureName { get; set; } = string.Empty;
+
+        public int TotalCount { get; set; }
+
+        // Список кортежей
+        public List<(string WorkPiece, int Count)> WorkPieces { get; set; } = new();
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ReportOrdersViewModel.cs b/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ReportOrdersViewModel.cs
new file mode 100644
index 0000000..6533338
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ReportOrdersViewModel.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyContracts.ViewModels
+{
+    public class ReportOrdersViewModel
+    {
+        public int Id { get; set; }
+
+        public DateTime DateCreate {  get; set; }
+
+        public string FurnitureName { get; set; } = string.Empty;
+
+        public double Sum { get; set; }
+
+        public string OrderStatus { get; set; }
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Implements/OrderStorage.cs b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Implements/OrderStorage.cs
index ced1ec8..d350e95 100644
--- a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Implements/OrderStorage.cs
+++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Implements/OrderStorage.cs
@@ -30,13 +30,22 @@ namespace FurnitureAssemblyDatabaseImplement.Implements
 
         public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
         {
-            if(!model.Id.HasValue)
+            if(!model.Id.HasValue && !model.DateFrom.HasValue && !model.DateTo.HasValue)
             {
                 return new();
             }
 
             using var context = new FurnitureAssemblyDatabase();
 
+            if (!model.Id.HasValue && model.DateFrom.HasValue && model.DateTo.HasValue)
+            {
+                return context.Orders
+                    .Include(x => x.Furniture)
+                    .Where(x => x.DateCreate >= model.DateFrom && x.DateCreate <= model.DateTo)
+                    .Select(x => x.GetViewModel)
+                    .ToList();
+            }
+
             return context.Orders
                 .Include(x => x.Furniture)
                 .Where(x => x.Id == model.Id)
@@ -92,10 +101,14 @@ namespace FurnitureAssemblyDatabaseImplement.Implements
 
             if (element != null)
             {
+                // для более корректного отображения модели
+                var deletedElement = context.Orders.Include(x => x.Furniture)
+                    .FirstOrDefault(x => x.Id == model.Id)?.GetViewModel;
+
                 context.Orders.Remove(element);
                 context.SaveChanges();
 
-                return element.GetViewModel;
+                return deletedElement;
             }
 
             return null;
diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Migrations/20240311045740_InitialCreate.Designer.cs b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Migrations/20240325045814_InitCreate.Designer.cs
similarity index 98%
rename from FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Migrations/20240311045740_InitialCreate.Designer.cs
rename to FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Migrations/20240325045814_InitCreate.Designer.cs
index 4dd4e17..9fd79c6 100644
--- a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Migrations/20240311045740_InitialCreate.Designer.cs
+++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Migrations/20240325045814_InitCreate.Designer.cs
@@ -12,8 +12,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 namespace FurnitureAssemblyDatabaseImplement.Migrations
 {
     [DbContext(typeof(FurnitureAssemblyDatabase))]
-    [Migration("20240311045740_InitialCreate")]
-    partial class InitialCreate
+    [Migration("20240325045814_InitCreate")]
+    partial class InitCreate
     {
         /// <inheritdoc />
         protected override void BuildTargetModel(ModelBuilder modelBuilder)
diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Migrations/20240311045740_InitialCreate.cs b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Migrations/20240325045814_InitCreate.cs
similarity index 99%
rename from FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Migrations/20240311045740_InitialCreate.cs
rename to FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Migrations/20240325045814_InitCreate.cs
index 6413913..571b046 100644
--- a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Migrations/20240311045740_InitialCreate.cs
+++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Migrations/20240325045814_InitCreate.cs
@@ -6,7 +6,7 @@ using Microsoft.EntityFrameworkCore.Migrations;
 namespace FurnitureAssemblyDatabaseImplement.Migrations
 {
     /// <inheritdoc />
-    public partial class InitialCreate : Migration
+    public partial class InitCreate : Migration
     {
         /// <inheritdoc />
         protected override void Up(MigrationBuilder migrationBuilder)
diff --git a/FurnitureAssembly/FurnitureAssemblyFileImplement/Implements/OrderStorage.cs b/FurnitureAssembly/FurnitureAssemblyFileImplement/Implements/OrderStorage.cs
index dc8b00a..48aa6b9 100644
--- a/FurnitureAssembly/FurnitureAssemblyFileImplement/Implements/OrderStorage.cs
+++ b/FurnitureAssembly/FurnitureAssemblyFileImplement/Implements/OrderStorage.cs
@@ -28,9 +28,10 @@ namespace FurnitureAssemblyFileImplement.Implements
 
         public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
         {
-            if (!model.Id.HasValue)
+            if (!model.Id.HasValue && model.DateFrom.HasValue && model.DateTo.HasValue)
             {
-                return new();
+                return source.Orders.Where(x => x.DateCreate >= model.DateFrom && x.DateCreate <= model.DateTo)
+                   .Select(x => GetViewModel(x)).ToList();
             }
 
             return source.Orders.Where(x => x.Id == model.Id).Select(x => GetViewModel(x)).ToList();
diff --git a/FurnitureAssembly/FurnitureAssemblyListImplement/Implements/OrderStorage.cs b/FurnitureAssembly/FurnitureAssemblyListImplement/Implements/OrderStorage.cs
index f3c9c8f..931eb75 100644
--- a/FurnitureAssembly/FurnitureAssemblyListImplement/Implements/OrderStorage.cs
+++ b/FurnitureAssembly/FurnitureAssemblyListImplement/Implements/OrderStorage.cs
@@ -41,8 +41,16 @@ namespace FurnitureAssemblyListImplement.Implements
         {
             var result = new List<OrderViewModel>();
 
-            if(!model.Id.HasValue)
+            if(!model.Id.HasValue && model.DateFrom.HasValue && model.DateTo.HasValue)
             {
+                foreach (var order in _source.Orders)
+                {
+                    if (order.DateCreate >= model.DateFrom && order.DateCreate <= model.DateTo)
+                    {
+                        result.Add(GetViewModel(order));
+                    }
+                }
+
                 return result;
             }
 
diff --git a/FurnitureAssembly/FurnitureAssemblyView/FormMain.Designer.cs b/FurnitureAssembly/FurnitureAssemblyView/FormMain.Designer.cs
index 285c4e7..2da9a01 100644
--- a/FurnitureAssembly/FurnitureAssemblyView/FormMain.Designer.cs
+++ b/FurnitureAssembly/FurnitureAssemblyView/FormMain.Designer.cs
@@ -38,6 +38,10 @@
             toolStripMenuItem = new ToolStripMenuItem();
             workPieceToolStripMenuItem = new ToolStripMenuItem();
             furnitureToolStripMenuItem = new ToolStripMenuItem();
+            reportsToolStripMenuItem = new ToolStripMenuItem();
+            workPiecesToolStripMenuItem = new ToolStripMenuItem();
+            workPieceFurnituresToolStripMenuItem = new ToolStripMenuItem();
+            ordersToolStripMenuItem = new ToolStripMenuItem();
             ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
             menuStrip.SuspendLayout();
             SuspendLayout();
@@ -45,18 +49,20 @@
             // dataGridView
             // 
             dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
-            dataGridView.Location = new Point(11, 36);
+            dataGridView.Location = new Point(10, 27);
+            dataGridView.Margin = new Padding(3, 2, 3, 2);
             dataGridView.Name = "dataGridView";
             dataGridView.RowHeadersWidth = 51;
             dataGridView.RowTemplate.Height = 29;
-            dataGridView.Size = new Size(937, 403);
+            dataGridView.Size = new Size(820, 302);
             dataGridView.TabIndex = 0;
             // 
             // buttonCreateOrder
             // 
-            buttonCreateOrder.Location = new Point(1014, 67);
+            buttonCreateOrder.Location = new Point(887, 50);
+            buttonCreateOrder.Margin = new Padding(3, 2, 3, 2);
             buttonCreateOrder.Name = "buttonCreateOrder";
-            buttonCreateOrder.Size = new Size(235, 46);
+            buttonCreateOrder.Size = new Size(206, 34);
             buttonCreateOrder.TabIndex = 1;
             buttonCreateOrder.Text = "Создать заказ";
             buttonCreateOrder.UseVisualStyleBackColor = true;
@@ -64,9 +70,10 @@
             // 
             // buttonTakeOrderInWork
             // 
-            buttonTakeOrderInWork.Location = new Point(1014, 143);
+            buttonTakeOrderInWork.Location = new Point(887, 107);
+            buttonTakeOrderInWork.Margin = new Padding(3, 2, 3, 2);
             buttonTakeOrderInWork.Name = "buttonTakeOrderInWork";
-            buttonTakeOrderInWork.Size = new Size(235, 48);
+            buttonTakeOrderInWork.Size = new Size(206, 36);
             buttonTakeOrderInWork.TabIndex = 2;
             buttonTakeOrderInWork.Text = "Отдать на выполнение";
             buttonTakeOrderInWork.UseVisualStyleBackColor = true;
@@ -74,9 +81,10 @@
             // 
             // buttonOrderReady
             // 
-            buttonOrderReady.Location = new Point(1014, 220);
+            buttonOrderReady.Location = new Point(887, 165);
+            buttonOrderReady.Margin = new Padding(3, 2, 3, 2);
             buttonOrderReady.Name = "buttonOrderReady";
-            buttonOrderReady.Size = new Size(235, 41);
+            buttonOrderReady.Size = new Size(206, 31);
             buttonOrderReady.TabIndex = 3;
             buttonOrderReady.Text = "Заказ готов";
             buttonOrderReady.UseVisualStyleBackColor = true;
@@ -84,9 +92,10 @@
             // 
             // buttonIssuedOrder
             // 
-            buttonIssuedOrder.Location = new Point(1014, 289);
+            buttonIssuedOrder.Location = new Point(887, 217);
+            buttonIssuedOrder.Margin = new Padding(3, 2, 3, 2);
             buttonIssuedOrder.Name = "buttonIssuedOrder";
-            buttonIssuedOrder.Size = new Size(235, 44);
+            buttonIssuedOrder.Size = new Size(206, 33);
             buttonIssuedOrder.TabIndex = 4;
             buttonIssuedOrder.Text = "Заказ выдан";
             buttonIssuedOrder.UseVisualStyleBackColor = true;
@@ -94,9 +103,10 @@
             // 
             // buttonRefresh
             // 
-            buttonRefresh.Location = new Point(1014, 359);
+            buttonRefresh.Location = new Point(887, 269);
+            buttonRefresh.Margin = new Padding(3, 2, 3, 2);
             buttonRefresh.Name = "buttonRefresh";
-            buttonRefresh.Size = new Size(235, 39);
+            buttonRefresh.Size = new Size(206, 29);
             buttonRefresh.TabIndex = 5;
             buttonRefresh.Text = "Обновить";
             buttonRefresh.UseVisualStyleBackColor = true;
@@ -105,11 +115,11 @@
             // menuStrip
             // 
             menuStrip.ImageScalingSize = new Size(20, 20);
-            menuStrip.Items.AddRange(new ToolStripItem[] { toolStripMenuItem });
+            menuStrip.Items.AddRange(new ToolStripItem[] { toolStripMenuItem, reportsToolStripMenuItem });
             menuStrip.Location = new Point(0, 0);
             menuStrip.Name = "menuStrip";
-            menuStrip.Padding = new Padding(6, 3, 0, 3);
-            menuStrip.Size = new Size(1297, 30);
+            menuStrip.Padding = new Padding(5, 2, 0, 2);
+            menuStrip.Size = new Size(1135, 24);
             menuStrip.TabIndex = 6;
             menuStrip.Text = "menuStrip";
             // 
@@ -117,28 +127,56 @@
             // 
             toolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { workPieceToolStripMenuItem, furnitureToolStripMenuItem });
             toolStripMenuItem.Name = "toolStripMenuItem";
-            toolStripMenuItem.Size = new Size(117, 24);
+            toolStripMenuItem.Size = new Size(94, 20);
             toolStripMenuItem.Text = "Справочники";
             // 
             // workPieceToolStripMenuItem
             // 
             workPieceToolStripMenuItem.Name = "workPieceToolStripMenuItem";
-            workPieceToolStripMenuItem.Size = new Size(224, 26);
+            workPieceToolStripMenuItem.Size = new Size(130, 22);
             workPieceToolStripMenuItem.Text = "Заготовки";
             workPieceToolStripMenuItem.Click += WorkPieceToolStripMenuItem_Click;
             // 
             // furnitureToolStripMenuItem
             // 
             furnitureToolStripMenuItem.Name = "furnitureToolStripMenuItem";
-            furnitureToolStripMenuItem.Size = new Size(224, 26);
+            furnitureToolStripMenuItem.Size = new Size(130, 22);
             furnitureToolStripMenuItem.Text = "Изделия";
             furnitureToolStripMenuItem.Click += FurnitureToolStripMenuItem_Click;
             // 
+            // reportsToolStripMenuItem
+            // 
+            reportsToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { workPiecesToolStripMenuItem, workPieceFurnituresToolStripMenuItem, ordersToolStripMenuItem });
+            reportsToolStripMenuItem.Name = "reportsToolStripMenuItem";
+            reportsToolStripMenuItem.Size = new Size(60, 20);
+            reportsToolStripMenuItem.Text = "Отчёты";
+            // 
+            // workPiecesToolStripMenuItem
+            // 
+            workPiecesToolStripMenuItem.Name = "workPiecesToolStripMenuItem";
+            workPiecesToolStripMenuItem.Size = new Size(203, 22);
+            workPiecesToolStripMenuItem.Text = "Список заготовок";
+            workPiecesToolStripMenuItem.Click += WorkPiecesToolStripMenuItem_Click;
+            // 
+            // workPieceFurnituresToolStripMenuItem
+            // 
+            workPieceFurnituresToolStripMenuItem.Name = "workPieceFurnituresToolStripMenuItem";
+            workPieceFurnituresToolStripMenuItem.Size = new Size(203, 22);
+            workPieceFurnituresToolStripMenuItem.Text = "Заготовки по изделиям";
+            workPieceFurnituresToolStripMenuItem.Click += WorkPieceFurnituresToolStripMenuItem_Click;
+            // 
+            // ordersToolStripMenuItem
+            // 
+            ordersToolStripMenuItem.Name = "ordersToolStripMenuItem";
+            ordersToolStripMenuItem.Size = new Size(203, 22);
+            ordersToolStripMenuItem.Text = "Список заказов";
+            ordersToolStripMenuItem.Click += OrdersToolStripMenuItem_Click;
+            // 
             // FormMain
             // 
-            AutoScaleDimensions = new SizeF(8F, 20F);
+            AutoScaleDimensions = new SizeF(7F, 15F);
             AutoScaleMode = AutoScaleMode.Font;
-            ClientSize = new Size(1297, 451);
+            ClientSize = new Size(1135, 338);
             Controls.Add(buttonRefresh);
             Controls.Add(buttonIssuedOrder);
             Controls.Add(buttonOrderReady);
@@ -147,6 +185,7 @@
             Controls.Add(dataGridView);
             Controls.Add(menuStrip);
             MainMenuStrip = menuStrip;
+            Margin = new Padding(3, 2, 3, 2);
             Name = "FormMain";
             Text = "Сборка мебели";
             Load += FormMain_Load;
@@ -169,5 +208,9 @@
         private ToolStripMenuItem toolStripMenuItem;
         private ToolStripMenuItem workPieceToolStripMenuItem;
         private ToolStripMenuItem furnitureToolStripMenuItem;
+        private ToolStripMenuItem reportsToolStripMenuItem;
+        private ToolStripMenuItem workPiecesToolStripMenuItem;
+        private ToolStripMenuItem workPieceFurnituresToolStripMenuItem;
+        private ToolStripMenuItem ordersToolStripMenuItem;
     }
 }
\ No newline at end of file
diff --git a/FurnitureAssembly/FurnitureAssemblyView/FormMain.cs b/FurnitureAssembly/FurnitureAssemblyView/FormMain.cs
index fcbb570..640eb59 100644
--- a/FurnitureAssembly/FurnitureAssemblyView/FormMain.cs
+++ b/FurnitureAssembly/FurnitureAssemblyView/FormMain.cs
@@ -20,12 +20,15 @@ namespace FurnitureAssemblyView
 
         private readonly IOrderLogic _orderLogic;
 
-        public FormMain(ILogger<FormMain> logger, IOrderLogic orderLogic)
+        private readonly IReportLogic _reportLogic;
+
+        public FormMain(ILogger<FormMain> logger, IOrderLogic orderLogic, IReportLogic reportLogic)
         {
             InitializeComponent();
 
             _logger = logger;
             _orderLogic = orderLogic;
+            _reportLogic = reportLogic;
         }
 
         private void FormMain_Load(object sender, EventArgs e)
@@ -45,6 +48,7 @@ namespace FurnitureAssemblyView
                 {
                     dataGridView.DataSource = list;
                     dataGridView.Columns["FurnitureId"].Visible = false;
+                    dataGridView.Columns["FurnitureName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                 }
 
                 _logger.LogInformation("Загрузка заказов");
@@ -177,6 +181,41 @@ namespace FurnitureAssemblyView
             }
         }
 
+        private void WorkPiecesToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            using var dialog = new SaveFileDialog { Filter = "docx|*.docx" };
+
+            if (dialog.ShowDialog() == DialogResult.OK)
+            {
+                _reportLogic.SaveFurnituresToWordFile(new ReportBindingModel
+                {
+                    FileName = dialog.FileName
+                });
+
+                MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
+            }
+        }
+
+        private void WorkPieceFurnituresToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            var service = Program.ServiceProvider?.GetService(typeof(FormReportFurnitureWorkPieces));
+
+            if (service is FormReportFurnitureWorkPieces form)
+            {
+                form.ShowDialog();
+            }
+        }
+
+        private void OrdersToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            var service = Program.ServiceProvider?.GetService(typeof(FormReportOrders));
+
+            if (service is FormReportOrders form)
+            {
+                form.ShowDialog();
+            }
+        }
+
         private void ButtonRef_Click(object sender, EventArgs e)
         {
             LoadData();
diff --git a/FurnitureAssembly/FurnitureAssemblyView/FormMain.resx b/FurnitureAssembly/FurnitureAssemblyView/FormMain.resx
index a0623c8..6c82d08 100644
--- a/FurnitureAssembly/FurnitureAssemblyView/FormMain.resx
+++ b/FurnitureAssembly/FurnitureAssemblyView/FormMain.resx
@@ -117,7 +117,7 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+  <metadata name="menuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
   </metadata>
 </root>
\ No newline at end of file
diff --git a/FurnitureAssembly/FurnitureAssemblyView/FormReportFurnitureWorkPieces.Designer.cs b/FurnitureAssembly/FurnitureAssemblyView/FormReportFurnitureWorkPieces.Designer.cs
new file mode 100644
index 0000000..f32df70
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyView/FormReportFurnitureWorkPieces.Designer.cs
@@ -0,0 +1,108 @@
+namespace FurnitureAssemblyView
+{
+    partial class FormReportFurnitureWorkPieces
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.buttonSaveToExcel = new System.Windows.Forms.Button();
+            this.dataGridView = new System.Windows.Forms.DataGridView();
+            this.ColumWorkPiece = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.ColumnFurniture = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.ColumnCount = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // buttonSaveToExcel
+            // 
+            this.buttonSaveToExcel.Location = new System.Drawing.Point(33, 25);
+            this.buttonSaveToExcel.Name = "buttonSaveToExcel";
+            this.buttonSaveToExcel.Size = new System.Drawing.Size(256, 29);
+            this.buttonSaveToExcel.TabIndex = 0;
+            this.buttonSaveToExcel.Text = "Сохранить в Excel";
+            this.buttonSaveToExcel.UseVisualStyleBackColor = true;
+            this.buttonSaveToExcel.Click += new System.EventHandler(this.ButtonSaveToExcel_Click);
+            // 
+            // dataGridView
+            // 
+            this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            this.dataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
+            this.ColumWorkPiece,
+            this.ColumnFurniture,
+            this.ColumnCount});
+            this.dataGridView.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this.dataGridView.Location = new System.Drawing.Point(0, 73);
+            this.dataGridView.Name = "dataGridView";
+            this.dataGridView.RowHeadersWidth = 51;
+            this.dataGridView.RowTemplate.Height = 29;
+            this.dataGridView.Size = new System.Drawing.Size(800, 395);
+            this.dataGridView.TabIndex = 1;
+            // 
+            // ColumWorkPiece
+            // 
+            this.ColumWorkPiece.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
+            this.ColumWorkPiece.HeaderText = "Заготовка";
+            this.ColumWorkPiece.MinimumWidth = 6;
+            this.ColumWorkPiece.Name = "ColumWorkPiece";
+            // 
+            // ColumnFurniture
+            // 
+            this.ColumnFurniture.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
+            this.ColumnFurniture.HeaderText = "Изделие";
+            this.ColumnFurniture.MinimumWidth = 6;
+            this.ColumnFurniture.Name = "ColumnFurniture";
+            // 
+            // ColumnCount
+            // 
+            this.ColumnCount.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
+            this.ColumnCount.HeaderText = "Количество";
+            this.ColumnCount.MinimumWidth = 6;
+            this.ColumnCount.Name = "ColumnCount";
+            // 
+            // FormReportFurnitureWorkPieces
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(800, 468);
+            this.Controls.Add(this.dataGridView);
+            this.Controls.Add(this.buttonSaveToExcel);
+            this.Name = "FormReportFurnitureWorkPieces";
+            this.Text = "Заготовки по изделиям";
+            this.Load += new System.EventHandler(this.FormReportFurnitureWorkPieces_Load);
+            ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private Button buttonSaveToExcel;
+        private DataGridView dataGridView;
+        private DataGridViewTextBoxColumn ColumWorkPiece;
+        private DataGridViewTextBoxColumn ColumnFurniture;
+        private DataGridViewTextBoxColumn ColumnCount;
+    }
+}
\ No newline at end of file
diff --git a/FurnitureAssembly/FurnitureAssemblyView/FormReportFurnitureWorkPieces.cs b/FurnitureAssembly/FurnitureAssemblyView/FormReportFurnitureWorkPieces.cs
new file mode 100644
index 0000000..1c0f41e
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyView/FormReportFurnitureWorkPieces.cs
@@ -0,0 +1,94 @@
+using FurnitureAssemblyContracts.BindingModels;
+using FurnitureAssemblyContracts.BusinessLogicsContracts;
+using Microsoft.Extensions.Logging;
+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;
+
+namespace FurnitureAssemblyView
+{
+    public partial class FormReportFurnitureWorkPieces : Form
+    {
+        private readonly ILogger _logger;
+
+        private readonly IReportLogic _logic;
+
+        public FormReportFurnitureWorkPieces(ILogger<FormReportFurnitureWorkPieces> logger, IReportLogic logic)
+        {
+            InitializeComponent();
+
+            _logger = logger;
+            _logic = logic;
+        }
+
+        private void FormReportFurnitureWorkPieces_Load(object sender, EventArgs e)
+        {
+            try
+            {
+                var dict = _logic.GetFurnitureWorkPiece();
+
+                if (dict != null)
+                {
+                    dataGridView.Rows.Clear();
+
+                    foreach (var elem in dict)
+                    {
+                        dataGridView.Rows.Add(new object[] { elem.FurnitureName, "", "" });
+
+                        foreach (var listElem in elem.WorkPieces)
+                        {
+                            dataGridView.Rows.Add(new object[] { "", listElem.Item1, listElem.Item2 });
+                        }
+
+                        dataGridView.Rows.Add(new object[] { "Итого", "", elem.TotalCount });
+                        dataGridView.Rows.Add(Array.Empty<object>());
+                    }
+                }
+
+                _logger.LogInformation("Загрузка списка изделий по заготовкам");
+            }
+            catch (Exception ex)
+            {
+                _logger.LogError(ex, "Ошибка загрузки списка изделий по заготовкам");
+
+                MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void ButtonSaveToExcel_Click(object sender, EventArgs e)
+        {
+            // Фильтрация файлов для диалогового окна
+            using var dialog = new SaveFileDialog 
+            { 
+                Filter = "xlsx|*.xlsx" 
+            };
+
+            if (dialog.ShowDialog() == DialogResult.OK)
+            {
+                try
+                {
+                    _logic.SaveFurnitureWorkPieceToExcelFile(new ReportBindingModel
+                    {
+                        FileName = dialog.FileName
+                    });
+
+                    _logger.LogInformation("Сохранение списка изделий по заготовкам");
+
+                    MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                }
+                catch (Exception ex)
+                {
+                    _logger.LogError(ex, "Ошибка сохранения списка изделий по заготовкам");
+
+                    MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                }
+            }
+        }
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyView/FormReportFurnitureWorkPieces.resx b/FurnitureAssembly/FurnitureAssemblyView/FormReportFurnitureWorkPieces.resx
new file mode 100644
index 0000000..c9ea820
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyView/FormReportFurnitureWorkPieces.resx
@@ -0,0 +1,78 @@
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="ColumWorkPiece.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="ColumnManufacture.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="ColumnCount.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="ColumWorkPiece.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="ColumnManufacture.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="ColumnCount.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+</root>
\ No newline at end of file
diff --git a/FurnitureAssembly/FurnitureAssemblyView/FormReportOrders.Designer.cs b/FurnitureAssembly/FurnitureAssemblyView/FormReportOrders.Designer.cs
new file mode 100644
index 0000000..a0fc391
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyView/FormReportOrders.Designer.cs
@@ -0,0 +1,131 @@
+namespace FurnitureAssemblyView
+{
+    partial class FormReportOrders
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            panel = new Panel();
+            buttonToPdf = new Button();
+            buttonMake = new Button();
+            label2 = new Label();
+            label1 = new Label();
+            dateTimePickerTo = new DateTimePicker();
+            dateTimePickerFrom = new DateTimePicker();
+            panel.SuspendLayout();
+            SuspendLayout();
+            // 
+            // panel
+            // 
+            panel.Controls.Add(buttonToPdf);
+            panel.Controls.Add(buttonMake);
+            panel.Controls.Add(label2);
+            panel.Controls.Add(label1);
+            panel.Controls.Add(dateTimePickerTo);
+            panel.Controls.Add(dateTimePickerFrom);
+            panel.Dock = DockStyle.Top;
+            panel.Location = new Point(0, 0);
+            panel.Name = "panel";
+            panel.Size = new Size(1112, 51);
+            panel.TabIndex = 0;
+            // 
+            // buttonToPdf
+            // 
+            buttonToPdf.Location = new Point(894, 10);
+            buttonToPdf.Name = "buttonToPdf";
+            buttonToPdf.Size = new Size(157, 29);
+            buttonToPdf.TabIndex = 5;
+            buttonToPdf.Text = "В Pdf";
+            buttonToPdf.UseVisualStyleBackColor = true;
+            buttonToPdf.Click += ButtonToPdf_Click;
+            // 
+            // buttonMake
+            // 
+            buttonMake.Location = new Point(612, 10);
+            buttonMake.Name = "buttonMake";
+            buttonMake.Size = new Size(157, 29);
+            buttonMake.TabIndex = 4;
+            buttonMake.Text = "Сформировать";
+            buttonMake.UseVisualStyleBackColor = true;
+            buttonMake.Click += ButtonMake_Click;
+            // 
+            // label2
+            // 
+            label2.AutoSize = true;
+            label2.Location = new Point(263, 17);
+            label2.Name = "label2";
+            label2.Size = new Size(27, 20);
+            label2.TabIndex = 3;
+            label2.Text = "по";
+            // 
+            // label1
+            // 
+            label1.AutoSize = true;
+            label1.Location = new Point(25, 17);
+            label1.Name = "label1";
+            label1.Size = new Size(18, 20);
+            label1.TabIndex = 2;
+            label1.Text = "С";
+            // 
+            // dateTimePickerTo
+            // 
+            dateTimePickerTo.Location = new Point(313, 12);
+            dateTimePickerTo.Name = "dateTimePickerTo";
+            dateTimePickerTo.Size = new Size(169, 27);
+            dateTimePickerTo.TabIndex = 1;
+            // 
+            // dateTimePickerFrom
+            // 
+            dateTimePickerFrom.Location = new Point(65, 12);
+            dateTimePickerFrom.Name = "dateTimePickerFrom";
+            dateTimePickerFrom.Size = new Size(176, 27);
+            dateTimePickerFrom.TabIndex = 0;
+            // 
+            // FormReportOrders
+            // 
+            AutoScaleDimensions = new SizeF(8F, 20F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(1112, 450);
+            Controls.Add(panel);
+            Name = "FormReportOrders";
+            Text = "Заказы";
+            Load += FormReportOrders_Load;
+            panel.ResumeLayout(false);
+            panel.PerformLayout();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private Panel panel;
+        private Button buttonMake;
+        private Label label2;
+        private Label label1;
+        private DateTimePicker dateTimePickerTo;
+        private DateTimePicker dateTimePickerFrom;
+        private Button buttonToPdf;
+    }
+}
\ No newline at end of file
diff --git a/FurnitureAssembly/FurnitureAssemblyView/FormReportOrders.cs b/FurnitureAssembly/FurnitureAssemblyView/FormReportOrders.cs
new file mode 100644
index 0000000..2310a14
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyView/FormReportOrders.cs
@@ -0,0 +1,127 @@
+using FurnitureAssemblyContracts.BindingModels;
+using FurnitureAssemblyContracts.BusinessLogicsContracts;
+using Microsoft.Extensions.Logging;
+using Microsoft.Reporting.WinForms;
+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;
+
+namespace FurnitureAssemblyView
+{
+    // Форма с отчётом
+    public partial class FormReportOrders : Form
+    {
+        private readonly ReportViewer reportViewer;
+
+        private readonly ILogger _logger;
+
+        private readonly IReportLogic _logic;
+
+        public FormReportOrders(ILogger<FormReportOrders> logger, IReportLogic logic)
+        {
+            InitializeComponent();
+
+            _logger = logger;
+            _logic = logic;
+
+            reportViewer = new ReportViewer
+            {
+                Dock = DockStyle.Fill
+            };
+
+            reportViewer.LocalReport.LoadReportDefinition(new FileStream("ReportOrders.rdlc", FileMode.Open));
+
+            Controls.Clear();
+            Controls.Add(reportViewer);
+            Controls.Add(panel);
+        }
+
+        private void ButtonMake_Click(object sender, EventArgs e)
+        {
+            if (dateTimePickerFrom.Value.Date >= dateTimePickerTo.Value.Date)
+            {
+                MessageBox.Show("Дата начала должна быть меньше даты окончания", "Ошибка",
+                    MessageBoxButtons.OK, MessageBoxIcon.Error);
+
+                return;
+            }
+            try
+            {
+                var dataSource = _logic.GetOrders(new ReportBindingModel
+                {
+                    DateFrom = dateTimePickerFrom.Value,
+                    DateTo = dateTimePickerTo.Value
+                });
+
+                var source = new ReportDataSource("DataSetOrders", dataSource);
+
+                reportViewer.LocalReport.DataSources.Clear();
+                reportViewer.LocalReport.DataSources.Add(source);
+
+                var parameters = new[] { new ReportParameter("ReportParameterPeriod",
+                    $"c {dateTimePickerFrom.Value.ToShortDateString()} по {dateTimePickerTo.Value.ToShortDateString()}") };
+
+                reportViewer.LocalReport.SetParameters(parameters);
+                reportViewer.RefreshReport();
+
+                _logger.LogInformation("Загрузка списка заказов на период {From}-{To}", dateTimePickerFrom.Value.ToShortDateString(),
+                    dateTimePickerTo.Value.ToShortDateString());
+            }
+            catch (Exception ex)
+            {
+                _logger.LogError(ex, "Ошибка загрузки списка заказов на период");
+                MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void ButtonToPdf_Click(object sender, EventArgs e)
+        {
+            if (dateTimePickerFrom.Value.Date >= dateTimePickerTo.Value.Date)
+            {
+                MessageBox.Show("Дата начала должна быть меньше даты окончания", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+
+                return;
+            }
+
+            using var dialog = new SaveFileDialog
+            {
+                Filter = "pdf|*.pdf"
+            };
+
+            if (dialog.ShowDialog() == DialogResult.OK)
+            {
+                try
+                {
+                    _logic.SaveOrdersToPdfFile(new ReportBindingModel
+                    {
+                        FileName = dialog.FileName,
+                        DateFrom = dateTimePickerFrom.Value,
+                        DateTo = dateTimePickerTo.Value
+                    });
+
+                    _logger.LogInformation("Сохранение списка заказов на период {From}-{To}",
+                        dateTimePickerFrom.Value.ToShortDateString(), dateTimePickerTo.Value.ToShortDateString());
+
+                    MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                }
+                catch (Exception ex)
+                {
+                    _logger.LogError(ex, "Ошибка сохранения списка заказов на период");
+
+                    MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                }
+            }
+        }
+
+        private void FormReportOrders_Load(object sender, EventArgs e)
+        {
+
+        }
+    }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyView/FormReportOrders.resx b/FurnitureAssembly/FurnitureAssemblyView/FormReportOrders.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyView/FormReportOrders.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema 
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/FurnitureAssembly/FurnitureAssemblyView/FurnitureAssemblyView.csproj b/FurnitureAssembly/FurnitureAssemblyView/FurnitureAssemblyView.csproj
index f2d0856..b0292a8 100644
--- a/FurnitureAssembly/FurnitureAssemblyView/FurnitureAssemblyView.csproj
+++ b/FurnitureAssembly/FurnitureAssemblyView/FurnitureAssemblyView.csproj
@@ -9,13 +9,15 @@
   </PropertyGroup>
 
   <ItemGroup>
+    <PackageReference Include="Microsoft.Data.SqlClient" Version="5.2.0" />
     <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.16">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>
-    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
-    <PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
-    <PackageReference Include="NLog.Extensions.Logging" Version="5.3.8" />
+	  <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
+	  <PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
+	  <PackageReference Include="NLog.Extensions.Logging" Version="5.3.8" />
+	  <PackageReference Include="ReportViewerCore.WinForms" Version="15.1.17" />
   </ItemGroup>
 
   <ItemGroup>
@@ -26,4 +28,10 @@
     <ProjectReference Include="..\FurnitureAssemblyListImplement\FurnitureAssemblyListImplement.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <None Update="ReportOrders.rdlc">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
+
 </Project>
\ No newline at end of file
diff --git a/FurnitureAssembly/FurnitureAssemblyView/Program.cs b/FurnitureAssembly/FurnitureAssemblyView/Program.cs
index 542087c..9550b23 100644
--- a/FurnitureAssembly/FurnitureAssemblyView/Program.cs
+++ b/FurnitureAssembly/FurnitureAssemblyView/Program.cs
@@ -1,4 +1,6 @@
 using FurnitureAssemblyBusinessLogic.BussinessLogic;
+using FurnitureAssemblyBusinessLogic.OfficePackage.Implements;
+using FurnitureAssemblyBusinessLogic.OfficePackage;
 using FurnitureAssemblyContracts.BusinessLogicsContracts;
 using FurnitureAssemblyContracts.StoragesContracts;
 using FurnitureAssemblyDatabaseImplement.Implements;
@@ -45,6 +47,11 @@ namespace FurnitureAssemblyView
             services.AddTransient<IWorkPieceLogic, WorkPieceLogic>();
             services.AddTransient<IOrderLogic, OrderLogic>();
             services.AddTransient<IFurnitureLogic, FurnitureLogic>();
+            services.AddTransient<IReportLogic, ReportLogic>();
+
+            services.AddTransient<AbstractSaveToExcel, SaveToExcel>();
+            services.AddTransient<AbstractSaveToWord, SaveToWord>();
+            services.AddTransient<AbstractSaveToPdf, SaveToPdf>();
 
             services.AddTransient<FormMain>();
             services.AddTransient<FormWorkPiece>();
@@ -52,7 +59,9 @@ namespace FurnitureAssemblyView
             services.AddTransient<FormCreateOrder>();
             services.AddTransient<FormFurniture>();
             services.AddTransient<FormFurnitures>();
-            services.AddTransient<FormFurnitureWorkPiece>();
+            services.AddTransient<FormFurnitureWorkPiece>(); 
+            services.AddTransient<FormReportFurnitureWorkPieces>();
+            services.AddTransient<FormReportOrders>();
         }
     }
 }
\ No newline at end of file
diff --git a/FurnitureAssembly/FurnitureAssemblyView/ReportOrders.rdlc b/FurnitureAssembly/FurnitureAssemblyView/ReportOrders.rdlc
new file mode 100644
index 0000000..29dd1f4
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyView/ReportOrders.rdlc
@@ -0,0 +1,600 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
+  <AutoRefresh>0</AutoRefresh>
+  <DataSources>
+    <DataSource Name="FurnitureAssemblyContractsViewModels">
+      <ConnectionProperties>
+        <DataProvider>System.Data.DataSet</DataProvider>
+        <ConnectString>/* Local Connection */</ConnectString>
+      </ConnectionProperties>
+      <rd:DataSourceID>10791c83-cee8-4a38-bbd0-245fc17cefb3</rd:DataSourceID>
+    </DataSource>
+  </DataSources>
+  <DataSets>
+    <DataSet Name="DataSetOrders">
+      <Query>
+        <DataSourceName>FurnitureAssemblyContractsViewModels</DataSourceName>
+        <CommandText>/* Local Query */</CommandText>
+      </Query>
+      <Fields>
+        <Field Name="Id">
+          <DataField>Id</DataField>
+          <rd:TypeName>System.Int32</rd:TypeName>
+        </Field>
+        <Field Name="DateCreate">
+          <DataField>DateCreate</DataField>
+          <rd:TypeName>System.DateTime</rd:TypeName>
+        </Field>
+        <Field Name="FurnitureName">
+          <DataField>FurnitureName</DataField>
+          <rd:TypeName>System.String</rd:TypeName>
+        </Field>
+        <Field Name="Sum">
+          <DataField>Sum</DataField>
+          <rd:TypeName>System.Decimal</rd:TypeName>
+        </Field>
+        <Field Name="OrderStatus">
+          <DataField>OrderStatus</DataField>
+          <rd:TypeName>FurnitureAssemblyDataModels.OrderStatus</rd:TypeName>
+        </Field>
+      </Fields>
+      <rd:DataSetInfo>
+        <rd:DataSetName>FurnitureAssemblyContracts.ViewModels</rd:DataSetName>
+        <rd:TableName>ReportOrdersViewModel</rd:TableName>
+        <rd:ObjectDataSourceType>FurnitureAssemblyContracts.ViewModels.ReportOrdersViewModel, ConfectioneryContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</rd:ObjectDataSourceType>
+      </rd:DataSetInfo>
+    </DataSet>
+  </DataSets>
+  <ReportSections>
+    <ReportSection>
+      <Body>
+        <ReportItems>
+          <Textbox Name="ReportParameterPeriod">
+            <CanGrow>true</CanGrow>
+            <KeepTogether>true</KeepTogether>
+            <Paragraphs>
+              <Paragraph>
+                <TextRuns>
+                  <TextRun>
+                    <Value>=Parameters!ReportParameterPeriod.Value</Value>
+                    <Style>
+                      <FontSize>14pt</FontSize>
+                      <FontWeight>Bold</FontWeight>
+                    </Style>
+                  </TextRun>
+                </TextRuns>
+                <Style>
+                  <TextAlign>Center</TextAlign>
+                </Style>
+              </Paragraph>
+            </Paragraphs>
+            <rd:DefaultName>ReportParameterPeriod</rd:DefaultName>
+            <Top>1cm</Top>
+            <Height>1cm</Height>
+            <Width>21cm</Width>
+            <Style>
+              <Border>
+                <Style>None</Style>
+              </Border>
+              <VerticalAlign>Middle</VerticalAlign>
+              <PaddingLeft>2pt</PaddingLeft>
+              <PaddingRight>2pt</PaddingRight>
+              <PaddingTop>2pt</PaddingTop>
+              <PaddingBottom>2pt</PaddingBottom>
+            </Style>
+          </Textbox>
+          <Textbox Name="TextboxTitle">
+            <CanGrow>true</CanGrow>
+            <KeepTogether>true</KeepTogether>
+            <Paragraphs>
+              <Paragraph>
+                <TextRuns>
+                  <TextRun>
+                    <Value>Заказы</Value>
+                    <Style>
+                      <FontSize>16pt</FontSize>
+                      <FontWeight>Bold</FontWeight>
+                    </Style>
+                  </TextRun>
+                </TextRuns>
+                <Style>
+                  <TextAlign>Center</TextAlign>
+                </Style>
+              </Paragraph>
+            </Paragraphs>
+            <Height>1cm</Height>
+            <Width>21cm</Width>
+            <ZIndex>1</ZIndex>
+            <Style>
+              <Border>
+                <Style>None</Style>
+              </Border>
+              <VerticalAlign>Middle</VerticalAlign>
+              <PaddingLeft>2pt</PaddingLeft>
+              <PaddingRight>2pt</PaddingRight>
+              <PaddingTop>2pt</PaddingTop>
+              <PaddingBottom>2pt</PaddingBottom>
+            </Style>
+          </Textbox>
+          <Tablix Name="Tablix1">
+            <TablixBody>
+              <TablixColumns>
+                <TablixColumn>
+                  <Width>2.5cm</Width>
+                </TablixColumn>
+                <TablixColumn>
+                  <Width>3.21438cm</Width>
+                </TablixColumn>
+                <TablixColumn>
+                  <Width>8.23317cm</Width>
+                </TablixColumn>
+                <TablixColumn>
+                  <Width>3.02917cm</Width>
+                </TablixColumn>
+                <TablixColumn>
+                  <Width>2.87042cm</Width>
+                </TablixColumn>
+              </TablixColumns>
+              <TablixRows>
+                <TablixRow>
+                  <Height>0.6cm</Height>
+                  <TablixCells>
+                    <TablixCell>
+                      <CellContents>
+                        <Textbox Name="Textbox5">
+                          <CanGrow>true</CanGrow>
+                          <KeepTogether>true</KeepTogether>
+                          <Paragraphs>
+                            <Paragraph>
+                              <TextRuns>
+                                <TextRun>
+                                  <Value>Номер</Value>
+                                  <Style>
+                                    <FontWeight>Bold</FontWeight>
+                                  </Style>
+                                </TextRun>
+                              </TextRuns>
+                              <Style />
+                            </Paragraph>
+                          </Paragraphs>
+                          <rd:DefaultName>Textbox5</rd:DefaultName>
+                          <Style>
+                            <Border>
+                              <Color>LightGrey</Color>
+                              <Style>Solid</Style>
+                            </Border>
+                            <PaddingLeft>2pt</PaddingLeft>
+                            <PaddingRight>2pt</PaddingRight>
+                            <PaddingTop>2pt</PaddingTop>
+                            <PaddingBottom>2pt</PaddingBottom>
+                          </Style>
+                        </Textbox>
+                      </CellContents>
+                    </TablixCell>
+                    <TablixCell>
+                      <CellContents>
+                        <Textbox Name="Textbox1">
+                          <CanGrow>true</CanGrow>
+                          <KeepTogether>true</KeepTogether>
+                          <Paragraphs>
+                            <Paragraph>
+                              <TextRuns>
+                                <TextRun>
+                                  <Value>Дата создания</Value>
+                                  <Style>
+                                    <FontWeight>Bold</FontWeight>
+                                  </Style>
+                                </TextRun>
+                              </TextRuns>
+                              <Style />
+                            </Paragraph>
+                          </Paragraphs>
+                          <rd:DefaultName>Textbox1</rd:DefaultName>
+                          <Style>
+                            <Border>
+                              <Color>LightGrey</Color>
+                              <Style>Solid</Style>
+                            </Border>
+                            <PaddingLeft>2pt</PaddingLeft>
+                            <PaddingRight>2pt</PaddingRight>
+                            <PaddingTop>2pt</PaddingTop>
+                            <PaddingBottom>2pt</PaddingBottom>
+                          </Style>
+                        </Textbox>
+                      </CellContents>
+                    </TablixCell>
+                    <TablixCell>
+                      <CellContents>
+                        <Textbox Name="Textbox3">
+                          <CanGrow>true</CanGrow>
+                          <KeepTogether>true</KeepTogether>
+                          <Paragraphs>
+                            <Paragraph>
+                              <TextRuns>
+                                <TextRun>
+                                  <Value>Изделие</Value>
+                                  <Style>
+                                    <FontWeight>Bold</FontWeight>
+                                  </Style>
+                                </TextRun>
+                              </TextRuns>
+                              <Style />
+                            </Paragraph>
+                          </Paragraphs>
+                          <rd:DefaultName>Textbox3</rd:DefaultName>
+                          <Style>
+                            <Border>
+                              <Color>LightGrey</Color>
+                              <Style>Solid</Style>
+                            </Border>
+                            <PaddingLeft>2pt</PaddingLeft>
+                            <PaddingRight>2pt</PaddingRight>
+                            <PaddingTop>2pt</PaddingTop>
+                            <PaddingBottom>2pt</PaddingBottom>
+                          </Style>
+                        </Textbox>
+                      </CellContents>
+                    </TablixCell>
+                    <TablixCell>
+                      <CellContents>
+                        <Textbox Name="Textbox2">
+                          <CanGrow>true</CanGrow>
+                          <KeepTogether>true</KeepTogether>
+                          <Paragraphs>
+                            <Paragraph>
+                              <TextRuns>
+                                <TextRun>
+                                  <Value>Статус заказа</Value>
+                                  <Style>
+                                    <FontWeight>Bold</FontWeight>
+                                  </Style>
+                                </TextRun>
+                              </TextRuns>
+                              <Style />
+                            </Paragraph>
+                          </Paragraphs>
+                          <rd:DefaultName>Textbox2</rd:DefaultName>
+                          <Style>
+                            <Border>
+                              <Color>LightGrey</Color>
+                              <Style>Solid</Style>
+                            </Border>
+                            <PaddingLeft>2pt</PaddingLeft>
+                            <PaddingRight>2pt</PaddingRight>
+                            <PaddingTop>2pt</PaddingTop>
+                            <PaddingBottom>2pt</PaddingBottom>
+                          </Style>
+                        </Textbox>
+                      </CellContents>
+                    </TablixCell>
+                    <TablixCell>
+                      <CellContents>
+                        <Textbox Name="Textbox7">
+                          <CanGrow>true</CanGrow>
+                          <KeepTogether>true</KeepTogether>
+                          <Paragraphs>
+                            <Paragraph>
+                              <TextRuns>
+                                <TextRun>
+                                  <Value>Сумма</Value>
+                                  <Style>
+                                    <FontWeight>Bold</FontWeight>
+                                  </Style>
+                                </TextRun>
+                              </TextRuns>
+                              <Style />
+                            </Paragraph>
+                          </Paragraphs>
+                          <rd:DefaultName>Textbox7</rd:DefaultName>
+                          <Style>
+                            <Border>
+                              <Color>LightGrey</Color>
+                              <Style>Solid</Style>
+                            </Border>
+                            <PaddingLeft>2pt</PaddingLeft>
+                            <PaddingRight>2pt</PaddingRight>
+                            <PaddingTop>2pt</PaddingTop>
+                            <PaddingBottom>2pt</PaddingBottom>
+                          </Style>
+                        </Textbox>
+                      </CellContents>
+                    </TablixCell>
+                  </TablixCells>
+                </TablixRow>
+                <TablixRow>
+                  <Height>0.6cm</Height>
+                  <TablixCells>
+                    <TablixCell>
+                      <CellContents>
+                        <Textbox Name="Id">
+                          <CanGrow>true</CanGrow>
+                          <KeepTogether>true</KeepTogether>
+                          <Paragraphs>
+                            <Paragraph>
+                              <TextRuns>
+                                <TextRun>
+                                  <Value>=Fields!Id.Value</Value>
+                                  <Style />
+                                </TextRun>
+                              </TextRuns>
+                              <Style />
+                            </Paragraph>
+                          </Paragraphs>
+                          <rd:DefaultName>Id</rd:DefaultName>
+                          <Style>
+                            <Border>
+                              <Color>LightGrey</Color>
+                              <Style>Solid</Style>
+                            </Border>
+                            <PaddingLeft>2pt</PaddingLeft>
+                            <PaddingRight>2pt</PaddingRight>
+                            <PaddingTop>2pt</PaddingTop>
+                            <PaddingBottom>2pt</PaddingBottom>
+                          </Style>
+                        </Textbox>
+                      </CellContents>
+                    </TablixCell>
+                    <TablixCell>
+                      <CellContents>
+                        <Textbox Name="DateCreate">
+                          <CanGrow>true</CanGrow>
+                          <KeepTogether>true</KeepTogether>
+                          <Paragraphs>
+                            <Paragraph>
+                              <TextRuns>
+                                <TextRun>
+                                  <Value>=Fields!DateCreate.Value</Value>
+                                  <Style>
+                                    <Format>d</Format>
+                                  </Style>
+                                </TextRun>
+                              </TextRuns>
+                              <Style />
+                            </Paragraph>
+                          </Paragraphs>
+                          <rd:DefaultName>DateCreate</rd:DefaultName>
+                          <Style>
+                            <Border>
+                              <Color>LightGrey</Color>
+                              <Style>Solid</Style>
+                            </Border>
+                            <PaddingLeft>2pt</PaddingLeft>
+                            <PaddingRight>2pt</PaddingRight>
+                            <PaddingTop>2pt</PaddingTop>
+                            <PaddingBottom>2pt</PaddingBottom>
+                          </Style>
+                        </Textbox>
+                      </CellContents>
+                    </TablixCell>
+                    <TablixCell>
+                      <CellContents>
+                        <Textbox Name="FurnitureName">
+                          <CanGrow>true</CanGrow>
+                          <KeepTogether>true</KeepTogether>
+                          <Paragraphs>
+                            <Paragraph>
+                              <TextRuns>
+                                <TextRun>
+                                  <Value>=Fields!FurnitureName.Value</Value>
+                                  <Style />
+                                </TextRun>
+                              </TextRuns>
+                              <Style />
+                            </Paragraph>
+                          </Paragraphs>
+                          <rd:DefaultName>FurnitureName</rd:DefaultName>
+                          <Style>
+                            <Border>
+                              <Color>LightGrey</Color>
+                              <Style>Solid</Style>
+                            </Border>
+                            <PaddingLeft>2pt</PaddingLeft>
+                            <PaddingRight>2pt</PaddingRight>
+                            <PaddingTop>2pt</PaddingTop>
+                            <PaddingBottom>2pt</PaddingBottom>
+                          </Style>
+                        </Textbox>
+                      </CellContents>
+                    </TablixCell>
+                    <TablixCell>
+                      <CellContents>
+                        <Textbox Name="OrderStatus">
+                          <CanGrow>true</CanGrow>
+                          <KeepTogether>true</KeepTogether>
+                          <Paragraphs>
+                            <Paragraph>
+                              <TextRuns>
+                                <TextRun>
+                                  <Value>=Fields!OrderStatus.Value</Value>
+                                  <Style />
+                                </TextRun>
+                              </TextRuns>
+                              <Style />
+                            </Paragraph>
+                          </Paragraphs>
+                          <rd:DefaultName>OrderStatus</rd:DefaultName>
+                          <Style>
+                            <Border>
+                              <Color>LightGrey</Color>
+                              <Style>Solid</Style>
+                            </Border>
+                            <PaddingLeft>2pt</PaddingLeft>
+                            <PaddingRight>2pt</PaddingRight>
+                            <PaddingTop>2pt</PaddingTop>
+                            <PaddingBottom>2pt</PaddingBottom>
+                          </Style>
+                        </Textbox>
+                        <rd:Selected>true</rd:Selected>
+                      </CellContents>
+                    </TablixCell>
+                    <TablixCell>
+                      <CellContents>
+                        <Textbox Name="Sum">
+                          <CanGrow>true</CanGrow>
+                          <KeepTogether>true</KeepTogether>
+                          <Paragraphs>
+                            <Paragraph>
+                              <TextRuns>
+                                <TextRun>
+                                  <Value>=Fields!Sum.Value</Value>
+                                  <Style />
+                                </TextRun>
+                              </TextRuns>
+                              <Style />
+                            </Paragraph>
+                          </Paragraphs>
+                          <rd:DefaultName>Sum</rd:DefaultName>
+                          <Style>
+                            <Border>
+                              <Color>LightGrey</Color>
+                              <Style>Solid</Style>
+                            </Border>
+                            <PaddingLeft>2pt</PaddingLeft>
+                            <PaddingRight>2pt</PaddingRight>
+                            <PaddingTop>2pt</PaddingTop>
+                            <PaddingBottom>2pt</PaddingBottom>
+                          </Style>
+                        </Textbox>
+                      </CellContents>
+                    </TablixCell>
+                  </TablixCells>
+                </TablixRow>
+              </TablixRows>
+            </TablixBody>
+            <TablixColumnHierarchy>
+              <TablixMembers>
+                <TablixMember />
+                <TablixMember />
+                <TablixMember />
+                <TablixMember />
+                <TablixMember />
+              </TablixMembers>
+            </TablixColumnHierarchy>
+            <TablixRowHierarchy>
+              <TablixMembers>
+                <TablixMember>
+                  <KeepWithGroup>After</KeepWithGroup>
+                </TablixMember>
+                <TablixMember>
+                  <Group Name="Подробности" />
+                </TablixMember>
+              </TablixMembers>
+            </TablixRowHierarchy>
+            <DataSetName>DataSetOrders</DataSetName>
+            <Top>2.48391cm</Top>
+            <Left>0.55245cm</Left>
+            <Height>1.2cm</Height>
+            <Width>19.84713cm</Width>
+            <ZIndex>2</ZIndex>
+            <Style>
+              <Border>
+                <Style>Double</Style>
+              </Border>
+            </Style>
+          </Tablix>
+          <Textbox Name="TextboxTotalSum">
+            <CanGrow>true</CanGrow>
+            <KeepTogether>true</KeepTogether>
+            <Paragraphs>
+              <Paragraph>
+                <TextRuns>
+                  <TextRun>
+                    <Value>Итого:</Value>
+                    <Style>
+                      <FontWeight>Bold</FontWeight>
+                    </Style>
+                  </TextRun>
+                </TextRuns>
+                <Style>
+                  <TextAlign>Right</TextAlign>
+                </Style>
+              </Paragraph>
+            </Paragraphs>
+            <Top>4cm</Top>
+            <Left>15.39958cm</Left>
+            <Height>0.6cm</Height>
+            <Width>2.5cm</Width>
+            <ZIndex>3</ZIndex>
+            <Style>
+              <Border>
+                <Style>None</Style>
+              </Border>
+              <PaddingLeft>2pt</PaddingLeft>
+              <PaddingRight>2pt</PaddingRight>
+              <PaddingTop>2pt</PaddingTop>
+              <PaddingBottom>2pt</PaddingBottom>
+            </Style>
+          </Textbox>
+          <Textbox Name="SumTotal">
+            <CanGrow>true</CanGrow>
+            <KeepTogether>true</KeepTogether>
+            <Paragraphs>
+              <Paragraph>
+                <TextRuns>
+                  <TextRun>
+                    <Value>=Sum(Fields!Sum.Value, "DataSetOrders")</Value>
+                    <Style>
+                      <FontWeight>Bold</FontWeight>
+                    </Style>
+                  </TextRun>
+                </TextRuns>
+                <Style>
+                  <TextAlign>Right</TextAlign>
+                </Style>
+              </Paragraph>
+            </Paragraphs>
+            <Top>4cm</Top>
+            <Left>17.89958cm</Left>
+            <Height>0.6cm</Height>
+            <Width>2.5cm</Width>
+            <ZIndex>4</ZIndex>
+            <Style>
+              <Border>
+                <Style>None</Style>
+              </Border>
+              <PaddingLeft>2pt</PaddingLeft>
+              <PaddingRight>2pt</PaddingRight>
+              <PaddingTop>2pt</PaddingTop>
+              <PaddingBottom>2pt</PaddingBottom>
+            </Style>
+          </Textbox>
+        </ReportItems>
+        <Height>5.72875cm</Height>
+        <Style />
+      </Body>
+      <Width>21cm</Width>
+      <Page>
+        <PageHeight>29.7cm</PageHeight>
+        <PageWidth>21cm</PageWidth>
+        <LeftMargin>2cm</LeftMargin>
+        <RightMargin>2cm</RightMargin>
+        <TopMargin>2cm</TopMargin>
+        <BottomMargin>2cm</BottomMargin>
+        <ColumnSpacing>0.13cm</ColumnSpacing>
+        <Style />
+      </Page>
+    </ReportSection>
+  </ReportSections>
+  <ReportParameters>
+    <ReportParameter Name="ReportParameterPeriod">
+      <DataType>String</DataType>
+      <Nullable>true</Nullable>
+      <Prompt>ReportParameter1</Prompt>
+    </ReportParameter>
+  </ReportParameters>
+  <ReportParametersLayout>
+    <GridLayoutDefinition>
+      <NumberOfColumns>4</NumberOfColumns>
+      <NumberOfRows>2</NumberOfRows>
+      <CellDefinitions>
+        <CellDefinition>
+          <ColumnIndex>0</ColumnIndex>
+          <RowIndex>0</RowIndex>
+          <ParameterName>ReportParameterPeriod</ParameterName>
+        </CellDefinition>
+      </CellDefinitions>
+    </GridLayoutDefinition>
+  </ReportParametersLayout>
+  <rd:ReportUnitType>Cm</rd:ReportUnitType>
+  <rd:ReportID>2de0031a-4d17-449d-922d-d9fc54572312</rd:ReportID>
+</Report>
\ No newline at end of file