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 +... + +// Это наша реализация +ОБЪЕДИНИТЬ ВСЕ + +ВЫБРАТЬ РАЗЛИЧНЫЕ + ЗаказКлиента.Контрагент +ИЗ + Документ.ЗаказКлиента КАК ЗаказКлиента +ГДЕ + ЗаказКлиента.Ссылка = &Предмет + И НЕ ЗаказКлиента.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) + +ОБЪЕДИНИТЬ ВСЕ + +ВЫБРАТЬ + ЗаказКлиента.КонтактноеЛицо +ИЗ + Документ.ЗаказКлиента КАК ЗаказКлиента +ГДЕ + ЗаказКлиента.Ссылка = &Предмет + И НЕ ЗаказКлиента.КонтактноеЛицо = ЗНАЧЕНИЕ(Справочник.КонтактныеЛицаКонтрагентов.ПустаяСсылка) +``` + +![Изображение](/bsp-vzaimodeystviya/1.png) + +
+ +## Настройка переопределяемых модулей +При необходимости можно вписать реализацию в функции переопределяемых модулей подсистемы: +- `ВзаимодействияКлиентСерверПереопределяемый` (Обязательно), +- `ВзаимодействияПереопределяемый` (Обязательно), +- `ВзаимодействияКлиентПереопределяемый` (опционально) + +### Общий модуль ВзаимодействияКлиентСерверПереопределяемый +Дополнить код процедур: +- `ПриОпределенииВозможныхПредметов` - добавляем предметы, которые были добавлены в определяемый тип `ПредметВзаимодействия` (кроме стандартных) +- `ПриОпределенииВозможныхКонтактов` - добавляем описание контактов (из определяемого типа `КонтактВзаимодействия`). Контакт должен быть подключен к подсистеме `КонтактнаяИнформация` + +```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