From 525ea2c9afc7621ce0540c782b96cc759f54e4f2 Mon Sep 17 00:00:00 2001
From: Ino <irisha1234517@gmail.com>
Date: Mon, 13 Mar 2023 15:51:49 +0400
Subject: [PATCH 1/3] =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B0=D0=BB=D0=BE=204=20?=
 =?UTF-8?q?=D0=B1=D0=B0=D0=B7=D0=BE=D0=B2=D0=BE=D0=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../BusinessLogics/ReportLogic.cs             | 139 +++++
 .../IceCreamBusinessLogic.csproj              |   2 +
 .../OfficePackage/AbstractSaveToExcel.cs      | 107 ++++
 .../OfficePackage/AbstractSaveToPdf.cs        |  74 +++
 .../OfficePackage/AbstractSaveToWord.cs       |  57 ++
 .../HelperEnums/ExcelStyleInfoType.cs         |  17 +
 .../HelperEnums/PdfParagraphAlignmentType.cs  |  17 +
 .../HelperEnums/WordJustificationType.cs      |  15 +
 .../HelperModels/ExcelCellParameters.cs       |  17 +
 .../OfficePackage/HelperModels/ExcelInfo.cs   |  13 +
 .../HelperModels/ExcelMergeParameters.cs      |  11 +
 .../OfficePackage/HelperModels/PdfInfo.cs     |  17 +
 .../HelperModels/PdfParagraph.cs              |  13 +
 .../HelperModels/PdfRowParameters.cs          |  13 +
 .../OfficePackage/HelperModels/WordInfo.cs    |  13 +
 .../HelperModels/WordParagraph.cs             |   9 +
 .../HelperModels/WordTextProperties.cs        |  13 +
 .../OfficePackage/Implements/SaveToExcel.cs   | 293 ++++++++++
 .../OfficePackage/Implements/SaveToPdf.cs     | 114 ++++
 .../OfficePackage/Implements/SaveToWord.cs    | 135 +++++
 ...LogicsContracts.IComponentLogic.datasource |  10 +
 .../FormReportProductComponents.Designer.cs   | 116 ++++
 .../FormReportProductComponents.cs            |  78 +++
 .../FormReportProductComponents.resx          |  60 ++
 IceCreamShop/IceCreamShop/Program.cs          |   9 +
 ...sLogicsContracts.IIceCreamLogic.datasource |  10 +
 ...nessLogicsContracts.IOrderLogic.datasource |  10 +
 ...agesContracts.IComponentStorage.datasource |  10 +
 ...ragesContracts.IIceCreamStorage.datasource |  10 +
 ...StoragesContracts.IOrderStorage.datasource |  10 +
 IceCreamShop/IceCreamShop/ReportOrders.rdlc   | 529 ++++++++++++++++++
 .../BindingModels/ReportBindingModel.cs       |  17 +
 .../BusinessLogicsContracts/IReportLogic.cs   |  44 ++
 .../SearchModels/OrderSearchModel.cs          |   4 +
 .../ReportIceCreamComponentViewModel.cs       |  17 +
 .../ViewModels/ReportOrdersViewModel.cs       |  19 +
 36 files changed, 2042 insertions(+)
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ReportLogic.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToExcel.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToPdf.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToWord.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperEnums/ExcelStyleInfoType.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAlignmentType.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperEnums/WordJustificationType.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/ExcelCellParameters.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/ExcelInfo.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/ExcelMergeParameters.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/PdfParagraph.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/PdfRowParameters.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/WordInfo.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/WordParagraph.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/WordTextProperties.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/Implements/SaveToExcel.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/Implements/SaveToPdf.cs
 create mode 100644 IceCreamShop/IceCreamBusinessLogic/OfficePackage/Implements/SaveToWord.cs
 create mode 100644 IceCreamShop/IceCreamShop/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IComponentLogic.datasource
 create mode 100644 IceCreamShop/IceCreamShop/FormReportProductComponents.Designer.cs
 create mode 100644 IceCreamShop/IceCreamShop/FormReportProductComponents.cs
 create mode 100644 IceCreamShop/IceCreamShop/FormReportProductComponents.resx
 create mode 100644 IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IIceCreamLogic.datasource
 create mode 100644 IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IOrderLogic.datasource
 create mode 100644 IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IComponentStorage.datasource
 create mode 100644 IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IIceCreamStorage.datasource
 create mode 100644 IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IOrderStorage.datasource
 create mode 100644 IceCreamShop/IceCreamShop/ReportOrders.rdlc
 create mode 100644 IceCreamShop/IceCreamShopContracts/BindingModels/ReportBindingModel.cs
 create mode 100644 IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IReportLogic.cs
 create mode 100644 IceCreamShop/IceCreamShopContracts/ViewModels/ReportIceCreamComponentViewModel.cs
 create mode 100644 IceCreamShop/IceCreamShopContracts/ViewModels/ReportOrdersViewModel.cs

diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ReportLogic.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ReportLogic.cs
new file mode 100644
index 0000000..9ec8fa1
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ReportLogic.cs
@@ -0,0 +1,139 @@
+using IceCreamBusinessLogic.OfficePackage.HelperModels;
+using IceCreamBusinessLogic.OfficePackage;
+using IceCreamShopContracts.BusinessLogicsContracts;
+using IceCreamShopContracts.SearchModels;
+using IceCreamShopContracts.StoragesContracts;
+using IceCreamShopContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using IceCreamShopContracts.BindingModels;
+
+namespace IceCreamBusinessLogic.BusinessLogics
+{
+    public class ReportLogic : IReportLogic
+    {
+        private readonly IComponentStorage _componentStorage;
+
+        private readonly IIceCreamStorage _iceCreamStorage;
+
+        private readonly IOrderStorage _orderStorage;
+
+        private readonly AbstractSaveToExcel _saveToExcel;
+
+        private readonly AbstractSaveToWord _saveToWord;
+
+        private readonly AbstractSaveToPdf _saveToPdf;
+
+        public ReportLogic(IIceCreamStorage iceCreamStorage, IComponentStorage componentStorage, IOrderStorage orderStorage,
+            AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf)
+        {
+            _iceCreamStorage = iceCreamStorage;
+            _componentStorage = componentStorage;
+            _orderStorage = orderStorage;
+
+            _saveToExcel = saveToExcel;
+            _saveToWord = saveToWord;
+            _saveToPdf = saveToPdf;
+        }
+
+        /// <summary>
+        /// Получение списка компонент с указанием, в каких изделиях используются
+        /// </summary>
+        /// <returns></returns>
+        public List<ReportIceCreamComponentViewModel> GetProductComponent()
+        {
+            var components = _componentStorage.GetFullList();
+
+            var iceCreams = _iceCreamStorage.GetFullList();
+
+            var list = new List<ReportIceCreamComponentViewModel>();
+
+            foreach (var component in components)
+            {
+                var record = new ReportIceCreamComponentViewModel
+                {
+                    ComponentName = component.ComponentName,
+                    IceCreams = new List<(string, int)>(),
+                    TotalCount = 0
+                };
+                foreach (var product in iceCreams)
+                {
+                    if (product.IceCreamComponents.ContainsKey(component.Id))
+                    {
+                        record.IceCreams.Add(new(product.IceCreamName, product.IceCreamComponents[component.Id].Item2));
+                        record.TotalCount += product.IceCreamComponents[component.Id].Item2;
+                    }
+                }
+
+                list.Add(record);
+            }
+
+            return list;
+        }
+
+        /// <summary>
+        /// Получение списка заказов за определенный период
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        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,
+                        IceCreamName = x.IceCreamName,
+                        Sum = x.Sum
+                    })
+                    .ToList();
+        }
+
+        /// <summary>
+        /// Сохранение компонент в файл-Word
+        /// </summary>
+        /// <param name="model"></param>
+        public void SaveComponentsToWordFile(ReportBindingModel model)
+        {
+            _saveToWord.CreateDoc(new WordInfo
+            {
+                FileName = model.FileName,
+                Title = "Список компонент",
+                Components = _componentStorage.GetFullList()
+            });
+        }
+
+        /// <summary>
+        /// Сохранение компонент с указаеним продуктов в файл-Excel
+        /// </summary>
+        /// <param name="model"></param>
+        public void SaveProductComponentToExcelFile(ReportBindingModel model)
+        {
+            _saveToExcel.CreateReport(new ExcelInfo
+            {
+                FileName = model.FileName,
+                Title = "Список компонент",
+                ProductComponents = GetProductComponent()
+            });
+        }
+
+        /// <summary>
+        /// Сохранение заказов в файл-Pdf
+        /// </summary>
+        /// <param name="model"></param>
+        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/IceCreamShop/IceCreamBusinessLogic/IceCreamBusinessLogic.csproj b/IceCreamShop/IceCreamBusinessLogic/IceCreamBusinessLogic.csproj
index 3165a92..b70c7ba 100644
--- a/IceCreamShop/IceCreamBusinessLogic/IceCreamBusinessLogic.csproj
+++ b/IceCreamShop/IceCreamBusinessLogic/IceCreamBusinessLogic.csproj
@@ -7,8 +7,10 @@
   </PropertyGroup>
 
   <ItemGroup>
+    <PackageReference Include="DocumentFormat.OpenXml" Version="2.19.0" />
     <PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
     <PackageReference Include="NLog.Extensions.Logging" Version="5.2.1" />
