Ver Fonte

First commit

zzzombine há 2 semanas atrás
commit
9b0595939f
100 ficheiros alterados com 4872 adições e 0 exclusões
  1. 116 0
      README.md
  2. BIN
      WpfApp1/.vs/ProjectEvaluation/wpfapp1.metadata.v9.bin
  3. BIN
      WpfApp1/.vs/ProjectEvaluation/wpfapp1.projects.v9.bin
  4. BIN
      WpfApp1/.vs/ProjectEvaluation/wpfapp1.strings.v9.bin
  5. BIN
      WpfApp1/.vs/WpfApp1/DesignTimeBuild/.dtbcache.v2
  6. BIN
      WpfApp1/.vs/WpfApp1/FileContentIndex/0fa2fd23-41c0-4927-92ba-5a4b954e6e92.vsidx
  7. BIN
      WpfApp1/.vs/WpfApp1/FileContentIndex/25c76ec3-13af-42b9-8540-9e3d73f53f59.vsidx
  8. BIN
      WpfApp1/.vs/WpfApp1/FileContentIndex/49c4fbab-3059-4940-977f-95e323e1f581.vsidx
  9. BIN
      WpfApp1/.vs/WpfApp1/FileContentIndex/5b694a0e-249e-42ae-b6ab-8c08e549fb8a.vsidx
  10. BIN
      WpfApp1/.vs/WpfApp1/FileContentIndex/e52bd2b3-9547-4d59-84b3-67752011d864.vsidx
  11. BIN
      WpfApp1/.vs/WpfApp1/v17/.futdcache.v2
  12. BIN
      WpfApp1/.vs/WpfApp1/v17/.suo
  13. 78 0
      WpfApp1/.vs/WpfApp1/v17/DocumentLayout.backup.json
  14. 78 0
      WpfApp1/.vs/WpfApp1/v17/DocumentLayout.json
  15. BIN
      WpfApp1/ProcessingDetailsInstaller/Debug/ProcessingDetailsInstaller.msi
  16. BIN
      WpfApp1/ProcessingDetailsInstaller/Debug/setup.exe
  17. 1176 0
      WpfApp1/ProcessingDetailsInstaller/ProcessingDetailsInstaller.vdproj
  18. 25 0
      WpfApp1/WpfApp1.sln
  19. 9 0
      WpfApp1/WpfApp1/App.xaml
  20. 14 0
      WpfApp1/WpfApp1/App.xaml.cs
  21. 10 0
      WpfApp1/WpfApp1/AssemblyInfo.cs
  22. 79 0
      WpfApp1/WpfApp1/LoginWindow.xaml
  23. 117 0
      WpfApp1/WpfApp1/LoginWindow.xaml.cs
  24. 28 0
      WpfApp1/WpfApp1/MainWindow.xaml
  25. 32 0
      WpfApp1/WpfApp1/MainWindow.xaml.cs
  26. 13 0
      WpfApp1/WpfApp1/Properties/PublishProfiles/FolderProfile.pubxml
  27. 8 0
      WpfApp1/WpfApp1/Properties/PublishProfiles/FolderProfile.pubxml.user
  28. 165 0
      WpfApp1/WpfApp1/Views/DictionariesView.xaml
  29. 108 0
      WpfApp1/WpfApp1/Views/DictionariesView.xaml.cs
  30. 166 0
      WpfApp1/WpfApp1/Views/ProductsView.xaml
  31. 347 0
      WpfApp1/WpfApp1/Views/ProductsView.xaml.cs
  32. 139 0
      WpfApp1/WpfApp1/Views/SearchProductsView.xaml
  33. 117 0
      WpfApp1/WpfApp1/Views/SearchProductsView.xaml.cs
  34. 15 0
      WpfApp1/WpfApp1/WpfApp1.csproj
  35. 20 0
      WpfApp1/WpfApp1/WpfApp1.csproj.user
  36. BIN
      WpfApp1/WpfApp1/bin/Debug/net8.0-windows/Microsoft.Extensions.DependencyInjection.Abstractions.dll
  37. BIN
      WpfApp1/WpfApp1/bin/Debug/net8.0-windows/Microsoft.Extensions.Logging.Abstractions.dll
  38. BIN
      WpfApp1/WpfApp1/bin/Debug/net8.0-windows/Npgsql.dll
  39. BIN
      WpfApp1/WpfApp1/bin/Debug/net8.0-windows/System.Diagnostics.DiagnosticSource.dll
  40. 93 0
      WpfApp1/WpfApp1/bin/Debug/net8.0-windows/WpfApp1.deps.json
  41. BIN
      WpfApp1/WpfApp1/bin/Debug/net8.0-windows/WpfApp1.dll
  42. BIN
      WpfApp1/WpfApp1/bin/Debug/net8.0-windows/WpfApp1.exe
  43. BIN
      WpfApp1/WpfApp1/bin/Debug/net8.0-windows/WpfApp1.pdb
  44. 19 0
      WpfApp1/WpfApp1/bin/Debug/net8.0-windows/WpfApp1.runtimeconfig.json
  45. BIN
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/Microsoft.Extensions.DependencyInjection.Abstractions.dll
  46. BIN
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/Microsoft.Extensions.Logging.Abstractions.dll
  47. BIN
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/Npgsql.dll
  48. BIN
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/System.Diagnostics.DiagnosticSource.dll
  49. 93 0
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/WpfApp1.deps.json
  50. BIN
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/WpfApp1.dll
  51. BIN
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/WpfApp1.exe
  52. BIN
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/WpfApp1.pdb
  53. 20 0
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/WpfApp1.runtimeconfig.json
  54. BIN
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/Microsoft.Extensions.DependencyInjection.Abstractions.dll
  55. BIN
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/Microsoft.Extensions.Logging.Abstractions.dll
  56. BIN
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/Npgsql.dll
  57. BIN
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/System.Diagnostics.DiagnosticSource.dll
  58. 93 0
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/WpfApp1.deps.json
  59. BIN
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/WpfApp1.dll
  60. BIN
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/WpfApp1.exe
  61. BIN
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/WpfApp1.pdb
  62. 20 0
      WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/WpfApp1.runtimeconfig.json
  63. 4 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
  64. 71 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/App.g.cs
  65. 71 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/App.g.i.cs
  66. 2 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/GeneratedInternalTypeHelper.g.cs
  67. 62 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/GeneratedInternalTypeHelper.g.i.cs
  68. BIN
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/LoginWindow.baml
  69. 123 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/LoginWindow.g.cs
  70. 123 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/LoginWindow.g.i.cs
  71. BIN
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/MainWindow.baml
  72. 113 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/MainWindow.g.cs
  73. 113 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/MainWindow.g.i.cs
  74. BIN
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/DictionariesView.baml
  75. 101 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/DictionariesView.g.cs
  76. 101 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/DictionariesView.g.i.cs
  77. BIN
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/ProductsView.baml
  78. 169 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/ProductsView.g.cs
  79. 169 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/ProductsView.g.i.cs
  80. BIN
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/SearchProductsView.baml
  81. 118 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/SearchProductsView.g.cs
  82. 118 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/SearchProductsView.g.i.cs
  83. 25 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.AssemblyInfo.cs
  84. 1 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.AssemblyInfoInputs.cache
  85. 16 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.GeneratedMSBuildEditorConfig.editorconfig
  86. 6 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.GlobalUsings.g.cs
  87. BIN
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.assets.cache
  88. BIN
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.csproj.AssemblyReference.cache
  89. 0 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.csproj.BuildWithSkipAnalyzers
  90. 1 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.csproj.CoreCompileInputs.cache
  91. 35 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.csproj.FileListAbsolute.txt
  92. 0 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.csproj.Up2Date
  93. 80 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.designer.deps.json
  94. 25 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.designer.runtimeconfig.json
  95. BIN
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.dll
  96. BIN
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.g.resources
  97. 1 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.genruntimeconfig.cache
  98. BIN
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.pdb
  99. 25 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1_0buaima1_wpftmp.AssemblyInfo.cs
  100. 1 0
      WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1_0buaima1_wpftmp.AssemblyInfoInputs.cache

+ 116 - 0
README.md

@@ -0,0 +1,116 @@
+# Система обработки деталей
+
+Приложение предназначено для работы с базой данных предприятия, связанной с обработкой деталей и изделиями, в состав которых они входят. Система позволяет просматривать сведения о деталях, изделиях и методах обработки, а также выполнять операции по управлению данными через удобный графический интерфейс.
+
+# Введение
+
+Основные возможности программы:
+
+* просмотр списка изделий;
+* поиск изделий по выбранной детали;
+* просмотр информации о деталях и методах обработки;
+* добавление новых изделий;
+* изменение существующих записей;
+* удаление данных из базы;
+* разграничение прав доступа пользователей;
+* работа с базой данных PostgreSQL через графический интерфейс WPF.
+
+# Назначение и условия применения
+
+Программа предназначена для автоматизации хранения и обработки информации о деталях, изделиях и методах их обработки.
+
+Система может использоваться:
+
+* на производственных предприятиях;
+* в учебных целях при изучении баз данных и клиент-серверных приложений;
+* для демонстрации работы информационной системы с использованием PostgreSQL и WPF.
+
+Условия применения:
+
+* операционная система Windows 10/11;
+* установленная СУБД PostgreSQL;
+* наличие настроенной базы данных;
+* наличие прав доступа к серверу базы данных;
+* установленная платформа .NET Desktop Runtime.
+
+# Установка
+
+1. Скачайте архив с программой и установщиком.
+
+   * [ ] Получен файл установщика.
+   * [ ] Получены сопутствующие файлы приложения.
+
+2. Запустите файл установки.
+
+   * [ ] Откройте файл `Setup.exe`.
+   * [ ] Подтвердите запуск программы установки.
+
+3. Выполните установку приложения.
+
+   * [ ] Ознакомьтесь с параметрами установки.
+   * [ ] Дождитесь завершения процесса.
+
+4. Завершите установку.
+
+   * [ ] Нажмите кнопку «Готово».
+   * [ ] Убедитесь, что ярлык приложения появился на рабочем столе.
+
+5. Подготовьте подключение к базе данных.
+
+   * [ ] Создайте базу данных PostgreSQL.
+   * [ ] Выполните SQL-скрипт создания таблиц.
+
+6. Запустите программу.
+
+   * [ ] Выполните вход под учетной записью пользователя или администратора программы.
+   * [ ] Проверьте корректность отображения данных.
+
+# Описание операций
+
+## Авторизация
+
+Пользователь вводит логин и пароль для подключения к базе данных. После успешной проверки открывается главное окно программы.
+
+## Поиск изделий по детали
+
+1. Выберите деталь из списка.
+2. Нажмите кнопку поиска.
+3. Система отобразит изделия, в состав которых входит выбранная деталь.
+
+## Добавление изделия
+
+1. Откройте раздел управления изделиями.
+2. Введите наименование изделия.
+3. Нажмите кнопку добавления.
+4. Новая запись будет сохранена в базе данных.
+
+## Изменение изделия
+
+1. Выберите запись из таблицы.
+2. Измените необходимые данные.
+3. Нажмите кнопку сохранения изменений.
+
+## Удаление изделия
+
+1. Выберите запись из списка.
+2. Нажмите кнопку удаления.
+3. Подтвердите выполнение операции.
+
+## Просмотр справочников
+
+Пользователь может просматривать сведения о деталях и методах обработки в отдельных таблицах приложения.
+
+# Термины и сокращения
+
+| Термин          | Описание                                                                      |
+| --------------- | ----------------------------------------------------------------------------- |
+| БД              | База данных                                                                   |
+| СУБД            | Система управления базами данных                                              |
+| PostgreSQL      | Реляционная система управления базами данных                                  |
+| WPF             | Windows Presentation Foundation — технология создания графических интерфейсов |
+| Деталь          | Элемент изделия, участвующий в производственном процессе                      |
+| Изделие         | Конечный объект, состоящий из одной или нескольких деталей                    |
+| Метод обработки | Технологический способ изготовления или обработки детали                      |
+| CRUD            | Операции создания, чтения, изменения и удаления данных                        |
+| SQL             | Язык структурированных запросов                                               |
+| GUI             | Графический пользовательский интерфейс                                        |

BIN
WpfApp1/.vs/ProjectEvaluation/wpfapp1.metadata.v9.bin


BIN
WpfApp1/.vs/ProjectEvaluation/wpfapp1.projects.v9.bin


BIN
WpfApp1/.vs/ProjectEvaluation/wpfapp1.strings.v9.bin


BIN
WpfApp1/.vs/WpfApp1/DesignTimeBuild/.dtbcache.v2


BIN
WpfApp1/.vs/WpfApp1/FileContentIndex/0fa2fd23-41c0-4927-92ba-5a4b954e6e92.vsidx


BIN
WpfApp1/.vs/WpfApp1/FileContentIndex/25c76ec3-13af-42b9-8540-9e3d73f53f59.vsidx


BIN
WpfApp1/.vs/WpfApp1/FileContentIndex/49c4fbab-3059-4940-977f-95e323e1f581.vsidx


BIN
WpfApp1/.vs/WpfApp1/FileContentIndex/5b694a0e-249e-42ae-b6ab-8c08e549fb8a.vsidx


BIN
WpfApp1/.vs/WpfApp1/FileContentIndex/e52bd2b3-9547-4d59-84b3-67752011d864.vsidx


BIN
WpfApp1/.vs/WpfApp1/v17/.futdcache.v2


BIN
WpfApp1/.vs/WpfApp1/v17/.suo


+ 78 - 0
WpfApp1/.vs/WpfApp1/v17/DocumentLayout.backup.json

