--- title: Взаимодействия slug: общие-подключение-объектов-к-бсп-подключение-к-подсистемам/взаимодействия --- # Настройка объекта Создаем новый документ/справочник. В документе должны быть реквизит `Ответственный` (СправочникСсылка.Пользователи) и табличная часть `ПартнерыИКонтактныеЛица`. Табличная часть со следующими реквизитами: - `Партнер` (СправочникСсылка.Партнеры) - `РольПартнера` (СправочникСсылка.РолиПартнеровВСделкахИПроектах) - `КонтактноеЛицо` (СправочникСсылка.КонтактныеЛицаПартнеров) - `РольКонтактногоЛица` (СправочникСсылка.РолиКонтактныхЛицВСделакахИПроектах) - `Комментарий` (Строка) Добавляем этот документ в определяемый тип `ПредметВзаимодействия` # Общие модули В общем модуле `ВзаимодействияКлиентСерверПереопределяемый` в процедуре `ПриОпределенииВозможныхПредметов` добавляем наш документ ```bsl // Задает типы предметов взаимодействий, например: заказы, вакансии и т.п. // Используется, если в конфигурации определен хотя бы один предмет взаимодействий. // // Параметры: // ТипыПредметов - Массив - предметы взаимодействий (Строка), // например, "ДокументСсылка.ЗаказПокупателя" и т.п. // Процедура ПриОпределенииВозможныхПредметов(ТипыПредметов) Экспорт ТипыПредметов.Добавить("ДокументСсылка.ТестовыйДокумент"); КонецПроцедуры ``` # Настройка формы объекта На форме документа создаем реквизит `ВзаимодействиеОснование` с составным типом `ДокументСсылка.ЭлектронноеПисьмоИсходящее, ДокументСсылка.ЗапланированноеВзаимодействие, ДокументСсылка.ЭлектронноеПисьмоВходящее, ДокументСсылка.ТелефонныйЗвонок, ДокументСсылка.Встреча`; реквизит `НеобходимоОповещение` типа `Булево` В обработчиках `ПриСозданииНаСервере`, `ПриЗаписиНаСервере` и `ПослеЗаписи` определяем вызовы стандартных процедур ```bsl &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) // СтандартныеПодсистемы.Взаимодействия Взаимодействия.ПодготовитьОповещения(ЭтотОбъект,Параметры); // Конец СтандартныеПодсистемы.Взаимодействия КонецПроцедуры &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) // СтандартныеПодсистемы.Взаимодействия Если ЗначениеЗаполнено(ВзаимодействиеОснование) Тогда Взаимодействия.ПриЗаписиПредметаИзФормы( ТекущийОбъект.Ссылка, ВзаимодействиеОснование, Отказ); КонецЕсли; // Конец СтандартныеПодсистемы.Взаимодействия КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) // СтандартныеПодсистемы.Взаимодействия ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтотОбъект,Объект,ПараметрыЗаписи,"ТестовыйДокумент"); // Конец СтандартныеПодсистемы.Взаимодействия КонецПроцедуры ``` # Настройка модуля менеджера В модуле менеджера должна быть реализована экспортная функция `ПолучитьКонтакты`, которая будет возвращать список контактных лиц для заполнения в документе взаимодействия. Например: ```bsl // Получить партнера и контактных лиц сделки. // // Параметры: // Ссылка - ДокументСсылка._ДемоЗаказПокупателя - документ, контакты которого необходимо получить. // // Возвращаемое значение: // Массив - массив, содержащий контакты документа. // Функция ПолучитьКонтакты(Ссылка) Экспорт Если НЕ ЗначениеЗаполнено(Ссылка) Тогда Возврат Новый Массив; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапросаПоКонтактам(); Запрос.УстановитьПараметр("Предмет", Ссылка); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Возврат Новый Массив; КонецЕсли; Возврат РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Контакт"); КонецФункции ``` > Но эта функция может возвращать и пустой массив # Опционально В модуле менеджера каждого объекта метаданных, определенного как «`предмет взаимодействий`», необходимо реализовать экспортную функцию `ТекстЗапросаПоКонтактам`, в которой сформировать текст запроса по контактам, содержащимся в предмете взаимодействий. Например, ссылки на контакты взаимодействий могут иметься в реквизитах шапки и табличных частей предметов взаимодействий. Функция принимает необязательный параметр `ЭтоФрагментЗапроса` типа `Булево`, указывающий на режим формирования запроса. Если данный параметр имеет значение `Истина`, то формируемый в функции запрос является частью другого запроса и должен начинаться с конструкции `ОБЪЕДИНИТЬ`. Возвращаемое значение – `Строка`, содержащая в себе текст запроса по контактам предмета взаимодействий. Например ```bsl Функция ТекстЗапросаПоКонтактам(ЭтоФрагментЗапроса = Ложь) Экспорт ТекстЗапроса = " |ВЫБРАТЬ РАЗЛИЧНЫЕ | _ДемоЗаказПокупателя.Партнер КАК Контакт |ИЗ | Документ._ДемоЗаказПокупателя КАК _ДемоЗаказПокупателя |ГДЕ | _ДемоЗаказПокупателя.Ссылка = &Предмет | И (НЕ _ДемоЗаказПокупателя.Партнер = ЗНАЧЕНИЕ(Справочник._ДемоПартнеры.ПустаяСсылка)) | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ РАЗЛИЧНЫЕ | _ДемоЗаказПокупателяПартнерыИКонтактныеЛица.Партнер |ИЗ | Документ._ДемоЗаказПокупателя.ПартнерыИКонтактныеЛица КАК _ДемоЗаказПокупателяПартнерыИКонтактныеЛица |ГДЕ | _ДемоЗаказПокупателяПартнерыИКонтактныеЛица.Ссылка = &Предмет | И (НЕ _ДемоЗаказПокупателяПартнерыИКонтактныеЛица.Партнер = ЗНАЧЕНИЕ(Справочник._ДемоПартнеры.ПустаяСсылка)) | И _ДемоЗаказПокупателяПартнерыИКонтактныеЛица.КонтактноеЛицо = ЗНАЧЕНИЕ(Справочник._ДемоКонтактныеЛицаПартнеров.ПустаяСсылка) | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | _ДемоЗаказПокупателяПартнерыИКонтактныеЛица.КонтактноеЛицо |ИЗ | Документ._ДемоЗаказПокупателя.ПартнерыИКонтактныеЛица КАК _ДемоЗаказПокупателяПартнерыИКонтактныеЛица |ГДЕ | _ДемоЗаказПокупателяПартнерыИКонтактныеЛица.Ссылка = &Предмет | И (НЕ _ДемоЗаказПокупателяПартнерыИКонтактныеЛица.КонтактноеЛицо = ЗНАЧЕНИЕ(Справочник._ДемоКонтактныеЛицаПартнеров.ПустаяСсылка))"; Если ЭтоФрагментЗапроса Тогда ТекстЗапроса = " | ОБЪЕДИНИТЬ ВСЕ |" + ТекстЗапроса; КонецЕсли; Возврат ТекстЗапроса; КонецФункции ```