+    <PackageReference Include="PdfSharp.MigraDoc.Standard" Version="1.51.15" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToExcel.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToExcel.cs
new file mode 100644
index 0000000..1e2e35b
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToExcel.cs
@@ -0,0 +1,107 @@
+using IceCreamBusinessLogic.OfficePackage.HelperEnums;
+using IceCreamBusinessLogic.OfficePackage.HelperModels;
+
+namespace IceCreamBusinessLogic.OfficePackage
+{
+    public abstract class AbstractSaveToExcel
+    {
+        /// <summary>
+        /// Создание отчета
+        /// </summary>
+        /// <param name="info"></param>
+        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 pc in info.ProductComponents)
+            {
+                InsertCellInWorksheet(new ExcelCellParameters
+                {
+                    ColumnName = "A",
+                    RowIndex = rowIndex,
+                    Text = pc.ComponentName,
+                    StyleInfo = ExcelStyleInfoType.Text
+                });
+                rowIndex++;
+
+                foreach (var (IceCream, Count) in pc.IceCreams)
+                {
+                    InsertCellInWorksheet(new ExcelCellParameters
+                    {
+                        ColumnName = "B",
+                        RowIndex = rowIndex,
+                        Text = IceCream,
+                        StyleInfo = ExcelStyleInfoType.TextWithBroder
+                    });
+
+                    InsertCellInWorksheet(new ExcelCellParameters
+                    {
+                        ColumnName = "C",
+                        RowIndex = rowIndex,
+                        Text = Count.ToString(),
+                        StyleInfo = ExcelStyleInfoType.TextWithBroder
+                    });
+
+                    rowIndex++;
+                }
+
+                InsertCellInWorksheet(new ExcelCellParameters
+                {
+                    ColumnName = "A",
+                    RowIndex = rowIndex,
+                    Text = "Итого",
+                    StyleInfo = ExcelStyleInfoType.Text
+                });
+                InsertCellInWorksheet(new ExcelCellParameters
+                {
+                    ColumnName = "C",
+                    RowIndex = rowIndex,
+                    Text = pc.TotalCount.ToString(),
+                    StyleInfo = ExcelStyleInfoType.Text
+                });
+                rowIndex++;
+            }
+
+            SaveExcel(info);
+        }
+
+        /// <summary>
+        /// Создание excel-файла
+        /// </summary>
+        /// <param name="info"></param>
+        protected abstract void CreateExcel(ExcelInfo info);
+
+        /// <summary>
+        /// Добавляем новую ячейку в лист
+        /// </summary>
+        /// <param name="cellParameters"></param>
+        protected abstract void InsertCellInWorksheet(ExcelCellParameters excelParams);
+
+        /// <summary>
+        /// Объединение ячеек
+        /// </summary>
+        /// <param name="mergeParameters"></param>
+        protected abstract void MergeCells(ExcelMergeParameters excelParams);
+
+        /// <summary>
+        /// Сохранение файла
+        /// </summary>
+        /// <param name="info"></param>
+        protected abstract void SaveExcel(ExcelInfo info);
+    }
+}
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToPdf.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToPdf.cs
new file mode 100644
index 0000000..b64b775
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToPdf.cs
@@ -0,0 +1,74 @@
+using IceCreamBusinessLogic.OfficePackage.HelperEnums;
+using IceCreamBusinessLogic.OfficePackage.HelperModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IceCreamBusinessLogic.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" });
+
+            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.IceCreamName, order.Sum.ToString() },
+                    Style = "Normal",
+                    ParagraphAlignment = PdfParagraphAlignmentType.Left
+                });
+            }
+            CreateParagraph(new PdfParagraph { Text = $"Итого: {info.Orders.Sum(x => x.Sum)}\t", Style = "Normal", ParagraphAlignment = PdfParagraphAlignmentType.Rigth });
+
+            SavePdf(info);
+        }
+
+        /// <summary>
+		/// Создание doc-файла
+		/// </summary>
+		/// <param name="info"></param>
+        protected abstract void CreatePdf(PdfInfo info);
+
+        /// <summary>
+        /// Создание параграфа с текстом
+        /// </summary>
+        /// <param name="title"></param>
+        /// <param name="style"></param>
+        protected abstract void CreateParagraph(PdfParagraph paragraph);
+
+        /// <summary>
+        /// Создание таблицы
+        /// </summary>
+        /// <param name="title"></param>
+        /// <param name="style"></param>
+        protected abstract void CreateTable(List<string> columns);
+
+        /// <summary>
+        /// Создание и заполнение строки
+        /// </summary>
+        /// <param name="rowParameters"></param>
+        protected abstract void CreateRow(PdfRowParameters rowParameters);
+
+        /// <summary>
+		/// Сохранение файла
+		/// </summary>
+		/// <param name="info"></param>
+        protected abstract void SavePdf(PdfInfo info);
+    }
+}
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToWord.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToWord.cs
new file mode 100644
index 0000000..976b28e
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToWord.cs
@@ -0,0 +1,57 @@
+using IceCreamBusinessLogic.OfficePackage.HelperEnums;
+using IceCreamBusinessLogic.OfficePackage.HelperModels;
+
+namespace IceCreamBusinessLogic.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 component in info.Components)
+            {
+                CreateParagraph(new WordParagraph
+                {
+                    Texts = new List<(string, WordTextProperties)> { (component.ComponentName, new WordTextProperties { Size = "24", }) },
+                    TextProperties = new WordTextProperties
+                    {
+                        Size = "24",
+                        JustificationType = WordJustificationType.Both
+                    }
+                });
+            }
+
+            SaveWord(info);
+        }
+
+        /// <summary>
+		/// Создание doc-файла
+		/// </summary>
+		/// <param name="info"></param>
+        protected abstract void CreateWord(WordInfo info);
+
+        /// <summary>
+        /// Создание абзаца с текстом
+        /// </summary>
+        /// <param name="paragraph"></param>
+        /// <returns></returns>
+        protected abstract void CreateParagraph(WordParagraph paragraph);
+
+        /// <summary>
+		/// Сохранение файла
+		/// </summary>
+		/// <param name="info"></param>
+        protected abstract void SaveWord(WordInfo info);
+    }
+}
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperEnums/ExcelStyleInfoType.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperEnums/ExcelStyleInfoType.cs
new file mode 100644
index 0000000..056b55f
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperEnums/ExcelStyleInfoType.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IceCreamBusinessLogic.OfficePackage.HelperEnums
+{
+    public enum ExcelStyleInfoType
+    {
+        Title,
+
+        Text,
+
+        TextWithBroder
+    }
+}
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAlignmentType.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAlignmentType.cs
new file mode 100644
index 0000000..1bd4872
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAlignmentType.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IceCreamBusinessLogic.OfficePackage.HelperEnums
+{
+    public enum PdfParagraphAlignmentType
+    {
+        Center,
+
+        Left,
+
+        Rigth
+    }
+}
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperEnums/WordJustificationType.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperEnums/WordJustificationType.cs
new file mode 100644
index 0000000..0e5b33d
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperEnums/WordJustificationType.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IceCreamBusinessLogic.OfficePackage.HelperEnums
+{
+    public enum WordJustificationType
+    {
+        Center,
+
+        Both
+    }
+}
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/ExcelCellParameters.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/ExcelCellParameters.cs
new file mode 100644
index 0000000..ecdc143
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/ExcelCellParameters.cs
@@ -0,0 +1,17 @@
+using IceCreamBusinessLogic.OfficePackage.HelperEnums;
+
+namespace IceCreamBusinessLogic.OfficePackage.HelperModels
+{
+    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; }
+    }
+}
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/ExcelInfo.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/ExcelInfo.cs
new file mode 100644
index 0000000..126a0c8
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/ExcelInfo.cs
@@ -0,0 +1,13 @@
+using IceCreamShopContracts.ViewModels;
+
+namespace IceCreamBusinessLogic.OfficePackage.HelperModels
+{
+    public class ExcelInfo
+    {
+        public string FileName { get; set; } = string.Empty;
+
+        public string Title { get; set; } = string.Empty;
+
+        public List<ReportIceCreamComponentViewModel> ProductComponents { get; set; } = new();
+    }
+}
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/ExcelMergeParameters.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/ExcelMergeParameters.cs
new file mode 100644
index 0000000..2e06581
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/ExcelMergeParameters.cs
@@ -0,0 +1,11 @@
+namespace IceCreamBusinessLogic.OfficePackage.HelperModels
+{
+    public class ExcelMergeParameters
+    {
+        public string CellFromName { get; set; } = string.Empty;
+
+        public string CellToName { get; set; } = string.Empty;
+
+        public string Merge => $"{CellFromName}:{CellToName}";
+    }
+}
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs
new file mode 100644
index 0000000..1b604ba
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs
@@ -0,0 +1,17 @@
+using IceCreamShopContracts.ViewModels;
+
+namespace IceCreamBusinessLogic.OfficePackage.HelperModels
+{
+    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();
+    }
+}
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/PdfParagraph.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/PdfParagraph.cs
new file mode 100644
index 0000000..3cec70e
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/PdfParagraph.cs
@@ -0,0 +1,13 @@
+using IceCreamBusinessLogic.OfficePackage.HelperEnums;
+
+namespace IceCreamBusinessLogic.OfficePackage.HelperModels
+{
+    public class PdfParagraph
+    {
+        public string Text { get; set; } = string.Empty;
+
+        public string Style { get; set; } = string.Empty;
+
+        public PdfParagraphAlignmentType ParagraphAlignment { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/PdfRowParameters.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/PdfRowParameters.cs
new file mode 100644
index 0000000..858e5e3
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/PdfRowParameters.cs
@@ -0,0 +1,13 @@
+using IceCreamBusinessLogic.OfficePackage.HelperEnums;
+
+namespace IceCreamBusinessLogic.OfficePackage.HelperModels
+{
+    public class PdfRowParameters
+    {
+        public List<string> Texts { get; set; } = new();
+
+        public string Style { get; set; } = string.Empty;
+
+        public PdfParagraphAlignmentType ParagraphAlignment { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/WordInfo.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/WordInfo.cs
new file mode 100644
index 0000000..8d3a4d1
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/WordInfo.cs
@@ -0,0 +1,13 @@
+using IceCreamShopContracts.ViewModels;
+
+namespace IceCreamBusinessLogic.OfficePackage.HelperModels
+{
+    public class WordInfo
+    {
+        public string FileName { get; set; } = string.Empty;
+
+        public string Title { get; set; } = string.Empty;
+
+        public List<ComponentViewModel> Components { get; set; } = new();
+    }
+}
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/WordParagraph.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/WordParagraph.cs
new file mode 100644
index 0000000..32e69a7
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/WordParagraph.cs
@@ -0,0 +1,9 @@
+namespace IceCreamBusinessLogic.OfficePackage.HelperModels
+{
+    public class WordParagraph
+    {
+        public List<(string, WordTextProperties)> Texts { get; set; } = new();
+
+        public WordTextProperties? TextProperties { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/WordTextProperties.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/WordTextProperties.cs
new file mode 100644
index 0000000..dfcd20c
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/WordTextProperties.cs
@@ -0,0 +1,13 @@
+using IceCreamBusinessLogic.OfficePackage.HelperEnums;
+
+namespace IceCreamBusinessLogic.OfficePackage.HelperModels
+{
+    public class WordTextProperties
+    {
+        public string Size { get; set; } = string.Empty;
+
+        public bool Bold { get; set; }
+
+        public WordJustificationType JustificationType { get; set; }
+    }
+}
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/Implements/SaveToExcel.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/Implements/SaveToExcel.cs
new file mode 100644
index 0000000..e084785
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/Implements/SaveToExcel.cs
@@ -0,0 +1,293 @@
+using DocumentFormat.OpenXml.Office2010.Excel;
+using DocumentFormat.OpenXml.Office2013.Excel;
+using DocumentFormat.OpenXml.Packaging;
+using DocumentFormat.OpenXml.Spreadsheet;
+using DocumentFormat.OpenXml;
+using IceCreamBusinessLogic.OfficePackage.HelperEnums;
+using IceCreamBusinessLogic.OfficePackage.HelperModels;
+
+
+namespace IceCreamBusinessLogic.OfficePackage.Implements
+{
+    public class SaveToExcel : AbstractSaveToExcel
+    {
+        private SpreadsheetDocument? _spreadsheetDocument;
+
+        private SharedStringTablePart? _shareStringPart;
+
+        private Worksheet? _worksheet;
+
+        /// <summary>
+        /// Настройка стилей для файла
+        /// </summary>
+        /// <param name="workbookpart"></param>
+        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);
+
+            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 };
+
+            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);
+        }
+
+        /// <summary>
+        /// Получение номера стиля из типа
+        /// </summary>
+        /// <param name="styleInfo"></param>
+        /// <returns></returns>
+        private static uint GetStyleValue(ExcelStyleInfoType styleInfo)
+        {
+            return styleInfo switch
+            {
+                ExcelStyleInfoType.Title => 2U,
+                ExcelStyleInfoType.TextWithBroder => 1U,
+                ExcelStyleInfoType.Text => 0U,
+                _ => 0U,
+            };
+        }
+
+        protected override void CreateExcel(ExcelInfo info)
+        {
+            _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.Close();
+        }
+    }
+}
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/Implements/SaveToPdf.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/Implements/SaveToPdf.cs
new file mode 100644
index 0000000..5dbc10d
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/Implements/SaveToPdf.cs
@@ -0,0 +1,114 @@
+using IceCreamBusinessLogic.OfficePackage.HelperEnums;
+using IceCreamBusinessLogic.OfficePackage.HelperModels;
+using MigraDoc.DocumentObjectModel;
+using MigraDoc.DocumentObjectModel.Tables;
+using MigraDoc.Rendering;
+
+namespace IceCreamBusinessLogic.OfficePackage.Implements
+{
+    public class SaveToPdf : AbstractSaveToPdf
+    {
+        private Document? _document;
+
+        private Section? _section;
+
+        private Table? _table;
+
+        private static ParagraphAlignment GetParagraphAlignment(PdfParagraphAlignmentType type)
+        {
+            return type switch
+            {
+                PdfParagraphAlignmentType.Center => ParagraphAlignment.Center,
+                PdfParagraphAlignmentType.Left => ParagraphAlignment.Left,
+                PdfParagraphAlignmentType.Rigth => ParagraphAlignment.Right,
+                _ => ParagraphAlignment.Justify,
+            };
+        }
+
+        /// <summary>
+        /// Создание стилей для документа
+        /// </summary>
+        /// <param name="document"></param>
+        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/IceCreamShop/IceCreamBusinessLogic/OfficePackage/Implements/SaveToWord.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/Implements/SaveToWord.cs
new file mode 100644
index 0000000..c88af35
--- /dev/null
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/Implements/SaveToWord.cs
@@ -0,0 +1,135 @@
+using DocumentFormat.OpenXml;
+using DocumentFormat.OpenXml.Packaging;
+using DocumentFormat.OpenXml.Wordprocessing;
+using IceCreamBusinessLogic.OfficePackage.HelperEnums;
+using IceCreamBusinessLogic.OfficePackage.HelperModels;
+
+namespace IceCreamBusinessLogic.OfficePackage.Implements
+{
+    public class SaveToWord : AbstractSaveToWord
+    {
+        private WordprocessingDocument? _wordDocument;
+
+        private Body? _docBody;
+
+        /// <summary>
+        /// Получение типа выравнивания
+        /// </summary>
+        /// <param name="type"></param>
+        /// <returns></returns>
+        private static JustificationValues GetJustificationValues(WordJustificationType type)
+        {
+            return type switch
+            {
+                WordJustificationType.Both => JustificationValues.Both,
+                WordJustificationType.Center => JustificationValues.Center,
+                _ => JustificationValues.Left,
+            };
+        }
+
+        /// <summary>
+        /// Настройки страницы
+        /// </summary>
+        /// <returns></returns>
+        private static SectionProperties CreateSectionProperties()
+        {
+            var properties = new SectionProperties();
+
+            var pageSize = new PageSize
+            {
+                Orient = PageOrientationValues.Portrait
+            };
+
+            properties.AppendChild(pageSize);
+
+            return properties;
+        }
+
+        /// <summary>
+        /// Задание форматирования для абзаца
+        /// </summary>
+        /// <param name="paragraphProperties"></param>
+        /// <returns></returns>
+        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)
+        {
+            _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)
+        {
+            if (_docBody == null || paragraph == null)
+            {
+                return;
+            }
+            var docParagraph = new Paragraph();
+
+            docParagraph.AppendChild(CreateParagraphProperties(paragraph.TextProperties));
+
+            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.Close();
+        }
+    }
+}
diff --git a/IceCreamShop/IceCreamShop/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IComponentLogic.datasource b/IceCreamShop/IceCreamShop/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IComponentLogic.datasource
new file mode 100644
index 0000000..504f619
--- /dev/null
+++ b/IceCreamShop/IceCreamShop/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IComponentLogic.datasource
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="IComponentLogic" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>IceCreamShopContracts.BusinessLogicsContracts.IComponentLogic, IceCreamShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/FormReportProductComponents.Designer.cs b/IceCreamShop/IceCreamShop/FormReportProductComponents.Designer.cs
new file mode 100644
index 0000000..ce68c1b
--- /dev/null
+++ b/IceCreamShop/IceCreamShop/FormReportProductComponents.Designer.cs
@@ -0,0 +1,116 @@
+namespace IceCreamShopView
+{
+    partial class FormReportProductComponents
+    {
+        /// <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.ColumnComponent = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.ColumnProduct = 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(13, 12);
+            this.buttonSaveToExcel.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+            this.buttonSaveToExcel.Name = "buttonSaveToExcel";
+            this.buttonSaveToExcel.Size = new System.Drawing.Size(186, 27);
+            this.buttonSaveToExcel.TabIndex = 3;
+            this.buttonSaveToExcel.Text = "Сохранить в Excel";
+            this.buttonSaveToExcel.UseVisualStyleBackColor = true;
+            this.buttonSaveToExcel.Click += new System.EventHandler(this.buttonSaveToExcel_Click);
+            // 
+            // dataGridView
+            // 
+            this.dataGridView.AllowUserToAddRows = false;
+            this.dataGridView.AllowUserToDeleteRows = false;
+            this.dataGridView.AllowUserToOrderColumns = true;
+            this.dataGridView.AllowUserToResizeColumns = false;
+            this.dataGridView.AllowUserToResizeRows = false;
+            this.dataGridView.BackgroundColor = System.Drawing.SystemColors.ControlLightLight;
+            this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            this.dataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
+            this.ColumnComponent,
+            this.ColumnProduct,
+            this.ColumnCount});
+            this.dataGridView.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this.dataGridView.Location = new System.Drawing.Point(0, 53);
+            this.dataGridView.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+            this.dataGridView.MultiSelect = false;
+            this.dataGridView.Name = "dataGridView";
+            this.dataGridView.ReadOnly = true;
+            this.dataGridView.RowHeadersVisible = false;
+            this.dataGridView.Size = new System.Drawing.Size(800, 510);
+            this.dataGridView.TabIndex = 4;
+            // 
+            // ColumnComponent
+            // 
+            this.ColumnComponent.HeaderText = "Компонент";
+            this.ColumnComponent.Name = "ColumnComponent";
+            this.ColumnComponent.ReadOnly = true;
+            this.ColumnComponent.Width = 200;
+            // 
+            // ColumnProduct
+            // 
+            this.ColumnProduct.HeaderText = "Мороженое";
+            this.ColumnProduct.Name = "ColumnProduct";
+            this.ColumnProduct.ReadOnly = true;
+            this.ColumnProduct.Width = 200;
+            // 
+            // ColumnCount
+            // 
+            this.ColumnCount.HeaderText = "Количество";
+            this.ColumnCount.Name = "ColumnCount";
+            this.ColumnCount.ReadOnly = true;
+            // 
+            // FormReportProductComponents
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(800, 563);
+            this.Controls.Add(this.dataGridView);
+            this.Controls.Add(this.buttonSaveToExcel);
+            this.Name = "FormReportProductComponents";
+            this.Text = "FormReportProductComponents";
+            this.Load += new System.EventHandler(this.FormReportProductComponents_Load);
+            ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private Button buttonSaveToExcel;
+        private DataGridView dataGridView;
+        private DataGridViewTextBoxColumn ColumnComponent;
+        private DataGridViewTextBoxColumn ColumnProduct;
+        private DataGridViewTextBoxColumn ColumnCount;
+    }
+}
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/FormReportProductComponents.cs b/IceCreamShop/IceCreamShop/FormReportProductComponents.cs
new file mode 100644
index 0000000..2213707
--- /dev/null
+++ b/IceCreamShop/IceCreamShop/FormReportProductComponents.cs
@@ -0,0 +1,78 @@
+using IceCreamShopContracts.BindingModels;
+using IceCreamShopContracts.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 IceCreamShopView
+{
+    public partial class FormReportProductComponents : Form
+    {
+        private readonly ILogger _logger;
+
+        private readonly IReportLogic _logic;
+        public FormReportProductComponents(ILogger<FormReportProductComponents> logger, IReportLogic logic)
+        {
+            InitializeComponent();
+            _logger = logger;
+            _logic = logic;
+        }
+
+        private void FormReportProductComponents_Load(object sender, EventArgs e)
+        {
+            try
+            {
+                var dict = _logic.GetProductComponent();
+                if (dict != null)
+                {
+                    dataGridView.Rows.Clear();
+                    foreach (var elem in dict)
+                    {
+                        dataGridView.Rows.Add(new object[] { elem.ComponentName, "", "" });
+                        foreach (var listElem in elem.IceCreams)
+                        {
+                            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.SaveProductComponentToExcelFile(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/IceCreamShop/IceCreamShop/FormReportProductComponents.resx b/IceCreamShop/IceCreamShop/FormReportProductComponents.resx
new file mode 100644
index 0000000..f298a7b
--- /dev/null
+++ b/IceCreamShop/IceCreamShop/FormReportProductComponents.resx
@@ -0,0 +1,60 @@
+<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>
+</root>
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/Program.cs b/IceCreamShop/IceCreamShop/Program.cs
index 8e85327..d2266b5 100644
--- a/IceCreamShop/IceCreamShop/Program.cs
+++ b/IceCreamShop/IceCreamShop/Program.cs
@@ -5,6 +5,8 @@ using IceCreamShopView;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
 using NLog.Extensions.Logging;
+using IceCreamBusinessLogic.OfficePackage.Implements;
+using IceCreamBusinessLogic.OfficePackage;
 using IceCreamShopDatabaseImplement.Implements;
 
 namespace IceCreamShop
@@ -39,9 +41,16 @@ namespace IceCreamShop
             services.AddTransient<IComponentStorage, ComponentStorage>();
             services.AddTransient<IOrderStorage, OrderStorage>();
             services.AddTransient<IIceCreamStorage, IceCreamStorage>();
+
             services.AddTransient<IComponentLogic, ComponentLogic>();
             services.AddTransient<IOrderLogic, OrderLogic>();
             services.AddTransient<IIceCreamLogic, IceCreamLogic>();
+            services.AddTransient<IReportLogic, ReportLogic>();
+
+            services.AddTransient<AbstractSaveToExcel, SaveToExcel>();
+            services.AddTransient<AbstractSaveToWord, SaveToWord>();
+            services.AddTransient<AbstractSaveToPdf, SaveToPdf>();
+
             services.AddTransient<FormMain>();
             services.AddTransient<FormComponent>();
             services.AddTransient<FormComponents>();
diff --git a/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IIceCreamLogic.datasource b/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IIceCreamLogic.datasource
new file mode 100644
index 0000000..b02228a
--- /dev/null
+++ b/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IIceCreamLogic.datasource
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="IIceCreamLogic" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>IceCreamShopContracts.BusinessLogicsContracts.IIceCreamLogic, IceCreamShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IOrderLogic.datasource b/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IOrderLogic.datasource
new file mode 100644
index 0000000..b21c17d
--- /dev/null
+++ b/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IOrderLogic.datasource
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="IOrderLogic" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>IceCreamShopContracts.BusinessLogicsContracts.IOrderLogic, IceCreamShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IComponentStorage.datasource b/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IComponentStorage.datasource
new file mode 100644
index 0000000..6f7d815
--- /dev/null
+++ b/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IComponentStorage.datasource
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="IComponentStorage" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>IceCreamShopContracts.StoragesContracts.IComponentStorage, IceCreamShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IIceCreamStorage.datasource b/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IIceCreamStorage.datasource
new file mode 100644
index 0000000..a09a65c
--- /dev/null
+++ b/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IIceCreamStorage.datasource
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="IIceCreamStorage" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>IceCreamShopContracts.StoragesContracts.IIceCreamStorage, IceCreamShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IOrderStorage.datasource b/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IOrderStorage.datasource
new file mode 100644
index 0000000..de2e7d8
--- /dev/null
+++ b/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IOrderStorage.datasource
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="IOrderStorage" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>IceCreamShopContracts.StoragesContracts.IOrderStorage, IceCreamShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/ReportOrders.rdlc b/IceCreamShop/IceCreamShop/ReportOrders.rdlc
new file mode 100644
index 0000000..4096b12
--- /dev/null
+++ b/IceCreamShop/IceCreamShop/ReportOrders.rdlc
@@ -0,0 +1,529 @@
+<?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="AbstractShopContractsViewModels">
+      <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>AbstractShopContractsViewModels</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="ProductName">
+          <DataField>ProductName</DataField>
+          <rd:TypeName>System.String</rd:TypeName>
+        </Field>
+        <Field Name="Sum">
+          <DataField>Sum</DataField>
+          <rd:TypeName>System.Decimal</rd:TypeName>
+        </Field>
+      </Fields>
+      <rd:DataSetInfo>
+        <rd:DataSetName>AbstractShopContracts.ViewModels</rd:DataSetName>
+        <rd:TableName>ReportOrdersViewModel</rd:TableName>
+        <rd:ObjectDataSourceType>AbstractShopContracts.ViewModels.ReportOrdersViewModel, AbstractShopContracts, 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>2.5cm</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="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="IceCreamName">
+                          <CanGrow>true</CanGrow>
+                          <KeepTogether>true</KeepTogether>
+                          <Paragraphs>
+                            <Paragraph>
+                              <TextRuns>
+                                <TextRun>
+                                  <Value>=Fields!ProductName.Value</Value>
+                                  <Style />
+                                </TextRun>
+                              </TextRuns>
+                              <Style />
+                            </Paragraph>
+                          </Paragraphs>
+                          <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 />
+              </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>16.44755cm</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>12cm</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>14.5cm</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
diff --git a/IceCreamShop/IceCreamShopContracts/BindingModels/ReportBindingModel.cs b/IceCreamShop/IceCreamShopContracts/BindingModels/ReportBindingModel.cs
new file mode 100644
index 0000000..b90be68
--- /dev/null
+++ b/IceCreamShop/IceCreamShopContracts/BindingModels/ReportBindingModel.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IceCreamShopContracts.BindingModels
+{
+    public class ReportBindingModel
+    {
+        public string FileName { get; set; } = string.Empty;
+
+        public DateTime? DateFrom { get; set; }
+
+        public DateTime? DateTo { get; set; }
+    }
+}
diff --git a/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IReportLogic.cs b/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IReportLogic.cs
new file mode 100644
index 0000000..d9adac0
--- /dev/null
+++ b/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IReportLogic.cs
@@ -0,0 +1,44 @@
+using IceCreamShopContracts.BindingModels;
+using IceCreamShopContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IceCreamShopContracts.BusinessLogicsContracts
+{
+    public interface IReportLogic
+    {
+        /// <summary>
+        /// Получение списка компонент с указанием, в каких изделиях используются
+        /// </summary>
+        /// <returns></returns>
+        List<ReportIceCreamComponentViewModel> GetProductComponent();
+
+        /// <summary>
+        /// Получение списка заказов за определенный период
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        List<ReportOrdersViewModel> GetOrders(ReportBindingModel model);
+
+        /// <summary>
+        /// Сохранение компонент в файл-Word
+        /// </summary>
+        /// <param name="model"></param>
+        void SaveComponentsToWordFile(ReportBindingModel model);
+
+        /// <summary>
+        /// Сохранение компонент с указаеним продуктов в файл-Excel
+        /// </summary>
+        /// <param name="model"></param>
+        void SaveProductComponentToExcelFile(ReportBindingModel model);
+
+        /// <summary>
+        /// Сохранение заказов в файл-Pdf
+        /// </summary>
+        /// <param name="model"></param>
+        void SaveOrdersToPdfFile(ReportBindingModel model);
+    }
+}
diff --git a/IceCreamShop/IceCreamShopContracts/SearchModels/OrderSearchModel.cs b/IceCreamShop/IceCreamShopContracts/SearchModels/OrderSearchModel.cs
index 23043f3..57e19e0 100644
--- a/IceCreamShop/IceCreamShopContracts/SearchModels/OrderSearchModel.cs
+++ b/IceCreamShop/IceCreamShopContracts/SearchModels/OrderSearchModel.cs
@@ -9,5 +9,9 @@ namespace IceCreamShopContracts.SearchModels
     public class OrderSearchModel
     {
         public int? Id { get; set; }
+
+        public DateTime? DateFrom { get; set; }
+
+        public DateTime? DateTo { get; set; }
     }
 }
diff --git a/IceCreamShop/IceCreamShopContracts/ViewModels/ReportIceCreamComponentViewModel.cs b/IceCreamShop/IceCreamShopContracts/ViewModels/ReportIceCreamComponentViewModel.cs
new file mode 100644
index 0000000..d2dcb19
--- /dev/null
+++ b/IceCreamShop/IceCreamShopContracts/ViewModels/ReportIceCreamComponentViewModel.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IceCreamShopContracts.ViewModels
+{
+    public class ReportIceCreamComponentViewModel
+    {
+        public string ComponentName { get; set; } = string.Empty;
+
+        public int TotalCount { get; set; }
+
+        public List<(string IceCream, int Count)> IceCreams { get; set; } = new();
+    }
+}
diff --git a/IceCreamShop/IceCreamShopContracts/ViewModels/ReportOrdersViewModel.cs b/IceCreamShop/IceCreamShopContracts/ViewModels/ReportOrdersViewModel.cs
new file mode 100644
index 0000000..374e79d
--- /dev/null
+++ b/IceCreamShop/IceCreamShopContracts/ViewModels/ReportOrdersViewModel.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IceCreamShopContracts.ViewModels
+{
+    public class ReportOrdersViewModel
+    {
+        public int Id { get; set; }
+
+        public DateTime DateCreate { get; set; }
+
+        public string IceCreamName { get; set; } = string.Empty;
+
+        public double Sum { get; set; }
+    }
+}

From 2f7b71f1f80b083bedcc97bbc24913c91f454f12 Mon Sep 17 00:00:00 2001
From: Ino <irisha1234517@gmail.com>
Date: Mon, 13 Mar 2023 17:02:26 +0400
Subject: [PATCH 2/3] =?UTF-8?q?=D1=84=D0=BE=D1=80=D0=BC=D1=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../IceCreamShop/FormMain.Designer.cs         | 238 ++++++++++--------
 IceCreamShop/IceCreamShop/FormMain.cs         |  35 ++-
 .../IceCreamShop/FormReportOrders.Designer.cs | 136 ++++++++++
 IceCreamShop/IceCreamShop/FormReportOrders.cs |  90 +++++++
 .../IceCreamShop/FormReportOrders.resx        |  60 +++++
 .../FormReportProductComponents.Designer.cs   | 110 ++++----
 .../IceCreamShop/IceCreamShopView.csproj      |   1 +
 IceCreamShop/IceCreamShop/Program.cs          |   2 +
 .../Models/IceCream.cs                        |   2 +-
 9 files changed, 511 insertions(+), 163 deletions(-)
 create mode 100644 IceCreamShop/IceCreamShop/FormReportOrders.Designer.cs
 create mode 100644 IceCreamShop/IceCreamShop/FormReportOrders.cs
 create mode 100644 IceCreamShop/IceCreamShop/FormReportOrders.resx

diff --git a/IceCreamShop/IceCreamShop/FormMain.Designer.cs b/IceCreamShop/IceCreamShop/FormMain.Designer.cs
index b4ab36f..146a95d 100644
--- a/IceCreamShop/IceCreamShop/FormMain.Designer.cs
+++ b/IceCreamShop/IceCreamShop/FormMain.Designer.cs
@@ -28,142 +28,170 @@
         /// </summary>
         private void InitializeComponent()
         {
-            this.buttonUpdate = new System.Windows.Forms.Button();
-            this.buttonSetToFinish = new System.Windows.Forms.Button();
-            this.buttonSetToDone = new System.Windows.Forms.Button();
-            this.buttonSetToWork = new System.Windows.Forms.Button();
-            this.buttonCreateOrder = new System.Windows.Forms.Button();
-            this.dataGridView = new System.Windows.Forms.DataGridView();
-            this.menuStrip = new System.Windows.Forms.MenuStrip();
-            this.справочникиToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.компонентыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.мороженоеToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
-            this.menuStrip.SuspendLayout();
-            this.SuspendLayout();
+            buttonUpdate = new Button();
+            buttonSetToFinish = new Button();
+            buttonSetToDone = new Button();
+            buttonSetToWork = new Button();
+            buttonCreateOrder = new Button();
+            dataGridView = new DataGridView();
+            menuStrip = new MenuStrip();
+            справочникиToolStripMenuItem = new ToolStripMenuItem();
+            компонентыToolStripMenuItem = new ToolStripMenuItem();
+            мороженоеToolStripMenuItem = new ToolStripMenuItem();
+            отчетыToolStripMenuItem = new ToolStripMenuItem();
+            componentsToolStripMenuItem = new ToolStripMenuItem();
+            componentIceCreamsToolStripMenuItem = new ToolStripMenuItem();
+            ordersToolStripMenuItem = new ToolStripMenuItem();
+            ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
+            menuStrip.SuspendLayout();
+            SuspendLayout();
             // 
             // buttonUpdate
             // 
-            this.buttonUpdate.Location = new System.Drawing.Point(878, 294);
-            this.buttonUpdate.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
-            this.buttonUpdate.Name = "buttonUpdate";
-            this.buttonUpdate.Size = new System.Drawing.Size(170, 37);
-            this.buttonUpdate.TabIndex = 13;
-            this.buttonUpdate.Text = "Обновить";
-            this.buttonUpdate.UseVisualStyleBackColor = true;
-            this.buttonUpdate.Click += new System.EventHandler(this.buttonUpdate_Click);
+            buttonUpdate.Location = new Point(878, 294);
+            buttonUpdate.Margin = new Padding(3, 2, 3, 2);
+            buttonUpdate.Name = "buttonUpdate";
+            buttonUpdate.Size = new Size(170, 37);
+            buttonUpdate.TabIndex = 13;
+            buttonUpdate.Text = "Обновить";
+            buttonUpdate.UseVisualStyleBackColor = true;
+            buttonUpdate.Click += buttonUpdate_Click;
             // 
             // buttonSetToFinish
             // 
-            this.buttonSetToFinish.Location = new System.Drawing.Point(878, 225);
-            this.buttonSetToFinish.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
-            this.buttonSetToFinish.Name = "buttonSetToFinish";
-            this.buttonSetToFinish.Size = new System.Drawing.Size(170, 37);
-            this.buttonSetToFinish.TabIndex = 12;
-            this.buttonSetToFinish.Text = "Заказ выдан";
-            this.buttonSetToFinish.UseVisualStyleBackColor = true;
-            this.buttonSetToFinish.Click += new System.EventHandler(this.buttonSetToFinish_Click);
+            buttonSetToFinish.Location = new Point(878, 225);
+            buttonSetToFinish.Margin = new Padding(3, 2, 3, 2);
+            buttonSetToFinish.Name = "buttonSetToFinish";
+            buttonSetToFinish.Size = new Size(170, 37);
+            buttonSetToFinish.TabIndex = 12;
+            buttonSetToFinish.Text = "Заказ выдан";
+            buttonSetToFinish.UseVisualStyleBackColor = true;
+            buttonSetToFinish.Click += buttonSetToFinish_Click;
             // 
             // buttonSetToDone
             // 
-            this.buttonSetToDone.Location = new System.Drawing.Point(878, 160);
-            this.buttonSetToDone.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
-            this.buttonSetToDone.Name = "buttonSetToDone";
-            this.buttonSetToDone.Size = new System.Drawing.Size(170, 37);
-            this.buttonSetToDone.TabIndex = 11;
-            this.buttonSetToDone.Text = "Заказ готов";
-            this.buttonSetToDone.UseVisualStyleBackColor = true;
-            this.buttonSetToDone.Click += new System.EventHandler(this.buttonSetToDone_Click);
+            buttonSetToDone.Location = new Point(878, 160);
+            buttonSetToDone.Margin = new Padding(3, 2, 3, 2);
+            buttonSetToDone.Name = "buttonSetToDone";
+            buttonSetToDone.Size = new Size(170, 37);
+            buttonSetToDone.TabIndex = 11;
+            buttonSetToDone.Text = "Заказ готов";
+            buttonSetToDone.UseVisualStyleBackColor = true;
+            buttonSetToDone.Click += buttonSetToDone_Click;
             // 
             // buttonSetToWork
             // 
-            this.buttonSetToWork.Location = new System.Drawing.Point(878, 93);
-            this.buttonSetToWork.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
-            this.buttonSetToWork.Name = "buttonSetToWork";
-            this.buttonSetToWork.Size = new System.Drawing.Size(170, 37);
-            this.buttonSetToWork.TabIndex = 10;
-            this.buttonSetToWork.Text = "Отдать на выполнение";
-            this.buttonSetToWork.UseVisualStyleBackColor = true;
-            this.buttonSetToWork.Click += new System.EventHandler(this.buttonSetToWork_Click);
+            buttonSetToWork.Location = new Point(878, 93);
+            buttonSetToWork.Margin = new Padding(3, 2, 3, 2);
+            buttonSetToWork.Name = "buttonSetToWork";
+            buttonSetToWork.Size = new Size(170, 37);
+            buttonSetToWork.TabIndex = 10;
+            buttonSetToWork.Text = "Отдать на выполнение";
+            buttonSetToWork.UseVisualStyleBackColor = true;
+            buttonSetToWork.Click += buttonSetToWork_Click;
             // 
             // buttonCreateOrder
             // 
-            this.buttonCreateOrder.Location = new System.Drawing.Point(878, 26);
-            this.buttonCreateOrder.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
-            this.buttonCreateOrder.Name = "buttonCreateOrder";
-            this.buttonCreateOrder.Size = new System.Drawing.Size(170, 37);
-            this.buttonCreateOrder.TabIndex = 9;
-            this.buttonCreateOrder.Text = "Создать заказ";
-            this.buttonCreateOrder.UseVisualStyleBackColor = true;
-            this.buttonCreateOrder.Click += new System.EventHandler(this.buttonCreateOrder_Click);
+            buttonCreateOrder.Location = new Point(878, 26);
+            buttonCreateOrder.Margin = new Padding(3, 2, 3, 2);
+            buttonCreateOrder.Name = "buttonCreateOrder";
+            buttonCreateOrder.Size = new Size(170, 37);
+            buttonCreateOrder.TabIndex = 9;
+            buttonCreateOrder.Text = "Создать заказ";
+            buttonCreateOrder.UseVisualStyleBackColor = true;
+            buttonCreateOrder.Click += buttonCreateOrder_Click;
             // 
             // dataGridView
             // 
-            this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
-            this.dataGridView.Location = new System.Drawing.Point(12, 26);
-            this.dataGridView.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
-            this.dataGridView.Name = "dataGridView";
-            this.dataGridView.RowHeadersWidth = 51;
-            this.dataGridView.RowTemplate.Height = 29;
-            this.dataGridView.Size = new System.Drawing.Size(848, 305);
-            this.dataGridView.TabIndex = 8;
+            dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            dataGridView.Location = new Point(12, 26);
+            dataGridView.Margin = new Padding(3, 2, 3, 2);
+            dataGridView.Name = "dataGridView";
+            dataGridView.RowHeadersWidth = 51;
+            dataGridView.RowTemplate.Height = 29;
+            dataGridView.Size = new Size(848, 305);
+            dataGridView.TabIndex = 8;
             // 
             // menuStrip
             // 
-            this.menuStrip.ImageScalingSize = new System.Drawing.Size(20, 20);
-            this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.справочникиToolStripMenuItem});
-            this.menuStrip.Location = new System.Drawing.Point(0, 0);
-            this.menuStrip.Name = "menuStrip";
-            this.menuStrip.Padding = new System.Windows.Forms.Padding(5, 2, 0, 2);
-            this.menuStrip.Size = new System.Drawing.Size(1072, 24);
-            this.menuStrip.TabIndex = 7;
-            this.menuStrip.Text = "Справочники";
+            menuStrip.ImageScalingSize = new Size(20, 20);
+            menuStrip.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, отчетыToolStripMenuItem });
+            menuStrip.Location = new Point(0, 0);
+            menuStrip.Name = "menuStrip";
+            menuStrip.Padding = new Padding(5, 2, 0, 2);
+            menuStrip.Size = new Size(1072, 24);
+            menuStrip.TabIndex = 7;
+            menuStrip.Text = "Справочники";
             // 
             // справочникиToolStripMenuItem
             // 
-            this.справочникиToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.компонентыToolStripMenuItem,
-            this.мороженоеToolStripMenuItem});
-            this.справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem";
-            this.справочникиToolStripMenuItem.Size = new System.Drawing.Size(94, 20);
-            this.справочникиToolStripMenuItem.Text = "Справочники";
+            справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { компонентыToolStripMenuItem, мороженоеToolStripMenuItem });
+            справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem";
+            справочникиToolStripMenuItem.Size = new Size(94, 20);
+            справочникиToolStripMenuItem.Text = "Справочники";
             // 
             // компонентыToolStripMenuItem
             // 
-            this.компонентыToolStripMenuItem.Name = "компонентыToolStripMenuItem";
-            this.компонентыToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
-            this.компонентыToolStripMenuItem.Text = "Компоненты";
-            this.компонентыToolStripMenuItem.Click += new System.EventHandler(this.компонентыToolStripMenuItem_Click);
+            компонентыToolStripMenuItem.Name = "компонентыToolStripMenuItem";
+            компонентыToolStripMenuItem.Size = new Size(145, 22);
+            компонентыToolStripMenuItem.Text = "Компоненты";
+            компонентыToolStripMenuItem.Click += компонентыToolStripMenuItem_Click;
             // 
             // мороженоеToolStripMenuItem
             // 
-            this.мороженоеToolStripMenuItem.Name = "мороженоеToolStripMenuItem";
-            this.мороженоеToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
-            this.мороженоеToolStripMenuItem.Text = "Мороженое";
-            this.мороженоеToolStripMenuItem.Click += new System.EventHandler(this.мороженоеToolStripMenuItem_Click);
+            мороженоеToolStripMenuItem.Name = "мороженоеToolStripMenuItem";
+            мороженоеToolStripMenuItem.Size = new Size(145, 22);
+            мороженоеToolStripMenuItem.Text = "Мороженое";
+            мороженоеToolStripMenuItem.Click += мороженоеToolStripMenuItem_Click;
+            // 
+            // отчетыToolStripMenuItem
+            // 
+            отчетыToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { componentsToolStripMenuItem, componentIceCreamsToolStripMenuItem, ordersToolStripMenuItem });
+            отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem";
+            отчетыToolStripMenuItem.Size = new Size(60, 20);
+            отчетыToolStripMenuItem.Text = "Отчеты";
+            // 
+            // componentsToolStripMenuItem
+            // 
+            componentsToolStripMenuItem.Name = "componentsToolStripMenuItem";
+            componentsToolStripMenuItem.Size = new Size(235, 22);
+            componentsToolStripMenuItem.Text = "Список компонентов";
+            componentsToolStripMenuItem.Click += ComponentsToolStripMenuItem_Click;
+            // 
+            // componentIceCreamsToolStripMenuItem
+            // 
+            componentIceCreamsToolStripMenuItem.Name = "componentIceCreamsToolStripMenuItem";
+            componentIceCreamsToolStripMenuItem.Size = new Size(235, 22);
+            componentIceCreamsToolStripMenuItem.Text = "Компоненты по мороженым";
+            componentIceCreamsToolStripMenuItem.Click += ComponentIceCreamsToolStripMenuItem_Click;
+            // 
+            // ordersToolStripMenuItem
+            // 
+            ordersToolStripMenuItem.Name = "ordersToolStripMenuItem";
+            ordersToolStripMenuItem.Size = new Size(235, 22);
+            ordersToolStripMenuItem.Text = "Список заказов";
+            ordersToolStripMenuItem.Click += OrdersToolStripMenuItem_Click;
             // 
             // FormMain
             // 
-            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.ClientSize = new System.Drawing.Size(1072, 347);
-            this.Controls.Add(this.buttonUpdate);
-            this.Controls.Add(this.buttonSetToFinish);
-            this.Controls.Add(this.buttonSetToDone);
-            this.Controls.Add(this.buttonSetToWork);
-            this.Controls.Add(this.buttonCreateOrder);
-            this.Controls.Add(this.dataGridView);
-            this.Controls.Add(this.menuStrip);
-            this.Name = "FormMain";
-            this.Text = "Магазин мороженого";
-            this.Load += new System.EventHandler(this.FormMain_Load);
-            ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
-            this.menuStrip.ResumeLayout(false);
-            this.menuStrip.PerformLayout();
-            this.ResumeLayout(false);
-            this.PerformLayout();
-
+            AutoScaleDimensions = new SizeF(7F, 15F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(1072, 347);
+            Controls.Add(buttonUpdate);
+            Controls.Add(buttonSetToFinish);
+            Controls.Add(buttonSetToDone);
+            Controls.Add(buttonSetToWork);
+            Controls.Add(buttonCreateOrder);
+            Controls.Add(dataGridView);
+            Controls.Add(menuStrip);
+            Name = "FormMain";
+            Text = "Магазин мороженого";
+            Load += FormMain_Load;
+            ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
+            menuStrip.ResumeLayout(false);
+            menuStrip.PerformLayout();
+            ResumeLayout(false);
+            PerformLayout();
         }
 
         #endregion
@@ -178,5 +206,9 @@
         private ToolStripMenuItem справочникиToolStripMenuItem;
         private ToolStripMenuItem компонентыToolStripMenuItem;
         private ToolStripMenuItem мороженоеToolStripMenuItem;
+        private ToolStripMenuItem отчетыToolStripMenuItem;
+        private ToolStripMenuItem componentsToolStripMenuItem;
+        private ToolStripMenuItem componentIceCreamsToolStripMenuItem;
+        private ToolStripMenuItem ordersToolStripMenuItem;
     }
 }
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/FormMain.cs b/IceCreamShop/IceCreamShop/FormMain.cs
index 8c0bba5..f90e86b 100644
--- a/IceCreamShop/IceCreamShop/FormMain.cs
+++ b/IceCreamShop/IceCreamShop/FormMain.cs
@@ -1,4 +1,5 @@
 using AbstractIceCreamShopDataModels.Enums;
+using IceCreamBusinessLogic.BusinessLogics;
 using IceCreamShop;
 using IceCreamShopContracts.BindingModels;
 using IceCreamShopContracts.BusinessLogicsContracts;
@@ -19,11 +20,13 @@ namespace IceCreamShopView
     {
         private readonly ILogger _logger;
         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)
@@ -88,7 +91,7 @@ namespace IceCreamShopView
                 try
                 {
                     var operationResult = _orderLogic.TakeOrderInWork(new OrderBindingModel
-                    { 
+                    {
                         Id = id,
                     });
                     if (!operationResult)
@@ -163,5 +166,33 @@ namespace IceCreamShopView
         {
             LoadData();
         }
+
+        private void ComponentsToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            using var dialog = new SaveFileDialog { Filter = "docx|*.docx" };
+            if (dialog.ShowDialog() == DialogResult.OK)
+            {
+                _reportLogic.SaveComponentsToWordFile(new ReportBindingModel { FileName = dialog.FileName });
+                MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
+            }
+        }
+
+        private void ComponentIceCreamsToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            var service = Program.ServiceProvider?.GetService(typeof(FormReportProductComponents));
+            if (service is FormReportProductComponents 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();
+            }
+        }
     }
 }
