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