---
title: Подключение к подсистеме Взаимодействия
slug: общие-бсп-подключение-к-подсистемам/подключение-к-подсистеме-взаимодействия
---

[Ссылка на ИТС](https://its.1c.ru/db/bsp3110doc#content:4:hdoc:issogl1_%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%8F)

## Настройка **определяемых типов**
В определяемый тип `КонтактВзаимодействия` необходимо включить справочники, элементы которых будут выступать контактами - `Контрагенты`, `Пользователи`, `КонтактныеЛицаКонтрагентов` и прочее. **`КонтактВзаимодействия` должен быть подключен к подсистеме `Контактная информация`**

В определяемый тип `ПредметВзаимодействия` необходимо включить справочники/документы, элементы которых будут выступать предметами взаимодействий - `ЗаказКлиента`, `ЗаказПоставщику`, `КоммерческоеПредложение` и прочее.

## Настройка модуля менеджера **предметов взаимодействий**

В модуле менеджера должны быть определены 2 экспортные функции:
- `ПолучитьКонтакты` - возвращает список контактов
- `ТекстЗапросаПоКонтактам` - возвращает текст запроса, который позволяет получить `КонтактыВзаимодействия` из предмета взаимодействия.
  
```bsl
// СтандартныеПодсистемы.Взаимодействия

// Получить контакты.
//
// Параметры:
//  Ссылка  - См.ОпределяемыйТип.ПредметВзаимодействия - объект, контакты которого необходимо получить.
//
// Возвращаемое значение:
//   Массив   - массив, содержащий контакты документа.
// 
Функция ПолучитьКонтакты(Ссылка) Экспорт
    
    Если НЕ ЗначениеЗаполнено(Ссылка) Тогда
        Возврат Новый Массив;
    КонецЕсли;
    
    Запрос = Новый Запрос;
    Запрос.Текст = ТекстЗапросаПоКонтактам();
    Запрос.УстановитьПараметр("Предмет", Ссылка);
    РезультатЗапроса = Запрос.Выполнить();
    
    Если РезультатЗапроса.Пустой() Тогда
        Возврат Новый Массив;
    КонецЕсли;

    Возврат РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Контакт");
    
КонецФункции

// Возвращает текст запроса по контактам взаимодействий, содержащимся в документе.
//
// Возвращаемое значение:
//   Строка
//
Функция ТекстЗапросаПоКонтактам(ЭтоФрагментЗапроса = Ложь) Экспорт
    
    ТекстЗапроса = "
        |ВЫБРАТЬ РАЗЛИЧНЫЕ
        |	ЗаказКлиента.Контрагент КАК Контакт 
        |ИЗ
        |	Документ.ЗаказКлиента КАК ЗаказКлиента
        |ГДЕ
        |	ЗаказКлиента.Ссылка = &Предмет
        |	И (НЕ ЗаказКлиента.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка))
        |
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |ВЫБРАТЬ
        |	ЗаказКлиента.КонтактноеЛицо
        |ИЗ
        |	Документ.ЗаказКлиента КАК ЗаказКлиента
        |ГДЕ
        |	ЗаказКлиента.Ссылка = &Предмет
        |	И (НЕ ЗаказКлиента.КонтактноеЛицо = ЗНАЧЕНИЕ(Справочник.КонтактныеЛицаКонтрагентов.ПустаяСсылка))";
    
    Если ЭтоФрагментЗапроса Тогда
        ТекстЗапроса = "
            | ОБЪЕДИНИТЬ ВСЕ
            |" + ТекстЗапроса;
    КонецЕсли;
        
    Возврат ТекстЗапроса;
    
КонецФункции

// Конец СтандартныеПодсистемы.Взаимодействия
```

<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">
<summary style="font-weight: bold; cursor: pointer;">Об аргументе ЭтоФрагментЗапроса</summary>

Аргумент `ЭтоФрагментЗапроса` функции `ТекстЗапросаПоКонтактам` необходим при вызове этого метода в момент открытия формы добавления `участников взаимодействия` (по стеку из процедуры `ВзаимодействияПереопределяемый.ПриПоискеКонтактов`) - система автоматически подставляет к предопределенным источникам контактов взаимодействия те, которые указаны в конкретном предмете:

```bsl
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    КонтактыВзаимодействия.Контакт КАК Контакт
ПОМЕСТИТЬ ТаблицаКонтактов
ИЗ
    Документ.Встреча.Участники КАК КонтактыВзаимодействия
ГДЕ
...
...
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ РАЗЛИЧНЫЕ
    КонтактыВзаимодействия.Контакт
ИЗ
    Документ.ЗапланированноеВзаимодействие.Участники КАК КонтактыВзаимодействия
ГДЕ
...
...
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ РАЗЛИЧНЫЕ
    КонтактыВзаимодействия.АбонентКонтакт
ИЗ
    Документ.ТелефонныйЗвонок КАК КонтактыВзаимодействия
ГДЕ
...
...
ОБЪЕДИНИТЬ ВСЕ
...

```
> и еще много источников, которые подсистема собирает 
```bsl
...

// Это наша реализация
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЗаказКлиента.Контрагент
ИЗ
    Документ.ЗаказКлиента КАК ЗаказКлиента
ГДЕ
    ЗаказКлиента.Ссылка = &Предмет
    И НЕ ЗаказКлиента.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ЗаказКлиента.КонтактноеЛицо
ИЗ
    Документ.ЗаказКлиента КАК ЗаказКлиента
ГДЕ
    ЗаказКлиента.Ссылка = &Предмет
    И НЕ ЗаказКлиента.КонтактноеЛицо = ЗНАЧЕНИЕ(Справочник.КонтактныеЛицаКонтрагентов.ПустаяСсылка)
```

![Изображение](/bsp-vzaimodeystviya/1.png)

</details>

## Настройка переопределяемых модулей
При необходимости можно вписать реализацию в функции переопределяемых модулей подсистемы:
- `ВзаимодействияКлиентСерверПереопределяемый` (Обязательно),
- `ВзаимодействияПереопределяемый` (Обязательно),
- `ВзаимодействияКлиентПереопределяемый` (опционально)

### Общий модуль ВзаимодействияКлиентСерверПереопределяемый
Дополнить код процедур:
- `ПриОпределенииВозможныхПредметов` - добавляем предметы, которые были добавлены в определяемый тип `ПредметВзаимодействия` (кроме стандартных)
- `ПриОпределенииВозможныхКонтактов` - добавляем описание контактов (из определяемого типа `КонтактВзаимодействия`). Контакт должен быть подключен к подсистеме `КонтактнаяИнформация`

```bsl

// Задает типы предметов взаимодействий, например: заказы, вакансии и т.п.
// Используется, если в конфигурации определен хотя бы один предмет взаимодействий. 
//
// Параметры:
//  ТипыПредметов  - Массив - предметы взаимодействий (Строка),
//                            например, "ДокументСсылка.ЗаказПокупателя" и т.п.
//
Процедура ПриОпределенииВозможныхПредметов(ТипыПредметов) Экспорт
    
    // _Демо начало примера
    ТипыПредметов.Добавить("ДокументСсылка._ДемоЗаказПокупателя");
    // _Демо конец примера
    
КонецПроцедуры

// Задает описания возможных типов контактов взаимодействий, например: партнеры, контактные лица и т.п.
// Используется, если в конфигурации определен хотя бы один тип контактов взаимодействий,
// помимо справочника Пользователи. 
//
// Параметры:
//  ТипыКонтактов - Массив - содержит описания типов контактов взаимодействий (Структура) и их свойства:
//     * Тип                               - Тип    - тип ссылки контакта.
//     * Имя                               - Строка - имя типа контакта , как оно определено в метаданных.
//     * Представление                     - Строка - представление типа контакта для отображения пользователю.
//     * Иерархический                     - Булево - признак того, является ли справочник иерархическим.
//     * ЕстьВладелец                      - Булево - признак того, что у контакта есть владелец.
//     * ИмяВладельца                      - Строка - имя владельца контакта, как оно определено в метаданных.
//     * ИскатьПоДомену                    - Булево - признак того, что контакты данного типа будет подбираться
//                                                    по совпадению домена, а не по полному адресу электронной почты.
//     * Связь                             - Строка - описывает возможную связь данного контакта с другим контактом, в
//                                                    случае когда текущий контакт является реквизитом другого контакта.
//                                                    Описывается следующей строкой "ИмяТаблицы.ИмяРеквизита".
//     * ИмяРеквизитаПредставлениеКонтакта - Строка - имя реквизита контакта, из которого будет получено
//                                                    представление контакта. Если не указано, то используется
//                                                    стандартный реквизит Наименование.
//     * ВозможностьИнтерактивногоСоздания - Булево - признак возможности интерактивного создания контакта из
//                                                    документов - взаимодействий.
//     * ИмяФормыНовогоКонтакта            - Строка - полное имя формы для создания нового контакта.
//                                                    Например, "Справочник.Партнеры.Форма.ПомощникНового".
//                                                    Если не заполнено, то открывается форма элемента по умолчанию.
//
Процедура ПриОпределенииВозможныхКонтактов(ТипыКонтактов) Экспорт

    // _Демо начало примера
    Контакт = ВзаимодействияКлиентСервер.НовоеОписаниеКонтакта();
    Контакт.Тип = Тип("СправочникСсылка._ДемоПартнеры");
    Контакт.Имя = "_ДемоПартнеры";
    Контакт.Представление = НСтр("ru = 'Демо: Партнеры'");
    Контакт.Иерархический = Истина;
    ТипыКонтактов.Добавить(Контакт);
    
    Контакт = ВзаимодействияКлиентСервер.НовоеОписаниеКонтакта();
    Контакт.Тип = Тип("СправочникСсылка._ДемоКонтактныеЛицаПартнеров");
    Контакт.Имя = "_ДемоКонтактныеЛицаПартнеров";
    Контакт.Представление = НСтр("ru = 'Демо: Контактные лица партнеров'");
    Контакт.ЕстьВладелец = Истина;
    Контакт.ИмяВладельца = "_ДемоПартнеры";
    ТипыКонтактов.Добавить(Контакт);
    
    Контакт = ВзаимодействияКлиентСервер.НовоеОписаниеКонтакта();
    Контакт.Тип = Тип("СправочникСсылка._ДемоКонтрагенты");
    Контакт.Имя = "_ДемоКонтрагенты";
    Контакт.Представление = НСтр("ru = 'Демо: Контрагенты'");
    ТипыКонтактов.Добавить(Контакт);
    // _Демо конец примера

КонецПроцедуры

```

### Общий модуль ВзаимодействияПереопределяемый

Дополнить процедуру `ПриПоискеКонтактов`

```bsl

// Вызывается для получения контактов (участников) по указанному предмету взаимодействия.
// Используется, если в конфигурации определен хотя бы один предмет взаимодействий.
//
// Параметры:
//  ИмяТаблицыКонтактов   - Строка - имя таблицы предмета взаимодействий, в котором требуется выполнить поиск.
//                                   Например, "Документы.ЗаказПокупателя".
//  ТекстЗапросаДляПоиска - Строка - в этот параметр указать фрагмент запроса для поиска. При выполнении запроса 
//                                   в параметр запроса &Предмет подставляется ссылка на предмет взаимодействия.
//
Процедура ПриПоискеКонтактов(Знач ИмяТаблицыКонтактов, ТекстЗапросаДляПоиска) Экспорт

    Если ИмяТаблицыКонтактов = Метаданные.Документы.ЗаказКлиента.ПолноеИмя() Тогда
        ТекстЗапросаДляПоиска = Документы.ЗаказКлиента.ТекстЗапросаПоКонтактам(Истина);
    КонецЕсли;
    
КонецПроцедуры

```

## Если не добавлена подсистема "Настройки программы"

<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">
<summary style="font-weight: bold; cursor: pointer;">Подробнее</summary>
    
Если в конфигурации не используется подсистема Настройки программы, то на рабочем месте администратора приложения необходимо разместить константы:

- `ИспользоватьПочтовыйКлиент`,
- `ОтправлятьПисьмаВФорматеHTML`,
- `ИспользоватьПрочиеВзаимодействия`,
- `ИспользоватьПризнакРассмотрено`.
См. пример в форме `Органайзер` обработки `ПанельАдминистрированияБСП`.

В форме персональных настроек разместить вызов команды `ЖурналДокументов.Взаимодействия.Команда.НастройкиРаботыСПочтой`. Пример размещения см. в демонстрационной конфигурации в общей форме `_ДемоМоиНастройки`.

Разместить в командном интерфейсе пользователей, использующих подсистему, журнал документов `Взаимодействия`.

</details>