diff --git a/IceCreamShop/IceCreamShop/FormReportOrders.Designer.cs b/IceCreamShop/IceCreamShop/FormReportOrders.Designer.cs
new file mode 100644
index 0000000..88def60
--- /dev/null
+++ b/IceCreamShop/IceCreamShop/FormReportOrders.Designer.cs
@@ -0,0 +1,136 @@
+namespace IceCreamShopView
+{
+    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()
+        {
+            buttonToPdf = new Button();
+            panel = new Panel();
+            buttonMake = new Button();
+            dateTimePickerTo = new DateTimePicker();
+            labelTo = new Label();
+            dateTimePickerFrom = new DateTimePicker();
+            labelFrom = new Label();
+            panel.SuspendLayout();
+            SuspendLayout();
+            // 
+            // buttonToPdf
+            // 
+            buttonToPdf.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+            buttonToPdf.Location = new Point(819, 8);
+            buttonToPdf.Margin = new Padding(4, 3, 4, 3);
+            buttonToPdf.Name = "buttonToPdf";
+            buttonToPdf.Size = new Size(139, 27);
+            buttonToPdf.TabIndex = 6;
+            buttonToPdf.Text = "В Pdf";
+            buttonToPdf.UseVisualStyleBackColor = true;
+            // 
+            // panel
+            // 
+            panel.Controls.Add(buttonMake);
+            panel.Controls.Add(buttonToPdf);
+            panel.Controls.Add(dateTimePickerTo);
+            panel.Controls.Add(labelTo);
+            panel.Controls.Add(dateTimePickerFrom);
+            panel.Controls.Add(labelFrom);
+            panel.Dock = DockStyle.Top;
+            panel.Location = new Point(0, 0);
+            panel.Margin = new Padding(4, 3, 4, 3);
+            panel.Name = "panel";
+            panel.Size = new Size(1006, 40);
+            panel.TabIndex = 7;
+            // 
+            // buttonMake
+            // 
+            buttonMake.Location = new Point(476, 8);
+            buttonMake.Margin = new Padding(4, 3, 4, 3);
+            buttonMake.Name = "buttonMake";
+            buttonMake.Size = new Size(139, 27);
+            buttonMake.TabIndex = 4;
+            buttonMake.Text = "Сформировать";
+            buttonMake.UseVisualStyleBackColor = true;
+            // 
+            // dateTimePickerTo
+            // 
+            dateTimePickerTo.Location = new Point(237, 7);
+            dateTimePickerTo.Margin = new Padding(4, 3, 4, 3);
+            dateTimePickerTo.Name = "dateTimePickerTo";
+            dateTimePickerTo.Size = new Size(163, 23);
+            dateTimePickerTo.TabIndex = 3;
+            // 
+            // labelTo
+            // 
+            labelTo.AutoSize = true;
+            labelTo.Location = new Point(208, 10);
+            labelTo.Margin = new Padding(4, 0, 4, 0);
+            labelTo.Name = "labelTo";
+            labelTo.Size = new Size(21, 15);
+            labelTo.TabIndex = 2;
+            labelTo.Text = "по";
+            // 
+            // dateTimePickerFrom
+            // 
+            dateTimePickerFrom.Location = new Point(37, 7);
+            dateTimePickerFrom.Margin = new Padding(4, 3, 4, 3);
+            dateTimePickerFrom.Name = "dateTimePickerFrom";
+            dateTimePickerFrom.Size = new Size(163, 23);
+            dateTimePickerFrom.TabIndex = 1;
+            // 
+            // labelFrom
+            // 
+            labelFrom.AutoSize = true;
+            labelFrom.Location = new Point(14, 10);
+            labelFrom.Margin = new Padding(4, 0, 4, 0);
+            labelFrom.Name = "labelFrom";
+            labelFrom.Size = new Size(15, 15);
+            labelFrom.TabIndex = 0;
+            labelFrom.Text = "С";
+            // 
+            // FormReportOrders
+            // 
+            AutoScaleDimensions = new SizeF(7F, 15F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(1006, 450);
+            Controls.Add(panel);
+            Name = "FormReportOrders";
+            Text = "Заказы";
+            panel.ResumeLayout(false);
+            panel.PerformLayout();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private Button buttonToPdf;
+        private Panel panel;
+        private Button buttonMake;
+        private DateTimePicker dateTimePickerTo;
+        private Label labelTo;
+        private DateTimePicker dateTimePickerFrom;
+        private Label labelFrom;
+    }
+}
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/FormReportOrders.cs b/IceCreamShop/IceCreamShop/FormReportOrders.cs
new file mode 100644
index 0000000..c13bbc4
--- /dev/null
+++ b/IceCreamShop/IceCreamShop/FormReportOrders.cs
@@ -0,0 +1,90 @@
+using IceCreamShopContracts.BusinessLogicsContracts;
+using Microsoft.Reporting.WinForms;
+using Microsoft.Extensions.Logging;
+using Microsoft.Reporting.WinForms;
+using IceCreamShopContracts.BindingModels;
+
+namespace IceCreamShopView
+{
+    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);
+                }
+            }
+        }
+    }
+}
diff --git a/IceCreamShop/IceCreamShop/FormReportOrders.resx b/IceCreamShop/IceCreamShop/FormReportOrders.resx
new file mode 100644
index 0000000..f298a7b
--- /dev/null
+++ b/IceCreamShop/IceCreamShop/FormReportOrders.resx
@@ -0,0 +1,60 @@
+<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>
+</root>
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/FormReportProductComponents.Designer.cs b/IceCreamShop/IceCreamShop/FormReportProductComponents.Designer.cs
index ce68c1b..ef20031 100644
--- a/IceCreamShop/IceCreamShop/FormReportProductComponents.Designer.cs
+++ b/IceCreamShop/IceCreamShop/FormReportProductComponents.Designer.cs
@@ -28,81 +28,77 @@
         /// </summary>
         private void InitializeComponent()
         {
-            this.buttonSaveToExcel = new System.Windows.Forms.Button();
-            this.dataGridView = new System.Windows.Forms.DataGridView();
-            this.ColumnComponent = new System.Windows.Forms.DataGridViewTextBoxColumn();
-            this.ColumnProduct = new System.Windows.Forms.DataGridViewTextBoxColumn();
-            this.ColumnCount = new System.Windows.Forms.DataGridViewTextBoxColumn();
-            ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
-            this.SuspendLayout();
+            buttonSaveToExcel = new Button();
+            dataGridView = new DataGridView();
+            ColumnComponent = new DataGridViewTextBoxColumn();
+            ColumnProduct = new DataGridViewTextBoxColumn();
+            ColumnCount = new DataGridViewTextBoxColumn();
+            ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
+            SuspendLayout();
             // 
             // buttonSaveToExcel
             // 
-            this.buttonSaveToExcel.Location = new System.Drawing.Point(13, 12);
-            this.buttonSaveToExcel.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
-            this.buttonSaveToExcel.Name = "buttonSaveToExcel";
-            this.buttonSaveToExcel.Size = new System.Drawing.Size(186, 27);
-            this.buttonSaveToExcel.TabIndex = 3;
-            this.buttonSaveToExcel.Text = "Сохранить в Excel";
-            this.buttonSaveToExcel.UseVisualStyleBackColor = true;
-            this.buttonSaveToExcel.Click += new System.EventHandler(this.buttonSaveToExcel_Click);
+            buttonSaveToExcel.Location = new Point(13, 12);
+            buttonSaveToExcel.Margin = new Padding(4, 3, 4, 3);
+            buttonSaveToExcel.Name = "buttonSaveToExcel";
+            buttonSaveToExcel.Size = new Size(186, 27);
+            buttonSaveToExcel.TabIndex = 3;
+            buttonSaveToExcel.Text = "Сохранить в Excel";
+            buttonSaveToExcel.UseVisualStyleBackColor = true;
+            buttonSaveToExcel.Click += buttonSaveToExcel_Click;
             // 
             // dataGridView
             // 
-            this.dataGridView.AllowUserToAddRows = false;
-            this.dataGridView.AllowUserToDeleteRows = false;
-            this.dataGridView.AllowUserToOrderColumns = true;
-            this.dataGridView.AllowUserToResizeColumns = false;
-            this.dataGridView.AllowUserToResizeRows = false;
-            this.dataGridView.BackgroundColor = System.Drawing.SystemColors.ControlLightLight;
-            this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
-            this.dataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
-            this.ColumnComponent,
-            this.ColumnProduct,
-            this.ColumnCount});
-            this.dataGridView.Dock = System.Windows.Forms.DockStyle.Bottom;
-            this.dataGridView.Location = new System.Drawing.Point(0, 53);
-            this.dataGridView.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
-            this.dataGridView.MultiSelect = false;
-            this.dataGridView.Name = "dataGridView";
-            this.dataGridView.ReadOnly = true;
-            this.dataGridView.RowHeadersVisible = false;
-            this.dataGridView.Size = new System.Drawing.Size(800, 510);
-            this.dataGridView.TabIndex = 4;
+            dataGridView.AllowUserToAddRows = false;
+            dataGridView.AllowUserToDeleteRows = false;
+            dataGridView.AllowUserToOrderColumns = true;
+            dataGridView.AllowUserToResizeColumns = false;
+            dataGridView.AllowUserToResizeRows = false;
+            dataGridView.BackgroundColor = SystemColors.ControlLightLight;
+            dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnComponent, ColumnProduct, ColumnCount });
+            dataGridView.Dock = DockStyle.Bottom;
+            dataGridView.Location = new Point(0, 53);
+            dataGridView.Margin = new Padding(4, 3, 4, 3);
+            dataGridView.MultiSelect = false;
+            dataGridView.Name = "dataGridView";
+            dataGridView.ReadOnly = true;
+            dataGridView.RowHeadersVisible = false;
+            dataGridView.Size = new Size(800, 510);
+            dataGridView.TabIndex = 4;
             // 
             // ColumnComponent
             // 
