diff --git a/University/UniversityBusinessLogic/OfficePackage/AbstractSaveToWordStorekeeper.cs b/University/UniversityBusinessLogic/OfficePackage/AbstractSaveToWordStorekeeper.cs
new file mode 100644
index 0000000..d3d74f0
--- /dev/null
+++ b/University/UniversityBusinessLogic/OfficePackage/AbstractSaveToWordStorekeeper.cs
@@ -0,0 +1,84 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using UniversityBusinessLogic.OfficePackage.HelperModels;
+using UniversityBusinessLogics.OfficePackage.HelperEnums;
+
+namespace UniversityBusinessLogic.OfficePackage
+{
+ public abstract class AbstractSaveToWordStorekeeper
+ {
+ public void CreateDoc(WordInfoStorekeeper 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 discipline in info.Disciplines)
+ {
+ CreateParagraph(new WordParagraph
+ {
+ Texts = new List<(string, WordTextProperties)>
+ {
+ ("Teacher №" + discipline.TeacherId.ToString() + " - " + discipline.TeacherName, new WordTextProperties {Size = "24", Bold=true})
+ },
+ TextProperties = new WordTextProperties
+ {
+ Size = "24",
+ JustificationType = WordJustificationType.Both
+ }
+ });
+ foreach (var assembly in discipline.StudentDisciplines)
+ {
+ /*if (!string.IsNullOrEmpty(assembly.AssemblyName) && !string.IsNullOrEmpty(assembly.AssemblyCategory) && assembly.AssemblyPrice != 0)
+ {
+ CreateParagraph(new WordParagraph
+ {
+ Texts = new List<(string, WordTextProperties)> {
+ (assembly.AssemblyName + " - ", new WordTextProperties { Size = "24" }),
+ (assembly.AssemblyCategory + " - ", new WordTextProperties { Size = "24" }),
+ (assembly.AssemblyPrice.ToString(), new WordTextProperties { Size = "24" })
+ },
+ TextProperties = new WordTextProperties
+ {
+ Size = "24",
+ JustificationType = WordJustificationType.Both
+ }
+ });
+ }*/
+
+ }
+ }
+ SaveWord(info);
+ }
+
+ ///
+ /// Создание doc-файла
+ ///
+ ///
+ protected abstract void CreateWord(WordInfoStorekeeper info);
+
+ ///
+ /// Создание абзаца с текстом
+ ///
+ ///
+ ///
+ protected abstract void CreateParagraph(WordParagraph paragraph);
+
+ ///
+ /// Сохранение файла
+ ///
+ ///
+ protected abstract void SaveWord(WordInfoStorekeeper info);
+ }
+}
diff --git a/University/UniversityBusinessLogic/OfficePackage/HelperModels/WordInfoStorekeeper.cs b/University/UniversityBusinessLogic/OfficePackage/HelperModels/WordInfoStorekeeper.cs
new file mode 100644
index 0000000..f40ff67
--- /dev/null
+++ b/University/UniversityBusinessLogic/OfficePackage/HelperModels/WordInfoStorekeeper.cs
@@ -0,0 +1,13 @@
+using UniversityContracts.ViewModels;
+
+namespace UniversityBusinessLogic.OfficePackage.HelperModels
+{
+ public class WordInfoStorekeeper
+ {
+ public string? FileName { get; set; }
+ public Stream? Stream { get; set; }
+ public string Title { get; set; } = string.Empty;
+ public List