Skip to content

Взаимодействия

Настройка объекта

Создаем новый документ/справочник. В документе должны быть реквизит Ответственный (СправочникСсылка.Пользователи) и табличная часть ПартнерыИКонтактныеЛица.

Табличная часть со следующими реквизитами:

  • Партнер (СправочникСсылка.Партнеры)
  • РольПартнера (СправочникСсылка.РолиПартнеровВСделкахИПроектах)
  • КонтактноеЛицо (СправочникСсылка.КонтактныеЛицаПартнеров)
  • РольКонтактногоЛица (СправочникСсылка.РолиКонтактныхЛицВСделакахИПроектах)
  • Комментарий (Строка)

Добавляем этот документ в определяемый тип ПредметВзаимодействия

Общие модули

В общем модуле ВзаимодействияКлиентСерверПереопределяемый в процедуре ПриОпределенииВозможныхПредметов добавляем наш документ

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

Настройка формы объекта

На форме документа создаем реквизит ВзаимодействиеОснование с составным типом ДокументСсылка.ЭлектронноеПисьмоИсходящее, ДокументСсылка.ЗапланированноеВзаимодействие, ДокументСсылка.ЭлектронноеПисьмоВходящее, ДокументСсылка.ТелефонныйЗвонок, ДокументСсылка.Встреча; реквизит НеобходимоОповещение типа Булево

В обработчиках ПриСозданииНаСервере, ПриЗаписиНаСервере и ПослеЗаписи определяем вызовы стандартных процедур

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

Настройка модуля менеджера

В модуле менеджера должна быть реализована экспортная функция ПолучитьКонтакты, которая будет возвращать список контактных лиц для заполнения в документе взаимодействия. Например:

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

Но эта функция может возвращать и пустой массив

Опционально

В модуле менеджера каждого объекта метаданных, определенного как «предмет взаимодействий», необходимо реализовать экспортную функцию ТекстЗапросаПоКонтактам, в которой сформировать текст запроса по контактам, содержащимся в предмете взаимодействий. Например, ссылки на контакты взаимодействий могут иметься в реквизитах шапки и табличных частей предметов взаимодействий.

Функция принимает необязательный параметр ЭтоФрагментЗапроса типа Булево, указывающий на режим формирования запроса. Если данный параметр имеет значение Истина, то формируемый в функции запрос является частью другого запроса и должен начинаться с конструкции ОБЪЕДИНИТЬ. Возвращаемое значение – Строка, содержащая в себе текст запроса по контактам предмета взаимодействий. Например

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