-            this.ColumnComponent.HeaderText = "Компонент";
-            this.ColumnComponent.Name = "ColumnComponent";
-            this.ColumnComponent.ReadOnly = true;
-            this.ColumnComponent.Width = 200;
+            ColumnComponent.HeaderText = "Компонент";
+            ColumnComponent.Name = "ColumnComponent";
+            ColumnComponent.ReadOnly = true;
+            ColumnComponent.Width = 200;
             // 
             // ColumnProduct
             // 
-            this.ColumnProduct.HeaderText = "Мороженое";
-            this.ColumnProduct.Name = "ColumnProduct";
-            this.ColumnProduct.ReadOnly = true;
-            this.ColumnProduct.Width = 200;
+            ColumnProduct.HeaderText = "Мороженое";
+            ColumnProduct.Name = "ColumnProduct";
+            ColumnProduct.ReadOnly = true;
+            ColumnProduct.Width = 200;
             // 
             // ColumnCount
             // 
-            this.ColumnCount.HeaderText = "Количество";
-            this.ColumnCount.Name = "ColumnCount";
-            this.ColumnCount.ReadOnly = true;
+            ColumnCount.HeaderText = "Количество";
+            ColumnCount.Name = "ColumnCount";
+            ColumnCount.ReadOnly = true;
             // 
             // FormReportProductComponents
             // 
-            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.ClientSize = new System.Drawing.Size(800, 563);
-            this.Controls.Add(this.dataGridView);
-            this.Controls.Add(this.buttonSaveToExcel);
-            this.Name = "FormReportProductComponents";
-            this.Text = "FormReportProductComponents";
-            this.Load += new System.EventHandler(this.FormReportProductComponents_Load);
-            ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
-            this.ResumeLayout(false);
-
+            AutoScaleDimensions = new SizeF(7F, 15F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(800, 563);
+            Controls.Add(dataGridView);
+            Controls.Add(buttonSaveToExcel);
+            Name = "FormReportProductComponents";
+            Text = "Компоненты по мороженым";
+            Load += FormReportProductComponents_Load;
+            ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
+            ResumeLayout(false);
         }
 
         #endregion
