ЗаполнитьКонтактыМассиваВзаимодействий (БСП)

Автор: 1С
ОбщийМодуль.Взаимодействия
БСП

Заполнить контакты массива взаимодействий. Заполняет данные регистра сведений КонтактыВзаимодействий для переданного массива взаимодействий.

// Заполняет данные регистра сведений КонтактыВзаимодействий для переданного массива взаимодействий.
//
// Параметры:
//  МассивВзаимодействий    - Массив - массив для которого будут заполнены данные о контактах.
//  РассчитыватьРассмотрено - Булево - признак необходимости расчета состояний контактов взаимодействий.
//
Процедура ЗаполнитьКонтактыМассиваВзаимодействий(МассивВзаимодействий, РассчитыватьРассмотрено = Ложь) Экспорт

	УстановитьПривилегированныйРежим(Истина);
	
	Запрос = Новый Запрос;
	Запрос.Текст = "
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ВстречаУчастники.Ссылка КАК Взаимодействие,
	|	ВстречаУчастники.Контакт,
	|	ВстречаУчастники.ПредставлениеКонтакта КАК ПредставлениеКонтакта
	|ПОМЕСТИТЬ ИнформацияОКонтактах
	|ИЗ
	|	Документ.Встреча.Участники КАК ВстречаУчастники
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий
	|		ПО ВстречаУчастники.Ссылка = КонтактыВзаимодействий.Взаимодействие
	|ГДЕ
	|	ВстречаУчастники.Ссылка В
	|			(&МассивВзаимодействий)
	|
	|ОБЪЕДИНИТЬ
	|
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ЗапланированноеВзаимодействиеУчастники.Ссылка,
	|	ЗапланированноеВзаимодействиеУчастники.Контакт,
	|	ЗапланированноеВзаимодействиеУчастники.ПредставлениеКонтакта
	|ИЗ
	|	Документ.ЗапланированноеВзаимодействие.Участники КАК ЗапланированноеВзаимодействиеУчастники
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий
	|		ПО ЗапланированноеВзаимодействиеУчастники.Ссылка = КонтактыВзаимодействий.Взаимодействие
	|ГДЕ
	|	ЗапланированноеВзаимодействиеУчастники.Ссылка В
	|			(&МассивВзаимодействий)
	|
	|ОБЪЕДИНИТЬ
	|
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ТелефонныйЗвонок.Ссылка,
	|	ТелефонныйЗвонок.АбонентКонтакт,
	|	ТелефонныйЗвонок.АбонентПредставление
	|ИЗ
	|	Документ.ТелефонныйЗвонок КАК ТелефонныйЗвонок
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий
	|		ПО (КонтактыВзаимодействий.Взаимодействие = ТелефонныйЗвонок.Ссылка)
	|ГДЕ
	|	ТелефонныйЗвонок.Ссылка В
	|			(&МассивВзаимодействий)
	|
	|ОБЪЕДИНИТЬ
	|
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	СообщениеSMSАдресаты.Ссылка,
	|	СообщениеSMSАдресаты.Контакт,
	|	СообщениеSMSАдресаты.ПредставлениеКонтакта
	|ИЗ
	|	Документ.СообщениеSMS.Адресаты КАК СообщениеSMSАдресаты
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий
	|		ПО СообщениеSMSАдресаты.Ссылка = КонтактыВзаимодействий.Взаимодействие
	|ГДЕ
	|	СообщениеSMSАдресаты.Ссылка В
	|			(&МассивВзаимодействий)
	|
	|ОБЪЕДИНИТЬ
	|
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ЭлектронноеПисьмоВходящее.Ссылка,
	|	ЭлектронноеПисьмоВходящее.ОтправительКонтакт,
	|	ЭлектронноеПисьмоВходящее.ОтправительПредставление
	|ИЗ
	|	Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий
	|		ПО (КонтактыВзаимодействий.Взаимодействие = ЭлектронноеПисьмоВходящее.Ссылка)
	|ГДЕ
	|	ЭлектронноеПисьмоВходящее.Ссылка В
	|			(&МассивВзаимодействий)
	|
	|ОБЪЕДИНИТЬ
	|
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ЭлектронноеПисьмоИсходящееПолучателиПисьма.Ссылка,
	|	ЭлектронноеПисьмоИсходящееПолучателиПисьма.Контакт,
	|	ЭлектронноеПисьмоИсходящееПолучателиПисьма.Представление
	|ИЗ
	|	Документ.ЭлектронноеПисьмоИсходящее.ПолучателиПисьма КАК ЭлектронноеПисьмоИсходящееПолучателиПисьма,
	|	РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий
	|ГДЕ
	|	ЭлектронноеПисьмоИсходящееПолучателиПисьма.Ссылка В
	|			(&МассивВзаимодействий)
	|
	|ОБЪЕДИНИТЬ
	|
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ЭлектронноеПисьмоИсходящееПолучателиКопий.Ссылка,
	|	ЭлектронноеПисьмоИсходящееПолучателиКопий.Контакт,
	|	ЭлектронноеПисьмоИсходящееПолучателиКопий.Представление
	|ИЗ
	|	Документ.ЭлектронноеПисьмоИсходящее.ПолучателиКопий КАК ЭлектронноеПисьмоИсходящееПолучателиКопий
	|ГДЕ
	|	ЭлектронноеПисьмоИсходящееПолучателиКопий.Ссылка В
	|			(&МассивВзаимодействий)
	|
	|ОБЪЕДИНИТЬ
	|
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Ссылка,
	|	ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Контакт,
	|	ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Представление
	|ИЗ
	|	Документ.ЭлектронноеПисьмоИсходящее.ПолучателиСкрытыхКопий КАК ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий
	|		ПО ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Ссылка = КонтактыВзаимодействий.Взаимодействие
	|ГДЕ
	|	ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Ссылка В
	|			(&МассивВзаимодействий)
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	ПредставлениеКонтакта
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ИнформацияОКонтактах.Взаимодействие КАК Взаимодействие,
	|	ВЫБОР
	|		КОГДА ИнформацияОКонтактах.Контакт = НЕОПРЕДЕЛЕНО
	|			ТОГДА ЕСТЬNULL(СтроковыеКонтактыВзаимодействий.Ссылка, НЕОПРЕДЕЛЕНО)
	|		ИНАЧЕ ИнформацияОКонтактах.Контакт
	|	КОНЕЦ КАК Контакт,
	|	ИнформацияОКонтактах.ПредставлениеКонтакта
	|ИЗ
	|	ИнформацияОКонтактах КАК ИнформацияОКонтактах
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СтроковыеКонтактыВзаимодействий КАК СтроковыеКонтактыВзаимодействий
	|		ПО ИнформацияОКонтактах.ПредставлениеКонтакта = СтроковыеКонтактыВзаимодействий.Наименование
	|ИТОГИ ПО
	|	Взаимодействие";
	
	Запрос.УстановитьПараметр("МассивВзаимодействий", МассивВзаимодействий);
	
	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		Возврат;
	КонецЕсли;
	
	ВыборкаВзаимодействие = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	НачатьТранзакцию();
	Попытка
		
		Блокировка = Новый БлокировкаДанных;
		
		ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КонтактыВзаимодействий");
		ТаблицаОбластиБлокировки = Новый ТаблицаЗначений;
		ТаблицаОбластиБлокировки.Колонки.Добавить("Взаимодействие");
		Для Каждого ЭлементМассива Из МассивВзаимодействий Цикл
			НоваяСтрока = ТаблицаОбластиБлокировки.Добавить();
			НоваяСтрока.Взаимодействие = ЭлементМассива;
		КонецЦикла;
		ЭлементБлокировки.ИсточникДанных = ТаблицаОбластиБлокировки;
		Блокировка.Заблокировать();
		
		Пока ВыборкаВзаимодействие.Следующий() Цикл
			ВыборкаДетали = ВыборкаВзаимодействие.Выбрать();
			
			НаборЗаписей = РегистрыСведений.КонтактыВзаимодействий.СоздатьНаборЗаписей();
			НаборЗаписей.Отбор.Взаимодействие.Установить(ВыборкаВзаимодействие.Взаимодействие);
			
			Пока ВыборкаДетали.Следующий() Цикл
				
				НоваяЗапись = НаборЗаписей.Добавить();
				НоваяЗапись.Взаимодействие = ВыборкаВзаимодействие.Взаимодействие;
				Если ВыборкаДетали.Контакт <> Неопределено Тогда
					НоваяЗапись.Контакт = ВыборкаДетали.Контакт;
				Иначе
					СтроковыйКонтактВзаимодействий              = Справочники.СтроковыеКонтактыВзаимодействий.СоздатьЭлемент();
					СтроковыйКонтактВзаимодействий.Наименование = ВыборкаДетали.ПредставлениеКонтакта;
					СтроковыйКонтактВзаимодействий.Записать();
					НоваяЗапись.Контакт                         = СтроковыйКонтактВзаимодействий.Ссылка;
				КонецЕсли;
				
			КонецЦикла;
			
			Если РассчитыватьРассмотрено Тогда
				НаборЗаписей.ДополнительныеСвойства.Вставить("РассчитыватьРассмотрено", Истина);
			КонецЕсли;
			
			НаборЗаписей.Записать();
			
		КонецЦикла;
		
		ЗафиксироватьТранзакцию();
	
	Исключение
		
		ОтменитьТранзакцию();
		ВызватьИсключение;
		
	КонецПопытки;
	
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ЗаполнитьКонтактыПоПредмету (БСП)

ЗаполнитьКонтактыДляВстречи (БСП)

КонтактыВзаимодействий (БСП)

УстановитьПредметДляМассиваВзаимодействий (БСП)

РассчитатьРассмотреноПоКонтактам (БСП)

НовоеОписаниеКонтакта (БСП)

ПреобразоватьТаблицуКонтактовВМассив (БСП)

СоздатьКонтакт (БСП)

ПриПоискеКонтактов (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз