2025-06-16 21:46:27 +05:00

10 KiB
Raw Blame History

title, slug
title slug
Взаимодействия общие-подключение-объектов-к-бсп-подключение-к-подсистемам/взаимодействия

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

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

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

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

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

Общие модули

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)

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

КонецПроцедуры

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

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

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

	Возврат РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Контакт");
	
КонецФункции

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

Опционально

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

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

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