diff --git a/IceCreamShop/IceCreamShop/IceCreamShopView.csproj b/IceCreamShop/IceCreamShop/IceCreamShopView.csproj
index 1e192a7..a6dd942 100644
--- a/IceCreamShop/IceCreamShop/IceCreamShopView.csproj
+++ b/IceCreamShop/IceCreamShop/IceCreamShopView.csproj
@@ -15,6 +15,7 @@
     </PackageReference>
     <PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
     <PackageReference Include="NLog.Extensions.Logging" Version="5.2.1" />
+    <PackageReference Include="ReportViewerCore.WinForms" Version="15.1.17" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/IceCreamShop/IceCreamShop/Program.cs b/IceCreamShop/IceCreamShop/Program.cs
index d2266b5..55aef6e 100644
--- a/IceCreamShop/IceCreamShop/Program.cs
+++ b/IceCreamShop/IceCreamShop/Program.cs
@@ -58,6 +58,8 @@ namespace IceCreamShop
             services.AddTransient<FormIceCream>();
             services.AddTransient<FormIceCreamComponent>();
             services.AddTransient<FormIceCreams>();
+            services.AddTransient<FormReportProductComponents>();
+            services.AddTransient<FormReportOrders>();
         }
     }
 }
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShopFileImplement/Models/IceCream.cs b/IceCreamShop/IceCreamShopFileImplement/Models/IceCream.cs
index e72613b..54d4d38 100644
--- a/IceCreamShop/IceCreamShopFileImplement/Models/IceCream.cs
+++ b/IceCreamShop/IceCreamShopFileImplement/Models/IceCream.cs
@@ -10,7 +10,7 @@ using System.Xml.Linq;
 
 namespace IceCreamShopFileImplement.Models
 {
-    public class IceCream
+    public class IceCream : IIceCreamModel
     {
         public int Id { get; private set; }
         public string IceCreamName { get; private set; } = string.Empty;

From 391beb9c3256e94c9c29dde292e9ef80e327dde9 Mon Sep 17 00:00:00 2001
From: Inohara <InoSenju@Senju.com>
Date: Tue, 14 Mar 2023 10:30:13 +0400
Subject: [PATCH 3/3] =?UTF-8?q?4=20=D0=B1=D0=B0=D0=B7=D0=BE=D0=B2=D0=B0?=
 =?UTF-8?q?=D1=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../BusinessLogics/ReportLogic.cs             |  29 +-
 .../OfficePackage/AbstractSaveToExcel.cs      |   6 +-
 .../OfficePackage/AbstractSaveToPdf.cs        |  10 +-
 .../OfficePackage/AbstractSaveToWord.cs       |   7 +-
 .../OfficePackage/HelperModels/ExcelInfo.cs   |   2 +-
 .../OfficePackage/HelperModels/WordInfo.cs    |   2 +-
 .../IceCreamShop/FormMain.Designer.cs         | 249 +++++++++---------
 IceCreamShop/IceCreamShop/FormMain.cs         |   6 +-
 .../IceCreamShop/FormReportOrders.Designer.cs | 142 +++++-----
 .../FormReportProductComponents.cs            |   8 +-
 .../IceCreamShop/IceCreamShopView.csproj      |   6 +
 ...sLogicsContracts.IIceCreamLogic.datasource |  10 -
 ...nessLogicsContracts.IOrderLogic.datasource |  10 -
 ...agesContracts.IComponentStorage.datasource |  10 -
 ...ragesContracts.IIceCreamStorage.datasource |  10 -
 ...StoragesContracts.IOrderStorage.datasource |  10 -
 IceCreamShop/IceCreamShop/ReportOrders.rdlc   |  95 ++++++-
 .../BusinessLogicsContracts/IReportLogic.cs   |   6 +-
 .../ReportIceCreamComponentViewModel.cs       |   4 +-
 .../ViewModels/ReportOrdersViewModel.cs       |   1 +
 .../Implements/IceCreamStorage.cs             |  28 +-
 .../Implements/OrderStorage.cs                |  14 +-
 .../20230313191542_NewMigration.Designer.cs   | 171 ++++++++++++
 .../Migrations/20230313191542_NewMigration.cs |  22 ++
 .../IceCreamShopDatabaseModelSnapshot.cs      |  17 +-
 .../Models/Component.cs                       |  14 +-
 .../Models/IceCream.cs                        |   2 +-
 .../Models/Order.cs                           |   1 +
 .../Implements/OrderStorage.cs                |  26 +-
 .../IceCreamShopFileImplement/Models/Order.cs |  11 -
 .../Implements/OrderStorage.cs                |  28 +-
 .../IceCreamShopListImplement/Models/Order.cs |  10 -
 32 files changed, 611 insertions(+), 356 deletions(-)
 delete mode 100644 IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IIceCreamLogic.datasource
 delete mode 100644 IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IOrderLogic.datasource
 delete mode 100644 IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IComponentStorage.datasource
 delete mode 100644 IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IIceCreamStorage.datasource
 delete mode 100644 IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IOrderStorage.datasource
 create mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.Designer.cs
 create mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.cs

diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ReportLogic.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ReportLogic.cs
index 9ec8fa1..5f0f0d4 100644
--- a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ReportLogic.cs
+++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ReportLogic.cs
@@ -43,7 +43,7 @@ namespace IceCreamBusinessLogic.BusinessLogics
         /// Получение списка компонент с указанием, в каких изделиях используются
         /// </summary>
         /// <returns></returns>
-        public List<ReportIceCreamComponentViewModel> GetProductComponent()
+        public List<ReportIceCreamComponentViewModel> GetIceCreamComponent()
         {
             var components = _componentStorage.GetFullList();
 
@@ -51,20 +51,20 @@ namespace IceCreamBusinessLogic.BusinessLogics
 
             var list = new List<ReportIceCreamComponentViewModel>();
 
-            foreach (var component in components)
+            foreach (var icecream in iceCreams)
             {
                 var record = new ReportIceCreamComponentViewModel
                 {
-                    ComponentName = component.ComponentName,
-                    IceCreams = new List<(string, int)>(),
+                    IceCreamName = icecream.IceCreamName,
+                    Components = new List<(string, int)>(),
                     TotalCount = 0
                 };
-                foreach (var product in iceCreams)
+                foreach (var component in components)
                 {
-                    if (product.IceCreamComponents.ContainsKey(component.Id))
+                    if (icecream.IceCreamComponents.ContainsKey(component.Id))
                     {
-                        record.IceCreams.Add(new(product.IceCreamName, product.IceCreamComponents[component.Id].Item2));
-                        record.TotalCount += product.IceCreamComponents[component.Id].Item2;
+                        record.Components.Add(new(component.ComponentName, icecream.IceCreamComponents[component.Id].Item2));
+                        record.TotalCount += icecream.IceCreamComponents[component.Id].Item2;
                     }
                 }
 
@@ -87,6 +87,7 @@ namespace IceCreamBusinessLogic.BusinessLogics
                         Id = x.Id,
                         DateCreate = x.DateCreate,
                         IceCreamName = x.IceCreamName,
+                        OrderStatus = Convert.ToString(x.Status) ?? String.Empty,
                         Sum = x.Sum
                     })
                     .ToList();
@@ -96,13 +97,13 @@ namespace IceCreamBusinessLogic.BusinessLogics
         /// Сохранение компонент в файл-Word
         /// </summary>
         /// <param name="model"></param>
-        public void SaveComponentsToWordFile(ReportBindingModel model)
+        public void SaveIceCreamsToWordFile(ReportBindingModel model)
         {
             _saveToWord.CreateDoc(new WordInfo
             {
                 FileName = model.FileName,
-                Title = "Список компонент",
-                Components = _componentStorage.GetFullList()
+                Title = "Список изделий",
+                IceCreams = _iceCreamStorage.GetFullList()
             });
         }
 
@@ -110,13 +111,13 @@ namespace IceCreamBusinessLogic.BusinessLogics
         /// Сохранение компонент с указаеним продуктов в файл-Excel
         /// </summary>
         /// <param name="model"></param>
-        public void SaveProductComponentToExcelFile(ReportBindingModel model)
+        public void SaveIceCreamComponentToExcelFile(ReportBindingModel model)
         {
             _saveToExcel.CreateReport(new ExcelInfo
             {
                 FileName = model.FileName,
-                Title = "Список компонент",
-                ProductComponents = GetProductComponent()
+                Title = "Список изделий",
+                IceCreamComponents = GetIceCreamComponent()
             });
         }
 
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToExcel.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToExcel.cs
index 1e2e35b..e0f80fa 100644
--- a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToExcel.cs
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToExcel.cs
@@ -28,18 +28,18 @@ namespace IceCreamBusinessLogic.OfficePackage
             });
 
             uint rowIndex = 2;
-            foreach (var pc in info.ProductComponents)
+            foreach (var pc in info.IceCreamComponents)
             {
                 InsertCellInWorksheet(new ExcelCellParameters
                 {
                     ColumnName = "A",
                     RowIndex = rowIndex,
-                    Text = pc.ComponentName,
+                    Text = pc.IceCreamName,
                     StyleInfo = ExcelStyleInfoType.Text
                 });
                 rowIndex++;
 
-                foreach (var (IceCream, Count) in pc.IceCreams)
+                foreach (var (IceCream, Count) in pc.Components)
                 {
                     InsertCellInWorksheet(new ExcelCellParameters
                     {
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToPdf.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToPdf.cs
index b64b775..3e10ed2 100644
--- a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToPdf.cs
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToPdf.cs
@@ -14,13 +14,15 @@ namespace IceCreamBusinessLogic.OfficePackage
         {
             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 });
+            CreateParagraph(new PdfParagraph { 
+                Text = $"с {info.DateFrom.ToShortDateString()} по {info.DateTo.ToShortDateString()}", Style = "Normal", 
+                ParagraphAlignment = PdfParagraphAlignmentType.Center });
 
-            CreateTable(new List<string> { "2cm", "3cm", "6cm", "3cm" });
+            CreateTable(new List<string> { "2cm", "3cm", "6cm", "4cm", "3cm" });
 
             CreateRow(new PdfRowParameters
             {
-                Texts = new List<string> { "Номер", "Дата заказа", "Изделие", "Сумма" },
+                Texts = new List<string> { "Номер", "Дата заказа", "Изделие", "Статус заказа", "Сумма" },
                 Style = "NormalTitle",
                 ParagraphAlignment = PdfParagraphAlignmentType.Center
             });
@@ -29,7 +31,7 @@ namespace IceCreamBusinessLogic.OfficePackage
             {
                 CreateRow(new PdfRowParameters
                 {
-                    Texts = new List<string> { order.Id.ToString(), order.DateCreate.ToShortDateString(), order.IceCreamName, order.Sum.ToString() },
+                    Texts = new List<string> { order.Id.ToString(), order.DateCreate.ToShortDateString(), order.IceCreamName, Convert.ToString(order.OrderStatus), order.Sum.ToString() },
                     Style = "Normal",
                     ParagraphAlignment = PdfParagraphAlignmentType.Left
                 });
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToWord.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToWord.cs
index 976b28e..bc73496 100644
--- a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToWord.cs
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/AbstractSaveToWord.cs
@@ -19,11 +19,14 @@ namespace IceCreamBusinessLogic.OfficePackage
                 }
             });
 
-            foreach (var component in info.Components)
+            foreach (var iceCream in info.IceCreams)
             {
                 CreateParagraph(new WordParagraph
                 {
-                    Texts = new List<(string, WordTextProperties)> { (component.ComponentName, new WordTextProperties { Size = "24", }) },
+                    Texts = new List<(string, WordTextProperties)> {
+                        (iceCream.IceCreamName, new WordTextProperties { Size = "24", Bold = true}),
+                        (" - цена " + iceCream.Price.ToString(), new WordTextProperties { Size = "24" })
+                    },
                     TextProperties = new WordTextProperties
                     {
                         Size = "24",
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/ExcelInfo.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/ExcelInfo.cs
index 126a0c8..6fa1f90 100644
--- a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/ExcelInfo.cs
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/ExcelInfo.cs
@@ -8,6 +8,6 @@ namespace IceCreamBusinessLogic.OfficePackage.HelperModels
 
         public string Title { get; set; } = string.Empty;
 
-        public List<ReportIceCreamComponentViewModel> ProductComponents { get; set; } = new();
+        public List<ReportIceCreamComponentViewModel> IceCreamComponents { get; set; } = new();
     }
 }
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/WordInfo.cs b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/WordInfo.cs
index 8d3a4d1..8e6de3a 100644
--- a/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/WordInfo.cs
+++ b/IceCreamShop/IceCreamBusinessLogic/OfficePackage/HelperModels/WordInfo.cs
@@ -8,6 +8,6 @@ namespace IceCreamBusinessLogic.OfficePackage.HelperModels
 
         public string Title { get; set; } = string.Empty;
 
-        public List<ComponentViewModel> Components { get; set; } = new();
+        public List<IceCreamViewModel> IceCreams { get; set; } = new();
     }
 }
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/FormMain.Designer.cs b/IceCreamShop/IceCreamShop/FormMain.Designer.cs
index 146a95d..71ce812 100644
--- a/IceCreamShop/IceCreamShop/FormMain.Designer.cs
+++ b/IceCreamShop/IceCreamShop/FormMain.Designer.cs
@@ -28,170 +28,173 @@
         /// </summary>
         private void InitializeComponent()
         {
-            buttonUpdate = new Button();
-            buttonSetToFinish = new Button();
-            buttonSetToDone = new Button();
-            buttonSetToWork = new Button();
-            buttonCreateOrder = new Button();
-            dataGridView = new DataGridView();
-            menuStrip = new MenuStrip();
-            справочникиToolStripMenuItem = new ToolStripMenuItem();
-            компонентыToolStripMenuItem = new ToolStripMenuItem();
-            мороженоеToolStripMenuItem = new ToolStripMenuItem();
-            отчетыToolStripMenuItem = new ToolStripMenuItem();
-            componentsToolStripMenuItem = new ToolStripMenuItem();
-            componentIceCreamsToolStripMenuItem = new ToolStripMenuItem();
-            ordersToolStripMenuItem = new ToolStripMenuItem();
-            ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
-            menuStrip.SuspendLayout();
-            SuspendLayout();
+            this.buttonUpdate = new System.Windows.Forms.Button();
+            this.buttonSetToFinish = new System.Windows.Forms.Button();
+            this.buttonSetToDone = new System.Windows.Forms.Button();
+            this.buttonSetToWork = new System.Windows.Forms.Button();
+            this.buttonCreateOrder = new System.Windows.Forms.Button();
+            this.dataGridView = new System.Windows.Forms.DataGridView();
+            this.menuStrip = new System.Windows.Forms.MenuStrip();
+            this.справочникиToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.компонентыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.мороженоеToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.отчетыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.iceCreamComponentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.iceCreamToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.ordersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
+            this.menuStrip.SuspendLayout();
+            this.SuspendLayout();
             // 
             // buttonUpdate
             // 
-            buttonUpdate.Location = new Point(878, 294);
-            buttonUpdate.Margin = new Padding(3, 2, 3, 2);
-            buttonUpdate.Name = "buttonUpdate";
-            buttonUpdate.Size = new Size(170, 37);
-            buttonUpdate.TabIndex = 13;
-            buttonUpdate.Text = "Обновить";
-            buttonUpdate.UseVisualStyleBackColor = true;
-            buttonUpdate.Click += buttonUpdate_Click;
+            this.buttonUpdate.Location = new System.Drawing.Point(1003, 392);
+            this.buttonUpdate.Name = "buttonUpdate";
+            this.buttonUpdate.Size = new System.Drawing.Size(194, 49);
+            this.buttonUpdate.TabIndex = 13;
+            this.buttonUpdate.Text = "Обновить";
+            this.buttonUpdate.UseVisualStyleBackColor = true;
+            this.buttonUpdate.Click += new System.EventHandler(this.buttonUpdate_Click);
             // 
             // buttonSetToFinish
             // 
-            buttonSetToFinish.Location = new Point(878, 225);
-            buttonSetToFinish.Margin = new Padding(3, 2, 3, 2);
-            buttonSetToFinish.Name = "buttonSetToFinish";
-            buttonSetToFinish.Size = new Size(170, 37);
-            buttonSetToFinish.TabIndex = 12;
-            buttonSetToFinish.Text = "Заказ выдан";
-            buttonSetToFinish.UseVisualStyleBackColor = true;
-            buttonSetToFinish.Click += buttonSetToFinish_Click;
+            this.buttonSetToFinish.Location = new System.Drawing.Point(1003, 300);
+            this.buttonSetToFinish.Name = "buttonSetToFinish";
+            this.buttonSetToFinish.Size = new System.Drawing.Size(194, 49);
+            this.buttonSetToFinish.TabIndex = 12;
+            this.buttonSetToFinish.Text = "Заказ выдан";
+            this.buttonSetToFinish.UseVisualStyleBackColor = true;
+            this.buttonSetToFinish.Click += new System.EventHandler(this.buttonSetToFinish_Click);
             // 
             // buttonSetToDone
             // 
-            buttonSetToDone.Location = new Point(878, 160);
-            buttonSetToDone.Margin = new Padding(3, 2, 3, 2);
-            buttonSetToDone.Name = "buttonSetToDone";
-            buttonSetToDone.Size = new Size(170, 37);
-            buttonSetToDone.TabIndex = 11;
-            buttonSetToDone.Text = "Заказ готов";
-            buttonSetToDone.UseVisualStyleBackColor = true;
-            buttonSetToDone.Click += buttonSetToDone_Click;
+            this.buttonSetToDone.Location = new System.Drawing.Point(1003, 213);
+            this.buttonSetToDone.Name = "buttonSetToDone";
+            this.buttonSetToDone.Size = new System.Drawing.Size(194, 49);
+            this.buttonSetToDone.TabIndex = 11;
+            this.buttonSetToDone.Text = "Заказ готов";
+            this.buttonSetToDone.UseVisualStyleBackColor = true;
+            this.buttonSetToDone.Click += new System.EventHandler(this.buttonSetToDone_Click);
             // 
             // buttonSetToWork
             // 
-            buttonSetToWork.Location = new Point(878, 93);
-            buttonSetToWork.Margin = new Padding(3, 2, 3, 2);
-            buttonSetToWork.Name = "buttonSetToWork";
-            buttonSetToWork.Size = new Size(170, 37);
-            buttonSetToWork.TabIndex = 10;
-            buttonSetToWork.Text = "Отдать на выполнение";
-            buttonSetToWork.UseVisualStyleBackColor = true;
-            buttonSetToWork.Click += buttonSetToWork_Click;
+            this.buttonSetToWork.Location = new System.Drawing.Point(1003, 124);
+            this.buttonSetToWork.Name = "buttonSetToWork";
+            this.buttonSetToWork.Size = new System.Drawing.Size(194, 49);
+            this.buttonSetToWork.TabIndex = 10;
+            this.buttonSetToWork.Text = "Отдать на выполнение";
+            this.buttonSetToWork.UseVisualStyleBackColor = true;
+            this.buttonSetToWork.Click += new System.EventHandler(this.buttonSetToWork_Click);
             // 
             // buttonCreateOrder
             // 
-            buttonCreateOrder.Location = new Point(878, 26);
-            buttonCreateOrder.Margin = new Padding(3, 2, 3, 2);
-            buttonCreateOrder.Name = "buttonCreateOrder";
-            buttonCreateOrder.Size = new Size(170, 37);
-            buttonCreateOrder.TabIndex = 9;
-            buttonCreateOrder.Text = "Создать заказ";
-            buttonCreateOrder.UseVisualStyleBackColor = true;
-            buttonCreateOrder.Click += buttonCreateOrder_Click;
+            this.buttonCreateOrder.Location = new System.Drawing.Point(1003, 35);
+            this.buttonCreateOrder.Name = "buttonCreateOrder";
+            this.buttonCreateOrder.Size = new System.Drawing.Size(194, 49);
+            this.buttonCreateOrder.TabIndex = 9;
+            this.buttonCreateOrder.Text = "Создать заказ";
+            this.buttonCreateOrder.UseVisualStyleBackColor = true;
+            this.buttonCreateOrder.Click += new System.EventHandler(this.buttonCreateOrder_Click);
             // 
             // dataGridView
             // 
-            dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
-            dataGridView.Location = new Point(12, 26);
-            dataGridView.Margin = new Padding(3, 2, 3, 2);
-            dataGridView.Name = "dataGridView";
-            dataGridView.RowHeadersWidth = 51;
-            dataGridView.RowTemplate.Height = 29;
-            dataGridView.Size = new Size(848, 305);
-            dataGridView.TabIndex = 8;
+            this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            this.dataGridView.Location = new System.Drawing.Point(14, 35);
+            this.dataGridView.Name = "dataGridView";
+            this.dataGridView.RowHeadersWidth = 51;
+            this.dataGridView.RowTemplate.Height = 29;
+            this.dataGridView.Size = new System.Drawing.Size(969, 407);
+            this.dataGridView.TabIndex = 8;
             // 
             // menuStrip
             // 
-            menuStrip.ImageScalingSize = new Size(20, 20);
-            menuStrip.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, отчетыToolStripMenuItem });
-            menuStrip.Location = new Point(0, 0);
-            menuStrip.Name = "menuStrip";
-            menuStrip.Padding = new Padding(5, 2, 0, 2);
-            menuStrip.Size = new Size(1072, 24);
-            menuStrip.TabIndex = 7;
-            menuStrip.Text = "Справочники";
+            this.menuStrip.ImageScalingSize = new System.Drawing.Size(20, 20);
+            this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.справочникиToolStripMenuItem,
+            this.отчетыToolStripMenuItem});
+            this.menuStrip.Location = new System.Drawing.Point(0, 0);
+            this.menuStrip.Name = "menuStrip";
+            this.menuStrip.Padding = new System.Windows.Forms.Padding(6, 3, 0, 3);
+            this.menuStrip.Size = new System.Drawing.Size(1225, 30);
+            this.menuStrip.TabIndex = 7;
+            this.menuStrip.Text = "Справочники";
             // 
             // справочникиToolStripMenuItem
             // 