@@ -0,0 +1,78 @@
+{
+  "Version": 1,
+  "WorkspaceRootPath": "C:\\Users\\Ilya\\Documents\\VS_PRACTICE_2026\\WpfApp1\\",
+  "Documents": [
+    {
+      "AbsoluteMoniker": "D:0:0:{06899B2F-E61B-4122-9B44-A05797508BD0}|WpfApp1\\WpfApp1.csproj|c:\\users\\ilya\\documents\\vs_practice_2026\\wpfapp1\\wpfapp1\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{06899B2F-E61B-4122-9B44-A05797508BD0}|WpfApp1\\WpfApp1.csproj|solutionrelative:wpfapp1\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    }
+  ],
+  "DocumentGroupContainers": [
+    {
+      "Orientation": 1,
+      "VerticalTabListWidth": 256,
+      "DocumentGroups": [
+        {
+          "DockedHeight": 222,
+          "SelectedChildIndex": 8,
+          "Children": [
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{eefa5220-e298-11d0-8f78-00a0c9110057}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{3ae79031-e1bc-11d0-8f78-00a0c9110057}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{b1e99781-ab81-11d0-b683-00aa00a3ee26}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{34e76e81-ee4a-11d0-ae2e-00a0c90fffc3}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:1:0:{e8034f19-ab72-4f06-83fd-f6832b41aa63}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:128:0:{1fc202d4-d401-403c-9834-5b218574bb67}"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "MainWindow.xaml",
+              "DocumentMoniker": "C:\\Users\\Ilya\\Documents\\VS_PRACTICE_2026\\WpfApp1\\WpfApp1\\MainWindow.xaml",
+              "RelativeDocumentMoniker": "WpfApp1\\MainWindow.xaml",
+              "ToolTip": "C:\\Users\\Ilya\\Documents\\VS_PRACTICE_2026\\WpfApp1\\WpfApp1\\MainWindow.xaml",
+              "RelativeToolTip": "WpfApp1\\MainWindow.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2026-06-02T10:05:20.092Z",
+              "EditorCaption": ""
+            }
+          ]
+        },
+        {
+          "DockedHeight": 178,
+          "SelectedChildIndex": -1,
+          "Children": [
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{e1b7d1f8-9b3c-49b1-8f4f-bfc63a88835d}"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}

+ 78 - 0
WpfApp1/.vs/WpfApp1/v17/DocumentLayout.json

@@ -0,0 +1,78 @@
+{
+  "Version": 1,
+  "WorkspaceRootPath": "C:\\Users\\Ilya\\Documents\\VS_PRACTICE_2026\\WpfApp1\\",
+  "Documents": [
+    {
+      "AbsoluteMoniker": "D:0:0:{06899B2F-E61B-4122-9B44-A05797508BD0}|WpfApp1\\WpfApp1.csproj|c:\\users\\ilya\\documents\\vs_practice_2026\\wpfapp1\\wpfapp1\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{06899B2F-E61B-4122-9B44-A05797508BD0}|WpfApp1\\WpfApp1.csproj|solutionrelative:wpfapp1\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    }
+  ],
+  "DocumentGroupContainers": [
+    {
+      "Orientation": 1,
+      "VerticalTabListWidth": 256,
+      "DocumentGroups": [
+        {
+          "DockedHeight": 222,
+          "SelectedChildIndex": 8,
+          "Children": [
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{eefa5220-e298-11d0-8f78-00a0c9110057}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{3ae79031-e1bc-11d0-8f78-00a0c9110057}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{b1e99781-ab81-11d0-b683-00aa00a3ee26}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{34e76e81-ee4a-11d0-ae2e-00a0c90fffc3}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:1:0:{e8034f19-ab72-4f06-83fd-f6832b41aa63}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:128:0:{1fc202d4-d401-403c-9834-5b218574bb67}"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "MainWindow.xaml",
+              "DocumentMoniker": "C:\\Users\\Ilya\\Documents\\VS_PRACTICE_2026\\WpfApp1\\WpfApp1\\MainWindow.xaml",
+              "RelativeDocumentMoniker": "WpfApp1\\MainWindow.xaml",
+              "ToolTip": "C:\\Users\\Ilya\\Documents\\VS_PRACTICE_2026\\WpfApp1\\WpfApp1\\MainWindow.xaml",
+              "RelativeToolTip": "WpfApp1\\MainWindow.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2026-06-02T10:05:20.092Z",
+              "EditorCaption": ""
+            }
+          ]
+        },
+        {
+          "DockedHeight": 178,
+          "SelectedChildIndex": -1,
+          "Children": [
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{e1b7d1f8-9b3c-49b1-8f4f-bfc63a88835d}"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}

BIN
WpfApp1/ProcessingDetailsInstaller/Debug/ProcessingDetailsInstaller.msi


BIN
WpfApp1/ProcessingDetailsInstaller/Debug/setup.exe


+ 1176 - 0
WpfApp1/ProcessingDetailsInstaller/ProcessingDetailsInstaller.vdproj

@@ -0,0 +1,1176 @@
+"DeployProject"
+{
+"VSVersion" = "3:800"
+"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"
+"IsWebType" = "8:FALSE"
+"ProjectName" = "8:ProcessingDetailsInstaller"
+"LanguageId" = "3:1049"
+"CodePage" = "3:1251"
+"UILanguageId" = "3:1049"
+"SccProjectName" = "8:"
+"SccLocalPath" = "8:"
+"SccAuxPath" = "8:"
+"SccProvider" = "8:"
+    "Hierarchy"
+    {
+        "Entry"
+        {
+        "MsmKey" = "8:_05787923A382497888226826DE736AD7"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_21929D9B1DB651512121DCAB017A31E4"
+        "OwnerKey" = "8:_9E1D44F4DD154B16935D45019CA89DC5"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_21929D9B1DB651512121DCAB017A31E4"
+        "OwnerKey" = "8:_E159BF08FE51478A57DBFA2204286A3A"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_50E7C142A2474FEFBCC9FCE5E3942F6F"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_58F365E60728D267BB0D61F1733B979B"
+        "OwnerKey" = "8:_50E7C142A2474FEFBCC9FCE5E3942F6F"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_58F365E60728D267BB0D61F1733B979B"
+        "OwnerKey" = "8:_60EE3DB4A6452BA204EBD5513DE6B185"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_60EE3DB4A6452BA204EBD5513DE6B185"
+        "OwnerKey" = "8:_70ED15427DC443CEB4EDF711F2935B6D"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_6D3B4EA92DFC490DA27F69577A8277BD"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_70ED15427DC443CEB4EDF711F2935B6D"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_7A9AC91BC68240C99849EC13C98BC801"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_934C0CF0386A49ACADF9BA8C0B1270D1"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_9E1D44F4DD154B16935D45019CA89DC5"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_B03388229A3F447D94D42629FB9C6F08"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C09C141E080841B1A35634B2CBEC03AA"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_C3A39362914B49ACB87140F22FF78B52"
+        "OwnerKey" = "8:_UNDEFINED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E159BF08FE51478A57DBFA2204286A3A"
+        "OwnerKey" = "8:_50E7C142A2474FEFBCC9FCE5E3942F6F"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_E159BF08FE51478A57DBFA2204286A3A"
+        "OwnerKey" = "8:_60EE3DB4A6452BA204EBD5513DE6B185"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_UNDEFINED"
+        "OwnerKey" = "8:_70ED15427DC443CEB4EDF711F2935B6D"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+    }
+    "Configurations"
+    {
+        "Debug"
+        {
+        "DisplayName" = "8:Debug"
+        "IsDebugOnly" = "11:TRUE"
+        "IsReleaseOnly" = "11:FALSE"
+        "OutputFilename" = "8:Debug\\ProcessingDetailsInstaller.msi"
+        "PackageFilesAs" = "3:2"
+        "PackageFileSize" = "3:-2147483648"
+        "CabType" = "3:1"
+        "Compression" = "3:2"
+        "SignOutput" = "11:FALSE"
+        "CertificateFile" = "8:"
+        "PrivateKeyFile" = "8:"
+        "TimeStampServer" = "8:"
+        "InstallerBootstrapper" = "3:2"
+        }
+        "Release"
+        {
+        "DisplayName" = "8:Release"
+        "IsDebugOnly" = "11:FALSE"
+        "IsReleaseOnly" = "11:TRUE"
+        "OutputFilename" = "8:Release\\ProcessingDetailsInstaller.msi"
+        "PackageFilesAs" = "3:2"
+        "PackageFileSize" = "3:-2147483648"
+        "CabType" = "3:1"
+        "Compression" = "3:2"
+        "SignOutput" = "11:FALSE"
+        "CertificateFile" = "8:"
+        "PrivateKeyFile" = "8:"
+        "TimeStampServer" = "8:"
+        "InstallerBootstrapper" = "3:2"
+        }
+    }
+    "Deployable"
+    {
+        "CustomAction"
+        {
+        }
+        "DefaultFeature"
+        {
+        "Name" = "8:DefaultFeature"
+        "Title" = "8:"
+        "Description" = "8:"
+        }
+        "ExternalPersistence"
+        {
+            "LaunchCondition"
+            {
+                "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_04C71B6489F54AA0BCC21CB75FE08624"
+                {
+                "Name" = "8:.NET Core"
+                "Message" = "8:[VSDNETCOREMSG]"
+                "AllowLaterVersions" = "11:FALSE"
+                "InstallUrl" = "8:https://dotnet.microsoft.com/download/dotnet-core/[NetCoreVerMajorDotMinor]"
+                "IsNETCore" = "11:TRUE"
+                "Architecture" = "2:0"
+                "Runtime" = "2:0"
+                }
+                "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_3199E4E648924BC6B9CA2A934D6A94D7"
+                {
+                "Name" = "8:.NET Framework"
+                "Message" = "8:[VSDNETMSG]"
+                "FrameworkVersion" = "8:.NETFramework,Version=v4.7.2"
+                "AllowLaterVersions" = "11:FALSE"
+                "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=863262"
+                }
+            }
+        }
+        "File"
+        {
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_05787923A382497888226826DE736AD7"
+            {
+            "SourcePath" = "8:..\\WpfApp1\\bin\\Release\\net8.0-windows\\WpfApp1.pdb"
+            "TargetName" = "8:WpfApp1.pdb"
+            "Tag" = "8:"
+            "Folder" = "8:_0AA619B73FC7419D84149229763B75DA"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_21929D9B1DB651512121DCAB017A31E4"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_21929D9B1DB651512121DCAB017A31E4"
+                    {
+                    "Name" = "8:Microsoft.Extensions.DependencyInjection.Abstractions.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:Microsoft.Extensions.DependencyInjection.Abstractions.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_0AA619B73FC7419D84149229763B75DA"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_50E7C142A2474FEFBCC9FCE5E3942F6F"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:Npgsql, Version=10.0.3.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_50E7C142A2474FEFBCC9FCE5E3942F6F"
+                    {
+                    "Name" = "8:Npgsql.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:..\\WpfApp1\\bin\\Release\\net8.0-windows\\Npgsql.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_0AA619B73FC7419D84149229763B75DA"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_58F365E60728D267BB0D61F1733B979B"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:System.Diagnostics.DiagnosticSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_58F365E60728D267BB0D61F1733B979B"
+                    {
+                    "Name" = "8:System.Diagnostics.DiagnosticSource.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:System.Diagnostics.DiagnosticSource.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_0AA619B73FC7419D84149229763B75DA"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_60EE3DB4A6452BA204EBD5513DE6B185"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:Npgsql, Version=10.0.3.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_60EE3DB4A6452BA204EBD5513DE6B185"
+                    {
+                    "Name" = "8:Npgsql.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:Npgsql.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_0AA619B73FC7419D84149229763B75DA"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6D3B4EA92DFC490DA27F69577A8277BD"
+            {
+            "SourcePath" = "8:..\\WpfApp1\\bin\\Release\\net8.0-windows\\WpfApp1.deps.json"
+            "TargetName" = "8:WpfApp1.deps.json"
+            "Tag" = "8:"
+            "Folder" = "8:_0AA619B73FC7419D84149229763B75DA"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_70ED15427DC443CEB4EDF711F2935B6D"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:WpfApp1, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_70ED15427DC443CEB4EDF711F2935B6D"
+                    {
+                    "Name" = "8:WpfApp1.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:..\\WpfApp1\\bin\\Release\\net8.0-windows\\WpfApp1.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_0AA619B73FC7419D84149229763B75DA"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7A9AC91BC68240C99849EC13C98BC801"
+            {
+            "SourcePath" = "8:..\\WpfApp1\\bin\\Release\\net8.0-windows\\WpfApp1.exe"
+            "TargetName" = "8:WpfApp1.exe"
+            "Tag" = "8:"
+            "Folder" = "8:_0AA619B73FC7419D84149229763B75DA"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_934C0CF0386A49ACADF9BA8C0B1270D1"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_934C0CF0386A49ACADF9BA8C0B1270D1"
+                    {
+                    "Name" = "8:Microsoft.Extensions.DependencyInjection.Abstractions.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:..\\WpfApp1\\bin\\Release\\net8.0-windows\\Microsoft.Extensions.DependencyInjection.Abstractions.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_0AA619B73FC7419D84149229763B75DA"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_9E1D44F4DD154B16935D45019CA89DC5"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_9E1D44F4DD154B16935D45019CA89DC5"
+                    {
+                    "Name" = "8:Microsoft.Extensions.Logging.Abstractions.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:..\\WpfApp1\\bin\\Release\\net8.0-windows\\Microsoft.Extensions.Logging.Abstractions.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_0AA619B73FC7419D84149229763B75DA"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_B03388229A3F447D94D42629FB9C6F08"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:System.Diagnostics.DiagnosticSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_B03388229A3F447D94D42629FB9C6F08"
+                    {
+                    "Name" = "8:System.Diagnostics.DiagnosticSource.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:..\\WpfApp1\\bin\\Release\\net8.0-windows\\System.Diagnostics.DiagnosticSource.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_0AA619B73FC7419D84149229763B75DA"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C3A39362914B49ACB87140F22FF78B52"
+            {
+            "SourcePath" = "8:..\\WpfApp1\\bin\\Release\\net8.0-windows\\WpfApp1.runtimeconfig.json"
+            "TargetName" = "8:WpfApp1.runtimeconfig.json"
+            "Tag" = "8:"
+            "Folder" = "8:_0AA619B73FC7419D84149229763B75DA"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_E159BF08FE51478A57DBFA2204286A3A"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_E159BF08FE51478A57DBFA2204286A3A"
+                    {
+                    "Name" = "8:Microsoft.Extensions.Logging.Abstractions.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:Microsoft.Extensions.Logging.Abstractions.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_0AA619B73FC7419D84149229763B75DA"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+        }
+        "FileType"
+        {
+        }
+        "Folder"
+        {
+            "{3C67513D-01DD-4637-8A68-80971EB9504F}:_0AA619B73FC7419D84149229763B75DA"
+            {
+            "DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]"
+            "Name" = "8:#1925"
+            "AlwaysCreate" = "11:FALSE"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Property" = "8:TARGETDIR"
+                "Folders"
+                {
+                }
+            }
+            "{1525181F-901A-416C-8A58-119130FE478E}:_221FD29A6D2E4B019AB4BC314C1E1B97"
+            {
+            "Name" = "8:#1916"
+            "AlwaysCreate" = "11:FALSE"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Property" = "8:DesktopFolder"
+                "Folders"
+                {
+                }
+            }
+            "{1525181F-901A-416C-8A58-119130FE478E}:_B6323B3F66EB4A82905CB2BDF5E42E03"
+            {
+            "Name" = "8:#1919"
+            "AlwaysCreate" = "11:FALSE"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Property" = "8:ProgramMenuFolder"
+                "Folders"
+                {
+                }
+            }
+        }
+        "LaunchCondition"
+        {
+        }
+        "Locator"
+        {
+        }
+        "MsiBootstrapper"
+        {
+        "LangId" = "3:1049"
+        "RequiresElevation" = "11:FALSE"
+        }
+        "Product"
+        {
+        "Name" = "8:Microsoft Visual Studio"
+        "ProductName" = "8:ProcessingDetailsInstaller"
+        "ProductCode" = "8:{3D0DB173-6150-406E-A97F-8887B0FB1731}"
+        "PackageCode" = "8:{B474B74A-E72C-4CBB-8F98-5F8835A2581F}"
+        "UpgradeCode" = "8:{53CE69F6-20D6-465E-AC4F-F462522A6287}"
+        "AspNetVersion" = "8:2.0.50727.0"
+        "RestartWWWService" = "11:FALSE"
+        "RemovePreviousVersions" = "11:FALSE"
+        "DetectNewerInstalledVersion" = "11:TRUE"
+        "InstallAllUsers" = "11:FALSE"
+        "ProductVersion" = "8:1.0.0"
+        "Manufacturer" = "8:Default Company Name"
+        "ARPHELPTELEPHONE" = "8:"
+        "ARPHELPLINK" = "8:"
+        "Title" = "8:ProcessingDetailsInstaller"
+        "Subject" = "8:"
+        "ARPCONTACT" = "8:Default Company Name"
+        "Keywords" = "8:"
+        "ARPCOMMENTS" = "8:"
+        "ARPURLINFOABOUT" = "8:"
+        "ARPPRODUCTICON" = "8:"
+        "ARPIconIndex" = "3:0"
+        "SearchPath" = "8:"
+        "UseSystemSearchPath" = "11:TRUE"
+        "TargetPlatform" = "3:0"
+        "PreBuildEvent" = "8:"
+        "PostBuildEvent" = "8:"
+        "RunPostBuildEvent" = "3:0"
+        }
+        "Registry"
+        {
+            "HKLM"
+            {
+                "Keys"
+                {
+                    "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_7F5B350EC80C4FBF91BA99D8A89C2C01"
+                    {
+                    "Name" = "8:Software"
+                    "Condition" = "8:"
+                    "AlwaysCreate" = "11:FALSE"
+                    "DeleteAtUninstall" = "11:FALSE"
+                    "Transitive" = "11:FALSE"
+                        "Keys"
+                        {
+                            "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_E94E939693D24CE2A97256D54FC6D5F5"
+                            {
+                            "Name" = "8:[Manufacturer]"
+                            "Condition" = "8:"
+                            "AlwaysCreate" = "11:FALSE"
+                            "DeleteAtUninstall" = "11:FALSE"
+                            "Transitive" = "11:FALSE"
+                                "Keys"
+                                {
+                                }
+                                "Values"
+                                {
+                                }
+                            }
+                        }
+                        "Values"
+                        {
+                        }
+                    }
+                }
+            }
+            "HKCU"
+            {
+                "Keys"
+                {
+                    "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_89676CBCC7274240AA8EEFDD2BF14CDC"
+                    {
+                    "Name" = "8:Software"
+                    "Condition" = "8:"
+                    "AlwaysCreate" = "11:FALSE"
+                    "DeleteAtUninstall" = "11:FALSE"
+                    "Transitive" = "11:FALSE"
+                        "Keys"
+                        {
+                            "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_9AC841F908F34BD3A09CEF9FA0856880"
+                            {
+                            "Name" = "8:[Manufacturer]"
+                            "Condition" = "8:"
+                            "AlwaysCreate" = "11:FALSE"
+                            "DeleteAtUninstall" = "11:FALSE"
+                            "Transitive" = "11:FALSE"
+                                "Keys"
+                                {
+                                }
+                                "Values"
+                                {
+                                }
+                            }
+                        }
+                        "Values"
+                        {
+                        }
+                    }
+                }
+            }
+            "HKCR"
+            {
+                "Keys"
+                {
+                }
+            }
+            "HKU"
+            {
+                "Keys"
+                {
+                }
+            }
+            "HKPU"
+            {
+                "Keys"
+                {
+                }
+            }
+        }
+        "Sequences"
+        {
+        }
+        "Shortcut"
+        {
+            "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_BBB120D0A8364EB397D3F8C19483FBAC"
+            {
+            "Name" = "8:Shortcut to %sОсновные выходные файлы from WpfApp1 (Active)"
+            "Arguments" = "8:"
+            "Description" = "8:"
+            "ShowCmd" = "3:1"
+            "IconIndex" = "3:0"
+            "Transitive" = "11:FALSE"
+            "Target" = "8:_C09C141E080841B1A35634B2CBEC03AA"
+            "Folder" = "8:_221FD29A6D2E4B019AB4BC314C1E1B97"
+            "WorkingFolder" = "8:_0AA619B73FC7419D84149229763B75DA"
+            "Icon" = "8:"
+            "Feature" = "8:"
+            }
+        }
+        "UserInterface"
+        {
+            "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_13C52124A7E84F33A0655BEAB7870A99"
+            {
+            "UseDynamicProperties" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "SourcePath" = "8:<VsdDialogDir>\\VsdBasicDialogs.wim"
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_1FE46D0574104CBC8F0292D14710E189"
+            {
+            "Name" = "8:#1902"
+            "Sequence" = "3:1"
+            "Attributes" = "3:3"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_6112D1F776BD40FAB70AEBC17B247AF2"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Готово"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "UpdateText"
+                            {
+                            "Name" = "8:UpdateText"
+                            "DisplayName" = "8:#1058"
+                            "Description" = "8:#1158"
+                            "Type" = "3:15"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:1"
+                            "Value" = "8:#1258"
+                            "DefaultValue" = "8:#1258"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_4E25581FE205461DA27C52758FD96FAC"
+            {
+            "Name" = "8:#1901"
+            "Sequence" = "3:2"
+            "Attributes" = "3:2"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_174A8CBED8B94CBE9D08BC9BD49E9FDE"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Ход выполнения"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "ShowProgress"
+                            {
+                            "Name" = "8:ShowProgress"
+                            "DisplayName" = "8:#1009"
+                            "Description" = "8:#1109"
+                            "Type" = "3:5"
+                            "ContextData" = "8:1;True=1;False=0"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:0"
+                            "Value" = "3:1"
+                            "DefaultValue" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_701E45020ABC4D51B35A9F69E4F7201A"
+            {
+            "Name" = "8:#1902"
+            "Sequence" = "3:2"
+            "Attributes" = "3:3"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_EEB4083DCADC4605B2D69756CA618F96"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Готово"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_BCB870E9B2BA49CBA8D3B83E5E9ABDC0"
+            {
+            "Name" = "8:#1900"
+            "Sequence" = "3:1"
+            "Attributes" = "3:1"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_0A57E8A5A3864B58BA7A6A188411B4E0"
+                    {
+                    "Sequence" = "3:300"
+                    "DisplayName" = "8:Подтверждение установки"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_79A5F34ED1EB4045933EFA822B670153"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Добро пожаловать!"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "CopyrightWarning"
+                            {
+                            "Name" = "8:CopyrightWarning"
+                            "DisplayName" = "8:#1002"
+                            "Description" = "8:#1102"
+                            "Type" = "3:3"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:1"
+                            "Value" = "8:#1202"
+                            "DefaultValue" = "8:#1202"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "Welcome"
+                            {
+                            "Name" = "8:Welcome"
+                            "DisplayName" = "8:#1003"
+                            "Description" = "8:#1103"
+                            "Type" = "3:3"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:1"
+                            "Value" = "8:#1203"
+                            "DefaultValue" = "8:#1203"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_8BF9C37494CD4D8D8D81A7B9254AA89C"
+                    {
+                    "Sequence" = "3:200"
+                    "DisplayName" = "8:Папка установки"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "InstallAllUsersVisible"
+                            {
+                            "Name" = "8:InstallAllUsersVisible"
+                            "DisplayName" = "8:#1059"
+                            "Description" = "8:#1159"
+                            "Type" = "3:5"
+                            "ContextData" = "8:1;True=1;False=0"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:0"
+                            "Value" = "3:1"
+                            "DefaultValue" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_DB3B0889659F485EA1F171D9DD91906A"
+            {
+            "Name" = "8:#1900"
+            "Sequence" = "3:2"
+            "Attributes" = "3:1"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_37116897BD2E4E9FAE333FF27C51E6AF"
+                    {
+                    "Sequence" = "3:300"
+                    "DisplayName" = "8:Подтверждение установки"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_8E972AAB759A485C9FFE30DEAF58DFC1"
+                    {
+                    "Sequence" = "3:200"
+                    "DisplayName" = "8:Папка установки"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_99B1FE4AC8734CF2A0CB19A3A284787F"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Добро пожаловать!"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "CopyrightWarning"
+                            {
+                            "Name" = "8:CopyrightWarning"
+                            "DisplayName" = "8:#1002"
+                            "Description" = "8:#1102"
+                            "Type" = "3:3"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:1"
+                            "Value" = "8:#1202"
+                            "DefaultValue" = "8:#1202"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "Welcome"
+                            {
+                            "Name" = "8:Welcome"
+                            "DisplayName" = "8:#1003"
+                            "Description" = "8:#1103"
+                            "Type" = "3:3"
+                            "ContextData" = "8:"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:1"
+                            "Value" = "8:#1203"
+                            "DefaultValue" = "8:#1203"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+            "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_E218A73A14C14535A3AB64A025ED0E24"
+            {
+            "UseDynamicProperties" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "SourcePath" = "8:<VsdDialogDir>\\VsdUserInterface.wim"
+            }
+            "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_E6229CC1A4A748C480D505B132F2345B"
+            {
+            "Name" = "8:#1901"
+            "Sequence" = "3:1"
+            "Attributes" = "3:2"
+                "Dialogs"
+                {
+                    "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_EFFDA75157AA4496951E4D7FEC93D717"
+                    {
+                    "Sequence" = "3:100"
+                    "DisplayName" = "8:Ход выполнения"
+                    "UseDynamicProperties" = "11:TRUE"
+                    "IsDependency" = "11:FALSE"
+                    "SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid"
+                        "Properties"
+                        {
+                            "BannerBitmap"
+                            {
+                            "Name" = "8:BannerBitmap"
+                            "DisplayName" = "8:#1001"
+                            "Description" = "8:#1101"
+                            "Type" = "3:8"
+                            "ContextData" = "8:Bitmap"
+                            "Attributes" = "3:4"
+                            "Setting" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                            "ShowProgress"
+                            {
+                            "Name" = "8:ShowProgress"
+                            "DisplayName" = "8:#1009"
+                            "Description" = "8:#1109"
+                            "Type" = "3:5"
+                            "ContextData" = "8:1;True=1;False=0"
+                            "Attributes" = "3:0"
+                            "Setting" = "3:0"
+                            "Value" = "3:1"
+                            "DefaultValue" = "3:1"
+                            "UsePlugInResources" = "11:TRUE"
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        "MergeModule"
+        {
+        }
+        "ProjectOutput"
+        {
+            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_C09C141E080841B1A35634B2CBEC03AA"
+            {
+            "SourcePath" = "8:..\\WpfApp1\\obj\\Debug\\net8.0-windows\\WpfApp1.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_0AA619B73FC7419D84149229763B75DA"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:FALSE"
+            "IsolateTo" = "8:"
+            "ProjectOutputGroupRegister" = "3:1"
+            "OutputConfiguration" = "8:"
+            "OutputGroupCanonicalName" = "8:Built"
+            "OutputProjectGuid" = "8:{06899B2F-E61B-4122-9B44-A05797508BD0}"
+            "ShowKeyOutput" = "11:TRUE"
+                "ExcludeFilters"
+                {
+                }
+            }
+        }
+    }
+}

+ 25 - 0
WpfApp1/WpfApp1.sln

@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.13.35913.81
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfApp1", "WpfApp1\WpfApp1.csproj", "{06899B2F-E61B-4122-9B44-A05797508BD0}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{06899B2F-E61B-4122-9B44-A05797508BD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{06899B2F-E61B-4122-9B44-A05797508BD0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{06899B2F-E61B-4122-9B44-A05797508BD0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{06899B2F-E61B-4122-9B44-A05797508BD0}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {9700D5A8-325E-42CA-B1FB-02AD5CDCBFCF}
+	EndGlobalSection
+EndGlobal

+ 9 - 0
WpfApp1/WpfApp1/App.xaml

@@ -0,0 +1,9 @@
+<Application x:Class="WpfApp1.App"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:local="clr-namespace:WpfApp1"
+             StartupUri="LoginWindow.xaml">
+    <Application.Resources>
+         
+    </Application.Resources>
+</Application>

+ 14 - 0
WpfApp1/WpfApp1/App.xaml.cs

@@ -0,0 +1,14 @@
+using System.Configuration;
+using System.Data;
+using System.Windows;
+
+namespace WpfApp1
+{
+    /// <summary>
+    /// Interaction logic for App.xaml
+    /// </summary>
+    public partial class App : Application
+    {
+    }
+
+}

+ 10 - 0
WpfApp1/WpfApp1/AssemblyInfo.cs

@@ -0,0 +1,10 @@
+using System.Windows;
+
+[assembly: ThemeInfo(
+    ResourceDictionaryLocation.None,            //where theme specific resource dictionaries are located
+                                                //(used if a resource is not found in the page,
+                                                // or application resource dictionaries)
+    ResourceDictionaryLocation.SourceAssembly   //where the generic resource dictionary is located
+                                                //(used if a resource is not found in the page,
+                                                // app, or any theme specific resource dictionaries)
+)]

+ 79 - 0
WpfApp1/WpfApp1/LoginWindow.xaml

@@ -0,0 +1,79 @@
+<Window x:Class="WpfApp1.LoginWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:WpfApp1"
+        mc:Ignorable="d"
+        Title="Вход в приложение"
+        Height="420"
+        Width="400"
+        WindowStartupLocation="CenterScreen"
+        ResizeMode="NoResize"
+        Background="#F5F7FA">
+
+    <Grid>
+        <Border Background="White"
+                CornerRadius="14"
+                Padding="35"
+                Width="390"
+                VerticalAlignment="Center"
+                HorizontalAlignment="Center"
+                BorderBrush="#DCE3EA"
+                BorderThickness="1">
+
+            <StackPanel>
+
+                <TextBlock Text="Обработка деталей"
+                           FontSize="26"
+                           FontWeight="Bold"
+                           Foreground="#1F2937"
+                           HorizontalAlignment="Center"
+                           Margin="0 0 0 6"/>
+
+                <TextBlock Text="Логин"
+                           FontSize="14"
+                           Foreground="#374151"
+                           Margin="0 0 0 6"/>
+
+                <TextBox x:Name="LoginTextBox"
+                         Height="42"
+                         FontSize="15"
+                         Padding="10 0"
+                         VerticalContentAlignment="Center"
+                         BorderBrush="#D1D5DB"
+                         BorderThickness="1"
+                         Margin="0 0 0 18"/>
+
+                <TextBlock Text="Пароль"
+                           FontSize="14"
+                           Foreground="#374151"
+                           Margin="0 0 0 6"/>
+
+                <PasswordBox x:Name="PasswordBox"
+                             Height="42"
+                             FontSize="15"
+                             Padding="10 0"
+                             VerticalContentAlignment="Center"
+                             BorderBrush="#D1D5DB"
+                             BorderThickness="1"
+                             Margin="0 0 0 24"/>
+
+                <Button x:Name="btnLogin"
+                        Content="Войти"
+                        Height="40"
+                        FontSize="15"
+                        FontWeight="SemiBold"
+                        Cursor="Hand"
+                        Margin="0 0 0 12"/>
+
+                <Button x:Name="btnExit"
+                        Content="Выход"
+                        Height="40"
+                        FontSize="15"
+                        FontWeight="SemiBold"
+                        Cursor="Hand"/>
+            </StackPanel>
+        </Border>
+    </Grid>
+</Window>

+ 117 - 0
WpfApp1/WpfApp1/LoginWindow.xaml.cs

@@ -0,0 +1,117 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Security.Cryptography;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+using Npgsql;
+
+namespace WpfApp1
+{
+    /// <summary>
+    /// Логика взаимодействия для LoginWindow.xaml
+    /// </summary>
+    public partial class LoginWindow : Window
+    {
+        public static string ConnectionString { get; private set; }
+
+        public LoginWindow()
+        {
+            InitializeComponent();
+
+            btnLogin.Click += BtnLogin_Click;
+            btnExit.Click += BtnExit_Click;
+        }
+
+        private string GetSha256Hash(string input)
+        {
+            using (SHA256 sha = SHA256.Create())
+            {
+                byte[] bytes = Encoding.UTF8.GetBytes(input);
+                byte[] hash = sha.ComputeHash(bytes);
+
+                StringBuilder builder = new StringBuilder();
+
+                foreach (byte b in hash)
+                    builder.Append(b.ToString("x2"));
+
+                return builder.ToString();
+            }
+        }
+
+        private void BtnLogin_Click(object sender, RoutedEventArgs e)
+        {
+            string login = LoginTextBox.Text.Trim();
+            string password = PasswordBox.Password.Trim();
+
+            if (string.IsNullOrWhiteSpace(login) || string.IsNullOrWhiteSpace(password))
+            {
+                MessageBox.Show("Введите логин и пароль.");
+                return;
+            }
+
+            string passwordHash = GetSha256Hash(password);
+
+            string connectionString =
+                "Host=edu-pg.itiscaf.ru;Port=5432;Database=dbwork;Username=emelyanov_ia;Password=4&U4p#u#1M0";
+
+            try
+            {
+                using var connection = new NpgsqlConnection(connectionString);
+                connection.Open();
+
+                string sql = @"
+                    SELECT role_name
+                    FROM emelyanov_ia.app_users
+                    WHERE login = @login;
+                ";
+
+                using var command = new NpgsqlCommand(sql, connection);
+                command.Parameters.AddWithValue("@login", login);
+                command.Parameters.AddWithValue("@password_hash", passwordHash);
+
+                object result = command.ExecuteScalar();
+                
+                if (result == null)
+                {
+                    MessageBox.Show(
+                        "Неверный логин или пароль.",
+                        "Ошибка входа",
+                        MessageBoxButton.OK,
+                        MessageBoxImage.Error
+                    );
+                    return;
+                }
+
+                string role = result.ToString();
+
+                MainWindow mainWindow = new MainWindow(role);
+                mainWindow.Show();
+
+                Close();
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(
+                    "Ошибка подключения к базе данных:\n" + ex.Message,
+                    "Ошибка",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Error
+                );
+            }
+        }
+
+        private void BtnExit_Click(object sender, RoutedEventArgs e)
+        {
+            Close();
+        }
+    }
+}

+ 28 - 0
WpfApp1/WpfApp1/MainWindow.xaml

@@ -0,0 +1,28 @@
+<Window x:Class="WpfApp1.MainWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:WpfApp1"
+        mc:Ignorable="d"
+        xmlns:views="clr-namespace:WpfApp1.Views"
+        Title="Обработка деталей"
+        Height="700"
+        Width="1100"
+        WindowStartupLocation="CenterScreen">
+
+    <Grid>
+        <TabControl>
+            <TabItem Header="Поиск изделий" Name="SearchProductsTab">
+                <views:SearchProductsView/>
+            </TabItem>
+
+            <TabItem Header="Изделия" Name="ProductsTab">
+            </TabItem>
+
+            <TabItem Header="Справочники" Name="DictionariesTab">
+                <views:DictionariesView/>
+            </TabItem>
+        </TabControl>
+    </Grid>
+</Window>

+ 32 - 0
WpfApp1/WpfApp1/MainWindow.xaml.cs

@@ -0,0 +1,32 @@
+using System.Text;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using WpfApp1.Views;
+
+namespace WpfApp1
+{
+    /// <summary>
+    /// Interaction logic for MainWindow.xaml
+    /// </summary>
+    public partial class MainWindow : Window
+    {
+        private readonly string _userRole;
+
+        public MainWindow(string userRole)
+        {
+            InitializeComponent();
+
+            _userRole = userRole;
+
+            ProductsView productsView = new ProductsView(_userRole);
+            ProductsTab.Content = productsView;
+        }
+    }
+}

+ 13 - 0
WpfApp1/WpfApp1/Properties/PublishProfiles/FolderProfile.pubxml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
+<Project>
+  <PropertyGroup>
+    <Configuration>Release</Configuration>
+    <Platform>Any CPU</Platform>
+    <PublishDir>bin\Release\net8.0-windows\publish\</PublishDir>
+    <PublishProtocol>FileSystem</PublishProtocol>
+    <_TargetId>Folder</_TargetId>
+    <TargetFramework>net8.0-windows</TargetFramework>
+    <SelfContained>false</SelfContained>
+  </PropertyGroup>
+</Project>

+ 8 - 0
WpfApp1/WpfApp1/Properties/PublishProfiles/FolderProfile.pubxml.user

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
+<Project>
+  <PropertyGroup>
+    <History>True|2026-06-03T09:47:50.5672257Z||;</History>
+    <LastFailureDetails />
+  </PropertyGroup>
+</Project>

+ 165 - 0
WpfApp1/WpfApp1/Views/DictionariesView.xaml

@@ -0,0 +1,165 @@
+<UserControl x:Class="WpfApp1.Views.DictionariesView"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:WpfApp1.Views"
+             mc:Ignorable="d" 
+             d:DesignHeight="650" d:DesignWidth="1100">
+    <Grid Background="#F5F7FA">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="*"/>
+        </Grid.RowDefinitions>
+
+        <TextBlock Grid.Row="0"
+                   Text="Справочники"
+                   FontSize="26"
+                   FontWeight="Bold"
+                   Foreground="#263238"
+                   Margin="25 25 25 10"/>
+
+        <TextBlock Grid.Row="1"
+                   Text="В этом разделе отображаются детали, технологические параметры обработки и методы обработки."
+                   FontSize="14"
+                   Foreground="#607D8B"
+                   Margin="25 0 25 20"/>
+
+        <Grid Grid.Row="2"
+              Margin="25 0 25 25">
+
+            <Grid.RowDefinitions>
+                <RowDefinition Height="*"/>
+                <RowDefinition Height="20"/>
+                <RowDefinition Height="*"/>
+            </Grid.RowDefinitions>
+
+            <Border Grid.Row="0"
+                    Background="White"
+                    CornerRadius="10"
+                    Padding="15"
+                    BorderBrush="#DCE3EA"
+                    BorderThickness="1">
+
+                <Grid>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="Auto"/>
+                        <RowDefinition Height="*"/>
+                    </Grid.RowDefinitions>
+
+                    <TextBlock Grid.Row="0"
+                               Text="Детали и технологические данные"
+                               FontSize="18"
+                               FontWeight="SemiBold"
+                               Foreground="#263238"
+                               Margin="0 0 0 15"/>
+
+                    <DataGrid Grid.Row="1"
+                              x:Name="DetailsDataGrid"
+                              AutoGenerateColumns="False"
+                              CanUserAddRows="False"
+                              CanUserDeleteRows="False"
+                              IsReadOnly="True"
+                              HeadersVisibility="Column"
+                              GridLinesVisibility="Horizontal"
+                              RowHeight="36"
+                              FontSize="14"
+                              AlternatingRowBackground="#F5F7FA"
+                              BorderBrush="#DCE3EA"
+                              BorderThickness="1">
+
+                        <DataGrid.Columns>
+                            <DataGridTextColumn Header="Код детали"
+                                                    Binding="{Binding [Код детали]}"
+                                                    Width="90"/>
+
+                            <DataGridTextColumn Header="Деталь"
+                                                    Binding="{Binding [Деталь]}"
+                                                    Width="*"/>
+
+                            <DataGridTextColumn Header="Изделие"
+                                                    Binding="{Binding [Изделие]}"
+                                                    Width="*"/>
+
+                            <DataGridTextColumn Header="Метод обработки"
+                                                    Binding="{Binding [Метод обработки]}"
+                                                    Width="*"/>
+
+                            <DataGridTextColumn Header="№ операции"
+                                                    Binding="{Binding [№ операции]}"
+                                                    Width="100"/>
+
+                            <DataGridTextColumn Header="Точность обработки"
+                                                    Binding="{Binding [Точность обработки]}"
+                                                    Width="140"/>
+
+                            <DataGridTextColumn Header="Количество"
+                                                    Binding="{Binding [Количество]}"
+                                                    Width="100"/>
+
+                            <DataGridTextColumn Header="Норма времени"
+                                                    Binding="{Binding [Норма времени]}"
+                                                    Width="120"/>
+
+                            <DataGridTextColumn Header="Общее время"
+                                                    Binding="{Binding [Общее время]}"
+                                                    Width="120"/>
+                        </DataGrid.Columns>
+                    </DataGrid>
+                </Grid>
+            </Border>
+
+            <Border Grid.Row="2"
+                    Background="White"
+                    CornerRadius="10"
+                    Padding="15"
+                    BorderBrush="#DCE3EA"
+                    BorderThickness="1">
+
+                <Grid>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="Auto"/>
+                        <RowDefinition Height="*"/>
+                    </Grid.RowDefinitions>
+
+                    <TextBlock Grid.Row="0"
+                               Text="Методы обработки"
+                               FontSize="18"
+                               FontWeight="SemiBold"
+                               Foreground="#263238"
+                               Margin="0 0 0 15"/>
+
+                    <DataGrid Grid.Row="1"
+                              x:Name="MethodsDataGrid"
+                              AutoGenerateColumns="False"
+                              CanUserAddRows="False"
+                              CanUserDeleteRows="False"
+                              IsReadOnly="True"
+                              HeadersVisibility="Column"
+                              GridLinesVisibility="Horizontal"
+                              RowHeight="36"
+                              FontSize="14"
+                              AlternatingRowBackground="#F5F7FA"
+                              BorderBrush="#DCE3EA"
+                              BorderThickness="1">
+
+                        <DataGrid.Columns>
+                            <DataGridTextColumn Header="ID"
+                                                Binding="{Binding [method_id]}"
+                                                Width="100"/>
+
+                            <DataGridTextColumn Header="Метод обработки"
+                                                Binding="{Binding [method_name]}"
+                                                Width="*"/>
+
+                            <DataGridTextColumn Header="Достижимая точность"
+                                                Binding="{Binding [achievable_accuracy]}"
+                                                Width="220"/>
+                        </DataGrid.Columns>
+                    </DataGrid>
+                </Grid>
+            </Border>
+        </Grid>
+    </Grid>
+</UserControl>

+ 108 - 0
WpfApp1/WpfApp1/Views/DictionariesView.xaml.cs

@@ -0,0 +1,108 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using Npgsql;
+
+namespace WpfApp1.Views
+{
+    /// <summary>
+    /// Логика взаимодействия для DictionariesView.xaml
+    /// </summary>
+    public partial class DictionariesView : UserControl
+    {
+        private const string ConnectionString = "Host=edu-pg.itiscaf.ru;Port=5432;Database=dbwork;Username=emelyanov_ia;Password=4&U4p#u#1M0";
+        public DictionariesView()
+        {
+            InitializeComponent();
+
+            LoadDetails();
+            LoadMethods();
+        }
+
+        private void LoadDetails()
+        {
+            try
+            {
+                using var connection = new NpgsqlConnection(ConnectionString);
+                connection.Open();
+
+                string sql = @"
+                    SELECT
+                        ""Код детали"",
+                        ""Деталь"",
+                        ""Изделие"",
+                        ""Метод обработки"",
+                        ""№ операции"",
+                        ""Точность обработки"",
+                        ""Количество"",
+                        ""Норма времени"",
+                        ""Общее время""
+                    FROM emelyanov_ia.v_details_dictionary
+                    ORDER BY ""Код детали"";
+                ";
+
+                using var adapter = new NpgsqlDataAdapter(sql, connection);
+
+                DataTable table = new DataTable();
+                adapter.Fill(table);
+
+                DetailsDataGrid.ItemsSource = table.DefaultView;
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(
+                    "Ошибка загрузки справочника деталей:\n" + ex.Message,
+                    "Ошибка",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Error
+                );
+            }
+        }
+
+        private void LoadMethods()
+        {
+            try
+            {
+                using var connection = new NpgsqlConnection(ConnectionString);
+                connection.Open();
+
+                string sql = @"
+                    SELECT
+                        method_id,
+                        method_name,
+                        achievable_accuracy
+                    FROM emelyanov_ia.processing_methods
+                    ORDER BY method_id;
+                ";
+
+                using var adapter = new NpgsqlDataAdapter(sql, connection);
+
+                DataTable table = new DataTable();
+                adapter.Fill(table);
+
+                MethodsDataGrid.ItemsSource = table.DefaultView;
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(
+                    "Ошибка загрузки справочника методов обработки:\n" + ex.Message,
+                    "Ошибка",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Error
+                );
+            }
+        }
+    }
+}

+ 166 - 0
WpfApp1/WpfApp1/Views/ProductsView.xaml

@@ -0,0 +1,166 @@
+<UserControl x:Class="WpfApp1.Views.ProductsView"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:WpfApp1.Views"
+             mc:Ignorable="d" 
+             d:DesignHeight="650" d:DesignWidth="1100">
+    <Grid Background="#F5F7FA">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="*"/>
+        </Grid.RowDefinitions>
+
+        <TextBlock Grid.Row="0"
+                   Text="Управление изделиями"
+                   FontSize="26"
+                   FontWeight="Bold"
+                   Foreground="#263238"
+                   Margin="25 25 25 10"/>
+
+        <TextBlock Grid.Row="1"
+                   Text="В этом разделе можно добавить, изменить или удалить изделие."
+                   FontSize="14"
+                   Foreground="#607D8B"
+                   Margin="25 0 25 20"/>
+
+        <Grid Grid.Row="2" Margin="25 0 25 25">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="340"/>
+                <ColumnDefinition Width="20"/>
+                <ColumnDefinition Width="*"/>
+            </Grid.ColumnDefinitions>
+
+            <Border Grid.Column="0"
+                    Background="White"
+                    CornerRadius="10"
+                    Padding="20"
+                    BorderBrush="#DCE3EA"
+                    BorderThickness="1">
+
+                <StackPanel>
+                    <TextBlock Text="Данные изделия"
+                               FontSize="18"
+                               FontWeight="SemiBold"
+                               Foreground="#263238"
+                               Margin="0 0 0 20"/>
+
+                    <TextBlock Text="ID изделия"
+                               FontSize="14"
+                               FontWeight="SemiBold"
+                               Foreground="#37474F"
+                               Margin="0 0 0 6"/>
+
+                    <TextBox x:Name="ProductIdTextBox"
+                             Height="36"
+                             FontSize="14"
+                             Padding="8 4"
+                             IsReadOnly="True"
+                             Background="#F5F7FA"
+                             Margin="0 0 0 16"/>
+
+                    <TextBlock Text="Название изделия"
+                               FontSize="14"
+                               FontWeight="SemiBold"
+                               Foreground="#37474F"
+                               Margin="0 0 0 6"/>
+
+                    <TextBox x:Name="ProductNameTextBox"
+                             Height="36"
+                             FontSize="14"
+                             Padding="8 4"
+                             Margin="0 0 0 20"/>
+
+                    <Button x:Name="AddButton"
+                            Content="Добавить"
+                            Height="38"
+                            FontSize="14"
+                            FontWeight="SemiBold"
+                            Cursor="Hand"
+                            Margin="0 0 0 10" Click="AddButton_Click"/>
+
+                    <Button x:Name="UpdateButton"
+                            Content="Изменить"
+                            Height="38"
+                            FontSize="14"
+                            FontWeight="SemiBold"
+                            Cursor="Hand"
+                            Margin="0 0 0 10" Click="UpdateButton_Click"/>
+
+                    <Button x:Name="DeleteButton"
+                            Content="Удалить"
+                            Height="38"
+                            FontSize="14"
+                            FontWeight="SemiBold"
+                            Cursor="Hand"
+                            Margin="0 0 0 10" Click="DeleteButton_Click"/>
+
+                    <TextBlock Text="Подсказка: выберите строку в таблице, чтобы заполнить форму."
+                               TextWrapping="Wrap"
+                               FontSize="13"
+                               Foreground="#78909C"
+                               Margin="0 25 0 0"/>
+                </StackPanel>
+            </Border>
+
+            <Border Grid.Column="2"
+                    Background="White"
+                    CornerRadius="10"
+                    Padding="15"
+                    BorderBrush="#DCE3EA"
+                    BorderThickness="1">
+
+                <Grid>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="Auto"/>
+                        <RowDefinition Height="Auto"/>
+                        <RowDefinition Height="*"/>
+                    </Grid.RowDefinitions>
+
+                    <TextBlock Grid.Row="0"
+                               Text="Список изделий"
+                               FontSize="18"
+                               FontWeight="SemiBold"
+                               Foreground="#263238"
+                               Margin="0 0 0 15"/>
+
+                    <Grid Grid.Row="1" Margin="0 0 0 15">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="Auto"/>
+                            <ColumnDefinition Width="260"/>
+                            <ColumnDefinition Width="Auto"/>
+                            <ColumnDefinition Width="*"/>
+                        </Grid.ColumnDefinitions>
+                    </Grid>
+
+                    <DataGrid Grid.Row="2"
+                              x:Name="ProductsDataGrid"
+                              AutoGenerateColumns="False"
+                              CanUserAddRows="False"
+                              CanUserDeleteRows="False"
+                              IsReadOnly="True"
+                              HeadersVisibility="Column"
+                              GridLinesVisibility="Horizontal"
+                              RowHeight="36"
+                              FontSize="14"
+                              AlternatingRowBackground="#F5F7FA"
+                              BorderBrush="#DCE3EA"
+                              BorderThickness="1" SelectionChanged="ProductsDataGrid_SelectionChanged">
+
+                        <DataGrid.Columns>
+                            <DataGridTextColumn Header="Код изделия"
+                            Binding="{Binding [product_id]}"
+                            Width="120"/>
+
+                            <DataGridTextColumn Header="Наименование изделия"
+                            Binding="{Binding [product_name]}"
+                            Width="*"/>
+                        </DataGrid.Columns>
+                    </DataGrid>
+                </Grid>
+            </Border>
+        </Grid>
+    </Grid>
+</UserControl>

+ 347 - 0
WpfApp1/WpfApp1/Views/ProductsView.xaml.cs

@@ -0,0 +1,347 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using Npgsql;
+
+namespace WpfApp1.Views
+{
+    /// <summary>
+    /// Логика взаимодействия для ProductsView.xaml
+    /// </summary>
+    public partial class ProductsView : UserControl
+    {
+        private readonly string _userRole;
+        private const string ConnectionString = "Host=edu-pg.itiscaf.ru;Port=5432;Database=dbwork;Username=emelyanov_ia;Password=4&U4p#u#1M0";
+
+        public ProductsView(string userRole)
+        {
+            InitializeComponent();
+
+            _userRole = userRole;
+
+            ConfigureAccess();
+            LoadProducts();
+        }
+
+        private void LoadProducts()
+        {
+            try
+            {
+                using var connection = new NpgsqlConnection(ConnectionString);
+                connection.Open();
+
+                string sql = @"
+                    SELECT
+                        product_id,
+                        product_name
+                    FROM emelyanov_ia.products
+                    ORDER BY product_id;
+                ";
+
+                using var adapter = new NpgsqlDataAdapter(sql, connection);
+
+                DataTable table = new DataTable();
+                adapter.Fill(table);
+
+                ProductsDataGrid.ItemsSource = table.DefaultView;
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(
+                    "Ошибка загрузки изделий:\n" + ex.Message,
+                    "Ошибка",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Error
+                );
+            }
+        }
+
+
+        private void ConfigureAccess()
+        {
+            if (_userRole == "user")
+            {
+                AddButton.IsEnabled = false;
+                UpdateButton.IsEnabled = false;
+                DeleteButton.IsEnabled = false;
+            }
+        }
+
+        private void AddButton_Click(object sender, RoutedEventArgs e)
+        {
+            if (_userRole != "admin")
+            {
+                MessageBox.Show(
+                    "У вас нет прав на добавление изделий.",
+                    "Доступ запрещён",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Warning
+                );
+                return;
+            }
+
+            string productName = ProductNameTextBox.Text.Trim();
+
+            if (string.IsNullOrWhiteSpace(productName))
+            {
+                MessageBox.Show(
+                    "Введите наименование изделия.",
+                    "Проверка данных",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Warning
+                );
+                return;
+            }
+
+            try
+            {
+                using var connection = new NpgsqlConnection(ConnectionString);
+                connection.Open();
+
+                string sql = @"
+                    INSERT INTO emelyanov_ia.products (product_name)
+                    VALUES (@product_name);
+                ";
+
+                using var command = new NpgsqlCommand(sql, connection);
+                command.Parameters.AddWithValue("@product_name", productName);
+
+                command.ExecuteNonQuery();
+
+                MessageBox.Show(
+                    "Изделие успешно добавлено.",
+                    "Готово",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Information
+                );
+
+                ProductNameTextBox.Clear();
+                LoadProducts();
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(
+                    "Ошибка добавления изделия:\n" + ex.Message,
+                    "Ошибка",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Error
+                );
+            }
+        }
+
+        private void ProductsDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
+        {
+            if (ProductsDataGrid.SelectedItem == null)
+                return;
+
+            DataRowView row = ProductsDataGrid.SelectedItem as DataRowView;
+
+            if (row == null)
+                return;
+
+            ProductIdTextBox.Text = row["product_id"].ToString();
+            ProductNameTextBox.Text = row["product_name"].ToString();
+        }
+
+        private void UpdateButton_Click(object sender, RoutedEventArgs e)
+        {
+            if (_userRole != "admin")
+            {
+                MessageBox.Show(
+                    "У вас нет прав на изменение изделий.",
+                    "Доступ запрещён",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Warning
+                );
+                return;
+            }
+
+            if (string.IsNullOrWhiteSpace(ProductIdTextBox.Text))
+            {
+                MessageBox.Show(
+                    "Выберите изделие для изменения.",
+                    "Проверка данных",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Warning
+                );
+                return;
+            }
+
+            string productName = ProductNameTextBox.Text.Trim();
+
+            if (string.IsNullOrWhiteSpace(productName))
+            {
+                MessageBox.Show(
+                    "Введите наименование изделия.",
+                    "Проверка данных",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Warning
+                );
+                return;
+            }
+
+            int productId = Convert.ToInt32(ProductIdTextBox.Text);
+
+            try
+            {
+                using var connection = new NpgsqlConnection(ConnectionString);
+                connection.Open();
+
+                string sql = @"
+                    UPDATE emelyanov_ia.products
+                    SET product_name = @product_name
+                    WHERE product_id = @product_id;
+                ";
+
+                using var command = new NpgsqlCommand(sql, connection);
+                command.Parameters.AddWithValue("@product_id", productId);
+                command.Parameters.AddWithValue("@product_name", productName);
+
+                int affectedRows = command.ExecuteNonQuery();
+
+                if (affectedRows == 0)
+                {
+                    MessageBox.Show(
+                        "Изделие не найдено.",
+                        "Ошибка",
+                        MessageBoxButton.OK,
+                        MessageBoxImage.Warning
+                    );
+                    return;
+                }
+
+                MessageBox.Show(
+                    "Изделие успешно изменено.",
+                    "Готово",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Information
+                );
+
+                LoadProducts();
+                ClearProductFields();
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(
+                    "Ошибка изменения изделия:\n" + ex.Message,
+                    "Ошибка",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Error
+                );
+            }
+        }
+
+        private void ClearProductFields()
+        {
+            ProductIdTextBox.Clear();
+            ProductNameTextBox.Clear();
+            ProductsDataGrid.SelectedItem = null;
+        }
+
+        private void DeleteButton_Click(object sender, RoutedEventArgs e)
+        {
+            if (_userRole != "admin")
+            {
+                MessageBox.Show(
+                    "У вас нет прав на удаление изделий.",
+                    "Доступ запрещён",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Warning
+                );
+                return;
+            }
+
+            if (string.IsNullOrWhiteSpace(ProductIdTextBox.Text))
+            {
+                MessageBox.Show(
+                    "Выберите изделие для удаления.",
+                    "Проверка данных",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Warning
+                );
+                return;
+            }
+
+            int productId = Convert.ToInt32(ProductIdTextBox.Text);
+            string productName = ProductNameTextBox.Text.Trim();
+
+            MessageBoxResult result = MessageBox.Show(
+                $"Вы действительно хотите удалить изделие \"{productName}\"?",
+                "Подтверждение удаления",
+                MessageBoxButton.YesNo,
+                MessageBoxImage.Question
+            );
+
+            if (result != MessageBoxResult.Yes)
+                return;
+
+            try
+            {
+                using var connection = new NpgsqlConnection(ConnectionString);
+                connection.Open();
+
+                string sql = @"
+                    DELETE FROM emelyanov_ia.products
+                    WHERE product_id = @product_id;
+                ";
+
+                using var command = new NpgsqlCommand(sql, connection);
+                command.Parameters.AddWithValue("@product_id", productId);
+
+                int affectedRows = command.ExecuteNonQuery();
+
+                if (affectedRows == 0)
+                {
+                    MessageBox.Show(
+                        "Изделие не найдено.",
+                        "Ошибка",
+                        MessageBoxButton.OK,
+                        MessageBoxImage.Warning
+                    );
+                    return;
+                }
+
+                MessageBox.Show(
+                    "Изделие успешно удалено.",
+                    "Готово",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Information
+                );
+
+                LoadProducts();
+                ClearProductFields();
+            }
+            catch (PostgresException ex) when (ex.SqlState == "23503")
+            {
+                MessageBox.Show(
+                    "Нельзя удалить изделие, потому что оно используется в таблице деталей.\n\n" +
+                    "Сначала удалите или измените связанные детали.",
+                    "Ошибка удаления",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Warning
+                );
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(
+                    "Ошибка удаления изделия:\n" + ex.Message,
+                    "Ошибка",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Error
+                );
+            }
+        }
+    }
+}

+ 139 - 0
WpfApp1/WpfApp1/Views/SearchProductsView.xaml

@@ -0,0 +1,139 @@
+<UserControl x:Class="WpfApp1.Views.SearchProductsView"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:WpfApp1.Views"
+             mc:Ignorable="d"
+             Height="650"
+             Width="1100">
+
+    <Grid Background="#F5F7FA">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="*"/>
+        </Grid.RowDefinitions>
+
+        <TextBlock Grid.Row="0"
+                   Text="Поиск изделий по детали"
+                   FontSize="26"
+                   FontWeight="Bold"
+                   Foreground="#263238"
+                   Margin="25 25 25 10"/>
+
+        <TextBlock Grid.Row="1"
+                   Text="Выберите деталь, чтобы получить список изделий, в которых она используется."
+                   FontSize="14"
+                   Foreground="#607D8B"
+                   Margin="25 0 25 20"/>
+
+        <Border Grid.Row="2"
+                Background="White"
+                CornerRadius="10"
+                Padding="20"
+                Margin="25 0 25 20"
+                BorderBrush="#DCE3EA"
+                BorderThickness="1">
+
+            <Grid>
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="Auto"/>
+                    <ColumnDefinition Width="300"/>
+                    <ColumnDefinition Width="Auto"/>
+                    <ColumnDefinition Width="*"/>
+                </Grid.ColumnDefinitions>
+
+                <TextBlock Grid.Column="0"
+                           Text="Деталь:"
+                           FontSize="16"
+                           FontWeight="SemiBold"
+                           Foreground="#37474F"
+                           VerticalAlignment="Center"
+                           Margin="0 0 15 0"/>
+
+                <ComboBox Grid.Column="1"
+                          x:Name="DetailsComboBox"
+                          Height="36"
+                          FontSize="14"
+                          Padding="8 4"
+                          DisplayMemberPath="detail_name"
+                          SelectedValuePath="detail_id"
+                          VerticalContentAlignment="Center">
+                </ComboBox>
+
+                <Button Grid.Column="2"
+                        x:Name="SearchButton"
+                        Content="Найти"
+                        Width="120"
+                        Height="36"
+                        FontSize="14"
+                        FontWeight="SemiBold"
+                        Margin="15 0 0 0"
+                        Cursor="Hand" Click="SearchButton_Click"/>
+            </Grid>
+        </Border>
+
+        <Border Grid.Row="3"
+                Background="White"
+                CornerRadius="10"
+                Padding="15"
+                Margin="25 0 25 25"
+                BorderBrush="#DCE3EA"
+                BorderThickness="1">
+
+            <Grid>
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="Auto"/>
+                    <RowDefinition Height="*"/>
+                </Grid.RowDefinitions>
+
+                <TextBlock Grid.Row="0"
+                           Text="Результаты поиска"
+                           FontSize="18"
+                           FontWeight="SemiBold"
+                           Foreground="#263238"
+                           Margin="0 0 0 15"/>
+
+                <DataGrid Grid.Row="1"
+                          x:Name="ProductsByDetailsDataGrid"
+                          AutoGenerateColumns="False"
+                          CanUserAddRows="False"
+                          CanUserDeleteRows="False"
+                          IsReadOnly="True"
+                          HeadersVisibility="Column"
+                          GridLinesVisibility="Horizontal"
+                          RowHeight="36"
+                          FontSize="14"
+                          AlternatingRowBackground="#F5F7FA"
+                          BorderBrush="#DCE3EA"
+                          BorderThickness="1">
+
+                    <DataGrid.Columns>
+                        <DataGridTextColumn Header="Изделие"
+                            Binding="{Binding [Изделие]}" />
+
+                        <DataGridTextColumn Header="Деталь"
+                            Binding="{Binding [Деталь]}" />
+
+                        <DataGridTextColumn Header="Метод обработки"
+                            Binding="{Binding [Метод обработки]}" />
+
+                        <DataGridTextColumn Header="Операция"
+                            Binding="{Binding [Операция]}" />
+
+                        <DataGridTextColumn Header="Количество"
+                            Binding="{Binding [Количество]}" />
+
+                        <DataGridTextColumn Header="Норма времени"
+                            Binding="{Binding [Норма времени]}" />
+
+                        <DataGridTextColumn Header="Общее время"
+                            Binding="{Binding [Общее время]}" />
+                    </DataGrid.Columns>
+                </DataGrid>
+            </Grid>
+        </Border>
+    </Grid>
+</UserControl>

+ 117 - 0
WpfApp1/WpfApp1/Views/SearchProductsView.xaml.cs

@@ -0,0 +1,117 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using Npgsql;
+
+namespace WpfApp1.Views
+{
+    /// <summary>
+    /// Логика взаимодействия для SearchProductsView.xaml
+    /// </summary>
+    public partial class SearchProductsView : UserControl
+    {
+        private const string ConnectionString = "Host=edu-pg.itiscaf.ru;Port=5432;Database=dbwork;Username=emelyanov_ia;Password=4&U4p#u#1M0";
+        public SearchProductsView()
+        {
+            InitializeComponent();
+            LoadDetails();
+        }
+
+        private void LoadDetails()
+        {
+            try
+            {
+                using var connection = new NpgsqlConnection(ConnectionString);
+                connection.Open();
+
+                string sql = @"
+                    SELECT DISTINCT
+                        detail_id,
+                        detail_name
+                    FROM emelyanov_ia.details
+                    ORDER BY detail_name;
+                ";
+
+                using var adapter = new NpgsqlDataAdapter(sql, connection);
+
+                DataTable table = new DataTable();
+                adapter.Fill(table);
+
+                DetailsComboBox.ItemsSource = table.DefaultView;
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(
+                    "Ошибка загрузки списка деталей:\n" + ex.Message,
+                    "Ошибка",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Error
+                );
+            }
+        }
+
+        private void LoadProductsByDetail(int detailId)
+        {
+            try
+            {
+                using var connection = new NpgsqlConnection(ConnectionString);
+                connection.Open();
+
+                string sql = @"
+                    SELECT
+                        ""Изделие"",
+                        ""Деталь"",
+                        ""Метод обработки"",
+                        ""Операция"",
+                        ""Количество"",
+                        ""Норма времени"",
+                        ""Общее время""
+                    FROM emelyanov_ia.v_products_by_details
+                    WHERE detail_id = @detail_id
+                    ORDER BY ""Изделие"", ""Операция"";
+                ";
+
+                using var command = new NpgsqlCommand(sql, connection);
+                command.Parameters.AddWithValue("@detail_id", detailId);
+
+                using var adapter = new NpgsqlDataAdapter(command);
+
+                DataTable table = new DataTable();
+                adapter.Fill(table);
+
+                ProductsByDetailsDataGrid.ItemsSource = table.DefaultView;
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(
+                    "Ошибка загрузки изделий по детали:\n" + ex.Message,
+                    "Ошибка",
+                    MessageBoxButton.OK,
+                    MessageBoxImage.Error
+                );
+            }
+        }
+
+        private void SearchButton_Click(object sender, RoutedEventArgs e)
+        {
+            if (DetailsComboBox.SelectedValue == null)
+                return;
+
+            int detailId = Convert.ToInt32(DetailsComboBox.SelectedValue);
+
+            LoadProductsByDetail(detailId);
+        }
+    }
+}

+ 15 - 0
WpfApp1/WpfApp1/WpfApp1.csproj

@@ -0,0 +1,15 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>WinExe</OutputType>
+    <TargetFramework>net8.0-windows</TargetFramework>
+    <Nullable>enable</Nullable>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <UseWPF>true</UseWPF>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Npgsql" Version="10.0.3" />
+  </ItemGroup>
+
+</Project>

+ 20 - 0
WpfApp1/WpfApp1/WpfApp1.csproj.user

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <_LastSelectedProfileId>C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
+  </PropertyGroup>
+  <ItemGroup>
+    <Compile Update="LoginWindow.xaml.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Update="Views\DictionariesView.xaml.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Update="Views\ProductsView.xaml.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Update="Views\SearchProductsView.xaml.cs">
+      <SubType>Code</SubType>
+    </Compile>
+  </ItemGroup>
+</Project>

BIN
WpfApp1/WpfApp1/bin/Debug/net8.0-windows/Microsoft.Extensions.DependencyInjection.Abstractions.dll


BIN
WpfApp1/WpfApp1/bin/Debug/net8.0-windows/Microsoft.Extensions.Logging.Abstractions.dll


BIN
WpfApp1/WpfApp1/bin/Debug/net8.0-windows/Npgsql.dll


BIN
WpfApp1/WpfApp1/bin/Debug/net8.0-windows/System.Diagnostics.DiagnosticSource.dll


+ 93 - 0
WpfApp1/WpfApp1/bin/Debug/net8.0-windows/WpfApp1.deps.json

@@ -0,0 +1,93 @@
+{
+  "runtimeTarget": {
+    "name": ".NETCoreApp,Version=v8.0",
+    "signature": ""
+  },
+  "compilationOptions": {},
+  "targets": {
+    ".NETCoreApp,Version=v8.0": {
+      "WpfApp1/1.0.0": {
+        "dependencies": {
+          "Npgsql": "10.0.3"
+        },
+        "runtime": {
+          "WpfApp1.dll": {}
+        }
+      },
+      "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": {
+        "runtime": {
+          "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
+            "assemblyVersion": "8.0.0.0",
+            "fileVersion": "8.0.23.53103"
+          }
+        }
+      },
+      "Microsoft.Extensions.Logging.Abstractions/8.0.0": {
+        "dependencies": {
+          "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+        },
+        "runtime": {
+          "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
+            "assemblyVersion": "8.0.0.0",
+            "fileVersion": "8.0.23.53103"
+          }
+        }
+      },
+      "Npgsql/10.0.3": {
+        "dependencies": {
+          "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+          "System.Diagnostics.DiagnosticSource": "9.0.11"
+        },
+        "runtime": {
+          "lib/net8.0/Npgsql.dll": {
+            "assemblyVersion": "10.0.3.0",
+            "fileVersion": "10.0.3.0"
+          }
+        }
+      },
+      "System.Diagnostics.DiagnosticSource/9.0.11": {
+        "runtime": {
+          "lib/net8.0/System.Diagnostics.DiagnosticSource.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.1125.51716"
+          }
+        }
+      }
+    }
+  },
+  "libraries": {
+    "WpfApp1/1.0.0": {
+      "type": "project",
+      "serviceable": false,
+      "sha512": ""
+    },
+    "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==",
+      "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.0",
+      "hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Logging.Abstractions/8.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+      "path": "microsoft.extensions.logging.abstractions/8.0.0",
+      "hashPath": "microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512"
+    },
+    "Npgsql/10.0.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w==",
+      "path": "npgsql/10.0.3",
+      "hashPath": "npgsql.10.0.3.nupkg.sha512"
+    },
+    "System.Diagnostics.DiagnosticSource/9.0.11": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-/QzMFklOm8Ak//YB0I2kR+ByxUndT63ucrRWQm0xZsuLExJWrVDeGKtYZDuBackd9dThbwMdOotIEc4c4KwJiw==",
+      "path": "system.diagnostics.diagnosticsource/9.0.11",
+      "hashPath": "system.diagnostics.diagnosticsource.9.0.11.nupkg.sha512"
+    }
+  }
+}

BIN
WpfApp1/WpfApp1/bin/Debug/net8.0-windows/WpfApp1.dll


BIN
WpfApp1/WpfApp1/bin/Debug/net8.0-windows/WpfApp1.exe


BIN
WpfApp1/WpfApp1/bin/Debug/net8.0-windows/WpfApp1.pdb


+ 19 - 0
WpfApp1/WpfApp1/bin/Debug/net8.0-windows/WpfApp1.runtimeconfig.json

@@ -0,0 +1,19 @@
+{
+  "runtimeOptions": {
+    "tfm": "net8.0",
+    "frameworks": [
+      {
+        "name": "Microsoft.NETCore.App",
+        "version": "8.0.0"
+      },
+      {
+        "name": "Microsoft.WindowsDesktop.App",
+        "version": "8.0.0"
+      }
+    ],
+    "configProperties": {
+      "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": true,
+      "CSWINRT_USE_WINDOWS_UI_XAML_PROJECTIONS": false
+    }
+  }
+}

BIN
WpfApp1/WpfApp1/bin/Release/net8.0-windows/Microsoft.Extensions.DependencyInjection.Abstractions.dll


BIN
WpfApp1/WpfApp1/bin/Release/net8.0-windows/Microsoft.Extensions.Logging.Abstractions.dll


BIN
WpfApp1/WpfApp1/bin/Release/net8.0-windows/Npgsql.dll


BIN
WpfApp1/WpfApp1/bin/Release/net8.0-windows/System.Diagnostics.DiagnosticSource.dll


+ 93 - 0
WpfApp1/WpfApp1/bin/Release/net8.0-windows/WpfApp1.deps.json

@@ -0,0 +1,93 @@
+{
+  "runtimeTarget": {
+    "name": ".NETCoreApp,Version=v8.0",
+    "signature": ""
+  },
+  "compilationOptions": {},
+  "targets": {
+    ".NETCoreApp,Version=v8.0": {
+      "WpfApp1/1.0.0": {
+        "dependencies": {
+          "Npgsql": "10.0.3"
+        },
+        "runtime": {
+          "WpfApp1.dll": {}
+        }
+      },
+      "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": {
+        "runtime": {
+          "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
+            "assemblyVersion": "8.0.0.0",
+            "fileVersion": "8.0.23.53103"
+          }
+        }
+      },
+      "Microsoft.Extensions.Logging.Abstractions/8.0.0": {
+        "dependencies": {
+          "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+        },
+        "runtime": {
+          "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
+            "assemblyVersion": "8.0.0.0",
+            "fileVersion": "8.0.23.53103"
+          }
+        }
+      },
+      "Npgsql/10.0.3": {
+        "dependencies": {
+          "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+          "System.Diagnostics.DiagnosticSource": "9.0.11"
+        },
+        "runtime": {
+          "lib/net8.0/Npgsql.dll": {
+            "assemblyVersion": "10.0.3.0",
+            "fileVersion": "10.0.3.0"
+          }
+        }
+      },
+      "System.Diagnostics.DiagnosticSource/9.0.11": {
+        "runtime": {
+          "lib/net8.0/System.Diagnostics.DiagnosticSource.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.1125.51716"
+          }
+        }
+      }
+    }
+  },
+  "libraries": {
+    "WpfApp1/1.0.0": {
+      "type": "project",
+      "serviceable": false,
+      "sha512": ""
+    },
+    "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==",
+      "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.0",
+      "hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Logging.Abstractions/8.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+      "path": "microsoft.extensions.logging.abstractions/8.0.0",
+      "hashPath": "microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512"
+    },
+    "Npgsql/10.0.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w==",
+      "path": "npgsql/10.0.3",
+      "hashPath": "npgsql.10.0.3.nupkg.sha512"
+    },
+    "System.Diagnostics.DiagnosticSource/9.0.11": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-/QzMFklOm8Ak//YB0I2kR+ByxUndT63ucrRWQm0xZsuLExJWrVDeGKtYZDuBackd9dThbwMdOotIEc4c4KwJiw==",
+      "path": "system.diagnostics.diagnosticsource/9.0.11",
+      "hashPath": "system.diagnostics.diagnosticsource.9.0.11.nupkg.sha512"
+    }
+  }
+}

BIN
WpfApp1/WpfApp1/bin/Release/net8.0-windows/WpfApp1.dll


BIN
WpfApp1/WpfApp1/bin/Release/net8.0-windows/WpfApp1.exe


BIN
WpfApp1/WpfApp1/bin/Release/net8.0-windows/WpfApp1.pdb


+ 20 - 0
WpfApp1/WpfApp1/bin/Release/net8.0-windows/WpfApp1.runtimeconfig.json

@@ -0,0 +1,20 @@
+{
+  "runtimeOptions": {
+    "tfm": "net8.0",
+    "frameworks": [
+      {
+        "name": "Microsoft.NETCore.App",
+        "version": "8.0.0"
+      },
+      {
+        "name": "Microsoft.WindowsDesktop.App",
+        "version": "8.0.0"
+      }
+    ],
+    "configProperties": {
+      "System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
+      "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": true,
+      "CSWINRT_USE_WINDOWS_UI_XAML_PROJECTIONS": false
+    }
+  }
+}

BIN
WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/Microsoft.Extensions.DependencyInjection.Abstractions.dll


BIN
WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/Microsoft.Extensions.Logging.Abstractions.dll


BIN
WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/Npgsql.dll


BIN
WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/System.Diagnostics.DiagnosticSource.dll


+ 93 - 0
WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/WpfApp1.deps.json

@@ -0,0 +1,93 @@
+{
+  "runtimeTarget": {
+    "name": ".NETCoreApp,Version=v8.0",
+    "signature": ""
+  },
+  "compilationOptions": {},
+  "targets": {
+    ".NETCoreApp,Version=v8.0": {
+      "WpfApp1/1.0.0": {
+        "dependencies": {
+          "Npgsql": "10.0.3"
+        },
+        "runtime": {
+          "WpfApp1.dll": {}
+        }
+      },
+      "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": {
+        "runtime": {
+          "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
+            "assemblyVersion": "8.0.0.0",
+            "fileVersion": "8.0.23.53103"
+          }
+        }
+      },
+      "Microsoft.Extensions.Logging.Abstractions/8.0.0": {
+        "dependencies": {
+          "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+        },
+        "runtime": {
+          "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
+            "assemblyVersion": "8.0.0.0",
+            "fileVersion": "8.0.23.53103"
+          }
+        }
+      },
+      "Npgsql/10.0.3": {
+        "dependencies": {
+          "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+          "System.Diagnostics.DiagnosticSource": "9.0.11"
+        },
+        "runtime": {
+          "lib/net8.0/Npgsql.dll": {
+            "assemblyVersion": "10.0.3.0",
+            "fileVersion": "10.0.3.0"
+          }
+        }
+      },
+      "System.Diagnostics.DiagnosticSource/9.0.11": {
+        "runtime": {
+          "lib/net8.0/System.Diagnostics.DiagnosticSource.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.1125.51716"
+          }
+        }
+      }
+    }
+  },
+  "libraries": {
+    "WpfApp1/1.0.0": {
+      "type": "project",
+      "serviceable": false,
+      "sha512": ""
+    },
+    "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==",
+      "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.0",
+      "hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Logging.Abstractions/8.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+      "path": "microsoft.extensions.logging.abstractions/8.0.0",
+      "hashPath": "microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512"
+    },
+    "Npgsql/10.0.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w==",
+      "path": "npgsql/10.0.3",
+      "hashPath": "npgsql.10.0.3.nupkg.sha512"
+    },
+    "System.Diagnostics.DiagnosticSource/9.0.11": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-/QzMFklOm8Ak//YB0I2kR+ByxUndT63ucrRWQm0xZsuLExJWrVDeGKtYZDuBackd9dThbwMdOotIEc4c4KwJiw==",
+      "path": "system.diagnostics.diagnosticsource/9.0.11",
+      "hashPath": "system.diagnostics.diagnosticsource.9.0.11.nupkg.sha512"
+    }
+  }
+}

BIN
WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/WpfApp1.dll


BIN
WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/WpfApp1.exe


BIN
WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/WpfApp1.pdb


+ 20 - 0
WpfApp1/WpfApp1/bin/Release/net8.0-windows/publish/WpfApp1.runtimeconfig.json

@@ -0,0 +1,20 @@
+{
+  "runtimeOptions": {
+    "tfm": "net8.0",
+    "frameworks": [
+      {
+        "name": "Microsoft.NETCore.App",
+        "version": "8.0.0"
+      },
+      {
+        "name": "Microsoft.WindowsDesktop.App",
+        "version": "8.0.0"
+      }
+    ],
+    "configProperties": {
+      "System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
+      "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": true,
+      "CSWINRT_USE_WINDOWS_UI_XAML_PROJECTIONS": false
+    }
+  }
+}

+ 4 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs

@@ -0,0 +1,4 @@
+// <autogenerated />
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

+ 71 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/App.g.cs

@@ -0,0 +1,71 @@
+#pragma checksum "..\..\..\App.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "5947BBF81E5693938844451ED2FDEB917548C3BB"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using WpfApp1;
+
+
+namespace WpfApp1 {
+    
+    
+    /// <summary>
+    /// App
+    /// </summary>
+    public partial class App : System.Windows.Application {
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        public void InitializeComponent() {
+            
+            #line 5 "..\..\..\App.xaml"
+            this.StartupUri = new System.Uri("LoginWindow.xaml", System.UriKind.Relative);
+            
+            #line default
+            #line hidden
+        }
+        
+        /// <summary>
+        /// Application Entry Point.
+        /// </summary>
+        [System.STAThreadAttribute()]
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        public static void Main() {
+            WpfApp1.App app = new WpfApp1.App();
+            app.InitializeComponent();
+            app.Run();
+        }
+    }
+}
+

+ 71 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/App.g.i.cs

@@ -0,0 +1,71 @@
+#pragma checksum "..\..\..\App.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "5947BBF81E5693938844451ED2FDEB917548C3BB"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using WpfApp1;
+
+
+namespace WpfApp1 {
+    
+    
+    /// <summary>
+    /// App
+    /// </summary>
+    public partial class App : System.Windows.Application {
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        public void InitializeComponent() {
+            
+            #line 5 "..\..\..\App.xaml"
+            this.StartupUri = new System.Uri("LoginWindow.xaml", System.UriKind.Relative);
+            
+            #line default
+            #line hidden
+        }
+        
+        /// <summary>
+        /// Application Entry Point.
+        /// </summary>
+        [System.STAThreadAttribute()]
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        public static void Main() {
+            WpfApp1.App app = new WpfApp1.App();
+            app.InitializeComponent();
+            app.Run();
+        }
+    }
+}
+

+ 2 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/GeneratedInternalTypeHelper.g.cs

@@ -0,0 +1,2 @@
+
+

+ 62 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/GeneratedInternalTypeHelper.g.i.cs

@@ -0,0 +1,62 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace XamlGeneratedNamespace {
+    
+    
+    /// <summary>
+    /// GeneratedInternalTypeHelper
+    /// </summary>
+    [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+    public sealed class GeneratedInternalTypeHelper : System.Windows.Markup.InternalTypeHelper {
+        
+        /// <summary>
+        /// CreateInstance
+        /// </summary>
+        protected override object CreateInstance(System.Type type, System.Globalization.CultureInfo culture) {
+            return System.Activator.CreateInstance(type, ((System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic) 
+                            | (System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.CreateInstance)), null, null, culture);
+        }
+        
+        /// <summary>
+        /// GetPropertyValue
+        /// </summary>
+        protected override object GetPropertyValue(System.Reflection.PropertyInfo propertyInfo, object target, System.Globalization.CultureInfo culture) {
+            return propertyInfo.GetValue(target, System.Reflection.BindingFlags.Default, null, null, culture);
+        }
+        
+        /// <summary>
+        /// SetPropertyValue
+        /// </summary>
+        protected override void SetPropertyValue(System.Reflection.PropertyInfo propertyInfo, object target, object value, System.Globalization.CultureInfo culture) {
+            propertyInfo.SetValue(target, value, System.Reflection.BindingFlags.Default, null, null, culture);
+        }
+        
+        /// <summary>
+        /// CreateDelegate
+        /// </summary>
+        protected override System.Delegate CreateDelegate(System.Type delegateType, object target, string handler) {
+            return ((System.Delegate)(target.GetType().InvokeMember("_CreateDelegate", (System.Reflection.BindingFlags.InvokeMethod 
+                            | (System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)), null, target, new object[] {
+                        delegateType,
+                        handler}, null)));
+        }
+        
+        /// <summary>
+        /// AddEventHandler
+        /// </summary>
+        protected override void AddEventHandler(System.Reflection.EventInfo eventInfo, object target, System.Delegate handler) {
+            eventInfo.AddEventHandler(target, handler);
+        }
+    }
+}
+

BIN
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/LoginWindow.baml


+ 123 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/LoginWindow.g.cs

@@ -0,0 +1,123 @@
+#pragma checksum "..\..\..\LoginWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "2C960C7360A834CD627853F4770504CD3989E79A"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using WpfApp1;
+
+
+namespace WpfApp1 {
+    
+    
+    /// <summary>
+    /// LoginWindow
+    /// </summary>
+    public partial class LoginWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
+        
+        
+        #line 39 "..\..\..\LoginWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.TextBox LoginTextBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 53 "..\..\..\LoginWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.PasswordBox PasswordBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 62 "..\..\..\LoginWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.Button btnLogin;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 70 "..\..\..\LoginWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.Button btnExit;
+        
+        #line default
+        #line hidden
+        
+        private bool _contentLoaded;
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        public void InitializeComponent() {
+            if (_contentLoaded) {
+                return;
+            }
+            _contentLoaded = true;
+            System.Uri resourceLocater = new System.Uri("/WpfApp1;component/loginwindow.xaml", System.UriKind.Relative);
+            
+            #line 1 "..\..\..\LoginWindow.xaml"
+            System.Windows.Application.LoadComponent(this, resourceLocater);
+            
+            #line default
+            #line hidden
+        }
+        
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+        void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+            switch (connectionId)
+            {
+            case 1:
+            this.LoginTextBox = ((System.Windows.Controls.TextBox)(target));
+            return;
+            case 2:
+            this.PasswordBox = ((System.Windows.Controls.PasswordBox)(target));
+            return;
+            case 3:
+            this.btnLogin = ((System.Windows.Controls.Button)(target));
+            return;
+            case 4:
+            this.btnExit = ((System.Windows.Controls.Button)(target));
+            return;
+            }
+            this._contentLoaded = true;
+        }
+    }
+}
+

+ 123 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/LoginWindow.g.i.cs

@@ -0,0 +1,123 @@
+#pragma checksum "..\..\..\LoginWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "2C960C7360A834CD627853F4770504CD3989E79A"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using WpfApp1;
+
+
+namespace WpfApp1 {
+    
+    
+    /// <summary>
+    /// LoginWindow
+    /// </summary>
+    public partial class LoginWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
+        
+        
+        #line 39 "..\..\..\LoginWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.TextBox LoginTextBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 53 "..\..\..\LoginWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.PasswordBox PasswordBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 62 "..\..\..\LoginWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.Button btnLogin;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 70 "..\..\..\LoginWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.Button btnExit;
+        
+        #line default
+        #line hidden
+        
+        private bool _contentLoaded;
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        public void InitializeComponent() {
+            if (_contentLoaded) {
+                return;
+            }
+            _contentLoaded = true;
+            System.Uri resourceLocater = new System.Uri("/WpfApp1;component/loginwindow.xaml", System.UriKind.Relative);
+            
+            #line 1 "..\..\..\LoginWindow.xaml"
+            System.Windows.Application.LoadComponent(this, resourceLocater);
+            
+            #line default
+            #line hidden
+        }
+        
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+        void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+            switch (connectionId)
+            {
+            case 1:
+            this.LoginTextBox = ((System.Windows.Controls.TextBox)(target));
+            return;
+            case 2:
+            this.PasswordBox = ((System.Windows.Controls.PasswordBox)(target));
+            return;
+            case 3:
+            this.btnLogin = ((System.Windows.Controls.Button)(target));
+            return;
+            case 4:
+            this.btnExit = ((System.Windows.Controls.Button)(target));
+            return;
+            }
+            this._contentLoaded = true;
+        }
+    }
+}
+

BIN
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/MainWindow.baml


+ 113 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/MainWindow.g.cs

@@ -0,0 +1,113 @@
+#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "3BB822F8553823057543AD29B21425AD3160B9AC"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using WpfApp1;
+using WpfApp1.Views;
+
+
+namespace WpfApp1 {
+    
+    
+    /// <summary>
+    /// MainWindow
+    /// </summary>
+    public partial class MainWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
+        
+        
+        #line 16 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.TabItem SearchProductsTab;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 20 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.TabItem ProductsTab;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 23 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.TabItem DictionariesTab;
+        
+        #line default
+        #line hidden
+        
+        private bool _contentLoaded;
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        public void InitializeComponent() {
+            if (_contentLoaded) {
+                return;
+            }
+            _contentLoaded = true;
+            System.Uri resourceLocater = new System.Uri("/WpfApp1;component/mainwindow.xaml", System.UriKind.Relative);
+            
+            #line 1 "..\..\..\MainWindow.xaml"
+            System.Windows.Application.LoadComponent(this, resourceLocater);
+            
+            #line default
+            #line hidden
+        }
+        
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+        void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+            switch (connectionId)
+            {
+            case 1:
+            this.SearchProductsTab = ((System.Windows.Controls.TabItem)(target));
+            return;
+            case 2:
+            this.ProductsTab = ((System.Windows.Controls.TabItem)(target));
+            return;
+            case 3:
+            this.DictionariesTab = ((System.Windows.Controls.TabItem)(target));
+            return;
+            }
+            this._contentLoaded = true;
+        }
+    }
+}
+

+ 113 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/MainWindow.g.i.cs

@@ -0,0 +1,113 @@
+#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "3BB822F8553823057543AD29B21425AD3160B9AC"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using WpfApp1;
+using WpfApp1.Views;
+
+
+namespace WpfApp1 {
+    
+    
+    /// <summary>
+    /// MainWindow
+    /// </summary>
+    public partial class MainWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
+        
+        
+        #line 16 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.TabItem SearchProductsTab;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 20 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.TabItem ProductsTab;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 23 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.TabItem DictionariesTab;
+        
+        #line default
+        #line hidden
+        
+        private bool _contentLoaded;
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        public void InitializeComponent() {
+            if (_contentLoaded) {
+                return;
+            }
+            _contentLoaded = true;
+            System.Uri resourceLocater = new System.Uri("/WpfApp1;component/mainwindow.xaml", System.UriKind.Relative);
+            
+            #line 1 "..\..\..\MainWindow.xaml"
+            System.Windows.Application.LoadComponent(this, resourceLocater);
+            
+            #line default
+            #line hidden
+        }
+        
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+        void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+            switch (connectionId)
+            {
+            case 1:
+            this.SearchProductsTab = ((System.Windows.Controls.TabItem)(target));
+            return;
+            case 2:
+            this.ProductsTab = ((System.Windows.Controls.TabItem)(target));
+            return;
+            case 3:
+            this.DictionariesTab = ((System.Windows.Controls.TabItem)(target));
+            return;
+            }
+            this._contentLoaded = true;
+        }
+    }
+}
+

BIN
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/DictionariesView.baml


+ 101 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/DictionariesView.g.cs

@@ -0,0 +1,101 @@
+#pragma checksum "..\..\..\..\Views\DictionariesView.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "C361A89BE0ECE6E57C9975E10F5FC7C6E926C11E"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using WpfApp1.Views;
+
+
+namespace WpfApp1.Views {
+    
+    
+    /// <summary>
+    /// DictionariesView
+    /// </summary>
+    public partial class DictionariesView : System.Windows.Controls.UserControl, System.Windows.Markup.IComponentConnector {
+        
+        
+        #line 59 "..\..\..\..\Views\DictionariesView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.DataGrid DetailsDataGrid;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 134 "..\..\..\..\Views\DictionariesView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.DataGrid MethodsDataGrid;
+        
+        #line default
+        #line hidden
+        
+        private bool _contentLoaded;
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        public void InitializeComponent() {
+            if (_contentLoaded) {
+                return;
+            }
+            _contentLoaded = true;
+            System.Uri resourceLocater = new System.Uri("/WpfApp1;component/views/dictionariesview.xaml", System.UriKind.Relative);
+            
+            #line 1 "..\..\..\..\Views\DictionariesView.xaml"
+            System.Windows.Application.LoadComponent(this, resourceLocater);
+            
+            #line default
+            #line hidden
+        }
+        
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+        void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+            switch (connectionId)
+            {
+            case 1:
+            this.DetailsDataGrid = ((System.Windows.Controls.DataGrid)(target));
+            return;
+            case 2:
+            this.MethodsDataGrid = ((System.Windows.Controls.DataGrid)(target));
+            return;
+            }
+            this._contentLoaded = true;
+        }
+    }
+}
+

+ 101 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/DictionariesView.g.i.cs

@@ -0,0 +1,101 @@
+#pragma checksum "..\..\..\..\Views\DictionariesView.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "C361A89BE0ECE6E57C9975E10F5FC7C6E926C11E"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using WpfApp1.Views;
+
+
+namespace WpfApp1.Views {
+    
+    
+    /// <summary>
+    /// DictionariesView
+    /// </summary>
+    public partial class DictionariesView : System.Windows.Controls.UserControl, System.Windows.Markup.IComponentConnector {
+        
+        
+        #line 59 "..\..\..\..\Views\DictionariesView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.DataGrid DetailsDataGrid;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 134 "..\..\..\..\Views\DictionariesView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.DataGrid MethodsDataGrid;
+        
+        #line default
+        #line hidden
+        
+        private bool _contentLoaded;
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        public void InitializeComponent() {
+            if (_contentLoaded) {
+                return;
+            }
+            _contentLoaded = true;
+            System.Uri resourceLocater = new System.Uri("/WpfApp1;component/views/dictionariesview.xaml", System.UriKind.Relative);
+            
+            #line 1 "..\..\..\..\Views\DictionariesView.xaml"
+            System.Windows.Application.LoadComponent(this, resourceLocater);
+            
+            #line default
+            #line hidden
+        }
+        
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+        void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+            switch (connectionId)
+            {
+            case 1:
+            this.DetailsDataGrid = ((System.Windows.Controls.DataGrid)(target));
+            return;
+            case 2:
+            this.MethodsDataGrid = ((System.Windows.Controls.DataGrid)(target));
+            return;
+            }
+            this._contentLoaded = true;
+        }
+    }
+}
+

BIN
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/ProductsView.baml


+ 169 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/ProductsView.g.cs

@@ -0,0 +1,169 @@
+#pragma checksum "..\..\..\..\Views\ProductsView.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "5B4225BD67D6163B7336275E5B7CC0B12F60D00F"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using WpfApp1.Views;
+
+
+namespace WpfApp1.Views {
+    
+    
+    /// <summary>
+    /// ProductsView
+    /// </summary>
+    public partial class ProductsView : System.Windows.Controls.UserControl, System.Windows.Markup.IComponentConnector {
+        
+        
+        #line 56 "..\..\..\..\Views\ProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.TextBox ProductIdTextBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 70 "..\..\..\..\Views\ProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.TextBox ProductNameTextBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 76 "..\..\..\..\Views\ProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.Button AddButton;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 84 "..\..\..\..\Views\ProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.Button UpdateButton;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 92 "..\..\..\..\Views\ProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.Button DeleteButton;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 139 "..\..\..\..\Views\ProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.DataGrid ProductsDataGrid;
+        
+        #line default
+        #line hidden
+        
+        private bool _contentLoaded;
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        public void InitializeComponent() {
+            if (_contentLoaded) {
+                return;
+            }
+            _contentLoaded = true;
+            System.Uri resourceLocater = new System.Uri("/WpfApp1;component/views/productsview.xaml", System.UriKind.Relative);
+            
+            #line 1 "..\..\..\..\Views\ProductsView.xaml"
+            System.Windows.Application.LoadComponent(this, resourceLocater);
+            
+            #line default
+            #line hidden
+        }
+        
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+        void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+            switch (connectionId)
+            {
+            case 1:
+            this.ProductIdTextBox = ((System.Windows.Controls.TextBox)(target));
+            return;
+            case 2:
+            this.ProductNameTextBox = ((System.Windows.Controls.TextBox)(target));
+            return;
+            case 3:
+            this.AddButton = ((System.Windows.Controls.Button)(target));
+            
+            #line 82 "..\..\..\..\Views\ProductsView.xaml"
+            this.AddButton.Click += new System.Windows.RoutedEventHandler(this.AddButton_Click);
+            
+            #line default
+            #line hidden
+            return;
+            case 4:
+            this.UpdateButton = ((System.Windows.Controls.Button)(target));
+            
+            #line 90 "..\..\..\..\Views\ProductsView.xaml"
+            this.UpdateButton.Click += new System.Windows.RoutedEventHandler(this.UpdateButton_Click);
+            
+            #line default
+            #line hidden
+            return;
+            case 5:
+            this.DeleteButton = ((System.Windows.Controls.Button)(target));
+            
+            #line 98 "..\..\..\..\Views\ProductsView.xaml"
+            this.DeleteButton.Click += new System.Windows.RoutedEventHandler(this.DeleteButton_Click);
+            
+            #line default
+            #line hidden
+            return;
+            case 6:
+            this.ProductsDataGrid = ((System.Windows.Controls.DataGrid)(target));
+            
+            #line 150 "..\..\..\..\Views\ProductsView.xaml"
+            this.ProductsDataGrid.SelectionChanged += new System.Windows.Controls.SelectionChangedEventHandler(this.ProductsDataGrid_SelectionChanged);
+            
+            #line default
+            #line hidden
+            return;
+            }
+            this._contentLoaded = true;
+        }
+    }
+}
+

+ 169 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/ProductsView.g.i.cs

@@ -0,0 +1,169 @@
+#pragma checksum "..\..\..\..\Views\ProductsView.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "5B4225BD67D6163B7336275E5B7CC0B12F60D00F"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using WpfApp1.Views;
+
+
+namespace WpfApp1.Views {
+    
+    
+    /// <summary>
+    /// ProductsView
+    /// </summary>
+    public partial class ProductsView : System.Windows.Controls.UserControl, System.Windows.Markup.IComponentConnector {
+        
+        
+        #line 56 "..\..\..\..\Views\ProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.TextBox ProductIdTextBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 70 "..\..\..\..\Views\ProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.TextBox ProductNameTextBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 76 "..\..\..\..\Views\ProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.Button AddButton;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 84 "..\..\..\..\Views\ProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.Button UpdateButton;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 92 "..\..\..\..\Views\ProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.Button DeleteButton;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 139 "..\..\..\..\Views\ProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.DataGrid ProductsDataGrid;
+        
+        #line default
+        #line hidden
+        
+        private bool _contentLoaded;
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        public void InitializeComponent() {
+            if (_contentLoaded) {
+                return;
+            }
+            _contentLoaded = true;
+            System.Uri resourceLocater = new System.Uri("/WpfApp1;component/views/productsview.xaml", System.UriKind.Relative);
+            
+            #line 1 "..\..\..\..\Views\ProductsView.xaml"
+            System.Windows.Application.LoadComponent(this, resourceLocater);
+            
+            #line default
+            #line hidden
+        }
+        
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+        void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+            switch (connectionId)
+            {
+            case 1:
+            this.ProductIdTextBox = ((System.Windows.Controls.TextBox)(target));
+            return;
+            case 2:
+            this.ProductNameTextBox = ((System.Windows.Controls.TextBox)(target));
+            return;
+            case 3:
+            this.AddButton = ((System.Windows.Controls.Button)(target));
+            
+            #line 82 "..\..\..\..\Views\ProductsView.xaml"
+            this.AddButton.Click += new System.Windows.RoutedEventHandler(this.AddButton_Click);
+            
+            #line default
+            #line hidden
+            return;
+            case 4:
+            this.UpdateButton = ((System.Windows.Controls.Button)(target));
+            
+            #line 90 "..\..\..\..\Views\ProductsView.xaml"
+            this.UpdateButton.Click += new System.Windows.RoutedEventHandler(this.UpdateButton_Click);
+            
+            #line default
+            #line hidden
+            return;
+            case 5:
+            this.DeleteButton = ((System.Windows.Controls.Button)(target));
+            
+            #line 98 "..\..\..\..\Views\ProductsView.xaml"
+            this.DeleteButton.Click += new System.Windows.RoutedEventHandler(this.DeleteButton_Click);
+            
+            #line default
+            #line hidden
+            return;
+            case 6:
+            this.ProductsDataGrid = ((System.Windows.Controls.DataGrid)(target));
+            
+            #line 150 "..\..\..\..\Views\ProductsView.xaml"
+            this.ProductsDataGrid.SelectionChanged += new System.Windows.Controls.SelectionChangedEventHandler(this.ProductsDataGrid_SelectionChanged);
+            
+            #line default
+            #line hidden
+            return;
+            }
+            this._contentLoaded = true;
+        }
+    }
+}
+

BIN
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/SearchProductsView.baml


+ 118 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/SearchProductsView.g.cs

@@ -0,0 +1,118 @@
+#pragma checksum "..\..\..\..\Views\SearchProductsView.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "93A7E2F882145459DF806AF3EDAD2A90F0C1618E"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using WpfApp1.Views;
+
+
+namespace WpfApp1.Views {
+    
+    
+    /// <summary>
+    /// SearchProductsView
+    /// </summary>
+    public partial class SearchProductsView : System.Windows.Controls.UserControl, System.Windows.Markup.IComponentConnector {
+        
+        
+        #line 57 "..\..\..\..\Views\SearchProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.ComboBox DetailsComboBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 67 "..\..\..\..\Views\SearchProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.Button SearchButton;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 100 "..\..\..\..\Views\SearchProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.DataGrid ProductsByDetailsDataGrid;
+        
+        #line default
+        #line hidden
+        
+        private bool _contentLoaded;
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        public void InitializeComponent() {
+            if (_contentLoaded) {
+                return;
+            }
+            _contentLoaded = true;
+            System.Uri resourceLocater = new System.Uri("/WpfApp1;component/views/searchproductsview.xaml", System.UriKind.Relative);
+            
+            #line 1 "..\..\..\..\Views\SearchProductsView.xaml"
+            System.Windows.Application.LoadComponent(this, resourceLocater);
+            
+            #line default
+            #line hidden
+        }
+        
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+        void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+            switch (connectionId)
+            {
+            case 1:
+            this.DetailsComboBox = ((System.Windows.Controls.ComboBox)(target));
+            return;
+            case 2:
+            this.SearchButton = ((System.Windows.Controls.Button)(target));
+            
+            #line 74 "..\..\..\..\Views\SearchProductsView.xaml"
+            this.SearchButton.Click += new System.Windows.RoutedEventHandler(this.SearchButton_Click);
+            
+            #line default
+            #line hidden
+            return;
+            case 3:
+            this.ProductsByDetailsDataGrid = ((System.Windows.Controls.DataGrid)(target));
+            return;
+            }
+            this._contentLoaded = true;
+        }
+    }
+}
+

+ 118 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/Views/SearchProductsView.g.i.cs

@@ -0,0 +1,118 @@
+#pragma checksum "..\..\..\..\Views\SearchProductsView.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "93A7E2F882145459DF806AF3EDAD2A90F0C1618E"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using WpfApp1.Views;
+
+
+namespace WpfApp1.Views {
+    
+    
+    /// <summary>
+    /// SearchProductsView
+    /// </summary>
+    public partial class SearchProductsView : System.Windows.Controls.UserControl, System.Windows.Markup.IComponentConnector {
+        
+        
+        #line 57 "..\..\..\..\Views\SearchProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.ComboBox DetailsComboBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 67 "..\..\..\..\Views\SearchProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.Button SearchButton;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 100 "..\..\..\..\Views\SearchProductsView.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.DataGrid ProductsByDetailsDataGrid;
+        
+        #line default
+        #line hidden
+        
+        private bool _contentLoaded;
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        public void InitializeComponent() {
+            if (_contentLoaded) {
+                return;
+            }
+            _contentLoaded = true;
+            System.Uri resourceLocater = new System.Uri("/WpfApp1;component/views/searchproductsview.xaml", System.UriKind.Relative);
+            
+            #line 1 "..\..\..\..\Views\SearchProductsView.xaml"
+            System.Windows.Application.LoadComponent(this, resourceLocater);
+            
+            #line default
+            #line hidden
+        }
+        
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.13.0")]
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+        void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+            switch (connectionId)
+            {
+            case 1:
+            this.DetailsComboBox = ((System.Windows.Controls.ComboBox)(target));
+            return;
+            case 2:
+            this.SearchButton = ((System.Windows.Controls.Button)(target));
+            
+            #line 74 "..\..\..\..\Views\SearchProductsView.xaml"
+            this.SearchButton.Click += new System.Windows.RoutedEventHandler(this.SearchButton_Click);
+            
+            #line default
+            #line hidden
+            return;
+            case 3:
+            this.ProductsByDetailsDataGrid = ((System.Windows.Controls.DataGrid)(target));
+            return;
+            }
+            this._contentLoaded = true;
+        }
+    }
+}
+

+ 25 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.AssemblyInfo.cs

@@ -0,0 +1,25 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("WpfApp1")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
+[assembly: System.Reflection.AssemblyProductAttribute("WpfApp1")]
+[assembly: System.Reflection.AssemblyTitleAttribute("WpfApp1")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
+[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
+[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
+
+// Создано классом WriteCodeFragment MSBuild.
+

+ 1 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.AssemblyInfoInputs.cache

@@ -0,0 +1 @@
+5ac7be5a9a219a310f512482b3871af9c403f9ef5ecf304e7b56289ac0d20745

+ 16 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.GeneratedMSBuildEditorConfig.editorconfig

@@ -0,0 +1,16 @@
+is_global = true
+build_property.TargetFramework = net8.0-windows
+build_property.TargetPlatformMinVersion = 7.0
+build_property.UsingMicrosoftNETSdkWeb = 
+build_property.ProjectTypeGuids = 
+build_property.InvariantGlobalization = 
+build_property.PlatformNeutralAssembly = 
+build_property.EnforceExtendedAnalyzerRules = 
+build_property._SupportedPlatformList = Linux,macOS,Windows
+build_property.RootNamespace = WpfApp1
+build_property.ProjectDir = C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\
+build_property.EnableComHosting = 
+build_property.EnableGeneratedComInterfaceComImportInterop = 
+build_property.CsWinRTUseWindowsUIXamlProjections = false
+build_property.EffectiveAnalysisLevelStyle = 8.0
+build_property.EnableCodeStyleSeverity = 

+ 6 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.GlobalUsings.g.cs

@@ -0,0 +1,6 @@
+// <auto-generated/>
+global using global::System;
+global using global::System.Collections.Generic;
+global using global::System.Linq;
+global using global::System.Threading;
+global using global::System.Threading.Tasks;

BIN
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.assets.cache


BIN
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.csproj.AssemblyReference.cache


+ 0 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.csproj.BuildWithSkipAnalyzers


+ 1 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.csproj.CoreCompileInputs.cache

@@ -0,0 +1 @@
+bf30150c72ccaac607994cda35e5a0e9fd18094d8bf2ab7957fcb5d066123aa6

+ 35 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.csproj.FileListAbsolute.txt

@@ -0,0 +1,35 @@
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\bin\Debug\net8.0-windows\WpfApp1.exe
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\bin\Debug\net8.0-windows\WpfApp1.deps.json
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\bin\Debug\net8.0-windows\WpfApp1.runtimeconfig.json
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\bin\Debug\net8.0-windows\WpfApp1.dll
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\bin\Debug\net8.0-windows\WpfApp1.pdb
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\MainWindow.g.cs
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\Views\SearchProductsView.g.cs
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\App.g.cs
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\GeneratedInternalTypeHelper.g.cs
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\WpfApp1_MarkupCompile.cache
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\WpfApp1_MarkupCompile.lref
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\MainWindow.baml
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\Views\SearchProductsView.baml
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\WpfApp1.g.resources
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\WpfApp1.GeneratedMSBuildEditorConfig.editorconfig
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\WpfApp1.AssemblyInfoInputs.cache
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\WpfApp1.AssemblyInfo.cs
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\WpfApp1.csproj.CoreCompileInputs.cache
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\WpfApp1.dll
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\refint\WpfApp1.dll
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\WpfApp1.pdb
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\WpfApp1.genruntimeconfig.cache
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\ref\WpfApp1.dll
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\Views\ProductsView.g.cs
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\Views\ProductsView.baml
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\LoginWindow.g.cs
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\Views\DictionariesView.g.cs
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\LoginWindow.baml
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\Views\DictionariesView.baml
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\bin\Debug\net8.0-windows\Microsoft.Extensions.DependencyInjection.Abstractions.dll
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\bin\Debug\net8.0-windows\Microsoft.Extensions.Logging.Abstractions.dll
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\bin\Debug\net8.0-windows\Npgsql.dll
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\bin\Debug\net8.0-windows\System.Diagnostics.DiagnosticSource.dll
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\WpfApp1.csproj.AssemblyReference.cache
+C:\Users\Ilya\Documents\VS_PRACTICE_2026\WpfApp1\WpfApp1\obj\Debug\net8.0-windows\WpfApp1.csproj.Up2Date

+ 0 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.csproj.Up2Date


+ 80 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.designer.deps.json

@@ -0,0 +1,80 @@
+{
+  "runtimeTarget": {
+    "name": ".NETCoreApp,Version=v8.0",
+    "signature": ""
+  },
+  "compilationOptions": {},
+  "targets": {
+    ".NETCoreApp,Version=v8.0": {
+      "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": {
+        "runtime": {
+          "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
+            "assemblyVersion": "8.0.0.0",
+            "fileVersion": "8.0.23.53103"
+          }
+        }
+      },
+      "Microsoft.Extensions.Logging.Abstractions/8.0.0": {
+        "dependencies": {
+          "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+        },
+        "runtime": {
+          "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
+            "assemblyVersion": "8.0.0.0",
+            "fileVersion": "8.0.23.53103"
+          }
+        }
+      },
+      "Npgsql/10.0.3": {
+        "dependencies": {
+          "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+          "System.Diagnostics.DiagnosticSource": "9.0.11"
+        },
+        "runtime": {
+          "lib/net8.0/Npgsql.dll": {
+            "assemblyVersion": "10.0.3.0",
+            "fileVersion": "10.0.3.0"
+          }
+        }
+      },
+      "System.Diagnostics.DiagnosticSource/9.0.11": {
+        "runtime": {
+          "lib/net8.0/System.Diagnostics.DiagnosticSource.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.1125.51716"
+          }
+        }
+      }
+    }
+  },
+  "libraries": {
+    "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==",
+      "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.0",
+      "hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Logging.Abstractions/8.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+      "path": "microsoft.extensions.logging.abstractions/8.0.0",
+      "hashPath": "microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512"
+    },
+    "Npgsql/10.0.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w==",
+      "path": "npgsql/10.0.3",
+      "hashPath": "npgsql.10.0.3.nupkg.sha512"
+    },
+    "System.Diagnostics.DiagnosticSource/9.0.11": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-/QzMFklOm8Ak//YB0I2kR+ByxUndT63ucrRWQm0xZsuLExJWrVDeGKtYZDuBackd9dThbwMdOotIEc4c4KwJiw==",
+      "path": "system.diagnostics.diagnosticsource/9.0.11",
+      "hashPath": "system.diagnostics.diagnosticsource.9.0.11.nupkg.sha512"
+    }
+  }
+}

+ 25 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.designer.runtimeconfig.json

@@ -0,0 +1,25 @@
+{
+  "runtimeOptions": {
+    "tfm": "net8.0",
+    "frameworks": [
+      {
+        "name": "Microsoft.NETCore.App",
+        "version": "8.0.0"
+      },
+      {
+        "name": "Microsoft.WindowsDesktop.App",
+        "version": "8.0.0"
+      }
+    ],
+    "additionalProbingPaths": [
+      "C:\\Users\\Ilya\\.dotnet\\store\\|arch|\\|tfm|",
+      "C:\\Users\\Ilya\\.nuget\\packages",
+      "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
+    ],
+    "configProperties": {
+      "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": true,
+      "CSWINRT_USE_WINDOWS_UI_XAML_PROJECTIONS": false,
+      "Microsoft.NETCore.DotNetHostPolicy.SetAppPaths": true
+    }
+  }
+}

BIN
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.dll


BIN
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.g.resources


+ 1 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.genruntimeconfig.cache

@@ -0,0 +1 @@
+d67a261bb671f86b1a65027d73c19520cd4ffaefb76544ecc107aff6923332e1

BIN
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1.pdb


+ 25 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1_0buaima1_wpftmp.AssemblyInfo.cs

@@ -0,0 +1,25 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("WpfApp1")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
+[assembly: System.Reflection.AssemblyProductAttribute("WpfApp1")]
+[assembly: System.Reflection.AssemblyTitleAttribute("WpfApp1")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
+[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
+[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
+
+// Создано классом WriteCodeFragment MSBuild.
+

+ 1 - 0
WpfApp1/WpfApp1/obj/Debug/net8.0-windows/WpfApp1_0buaima1_wpftmp.AssemblyInfoInputs.cache

@@ -0,0 +1 @@
+5ac7be5a9a219a310f512482b3871af9c403f9ef5ecf304e7b56289ac0d20745

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff