279 lines
19 KiB
Markdown
279 lines
19 KiB
Markdown
---
|
||
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
|
||
...
|
||
|
||
// Это наша реализация
|
||
ОБЪЕДИНИТЬ ВСЕ
|
||
|
||
ВЫБРАТЬ РАЗЛИЧНЫЕ
|
||
ЗаказКлиента.Контрагент
|
||
ИЗ
|
||
Документ.ЗаказКлиента КАК ЗаказКлиента
|
||
ГДЕ
|
||
ЗаказКлиента.Ссылка = &Предмет
|
||
И НЕ ЗаказКлиента.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
|
||
|
||
ОБЪЕДИНИТЬ ВСЕ
|
||
|
||
ВЫБРАТЬ
|
||
ЗаказКлиента.КонтактноеЛицо
|
||
ИЗ
|
||
Документ.ЗаказКлиента КАК ЗаказКлиента
|
||
ГДЕ
|
||
ЗаказКлиента.Ссылка = &Предмет
|
||
И НЕ ЗаказКлиента.КонтактноеЛицо = ЗНАЧЕНИЕ(Справочник.КонтактныеЛицаКонтрагентов.ПустаяСсылка)
|
||
```
|
||
|
||

|
||
|
||
</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> |