-            справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { компонентыToolStripMenuItem, мороженоеToolStripMenuItem });
-            справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem";
-            справочникиToolStripMenuItem.Size = new Size(94, 20);
-            справочникиToolStripMenuItem.Text = "Справочники";
+            this.справочникиToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.компонентыToolStripMenuItem,
+            this.мороженоеToolStripMenuItem});
+            this.справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem";
+            this.справочникиToolStripMenuItem.Size = new System.Drawing.Size(117, 24);
+            this.справочникиToolStripMenuItem.Text = "Справочники";
             // 
             // компонентыToolStripMenuItem
             // 
-            компонентыToolStripMenuItem.Name = "компонентыToolStripMenuItem";
-            компонентыToolStripMenuItem.Size = new Size(145, 22);
-            компонентыToolStripMenuItem.Text = "Компоненты";
-            компонентыToolStripMenuItem.Click += компонентыToolStripMenuItem_Click;
+            this.компонентыToolStripMenuItem.Name = "компонентыToolStripMenuItem";
+            this.компонентыToolStripMenuItem.Size = new System.Drawing.Size(224, 26);
+            this.компонентыToolStripMenuItem.Text = "Компоненты";
+            this.компонентыToolStripMenuItem.Click += new System.EventHandler(this.компонентыToolStripMenuItem_Click);
             // 
             // мороженоеToolStripMenuItem
             // 
-            мороженоеToolStripMenuItem.Name = "мороженоеToolStripMenuItem";
-            мороженоеToolStripMenuItem.Size = new Size(145, 22);
-            мороженоеToolStripMenuItem.Text = "Мороженое";
-            мороженоеToolStripMenuItem.Click += мороженоеToolStripMenuItem_Click;
+            this.мороженоеToolStripMenuItem.Name = "мороженоеToolStripMenuItem";
+            this.мороженоеToolStripMenuItem.Size = new System.Drawing.Size(224, 26);
+            this.мороженоеToolStripMenuItem.Text = "Мороженое";
+            this.мороженоеToolStripMenuItem.Click += new System.EventHandler(this.мороженоеToolStripMenuItem_Click);
             // 
             // отчетыToolStripMenuItem
             // 
-            отчетыToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { componentsToolStripMenuItem, componentIceCreamsToolStripMenuItem, ordersToolStripMenuItem });
-            отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem";
-            отчетыToolStripMenuItem.Size = new Size(60, 20);
-            отчетыToolStripMenuItem.Text = "Отчеты";
+            this.отчетыToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.iceCreamComponentsToolStripMenuItem,
+            this.iceCreamToolStripMenuItem,
+            this.ordersToolStripMenuItem});
+            this.отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem";
+            this.отчетыToolStripMenuItem.Size = new System.Drawing.Size(73, 24);
+            this.отчетыToolStripMenuItem.Text = "Отчеты";
             // 
-            // componentsToolStripMenuItem
+            // iceCreamComponentsToolStripMenuItem
             // 
-            componentsToolStripMenuItem.Name = "componentsToolStripMenuItem";
-            componentsToolStripMenuItem.Size = new Size(235, 22);
-            componentsToolStripMenuItem.Text = "Список компонентов";
-            componentsToolStripMenuItem.Click += ComponentsToolStripMenuItem_Click;
+            this.iceCreamComponentsToolStripMenuItem.Name = "iceCreamComponentsToolStripMenuItem";
+            this.iceCreamComponentsToolStripMenuItem.Size = new System.Drawing.Size(299, 26);
+            this.iceCreamComponentsToolStripMenuItem.Text = "Список мороженых";
+            this.iceCreamComponentsToolStripMenuItem.Click += new System.EventHandler(this.IceCreamsToolStripMenuItem_Click);
             // 
-            // componentIceCreamsToolStripMenuItem
+            // iceCreamToolStripMenuItem
             // 
-            componentIceCreamsToolStripMenuItem.Name = "componentIceCreamsToolStripMenuItem";
-            componentIceCreamsToolStripMenuItem.Size = new Size(235, 22);
-            componentIceCreamsToolStripMenuItem.Text = "Компоненты по мороженым";
-            componentIceCreamsToolStripMenuItem.Click += ComponentIceCreamsToolStripMenuItem_Click;
+            this.iceCreamToolStripMenuItem.Name = "iceCreamToolStripMenuItem";
+            this.iceCreamToolStripMenuItem.Size = new System.Drawing.Size(299, 26);
+            this.iceCreamToolStripMenuItem.Text = "Мороженые с компонентами";
+            this.iceCreamToolStripMenuItem.Click += new System.EventHandler(this.IceCreamComponentsToolStripMenuItem_Click);
             // 
             // ordersToolStripMenuItem
             // 
-            ordersToolStripMenuItem.Name = "ordersToolStripMenuItem";
-            ordersToolStripMenuItem.Size = new Size(235, 22);
-            ordersToolStripMenuItem.Text = "Список заказов";
-            ordersToolStripMenuItem.Click += OrdersToolStripMenuItem_Click;
+            this.ordersToolStripMenuItem.Name = "ordersToolStripMenuItem";
+            this.ordersToolStripMenuItem.Size = new System.Drawing.Size(299, 26);
+            this.ordersToolStripMenuItem.Text = "Список заказов";
+            this.ordersToolStripMenuItem.Click += new System.EventHandler(this.OrdersToolStripMenuItem_Click);
             // 
             // FormMain
             // 
-            AutoScaleDimensions = new SizeF(7F, 15F);
-            AutoScaleMode = AutoScaleMode.Font;
-            ClientSize = new Size(1072, 347);
-            Controls.Add(buttonUpdate);
-            Controls.Add(buttonSetToFinish);
-            Controls.Add(buttonSetToDone);
-            Controls.Add(buttonSetToWork);
-            Controls.Add(buttonCreateOrder);
-            Controls.Add(dataGridView);
-            Controls.Add(menuStrip);
-            Name = "FormMain";
-            Text = "Магазин мороженого";
-            Load += FormMain_Load;
-            ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
-            menuStrip.ResumeLayout(false);
-            menuStrip.PerformLayout();
-            ResumeLayout(false);
-            PerformLayout();
+            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(1225, 463);
+            this.Controls.Add(this.buttonUpdate);
+            this.Controls.Add(this.buttonSetToFinish);
+            this.Controls.Add(this.buttonSetToDone);
+            this.Controls.Add(this.buttonSetToWork);
+            this.Controls.Add(this.buttonCreateOrder);
+            this.Controls.Add(this.dataGridView);
+            this.Controls.Add(this.menuStrip);
+            this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+            this.Name = "FormMain";
+            this.Text = "Магазин мороженого";
+            this.Load += new System.EventHandler(this.FormMain_Load);
+            ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+            this.menuStrip.ResumeLayout(false);
+            this.menuStrip.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
         }
 
         #endregion
@@ -207,8 +210,8 @@
         private ToolStripMenuItem компонентыToolStripMenuItem;
         private ToolStripMenuItem мороженоеToolStripMenuItem;
         private ToolStripMenuItem отчетыToolStripMenuItem;
-        private ToolStripMenuItem componentsToolStripMenuItem;
-        private ToolStripMenuItem componentIceCreamsToolStripMenuItem;
+        private ToolStripMenuItem iceCreamComponentsToolStripMenuItem;
+        private ToolStripMenuItem iceCreamToolStripMenuItem;
         private ToolStripMenuItem ordersToolStripMenuItem;
     }
 }
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/FormMain.cs b/IceCreamShop/IceCreamShop/FormMain.cs
index f90e86b..2af8bd9 100644
--- a/IceCreamShop/IceCreamShop/FormMain.cs
+++ b/IceCreamShop/IceCreamShop/FormMain.cs
@@ -167,17 +167,17 @@ namespace IceCreamShopView
             LoadData();
         }
 
-        private void ComponentsToolStripMenuItem_Click(object sender, EventArgs e)
+        private void IceCreamsToolStripMenuItem_Click(object sender, EventArgs e)
         {
             using var dialog = new SaveFileDialog { Filter = "docx|*.docx" };
             if (dialog.ShowDialog() == DialogResult.OK)
             {
-                _reportLogic.SaveComponentsToWordFile(new ReportBindingModel { FileName = dialog.FileName });
+                _reportLogic.SaveIceCreamsToWordFile(new ReportBindingModel { FileName = dialog.FileName });
                 MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
             }
         }
 
