diff --git a/public/bsp-vzaimodeystviya/1.png b/public/bsp-vzaimodeystviya/1.png
new file mode 100644
index 0000000..9799c1f
Binary files /dev/null and b/public/bsp-vzaimodeystviya/1.png differ
diff --git a/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/3.1.10/Взаимодействия/Подключение к подсистеме Взаимодействия.md b/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/3.1.10/Взаимодействия/Подключение к подсистеме Взаимодействия.md
index b0bc74a..062bd18 100644
--- a/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/3.1.10/Взаимодействия/Подключение к подсистеме Взаимодействия.md
+++ b/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/3.1.10/Взаимодействия/Подключение к подсистеме Взаимодействия.md
@@ -2,22 +2,166 @@
title: Подключение к подсистеме Взаимодействия
slug: общие-бсп-стандартные-подсистемы-3-1-10-взаимодействия/подключение-к-подсистеме-взаимодействия
---
-# Настройка объекта
-Создаем новый документ/справочник. В документе должны быть реквизит `Ответственный` (СправочникСсылка.Пользователи) и табличная часть `ПартнерыИКонтактныеЛица`.
-Табличная часть со следующими реквизитами:
+## Настройка **определяемых типов**
+В определяемый тип `КонтактВзаимодействия` необходимо включить справочники, элементы которых будут выступать контактами - `Контрагенты`, `Пользователи`, `КонтактныеЛицаКонтрагентов` и прочее. **`КонтактВзаимодействия` должен быть подключен к подсистеме `Контактная информация`**
-- `Партнер` (СправочникСсылка.Партнеры)
-- `РольПартнера` (СправочникСсылка.РолиПартнеровВСделкахИПроектах)
-- `КонтактноеЛицо` (СправочникСсылка.КонтактныеЛицаПартнеров)
-- `РольКонтактногоЛица` (СправочникСсылка.РолиКонтактныхЛицВСделакахИПроектах)
-- `Комментарий` (Строка)
+В определяемый тип `ПредметВзаимодействия` необходимо включить справочники/документы, элементы которых будут выступать предметами взаимодействий - `ЗаказКлиента`, `ЗаказПоставщику`, `КоммерческоеПредложение` и прочее.
-Добавляем этот документ в определяемый тип `ПредметВзаимодействия`
+## Настройка модуля менеджера **предметов взаимодействий**
-# Общие модули
-В общем модуле `ВзаимодействияКлиентСерверПереопределяемый` в процедуре `ПриОпределенииВозможныхПредметов` добавляем наш документ
+В модуле менеджера должны быть определены 2 экспортные функции:
+- `ПолучитьКонтакты` - возвращает список контактов
+- `ТекстЗапросаПоКонтактам` - возвращает текст запроса, который позволяет получить `КонтактыВзаимодействия` из предмета взаимодействия.
+
```bsl
+// СтандартныеПодсистемы.Взаимодействия
+
+// Получить контакты.
+//
+// Параметры:
+// Ссылка - См.ОпределяемыйТип.ПредметВзаимодействия - объект, контакты которого необходимо получить.
+//
+// Возвращаемое значение:
+// Массив - массив, содержащий контакты документа.
+//
+Функция ПолучитьКонтакты(Ссылка) Экспорт
+
+ Если НЕ ЗначениеЗаполнено(Ссылка) Тогда
+ Возврат Новый Массив;
+ КонецЕсли;
+
+ Запрос = Новый Запрос;
+ Запрос.Текст = ТекстЗапросаПоКонтактам();
+ Запрос.УстановитьПараметр("Предмет", Ссылка);
+ РезультатЗапроса = Запрос.Выполнить();
+
+ Если РезультатЗапроса.Пустой() Тогда
+ Возврат Новый Массив;
+ КонецЕсли;
+
+ Возврат РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Контакт");
+
+КонецФункции
+
+// Возвращает текст запроса по контактам взаимодействий, содержащимся в документе.
+//
+// Возвращаемое значение:
+// Строка
+//
+Функция ТекстЗапросаПоКонтактам(ЭтоФрагментЗапроса = Ложь) Экспорт
+
+ ТекстЗапроса = "
+ |ВЫБРАТЬ РАЗЛИЧНЫЕ
+ | ЗаказКлиента.Контрагент КАК Контакт
+ |ИЗ
+ | Документ.ЗаказКлиента КАК ЗаказКлиента
+ |ГДЕ
+ | ЗаказКлиента.Ссылка = &Предмет
+ | И (НЕ ЗаказКлиента.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка))
+ |
+ |ОБЪЕДИНИТЬ ВСЕ
+ |
+ |ВЫБРАТЬ
+ | ЗаказКлиента.КонтактноеЛицо
+ |ИЗ
+ | Документ.ЗаказКлиента КАК ЗаказКлиента
+ |ГДЕ
+ | ЗаказКлиента.Ссылка = &Предмет
+ | И (НЕ ЗаказКлиента.КонтактноеЛицо = ЗНАЧЕНИЕ(Справочник.КонтактныеЛицаКонтрагентов.ПустаяСсылка))";
+
+ Если ЭтоФрагментЗапроса Тогда
+ ТекстЗапроса = "
+ | ОБЪЕДИНИТЬ ВСЕ
+ |" + ТекстЗапроса;
+ КонецЕсли;
+
+ Возврат ТекстЗапроса;
+
+КонецФункции
+
+// Конец СтандартныеПодсистемы.Взаимодействия
+```
+
+
+Об аргументе ЭтоФрагментЗапроса
+
+Аргумент `ЭтоФрагментЗапроса` функции `ТекстЗапросаПоКонтактам` необходим при вызове этого метода в момент открытия формы добавления `участников взаимодействия` (по стеку из процедуры `ВзаимодействияПереопределяемый.ПриПоискеКонтактов`) - система автоматически подставляет к предопределенным источникам контактов взаимодействия те, которые указаны в конкретном предмете:
+
+```bsl
+ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
+ КонтактыВзаимодействия.Контакт КАК Контакт
+ПОМЕСТИТЬ ТаблицаКонтактов
+ИЗ
+ Документ.Встреча.Участники КАК КонтактыВзаимодействия
+ГДЕ
+...
+...
+ОБЪЕДИНИТЬ ВСЕ
+
+ВЫБРАТЬ РАЗЛИЧНЫЕ
+ КонтактыВзаимодействия.Контакт
+ИЗ
+ Документ.ЗапланированноеВзаимодействие.Участники КАК КонтактыВзаимодействия
+ГДЕ
+...
+...
+ОБЪЕДИНИТЬ ВСЕ
+
+ВЫБРАТЬ РАЗЛИЧНЫЕ
+ КонтактыВзаимодействия.АбонентКонтакт
+ИЗ
+ Документ.ТелефонныйЗвонок КАК КонтактыВзаимодействия
+ГДЕ
+...
+...
+ОБЪЕДИНИТЬ ВСЕ
+...
+
+```
+> и еще много источников, которые подсистема собирает
+```bsl
+...
+
+// Это наша реализация
+ОБЪЕДИНИТЬ ВСЕ
+
+ВЫБРАТЬ РАЗЛИЧНЫЕ
+ ЗаказКлиента.Контрагент
+ИЗ
+ Документ.ЗаказКлиента КАК ЗаказКлиента
+ГДЕ
+ ЗаказКлиента.Ссылка = &Предмет
+ И НЕ ЗаказКлиента.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
+
+ОБЪЕДИНИТЬ ВСЕ
+
+ВЫБРАТЬ
+ ЗаказКлиента.КонтактноеЛицо
+ИЗ
+ Документ.ЗаказКлиента КАК ЗаказКлиента
+ГДЕ
+ ЗаказКлиента.Ссылка = &Предмет
+ И НЕ ЗаказКлиента.КонтактноеЛицо = ЗНАЧЕНИЕ(Справочник.КонтактныеЛицаКонтрагентов.ПустаяСсылка)
+```
+
+
+
+
+
+## Настройка переопределяемых модулей
+При необходимости можно вписать реализацию в функции переопределяемых модулей подсистемы:
+- `ВзаимодействияКлиентСерверПереопределяемый` (Обязательно),
+- `ВзаимодействияПереопределяемый` (Обязательно),
+- `ВзаимодействияКлиентПереопределяемый` (опционально)
+
+### Общий модуль ВзаимодействияКлиентСерверПереопределяемый
+Дополнить код процедур:
+- `ПриОпределенииВозможныхПредметов` - добавляем предметы, которые были добавлены в определяемый тип `ПредметВзаимодействия` (кроме стандартных)
+- `ПриОпределенииВозможныхКонтактов` - добавляем описание контактов (из определяемого типа `КонтактВзаимодействия`). Контакт должен быть подключен к подсистеме `КонтактнаяИнформация`
+
+```bsl
+
// Задает типы предметов взаимодействий, например: заказы, вакансии и т.п.
// Используется, если в конфигурации определен хотя бы один предмет взаимодействий.
//
@@ -26,124 +170,108 @@ slug: общие-бсп-стандартные-подсистемы-3-1-10-вз
// например, "ДокументСсылка.ЗаказПокупателя" и т.п.
//
Процедура ПриОпределенииВозможныхПредметов(ТипыПредметов) Экспорт
-
- ТипыПредметов.Добавить("ДокументСсылка.ТестовыйДокумент");
-
-КонецПроцедуры
-```
-# Настройка формы объекта
-На форме документа создаем реквизит `ВзаимодействиеОснование` с составным типом `ДокументСсылка.ЭлектронноеПисьмоИсходящее, ДокументСсылка.ЗапланированноеВзаимодействие, ДокументСсылка.ЭлектронноеПисьмоВходящее, ДокументСсылка.ТелефонныйЗвонок, ДокументСсылка.Встреча`; реквизит `НеобходимоОповещение` типа `Булево`
-
-В обработчиках `ПриСозданииНаСервере`, `ПриЗаписиНаСервере` и `ПослеЗаписи` определяем вызовы стандартных процедур
-```bsl
-&НаСервере
-Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
-
- // СтандартныеПодсистемы.Взаимодействия
- Взаимодействия.ПодготовитьОповещения(ЭтотОбъект,Параметры);
- // Конец СтандартныеПодсистемы.Взаимодействия
-
+
+ // _Демо начало примера
+ ТипыПредметов.Добавить("ДокументСсылка._ДемоЗаказПокупателя");
+ // _Демо конец примера
+
КонецПроцедуры
-&НаСервере
-Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
-
- // СтандартныеПодсистемы.Взаимодействия
- Если ЗначениеЗаполнено(ВзаимодействиеОснование) Тогда
- Взаимодействия.ПриЗаписиПредметаИзФормы(
- ТекущийОбъект.Ссылка, ВзаимодействиеОснование, Отказ);
- КонецЕсли;
- // Конец СтандартныеПодсистемы.Взаимодействия
-
-КонецПроцедуры
-
-&НаКлиенте
-Процедура ПослеЗаписи(ПараметрыЗаписи)
-
- // СтандартныеПодсистемы.Взаимодействия
- ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтотОбъект,Объект,ПараметрыЗаписи,"ТестовыйДокумент");
- // Конец СтандартныеПодсистемы.Взаимодействия
-
-КонецПроцедуры
-```
-
-# Настройка модуля менеджера
-В модуле менеджера должна быть реализована экспортная функция `ПолучитьКонтакты`, которая будет возвращать список контактных лиц для заполнения в документе взаимодействия. Например:
-```bsl
-// Получить партнера и контактных лиц сделки.
+// Задает описания возможных типов контактов взаимодействий, например: партнеры, контактные лица и т.п.
+// Используется, если в конфигурации определен хотя бы один тип контактов взаимодействий,
+// помимо справочника Пользователи.
//
// Параметры:
-// Ссылка - ДокументСсылка._ДемоЗаказПокупателя - документ, контакты которого необходимо получить.
+// ТипыКонтактов - Массив - содержит описания типов контактов взаимодействий (Структура) и их свойства:
+// * Тип - Тип - тип ссылки контакта.
+// * Имя - Строка - имя типа контакта , как оно определено в метаданных.
+// * Представление - Строка - представление типа контакта для отображения пользователю.
+// * Иерархический - Булево - признак того, является ли справочник иерархическим.
+// * ЕстьВладелец - Булево - признак того, что у контакта есть владелец.
+// * ИмяВладельца - Строка - имя владельца контакта, как оно определено в метаданных.
+// * ИскатьПоДомену - Булево - признак того, что контакты данного типа будет подбираться
+// по совпадению домена, а не по полному адресу электронной почты.
+// * Связь - Строка - описывает возможную связь данного контакта с другим контактом, в
+// случае когда текущий контакт является реквизитом другого контакта.
+// Описывается следующей строкой "ИмяТаблицы.ИмяРеквизита".
+// * ИмяРеквизитаПредставлениеКонтакта - Строка - имя реквизита контакта, из которого будет получено
+// представление контакта. Если не указано, то используется
+// стандартный реквизит Наименование.
+// * ВозможностьИнтерактивногоСоздания - Булево - признак возможности интерактивного создания контакта из
+// документов - взаимодействий.
+// * ИмяФормыНовогоКонтакта - Строка - полное имя формы для создания нового контакта.
+// Например, "Справочник.Партнеры.Форма.ПомощникНового".
+// Если не заполнено, то открывается форма элемента по умолчанию.
//
-// Возвращаемое значение:
-// Массив - массив, содержащий контакты документа.
-//
-Функция ПолучитьКонтакты(Ссылка) Экспорт
-
- Если НЕ ЗначениеЗаполнено(Ссылка) Тогда
- Возврат Новый Массив;
- КонецЕсли;
-
- Запрос = Новый Запрос;
- Запрос.Текст = ТекстЗапросаПоКонтактам();
- Запрос.УстановитьПараметр("Предмет", Ссылка);
- РезультатЗапроса = Запрос.Выполнить();
-
- Если РезультатЗапроса.Пустой() Тогда
- Возврат Новый Массив;
- КонецЕсли;
+Процедура ПриОпределенииВозможныхКонтактов(ТипыКонтактов) Экспорт
+
+ // _Демо начало примера
+ Контакт = ВзаимодействияКлиентСервер.НовоеОписаниеКонтакта();
+ Контакт.Тип = Тип("СправочникСсылка._ДемоПартнеры");
+ Контакт.Имя = "_ДемоПартнеры";
+ Контакт.Представление = НСтр("ru = 'Демо: Партнеры'");
+ Контакт.Иерархический = Истина;
+ ТипыКонтактов.Добавить(Контакт);
+
+ Контакт = ВзаимодействияКлиентСервер.НовоеОписаниеКонтакта();
+ Контакт.Тип = Тип("СправочникСсылка._ДемоКонтактныеЛицаПартнеров");
+ Контакт.Имя = "_ДемоКонтактныеЛицаПартнеров";
+ Контакт.Представление = НСтр("ru = 'Демо: Контактные лица партнеров'");
+ Контакт.ЕстьВладелец = Истина;
+ Контакт.ИмяВладельца = "_ДемоПартнеры";
+ ТипыКонтактов.Добавить(Контакт);
+
+ Контакт = ВзаимодействияКлиентСервер.НовоеОписаниеКонтакта();
+ Контакт.Тип = Тип("СправочникСсылка._ДемоКонтрагенты");
+ Контакт.Имя = "_ДемоКонтрагенты";
+ Контакт.Представление = НСтр("ru = 'Демо: Контрагенты'");
+ ТипыКонтактов.Добавить(Контакт);
+ // _Демо конец примера
+
+КонецПроцедуры
- Возврат РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Контакт");
-
-КонецФункции
```
-> Но эта функция может возвращать и пустой массив
-# Опционально
+### Общий модуль ВзаимодействияПереопределяемый
-В модуле менеджера каждого объекта метаданных, определенного как «`предмет взаимодействий`», необходимо реализовать экспортную функцию `ТекстЗапросаПоКонтактам`, в которой сформировать текст запроса по контактам, содержащимся в предмете взаимодействий. Например, ссылки на контакты взаимодействий могут иметься в реквизитах шапки и табличных частей предметов взаимодействий.
+Дополнить процедуру `ПриПоискеКонтактов`
-Функция принимает необязательный параметр `ЭтоФрагментЗапроса` типа `Булево`, указывающий на режим формирования запроса. Если данный параметр имеет значение `Истина`, то формируемый в функции запрос является частью другого запроса и должен начинаться с конструкции `ОБЪЕДИНИТЬ`. Возвращаемое значение – `Строка`, содержащая в себе текст запроса по контактам предмета взаимодействий. Например
```bsl
-Функция ТекстЗапросаПоКонтактам(ЭтоФрагментЗапроса = Ложь) Экспорт
-
- ТекстЗапроса = "
- |ВЫБРАТЬ РАЗЛИЧНЫЕ
- | _ДемоЗаказПокупателя.Партнер КАК Контакт
- |ИЗ
- | Документ._ДемоЗаказПокупателя КАК _ДемоЗаказПокупателя
- |ГДЕ
- | _ДемоЗаказПокупателя.Ссылка = &Предмет
- | И (НЕ _ДемоЗаказПокупателя.Партнер = ЗНАЧЕНИЕ(Справочник._ДемоПартнеры.ПустаяСсылка))
- |
- |ОБЪЕДИНИТЬ ВСЕ
- |
- |ВЫБРАТЬ РАЗЛИЧНЫЕ
- | _ДемоЗаказПокупателяПартнерыИКонтактныеЛица.Партнер
- |ИЗ
- | Документ._ДемоЗаказПокупателя.ПартнерыИКонтактныеЛица КАК _ДемоЗаказПокупателяПартнерыИКонтактныеЛица
- |ГДЕ
- | _ДемоЗаказПокупателяПартнерыИКонтактныеЛица.Ссылка = &Предмет
- | И (НЕ _ДемоЗаказПокупателяПартнерыИКонтактныеЛица.Партнер = ЗНАЧЕНИЕ(Справочник._ДемоПартнеры.ПустаяСсылка))
- | И _ДемоЗаказПокупателяПартнерыИКонтактныеЛица.КонтактноеЛицо = ЗНАЧЕНИЕ(Справочник._ДемоКонтактныеЛицаПартнеров.ПустаяСсылка)
- |
- |ОБЪЕДИНИТЬ ВСЕ
- |
- |ВЫБРАТЬ
- | _ДемоЗаказПокупателяПартнерыИКонтактныеЛица.КонтактноеЛицо
- |ИЗ
- | Документ._ДемоЗаказПокупателя.ПартнерыИКонтактныеЛица КАК _ДемоЗаказПокупателяПартнерыИКонтактныеЛица
- |ГДЕ
- | _ДемоЗаказПокупателяПартнерыИКонтактныеЛица.Ссылка = &Предмет
- | И (НЕ _ДемоЗаказПокупателяПартнерыИКонтактныеЛица.КонтактноеЛицо = ЗНАЧЕНИЕ(Справочник._ДемоКонтактныеЛицаПартнеров.ПустаяСсылка))";
-
- Если ЭтоФрагментЗапроса Тогда
- ТекстЗапроса = "
- | ОБЪЕДИНИТЬ ВСЕ
- |" + ТекстЗапроса;
- КонецЕсли;
-
- Возврат ТекстЗапроса;
-
-КонецФункции
-```
\ No newline at end of file
+
+// Вызывается для получения контактов (участников) по указанному предмету взаимодействия.
+// Используется, если в конфигурации определен хотя бы один предмет взаимодействий.
+//
+// Параметры:
+// ИмяТаблицыКонтактов - Строка - имя таблицы предмета взаимодействий, в котором требуется выполнить поиск.
+// Например, "Документы.ЗаказПокупателя".
+// ТекстЗапросаДляПоиска - Строка - в этот параметр указать фрагмент запроса для поиска. При выполнении запроса
+// в параметр запроса &Предмет подставляется ссылка на предмет взаимодействия.
+//
+Процедура ПриПоискеКонтактов(Знач ИмяТаблицыКонтактов, ТекстЗапросаДляПоиска) Экспорт
+
+ Если ИмяТаблицыКонтактов = Метаданные.Документы.ЗаказКлиента.ПолноеИмя() Тогда
+ ТекстЗапросаДляПоиска = Документы.ЗаказКлиента.ТекстЗапросаПоКонтактам(Истина);
+ КонецЕсли;
+
+КонецПроцедуры
+
+```
+
+## Если не добавлена подсистема "Настройки программы"
+
+
+Подробнее
+
+Если в конфигурации не используется подсистема Настройки программы, то на рабочем месте администратора приложения необходимо разместить константы:
+
+- `ИспользоватьПочтовыйКлиент`,
+- `ОтправлятьПисьмаВФорматеHTML`,
+- `ИспользоватьПрочиеВзаимодействия`,
+- `ИспользоватьПризнакРассмотрено`.
+См. пример в форме `Органайзер` обработки `ПанельАдминистрированияБСП`.
+
+В форме персональных настроек разместить вызов команды `ЖурналДокументов.Взаимодействия.Команда.НастройкиРаботыСПочтой`. Пример размещения см. в демонстрационной конфигурации в общей форме `_ДемоМоиНастройки`.
+
+Разместить в командном интерфейсе пользователей, использующих подсистему, журнал документов `Взаимодействия`.
+
+
\ No newline at end of file