-        private void ComponentIceCreamsToolStripMenuItem_Click(object sender, EventArgs e)
+        private void IceCreamComponentsToolStripMenuItem_Click(object sender, EventArgs e)
         {
             var service = Program.ServiceProvider?.GetService(typeof(FormReportProductComponents));
             if (service is FormReportProductComponents form)
diff --git a/IceCreamShop/IceCreamShop/FormReportOrders.Designer.cs b/IceCreamShop/IceCreamShop/FormReportOrders.Designer.cs
index 88def60..0b4b768 100644
--- a/IceCreamShop/IceCreamShop/FormReportOrders.Designer.cs
+++ b/IceCreamShop/IceCreamShop/FormReportOrders.Designer.cs
@@ -28,99 +28,103 @@
         /// </summary>
         private void InitializeComponent()
         {
-            buttonToPdf = new Button();
-            panel = new Panel();
-            buttonMake = new Button();
-            dateTimePickerTo = new DateTimePicker();
-            labelTo = new Label();
-            dateTimePickerFrom = new DateTimePicker();
-            labelFrom = new Label();
-            panel.SuspendLayout();
-            SuspendLayout();
+            this.buttonToPdf = new System.Windows.Forms.Button();
+            this.panel = new System.Windows.Forms.Panel();
+            this.buttonMake = new System.Windows.Forms.Button();
+            this.dateTimePickerTo = new System.Windows.Forms.DateTimePicker();
+            this.labelTo = new System.Windows.Forms.Label();
+            this.dateTimePickerFrom = new System.Windows.Forms.DateTimePicker();
+            this.labelFrom = new System.Windows.Forms.Label();
+            this.panel.SuspendLayout();
+            this.SuspendLayout();
             // 
             // buttonToPdf
             // 
-            buttonToPdf.Anchor = AnchorStyles.Top | AnchorStyles.Right;
-            buttonToPdf.Location = new Point(819, 8);
-            buttonToPdf.Margin = new Padding(4, 3, 4, 3);
-            buttonToPdf.Name = "buttonToPdf";
-            buttonToPdf.Size = new Size(139, 27);
-            buttonToPdf.TabIndex = 6;
-            buttonToPdf.Text = "В Pdf";
-            buttonToPdf.UseVisualStyleBackColor = true;
+            this.buttonToPdf.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.buttonToPdf.Location = new System.Drawing.Point(936, 11);
+            this.buttonToPdf.Margin = new System.Windows.Forms.Padding(5, 4, 5, 4);
+            this.buttonToPdf.Name = "buttonToPdf";
+            this.buttonToPdf.Size = new System.Drawing.Size(159, 36);
+            this.buttonToPdf.TabIndex = 6;
+            this.buttonToPdf.Text = "В Pdf";
+            this.buttonToPdf.UseVisualStyleBackColor = true;
+            this.buttonToPdf.Click += new System.EventHandler(this.ButtonToPdf_Click);
             // 
             // panel
             // 
-            panel.Controls.Add(buttonMake);
-            panel.Controls.Add(buttonToPdf);
-            panel.Controls.Add(dateTimePickerTo);
-            panel.Controls.Add(labelTo);
-            panel.Controls.Add(dateTimePickerFrom);
-            panel.Controls.Add(labelFrom);
-            panel.Dock = DockStyle.Top;
-            panel.Location = new Point(0, 0);
-            panel.Margin = new Padding(4, 3, 4, 3);
-            panel.Name = "panel";
-            panel.Size = new Size(1006, 40);
-            panel.TabIndex = 7;
+            this.panel.Controls.Add(this.buttonMake);
+            this.panel.Controls.Add(this.buttonToPdf);
+            this.panel.Controls.Add(this.dateTimePickerTo);
+            this.panel.Controls.Add(this.labelTo);
+            this.panel.Controls.Add(this.dateTimePickerFrom);
+            this.panel.Controls.Add(this.labelFrom);
+            this.panel.Dock = System.Windows.Forms.DockStyle.Top;
+            this.panel.Location = new System.Drawing.Point(0, 0);
+            this.panel.Margin = new System.Windows.Forms.Padding(5, 4, 5, 4);
+            this.panel.Name = "panel";
+            this.panel.Size = new System.Drawing.Size(1150, 53);
+            this.panel.TabIndex = 7;
             // 
             // buttonMake
             // 
-            buttonMake.Location = new Point(476, 8);
-            buttonMake.Margin = new Padding(4, 3, 4, 3);
-            buttonMake.Name = "buttonMake";
-            buttonMake.Size = new Size(139, 27);
-            buttonMake.TabIndex = 4;
-            buttonMake.Text = "Сформировать";
-            buttonMake.UseVisualStyleBackColor = true;
+            this.buttonMake.Location = new System.Drawing.Point(544, 11);
+            this.buttonMake.Margin = new System.Windows.Forms.Padding(5, 4, 5, 4);
+            this.buttonMake.Name = "buttonMake";
+            this.buttonMake.Size = new System.Drawing.Size(159, 36);
+            this.buttonMake.TabIndex = 4;
+            this.buttonMake.Text = "Сформировать";
+            this.buttonMake.UseVisualStyleBackColor = true;
+            this.buttonMake.Click += new System.EventHandler(this.ButtonMake_Click);
             // 
             // dateTimePickerTo
             // 
-            dateTimePickerTo.Location = new Point(237, 7);
-            dateTimePickerTo.Margin = new Padding(4, 3, 4, 3);
-            dateTimePickerTo.Name = "dateTimePickerTo";
-            dateTimePickerTo.Size = new Size(163, 23);
-            dateTimePickerTo.TabIndex = 3;
+            this.dateTimePickerTo.Location = new System.Drawing.Point(271, 9);
+            this.dateTimePickerTo.Margin = new System.Windows.Forms.Padding(5, 4, 5, 4);
+            this.dateTimePickerTo.Name = "dateTimePickerTo";
+            this.dateTimePickerTo.Size = new System.Drawing.Size(186, 27);
+            this.dateTimePickerTo.TabIndex = 3;
             // 
             // labelTo
             // 
-            labelTo.AutoSize = true;
-            labelTo.Location = new Point(208, 10);
-            labelTo.Margin = new Padding(4, 0, 4, 0);
-            labelTo.Name = "labelTo";
-            labelTo.Size = new Size(21, 15);
-            labelTo.TabIndex = 2;
-            labelTo.Text = "по";
+            this.labelTo.AutoSize = true;
+            this.labelTo.Location = new System.Drawing.Point(238, 13);
+            this.labelTo.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
+            this.labelTo.Name = "labelTo";
+            this.labelTo.Size = new System.Drawing.Size(27, 20);
+            this.labelTo.TabIndex = 2;
+            this.labelTo.Text = "по";
             // 
             // dateTimePickerFrom
             // 
-            dateTimePickerFrom.Location = new Point(37, 7);
-            dateTimePickerFrom.Margin = new Padding(4, 3, 4, 3);
-            dateTimePickerFrom.Name = "dateTimePickerFrom";
-            dateTimePickerFrom.Size = new Size(163, 23);
-            dateTimePickerFrom.TabIndex = 1;
+            this.dateTimePickerFrom.Location = new System.Drawing.Point(42, 9);
+            this.dateTimePickerFrom.Margin = new System.Windows.Forms.Padding(5, 4, 5, 4);
+            this.dateTimePickerFrom.Name = "dateTimePickerFrom";
+            this.dateTimePickerFrom.Size = new System.Drawing.Size(186, 27);
+            this.dateTimePickerFrom.TabIndex = 1;
             // 
             // labelFrom
             // 
-            labelFrom.AutoSize = true;
-            labelFrom.Location = new Point(14, 10);
-            labelFrom.Margin = new Padding(4, 0, 4, 0);
-            labelFrom.Name = "labelFrom";
-            labelFrom.Size = new Size(15, 15);
-            labelFrom.TabIndex = 0;
-            labelFrom.Text = "С";
+            this.labelFrom.AutoSize = true;
+            this.labelFrom.Location = new System.Drawing.Point(16, 13);
+            this.labelFrom.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
+            this.labelFrom.Name = "labelFrom";
+            this.labelFrom.Size = new System.Drawing.Size(18, 20);
+            this.labelFrom.TabIndex = 0;
+            this.labelFrom.Text = "С";
             // 
             // FormReportOrders
             // 
-            AutoScaleDimensions = new SizeF(7F, 15F);
-            AutoScaleMode = AutoScaleMode.Font;
-            ClientSize = new Size(1006, 450);
-            Controls.Add(panel);
-            Name = "FormReportOrders";
-            Text = "Заказы";
-            panel.ResumeLayout(false);
-            panel.PerformLayout();
-            ResumeLayout(false);
+            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(1150, 600);
+            this.Controls.Add(this.panel);
+            this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+            this.Name = "FormReportOrders";
+            this.Text = "Заказы";
+            this.panel.ResumeLayout(false);
+            this.panel.PerformLayout();
+            this.ResumeLayout(false);
+
         }
 
         #endregion
diff --git a/IceCreamShop/IceCreamShop/FormReportProductComponents.cs b/IceCreamShop/IceCreamShop/FormReportProductComponents.cs
index 2213707..f64ca4a 100644
--- a/IceCreamShop/IceCreamShop/FormReportProductComponents.cs
+++ b/IceCreamShop/IceCreamShop/FormReportProductComponents.cs
@@ -29,14 +29,14 @@ namespace IceCreamShopView
         {
             try
             {
-                var dict = _logic.GetProductComponent();
+                var dict = _logic.GetIceCreamComponent();
                 if (dict != null)
                 {
                     dataGridView.Rows.Clear();
                     foreach (var elem in dict)
                     {
-                        dataGridView.Rows.Add(new object[] { elem.ComponentName, "", "" });
-                        foreach (var listElem in elem.IceCreams)
+                        dataGridView.Rows.Add(new object[] { elem.IceCreamName, "", "" });
+                        foreach (var listElem in elem.Components)
                         {
                             dataGridView.Rows.Add(new object[] { "", listElem.Item1, listElem.Item2 });
                         }
@@ -60,7 +60,7 @@ namespace IceCreamShopView
             {
                 try
                 {
-                    _logic.SaveProductComponentToExcelFile(new ReportBindingModel
+                    _logic.SaveIceCreamComponentToExcelFile(new ReportBindingModel
                     {
                         FileName = dialog.FileName
                     });
diff --git a/IceCreamShop/IceCreamShop/IceCreamShopView.csproj b/IceCreamShop/IceCreamShop/IceCreamShopView.csproj
index a6dd942..0faed3a 100644
--- a/IceCreamShop/IceCreamShop/IceCreamShopView.csproj
+++ b/IceCreamShop/IceCreamShop/IceCreamShopView.csproj
@@ -26,4 +26,10 @@
     <ProjectReference Include="..\IceCreamShopListImplement\IceCreamShopListImplement.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <None Update="ReportOrders.rdlc">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
+
 </Project>
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IIceCreamLogic.datasource b/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IIceCreamLogic.datasource
deleted file mode 100644
index b02228a..0000000
--- a/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IIceCreamLogic.datasource
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    This file is automatically generated by Visual Studio .Net. It is 
-    used to store generic object data source configuration information.  
-    Renaming the file extension or editing the content of this file may   
-    cause the file to be unrecognizable by the program.
--->
-<GenericObjectDataSource DisplayName="IIceCreamLogic" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
-   <TypeInfo>IceCreamShopContracts.BusinessLogicsContracts.IIceCreamLogic, IceCreamShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
-</GenericObjectDataSource>
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IOrderLogic.datasource b/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IOrderLogic.datasource
deleted file mode 100644
index b21c17d..0000000
--- a/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.BusinessLogicsContracts.IOrderLogic.datasource
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    This file is automatically generated by Visual Studio .Net. It is 
-    used to store generic object data source configuration information.  
-    Renaming the file extension or editing the content of this file may   
-    cause the file to be unrecognizable by the program.
--->
-<GenericObjectDataSource DisplayName="IOrderLogic" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
-   <TypeInfo>IceCreamShopContracts.BusinessLogicsContracts.IOrderLogic, IceCreamShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
-</GenericObjectDataSource>
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IComponentStorage.datasource b/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IComponentStorage.datasource
deleted file mode 100644
index 6f7d815..0000000
--- a/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IComponentStorage.datasource
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    This file is automatically generated by Visual Studio .Net. It is 
-    used to store generic object data source configuration information.  
-    Renaming the file extension or editing the content of this file may   
-    cause the file to be unrecognizable by the program.
--->
-<GenericObjectDataSource DisplayName="IComponentStorage" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
-   <TypeInfo>IceCreamShopContracts.StoragesContracts.IComponentStorage, IceCreamShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
-</GenericObjectDataSource>
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IIceCreamStorage.datasource b/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IIceCreamStorage.datasource
deleted file mode 100644
index a09a65c..0000000
--- a/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IIceCreamStorage.datasource
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    This file is automatically generated by Visual Studio .Net. It is 
-    used to store generic object data source configuration information.  
-    Renaming the file extension or editing the content of this file may   
-    cause the file to be unrecognizable by the program.
--->
-<GenericObjectDataSource DisplayName="IIceCreamStorage" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
-   <TypeInfo>IceCreamShopContracts.StoragesContracts.IIceCreamStorage, IceCreamShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
-</GenericObjectDataSource>
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IOrderStorage.datasource b/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IOrderStorage.datasource
deleted file mode 100644
index de2e7d8..0000000
--- a/IceCreamShop/IceCreamShop/Properties/DataSources/IceCreamShopContracts.StoragesContracts.IOrderStorage.datasource
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    This file is automatically generated by Visual Studio .Net. It is 
-    used to store generic object data source configuration information.  
-    Renaming the file extension or editing the content of this file may   
-    cause the file to be unrecognizable by the program.
--->
-<GenericObjectDataSource DisplayName="IOrderStorage" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
-   <TypeInfo>IceCreamShopContracts.StoragesContracts.IOrderStorage, IceCreamShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
-</GenericObjectDataSource>
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShop/ReportOrders.rdlc b/IceCreamShop/IceCreamShop/ReportOrders.rdlc
index 4096b12..1712a9f 100644
--- a/IceCreamShop/IceCreamShop/ReportOrders.rdlc
+++ b/IceCreamShop/IceCreamShop/ReportOrders.rdlc
@@ -2,18 +2,18 @@
 <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="AbstractShopContractsViewModels">
+    <DataSource Name="IceCreamShopContractsViewModels">
       <ConnectionProperties>
         <DataProvider>System.Data.DataSet</DataProvider>
         <ConnectString>/* Local Connection */</ConnectString>
       </ConnectionProperties>
-      <rd:DataSourceID>10791c83-cee8-4a38-bbd0-245fc17cefb3</rd:DataSourceID>
+      <rd:DataSourceID>47cb53f0-7dde-4717-ba03-866a0bc4f4dd</rd:DataSourceID>
     </DataSource>
   </DataSources>
   <DataSets>
     <DataSet Name="DataSetOrders">
       <Query>
-        <DataSourceName>AbstractShopContractsViewModels</DataSourceName>
+        <DataSourceName>IceCreamShopContractsViewModels</DataSourceName>
         <CommandText>/* Local Query */</CommandText>
       </Query>
       <Fields>
@@ -25,19 +25,23 @@
           <DataField>DateCreate</DataField>
           <rd:TypeName>System.DateTime</rd:TypeName>
         </Field>
-        <Field Name="ProductName">
-          <DataField>ProductName</DataField>
+        <Field Name="IceCreamName">
+          <DataField>IceCreamName</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>IceCreamShopDataModels.OrderStatus</rd:TypeName>
+        </Field>
       </Fields>
       <rd:DataSetInfo>
-        <rd:DataSetName>AbstractShopContracts.ViewModels</rd:DataSetName>
-        <rd:TableName>ReportOrdersViewModel</rd:TableName>
-        <rd:ObjectDataSourceType>AbstractShopContracts.ViewModels.ReportOrdersViewModel, AbstractShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</rd:ObjectDataSourceType>
+        <rd:DataSetName>IceCreamShopContracts.ViewModels</rd:DataSetName>
+        <rd:TableName>ReportOrderViewModel</rd:TableName>
+        <rd:ObjectDataSourceType>IceCreamShopContracts.ViewModels.ReportOrderViewModel, IceCreamShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</rd:ObjectDataSourceType>
       </rd:DataSetInfo>
     </DataSet>
   </DataSets>
@@ -127,6 +131,9 @@
                 <TablixColumn>
                   <Width>2.5cm</Width>
                 </TablixColumn>
+                <TablixColumn>
+                  <Width>2.5cm</Width>
+                </TablixColumn>
               </TablixColumns>
               <TablixRows>
                 <TablixRow>
@@ -228,6 +235,38 @@
                         </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">
@@ -336,13 +375,44 @@
                             <Paragraph>
                               <TextRuns>
                                 <TextRun>
-                                  <Value>=Fields!ProductName.Value</Value>
+                                  <Value>=Fields!IceCreamName.Value</Value>
                                   <Style />
                                 </TextRun>
                               </TextRuns>
                               <Style />
                             </Paragraph>
                           </Paragraphs>
+                          <rd:DefaultName>IceCreamName</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>
@@ -397,6 +467,7 @@
                 <TablixMember />
                 <TablixMember />
                 <TablixMember />
+                <TablixMember />
               </TablixMembers>
             </TablixColumnHierarchy>
             <TablixRowHierarchy>
@@ -413,7 +484,7 @@
             <Top>2.48391cm</Top>
             <Left>0.55245cm</Left>
             <Height>1.2cm</Height>
-            <Width>16.44755cm</Width>
+            <Width>18.94755cm</Width>
             <ZIndex>2</ZIndex>
             <Style>
               <Border>
@@ -513,7 +584,7 @@
   </ReportParameters>
   <ReportParametersLayout>
     <GridLayoutDefinition>
-      <NumberOfColumns>4</NumberOfColumns>
+      <NumberOfColumns>5</NumberOfColumns>
       <NumberOfRows>2</NumberOfRows>
       <CellDefinitions>
         <CellDefinition>
@@ -525,5 +596,5 @@
     </GridLayoutDefinition>
   </ReportParametersLayout>
   <rd:ReportUnitType>Cm</rd:ReportUnitType>
-  <rd:ReportID>2de0031a-4d17-449d-922d-d9fc54572312</rd:ReportID>
+  <rd:ReportID>1c0c12af-b9e8-41db-8d1f-26d1acbf91cc</rd:ReportID>
 </Report>
\ No newline at end of file
diff --git a/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IReportLogic.cs b/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IReportLogic.cs
index d9adac0..e49eb0c 100644
--- a/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IReportLogic.cs
+++ b/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IReportLogic.cs
@@ -14,7 +14,7 @@ namespace IceCreamShopContracts.BusinessLogicsContracts
         /// Получение списка компонент с указанием, в каких изделиях используются
         /// </summary>
         /// <returns></returns>
-        List<ReportIceCreamComponentViewModel> GetProductComponent();
+        List<ReportIceCreamComponentViewModel> GetIceCreamComponent();
 
         /// <summary>
         /// Получение списка заказов за определенный период
@@ -27,13 +27,13 @@ namespace IceCreamShopContracts.BusinessLogicsContracts
         /// Сохранение компонент в файл-Word
         /// </summary>
         /// <param name="model"></param>
-        void SaveComponentsToWordFile(ReportBindingModel model);
+        void SaveIceCreamsToWordFile(ReportBindingModel model);
 
         /// <summary>
         /// Сохранение компонент с указаеним продуктов в файл-Excel
         /// </summary>
         /// <param name="model"></param>
-        void SaveProductComponentToExcelFile(ReportBindingModel model);
+        void SaveIceCreamComponentToExcelFile(ReportBindingModel model);
 
         /// <summary>
         /// Сохранение заказов в файл-Pdf
diff --git a/IceCreamShop/IceCreamShopContracts/ViewModels/ReportIceCreamComponentViewModel.cs b/IceCreamShop/IceCreamShopContracts/ViewModels/ReportIceCreamComponentViewModel.cs
index d2dcb19..be15f94 100644
--- a/IceCreamShop/IceCreamShopContracts/ViewModels/ReportIceCreamComponentViewModel.cs
+++ b/IceCreamShop/IceCreamShopContracts/ViewModels/ReportIceCreamComponentViewModel.cs
@@ -8,10 +8,10 @@ namespace IceCreamShopContracts.ViewModels
 {
     public class ReportIceCreamComponentViewModel
     {
-        public string ComponentName { get; set; } = string.Empty;
+        public string IceCreamName { get; set; } = string.Empty;
 
         public int TotalCount { get; set; }
 
-        public List<(string IceCream, int Count)> IceCreams { get; set; } = new();
+        public List<(string IceCream, int Count)> Components { get; set; } = new();
     }
 }
diff --git a/IceCreamShop/IceCreamShopContracts/ViewModels/ReportOrdersViewModel.cs b/IceCreamShop/IceCreamShopContracts/ViewModels/ReportOrdersViewModel.cs
index 374e79d..43474c6 100644
--- a/IceCreamShop/IceCreamShopContracts/ViewModels/ReportOrdersViewModel.cs
+++ b/IceCreamShop/IceCreamShopContracts/ViewModels/ReportOrdersViewModel.cs
@@ -13,6 +13,7 @@ namespace IceCreamShopContracts.ViewModels
         public DateTime DateCreate { get; set; }
 
         public string IceCreamName { get; set; } = string.Empty;
+        public string OrderStatus { get; set; } = string.Empty ;
 
         public double Sum { get; set; }
     }
diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Implements/IceCreamStorage.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Implements/IceCreamStorage.cs
index a34bfe5..2782f13 100644
--- a/IceCreamShop/IceCreamShopDatabaseImplement/Implements/IceCreamStorage.cs
+++ b/IceCreamShop/IceCreamShopDatabaseImplement/Implements/IceCreamStorage.cs
@@ -4,6 +4,7 @@ using IceCreamShopContracts.ViewModels;
 using IceCreamShopContracts.BindingModels;
 using Microsoft.EntityFrameworkCore;
 using IceCreamShopDatabaseImplement.Models;
+using System.Reflection.Metadata;
 
 namespace IceCreamShopDatabaseImplement.Implements
 {
@@ -53,14 +54,29 @@ namespace IceCreamShopDatabaseImplement.Implements
         public IceCreamViewModel? Insert(IceCreamBindingModel model)
         {
             using var context = new IceCreamShopDatabase();
-            var newIceCream = IceCream.Create(context, model);
-            if (newIceCream == null)
+            using var transaction = context.Database.BeginTransaction();
             {
-                return null;
+                try
+                {
+                    var newIceCream = IceCream.Create(context, model);
+                    if (newIceCream == null)
+                    {
+                        transaction.Rollback();
+                        return null;
+                    }
+                    context.IceCreams.Add(newIceCream);
+
+                    context.SaveChanges();
+                    context.Database.CommitTransaction();
+
+                    return newIceCream.GetViewModel;
+                }
+                catch (Exception)
+                {
+                    transaction.Rollback();
+                    return null;
+                }
             }
-            context.IceCreams.Add(newIceCream);
-            context.SaveChanges();
-            return newIceCream.GetViewModel;
         }
 
         public IceCreamViewModel? Update(IceCreamBindingModel model)
diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Implements/OrderStorage.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Implements/OrderStorage.cs
index d0f72db..d99061c 100644
--- a/IceCreamShop/IceCreamShopDatabaseImplement/Implements/OrderStorage.cs
+++ b/IceCreamShop/IceCreamShopDatabaseImplement/Implements/OrderStorage.cs
@@ -3,6 +3,7 @@ using IceCreamShopContracts.SearchModels;
 using IceCreamShopContracts.StoragesContracts;
 using IceCreamShopContracts.ViewModels;
 using IceCreamShopDatabaseImplement.Models;
+using Microsoft.EntityFrameworkCore;
 
 namespace IceCreamShopDatabaseImplement.Implements
 {
@@ -33,19 +34,20 @@ namespace IceCreamShopDatabaseImplement.Implements
             }
 
             using var context = new IceCreamShopDatabase();
-
             return context.Orders.FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
         }
 
         public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
         {
+            if (model is null) return new();
+            using var context = new IceCreamShopDatabase();
+
             if (!model.Id.HasValue)
             {
-                return new();
+                return context.Orders.Where(x => x.DateCreate >= model.DateFrom && x.DateCreate <= model.DateTo).
+                    Select(x => x.GetViewModel).ToList();
             }
 
-            using var context = new IceCreamShopDatabase();
-
             return context.Orders.Where(x => x.Id == model.Id).Select(x => x.GetViewModel).ToList();
         }
 
@@ -70,7 +72,7 @@ namespace IceCreamShopDatabaseImplement.Implements
             context.Orders.Add(newOrder);
             context.SaveChanges();
 
-            return newOrder.GetViewModel;
+            return context.Orders.FirstOrDefault(x => x.Id == newOrder.Id)?.GetViewModel;
         }
 
         public OrderViewModel? Update(OrderBindingModel model)
@@ -87,7 +89,7 @@ namespace IceCreamShopDatabaseImplement.Implements
             order.Update(model);
             context.SaveChanges();
 
-            return order.GetViewModel;
+            return context.Orders.FirstOrDefault(x => x.Id == model.Id)?.GetViewModel;
         }
     }
 }
diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.Designer.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.Designer.cs
new file mode 100644
index 0000000..ddb4850
--- /dev/null
+++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.Designer.cs
@@ -0,0 +1,171 @@
+// <auto-generated />
+using System;
+using IceCreamShopDatabaseImplement;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace IceCreamShopDatabaseImplement.Migrations
+{
+    [DbContext(typeof(IceCreamShopDatabase))]
+    [Migration("20230313191542_NewMigration")]
+    partial class NewMigration
+    {
+        /// <inheritdoc />
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("ProductVersion", "7.0.3")
+                .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+            modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("ComponentName")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<double>("Cost")
+                        .HasColumnType("float");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Components");
+                });
+
+            modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("IceCreamName")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<double>("Price")
+                        .HasColumnType("float");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("IceCreams");
+                });
+
+            modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
+
+                    b.Property<int>("ComponentId")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Count")
+                        .HasColumnType("int");
+
+                    b.Property<int>("IceCreamId")
+                        .HasColumnType("int");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ComponentId");
+
+                    b.HasIndex("IceCreamId");
+
+                    b.ToTable("IceCreamComponents");
+                });
+
+            modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
+
+                    b.Property<int>("Count")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime>("DateCreate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<DateTime?>("DateImplement")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int>("IceCreamId")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Status")
+                        .HasColumnType("int");
+
+                    b.Property<double>("Sum")
+                        .HasColumnType("float");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("IceCreamId");
+
+                    b.ToTable("Orders");
+                });
+
+            modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b =>
+                {
+                    b.HasOne("IceCreamShopDatabaseImplement.Models.Component", "Component")
+                        .WithMany("IceCreamComponents")
+                        .HasForeignKey("ComponentId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream")
+                        .WithMany("Components")
+                        .HasForeignKey("IceCreamId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Component");
+
+                    b.Navigation("IceCream");
+                });
+
+            modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b =>
+                {
+                    b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream")
+                        .WithMany("Orders")
+                        .HasForeignKey("IceCreamId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("IceCream");
+                });
+
+            modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b =>
+                {
+                    b.Navigation("IceCreamComponents");
+                });
+
+            modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b =>
+                {
+                    b.Navigation("Components");
+
+                    b.Navigation("Orders");
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}
diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.cs
new file mode 100644
index 0000000..9a429e5
--- /dev/null
+++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.cs
@@ -0,0 +1,22 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace IceCreamShopDatabaseImplement.Migrations
+{
+    /// <inheritdoc />
+    public partial class NewMigration : Migration
+    {
+        /// <inheritdoc />
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+
+        }
+
+        /// <inheritdoc />
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+
+        }
+    }
+}
diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs
index df89698..f1d25eb 100644
--- a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs
+++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs
@@ -108,10 +108,6 @@ namespace IceCreamShopDatabaseImplement.Migrations
                     b.Property<int>("IceCreamId")
                         .HasColumnType("int");
 
-                    b.Property<string>("IceCreamName")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
                     b.Property<int>("Status")
                         .HasColumnType("int");
 
@@ -120,7 +116,7 @@ namespace IceCreamShopDatabaseImplement.Migrations
 
                     b.HasKey("Id");
 
-                    b.HasIndex("DocumentId");
+                    b.HasIndex("IceCreamId");
 
                     b.ToTable("Orders");
                 });
@@ -144,6 +140,17 @@ namespace IceCreamShopDatabaseImplement.Migrations
                     b.Navigation("IceCream");
                 });
 
+            modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b =>
+                {
+                    b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream")
+                        .WithMany("Orders")
+                        .HasForeignKey("IceCreamId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("IceCream");
+                });
+
             modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b =>
                 {
                     b.Navigation("IceCreamComponents");
diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Models/Component.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Component.cs
index ea5c094..40c83db 100644
--- a/IceCreamShop/IceCreamShopDatabaseImplement/Models/Component.cs
+++ b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Component.cs
@@ -20,7 +20,7 @@ namespace IceCreamShopDatabaseImplement.Models
         [ForeignKey("ComponentId")]
         public virtual List<IceCreamComponent> IceCreamComponents { get; set; } = new();
 
-        public static Component? Create(ComponentBindingModel model)
+        public static Component? Create(ComponentBindingModel? model)
         {
             if (model == null)
             {
@@ -33,16 +33,8 @@ namespace IceCreamShopDatabaseImplement.Models
                 Cost = model.Cost
             };
         }
-        public static Component Create(ComponentViewModel model)
-        {
-            return new Component
-            {
-                Id = model.Id,
-                ComponentName = model.ComponentName,
-                Cost = model.Cost
-            };
-        }
-        public void Update(ComponentBindingModel model)
+
+        public void Update(ComponentBindingModel? model)
         {
             if (model == null)
             {
diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Models/IceCream.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Models/IceCream.cs
index 45b4267..7993d94 100644
--- a/IceCreamShop/IceCreamShopDatabaseImplement/Models/IceCream.cs
+++ b/IceCreamShop/IceCreamShopDatabaseImplement/Models/IceCream.cs
@@ -38,7 +38,7 @@ namespace IceCreamShopDatabaseImplement.Models
         [ForeignKey("IceCreamId")]
         public virtual List<Order> Orders { get; set; } = new();
 
-        public static IceCream Create(IceCreamShopDatabase context, IceCreamBindingModel model)
+        public static IceCream? Create(IceCreamShopDatabase context, IceCreamBindingModel model)
         {
             return new IceCream()
             {
diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Models/Order.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Order.cs
index 9a28952..48dbc8c 100644
--- a/IceCreamShop/IceCreamShopDatabaseImplement/Models/Order.cs
+++ b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Order.cs
@@ -50,6 +50,7 @@ namespace IceCreamShopDatabaseImplement.Models
                 return;
             }
             Status = model.Status;
+            DateImplement = model.DateImplement;
         }
 
         public OrderViewModel GetViewModel => new()
diff --git a/IceCreamShop/IceCreamShopFileImplement/Implements/OrderStorage.cs b/IceCreamShop/IceCreamShopFileImplement/Implements/OrderStorage.cs
index e1cf694..bce81ba 100644
--- a/IceCreamShop/IceCreamShopFileImplement/Implements/OrderStorage.cs
+++ b/IceCreamShop/IceCreamShopFileImplement/Implements/OrderStorage.cs
@@ -26,20 +26,19 @@ namespace IceCreamShopFileImplement.Implements
             {
                 return null;
             }
-            return source.Orders
-            .FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
+            return GetViewModel(source.Orders.FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id)));
         }
 
         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.Id == model.Id)
-                .Select(x => x.GetViewModel)
-                .ToList();
+            .Where(x => x.Id == model.Id || model.DateFrom <= x.DateCreate && x.DateCreate <= model.DateTo)
+            .Select(x => x.GetViewModel)
+            .ToList();
         }
 
         public List<OrderViewModel> GetFullList()
@@ -69,7 +68,7 @@ namespace IceCreamShopFileImplement.Implements
             }
             order.Update(model);
             source.SaveOrders();
-            return order.GetViewModel;
+            return GetViewModel(order);
         }
         public OrderViewModel? Delete(OrderBindingModel model)
         {
@@ -80,7 +79,18 @@ namespace IceCreamShopFileImplement.Implements
             }
             order.Update(model);
             source.SaveOrders();
-            return order.GetViewModel;
+            return GetViewModel(order);
+        }
+
+        private OrderViewModel GetViewModel(Order order)
+        {
+            var viewModel = order.GetViewModel;
+            var icecream = source.IceCreams.FirstOrDefault(x => x.Id == order.IceCreamId);
+            if (icecream != null)
+            {
+                viewModel.IceCreamName = icecream.IceCreamName;
+            }
+            return viewModel;
         }
     }
 }
diff --git a/IceCreamShop/IceCreamShopFileImplement/Models/Order.cs b/IceCreamShop/IceCreamShopFileImplement/Models/Order.cs
index c70e982..4c21b3d 100644
--- a/IceCreamShop/IceCreamShopFileImplement/Models/Order.cs
+++ b/IceCreamShop/IceCreamShopFileImplement/Models/Order.cs
@@ -16,7 +16,6 @@ namespace IceCreamShopFileImplement.Models
     {
         public int Id { get; private set; }
         public int IceCreamId { get; private set; }
-        public string IceCreamName { get; private set; } = string.Empty;
 
         public int Count { get; private set; }
 
@@ -37,7 +36,6 @@ namespace IceCreamShopFileImplement.Models
             {
                 Id = model.Id,
                 IceCreamId = model.IceCreamId,
-                IceCreamName = model.IceCreamName,
                 Count = model.Count,
                 Sum = model.Sum,
                 Status = model.Status,
@@ -55,7 +53,6 @@ namespace IceCreamShopFileImplement.Models
             {
                 Id = Convert.ToInt32(element.Attribute("Id")!.Value),
                 IceCreamId = Convert.ToInt32(element.Element("IceCreamId")!.Value),
-                IceCreamName = element.Element("IceCreamName")!.Value,
                 Sum = Convert.ToDouble(element.Element("Sum")!.Value),
                 Count = Convert.ToInt32(element.Element("Count")!.Value),
                 Status = (OrderStatus)Enum.Parse(typeof(OrderStatus), element.Element("Status")!.Value),
@@ -69,20 +66,13 @@ namespace IceCreamShopFileImplement.Models
             {
                 return;
             }
-            Id = model.Id;
-            IceCreamId = model.IceCreamId;
-            IceCreamName = model.IceCreamName;
-            Count = model.Count;
-            Sum = model.Sum;
             Status = model.Status;
-            DateCreate = model.DateCreate;
             DateImplement = model.DateImplement;
         }
         public OrderViewModel GetViewModel => new()
         {
             Id = Id,
             IceCreamId = IceCreamId,
-            IceCreamName = IceCreamName,
             Count = Count,
             Sum = Sum,
             Status = Status,
@@ -93,7 +83,6 @@ namespace IceCreamShopFileImplement.Models
                 "Order",
                  new XAttribute("Id", Id),
                  new XElement("IceCreamId", IceCreamId.ToString()),
-                 new XElement("IceCreamName", IceCreamName),
                  new XElement("Count", Count.ToString()),
                  new XElement("Sum", Sum.ToString()),
                  new XElement("Status", Status.ToString()),
diff --git a/IceCreamShop/IceCreamShopListImplement/Implements/OrderStorage.cs b/IceCreamShop/IceCreamShopListImplement/Implements/OrderStorage.cs
index db75f3f..50b3dd6 100644
--- a/IceCreamShop/IceCreamShopListImplement/Implements/OrderStorage.cs
+++ b/IceCreamShop/IceCreamShopListImplement/Implements/OrderStorage.cs
@@ -27,7 +27,7 @@ namespace IceCreamShopListImplement.Implements
                 {
                     var element = _source.Orders[i];
                     _source.Orders.RemoveAt(i);
-                    return element.GetViewModel;
+                    return GetViewModel(element);
                 }
             }
             return null;
@@ -39,7 +39,7 @@ namespace IceCreamShopListImplement.Implements
             foreach (var order in _source.Orders)
             {
                 if (order.Id == model.Id)
-                    return order.GetViewModel;
+                    return GetViewModel(order);
             }
             return null;
         }
@@ -51,8 +51,8 @@ namespace IceCreamShopListImplement.Implements
 
             foreach (var order in _source.Orders)
             {
-                if (order.Id == model.Id)
-                    result.Add(order.GetViewModel);
+                if (order.Id == model.Id || model.DateFrom <= order.DateCreate && order.DateCreate <= model.DateTo)
+                    result.Add(GetViewModel(order));
             }
             return result;
         }
@@ -62,7 +62,7 @@ namespace IceCreamShopListImplement.Implements
             var result = new List<OrderViewModel>();
             foreach (var order in _source.Orders)
             {
-                result.Add(order.GetViewModel);
+                result.Add(GetViewModel(order));
             }
             return result;
         }
@@ -83,7 +83,7 @@ namespace IceCreamShopListImplement.Implements
                 return null;
             }
             _source.Orders.Add(newOrder);
-            return newOrder.GetViewModel;
+            return GetViewModel(newOrder);
         }
 
         public OrderViewModel? Update(OrderBindingModel model)
@@ -93,10 +93,24 @@ namespace IceCreamShopListImplement.Implements
                 if (order.Id == model.Id)
                 {
                     order.Update(model);
-                    return order.GetViewModel;
+                    return GetViewModel(order);
                 }
             }
             return null;
         }
+
+        private OrderViewModel GetViewModel(Order order)
+        {
+            var viewModel = order.GetViewModel;
+            foreach (var icecream in _source.iceCreams)
+            {
+                if (icecream.Id == order.IceCreamId)
+                {
+                    viewModel.IceCreamName = icecream.IceCreamName;
+                    break;
+                }
+            }
+            return viewModel;
+        }
     }
 }
diff --git a/IceCreamShop/IceCreamShopListImplement/Models/Order.cs b/IceCreamShop/IceCreamShopListImplement/Models/Order.cs
index 28e3ad5..cb2834e 100644
--- a/IceCreamShop/IceCreamShopListImplement/Models/Order.cs
+++ b/IceCreamShop/IceCreamShopListImplement/Models/Order.cs
@@ -18,8 +18,6 @@ namespace IceCreamShopListImplement.Models
 
         public int IceCreamId { get; private set; }
 
-        public string IceCreamName { get; private set; } = string.Empty;
-
         public int Count { get; private set; }
 
         public double Sum { get; private set; }
@@ -37,7 +35,6 @@ namespace IceCreamShopListImplement.Models
             {
                 Id = model.Id,
                 IceCreamId = model.IceCreamId,
-                IceCreamName = model.IceCreamName,
                 Count = model.Count,
                 Sum = model.Sum,
                 Status = model.Status,
@@ -49,13 +46,7 @@ namespace IceCreamShopListImplement.Models
         public void Update(OrderBindingModel? model)
         {
             if (model == null) return;
-            Id = model.Id;
-            IceCreamId = model.IceCreamId;
-            IceCreamName = model.IceCreamName;
-            Count = model.Count;
-            Sum = model.Sum;
             Status = model.Status;
-            DateCreate = model.DateCreate;
             DateImplement = model.DateImplement;
         }
 
@@ -63,7 +54,6 @@ namespace IceCreamShopListImplement.Models
         {
             Id = Id,
             IceCreamId = IceCreamId,
-            IceCreamName = IceCreamName,
             Count = Count,
             Sum = Sum,
             Status = Status,